{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "homepage": "https://lopifi.com",
  "items": [
    {
      "categories": [
        "theme",
        "foundations"
      ],
      "dependencies": [],
      "description": "Design tokens and the Tailwind preset. Install once, before anything else.",
      "files": [
        {
          "path": "styles/ledger-tokens.css",
          "target": "styles/ledger-tokens.css",
          "type": "registry:style"
        },
        {
          "path": "ledger/preset.ts",
          "target": "ledger/preset.ts",
          "type": "registry:file"
        }
      ],
      "name": "theme",
      "registryDependencies": [],
      "title": "Lopifi theme",
      "type": "registry:theme"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: accounting.types.",
      "files": [
        {
          "path": "lib/ledger/accounting.types.ts",
          "target": "lib/ledger/accounting.types.ts",
          "type": "registry:lib"
        }
      ],
      "name": "accounting.types",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/money.types"
      ],
      "title": "Accounting.types",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: allocate.",
      "files": [
        {
          "path": "lib/ledger/allocate.ts",
          "target": "lib/ledger/allocate.ts",
          "type": "registry:lib"
        }
      ],
      "name": "allocate",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Allocate",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: chart-utils.",
      "files": [
        {
          "path": "lib/ledger/chart-utils.ts",
          "target": "lib/ledger/chart-utils.ts",
          "type": "registry:lib"
        }
      ],
      "name": "chart-utils",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/format-money",
        "@lopifi/money.types"
      ],
      "title": "Chart Utils",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: clipboard.",
      "files": [
        {
          "path": "lib/ledger/clipboard.ts",
          "target": "lib/ledger/clipboard.ts",
          "type": "registry:lib"
        }
      ],
      "name": "clipboard",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Clipboard",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ],
      "description": "Lopifi utility: cn.",
      "files": [
        {
          "path": "lib/ledger/cn.ts",
          "target": "lib/ledger/cn.ts",
          "type": "registry:lib"
        }
      ],
      "name": "cn",
      "registryDependencies": [],
      "title": "Cn",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: fiscal-period.",
      "files": [
        {
          "path": "lib/ledger/fiscal-period.ts",
          "target": "lib/ledger/fiscal-period.ts",
          "type": "registry:lib"
        }
      ],
      "name": "fiscal-period",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Fiscal Period",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: forecast.",
      "files": [
        {
          "path": "lib/ledger/forecast.ts",
          "target": "lib/ledger/forecast.ts",
          "type": "registry:lib"
        }
      ],
      "name": "forecast",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/format-money",
        "@lopifi/money.types",
        "@lopifi/period-change"
      ],
      "title": "Forecast",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: format-money.",
      "files": [
        {
          "path": "lib/ledger/format-money.ts",
          "target": "lib/ledger/format-money.ts",
          "type": "registry:lib"
        }
      ],
      "name": "format-money",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/money.types"
      ],
      "title": "Format Money",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: frozen-label.",
      "files": [
        {
          "path": "lib/ledger/frozen-label.ts",
          "target": "lib/ledger/frozen-label.ts",
          "type": "registry:lib"
        }
      ],
      "name": "frozen-label",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Frozen Label",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: group-rows.",
      "files": [
        {
          "path": "lib/ledger/group-rows.ts",
          "target": "lib/ledger/group-rows.ts",
          "type": "registry:lib"
        }
      ],
      "name": "group-rows",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Group Rows",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: money.types.",
      "files": [
        {
          "path": "lib/ledger/money.types.ts",
          "target": "lib/ledger/money.types.ts",
          "type": "registry:lib"
        }
      ],
      "name": "money.types",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Money.types",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: period-change.",
      "files": [
        {
          "path": "lib/ledger/period-change.ts",
          "target": "lib/ledger/period-change.ts",
          "type": "registry:lib"
        }
      ],
      "name": "period-change",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/money.types"
      ],
      "title": "Period Change",
      "type": "registry:lib"
    },
    {
      "categories": [
        "lib"
      ],
      "dependencies": [],
      "description": "Lopifi utility: table-sort.",
      "files": [
        {
          "path": "lib/ledger/table-sort.ts",
          "target": "lib/ledger/table-sort.ts",
          "type": "registry:lib"
        }
      ],
      "name": "table-sort",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Table Sort",
      "type": "registry:lib"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-column-priority.",
      "files": [
        {
          "path": "hooks/ledger/use-column-priority.ts",
          "target": "hooks/ledger/use-column-priority.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-column-priority",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Column Priority",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-column-widths.",
      "files": [
        {
          "path": "hooks/ledger/use-column-widths.ts",
          "target": "hooks/ledger/use-column-widths.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-column-widths",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Column Widths",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-density.",
      "files": [
        {
          "path": "hooks/ledger/use-density.ts",
          "target": "hooks/ledger/use-density.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-density",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/money.types"
      ],
      "title": "Use Density",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-grid-nav.",
      "files": [
        {
          "path": "hooks/ledger/use-grid-nav.ts",
          "target": "hooks/ledger/use-grid-nav.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-grid-nav",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/clipboard"
      ],
      "title": "Use Grid Nav",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-in-view.",
      "files": [
        {
          "path": "hooks/ledger/use-in-view.ts",
          "target": "hooks/ledger/use-in-view.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-in-view",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use In View",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-live-value.",
      "files": [
        {
          "path": "hooks/ledger/use-live-value.ts",
          "target": "hooks/ledger/use-live-value.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-live-value",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Live Value",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-media-query.",
      "files": [
        {
          "path": "hooks/ledger/use-media-query.ts",
          "target": "hooks/ledger/use-media-query.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-media-query",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Media Query",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-scroll-edges.",
      "files": [
        {
          "path": "hooks/ledger/use-scroll-edges.ts",
          "target": "hooks/ledger/use-scroll-edges.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-scroll-edges",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Scroll Edges",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-shared-now.",
      "files": [
        {
          "path": "hooks/ledger/use-shared-now.ts",
          "target": "hooks/ledger/use-shared-now.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-shared-now",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Use Shared Now",
      "type": "registry:hook"
    },
    {
      "categories": [
        "hooks"
      ],
      "dependencies": [],
      "description": "Lopifi hook: use-table-sort.",
      "files": [
        {
          "path": "hooks/ledger/use-table-sort.ts",
          "target": "hooks/ledger/use-table-sort.ts",
          "type": "registry:hook"
        }
      ],
      "name": "use-table-sort",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/table-sort"
      ],
      "title": "Use Table Sort",
      "type": "registry:hook"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Bank account with available vs. current.",
      "files": [
        {
          "path": "components/ledger/account-card.tsx",
          "target": "components/ledger/account-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "account-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/button",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference"
      ],
      "title": "AccountCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Shows the normal balance. Blocks non-postable accounts.",
      "files": [
        {
          "path": "components/ledger/account-picker.tsx",
          "target": "components/ledger/account-picker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "account-picker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "AccountPicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "GL detail with a running balance.",
      "files": [
        {
          "path": "components/ledger/account-register.tsx",
          "target": "components/ledger/account-register.tsx",
          "type": "registry:component"
        }
      ],
      "name": "account-register",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "AccountRegister",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Every BS account, proven against its evidence.",
      "files": [
        {
          "path": "components/ledger/account-tie-out.tsx",
          "target": "components/ledger/account-tie-out.tsx",
          "type": "registry:component"
        }
      ],
      "name": "account-tie-out",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/frozen-label",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-scroll-edges"
      ],
      "title": "AccountTieOut",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Templated by type. Auto-reverse defaults on for accruals.",
      "files": [
        {
          "path": "components/ledger/adjusting-entry-form.tsx",
          "target": "components/ledger/adjusting-entry-form.tsx",
          "type": "registry:component"
        }
      ],
      "name": "adjusting-entry-form",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/journal-entry-form"
      ],
      "title": "AdjustingEntryForm",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "AR/AP buckets, 0-30-60-90+.",
      "files": [
        {
          "path": "components/ledger/aging-table.tsx",
          "target": "components/ledger/aging-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "aging-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "AgingTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "With the methodology shown, not just the number.",
      "files": [
        {
          "path": "components/ledger/allowance-roll-forward.tsx",
          "target": "components/ledger/allowance-roll-forward.tsx",
          "type": "registry:component"
        }
      ],
      "name": "allowance-roll-forward",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/roll-forward"
      ],
      "title": "AllowanceRollForward",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The hardest input in fintech.",
      "files": [
        {
          "path": "components/ledger/amount-input.tsx",
          "target": "components/ledger/amount-input.tsx",
          "type": "registry:component"
        }
      ],
      "name": "amount-input",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "AmountInput",
      "type": "registry:component"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "A flagged deviation with its explanation.",
      "files": [
        {
          "path": "components/ledger/anomaly-card.tsx",
          "target": "components/ledger/anomaly-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "anomaly-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/tooltip"
      ],
      "title": "AnomalyCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Ap Surfaces.",
      "files": [
        {
          "path": "components/ledger/ap-surfaces.tsx",
          "target": "components/ledger/ap-surfaces.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "ap-surfaces",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/account-picker",
        "@lopifi/accounting.types",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/dimension-picker",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/status-pill",
        "@lopifi/use-scroll-edges"
      ],
      "title": "Ap Surfaces",
      "type": "registry:ui"
    },
    {
      "categories": [
        "payables-ap",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Segregation of duties enforced. Approvals bind to a version.",
      "files": [
        {
          "path": "components/ledger/approval-chain.tsx",
          "target": "components/ledger/approval-chain.tsx",
          "type": "registry:component"
        }
      ],
      "name": "approval-chain",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "ApprovalChain",
      "type": "registry:component"
    },
    {
      "categories": [
        "payables-ap",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Mobile-first, document inline.",
      "files": [
        {
          "path": "components/ledger/approval-inbox.tsx",
          "target": "components/ledger/approval-inbox.tsx",
          "type": "registry:component"
        }
      ],
      "name": "approval-inbox",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "ApprovalInbox",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Ar Documents.",
      "files": [
        {
          "path": "components/ledger/ar-documents.tsx",
          "target": "components/ledger/ar-documents.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "ar-documents",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/figure",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/status-pill",
        "@lopifi/transaction-detail",
        "@lopifi/use-scroll-edges"
      ],
      "title": "Ar Documents",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Ar Panels.",
      "files": [
        {
          "path": "components/ledger/ar-panels.tsx",
          "target": "components/ledger/ar-panels.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "ar-panels",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/rule",
        "@lopifi/status-pill"
      ],
      "title": "Ar Panels",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Ar Reports.",
      "files": [
        {
          "path": "components/ledger/ar-reports.tsx",
          "target": "components/ledger/ar-reports.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "ar-reports",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/metric-definition",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule"
      ],
      "title": "Ar Reports",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Timestamp with live relative formatting and a stated timezone.",
      "files": [
        {
          "path": "components/ledger/as-of.tsx",
          "target": "components/ledger/as-of.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "as-of",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/tooltip",
        "@lopifi/use-shared-now"
      ],
      "title": "AsOf",
      "type": "registry:ui"
    },
    {
      "categories": [
        "close-controls-consolidation",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Field-level diffs on every financial object.",
      "files": [
        {
          "path": "components/ledger/audit-trail.tsx",
          "target": "components/ledger/audit-trail.tsx",
          "type": "registry:component"
        }
      ],
      "name": "audit-trail",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons"
      ],
      "title": "AuditTrail",
      "type": "registry:component"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The hero: one trusted number.",
      "files": [
        {
          "path": "components/ledger/balance-card.tsx",
          "target": "components/ledger/balance-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "balance-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/entity-mark",
        "@lopifi/figure",
        "@lopifi/format-money",
        "@lopifi/money.types",
        "@lopifi/sparkline",
        "@lopifi/stale-indicator",
        "@lopifi/status-pill",
        "@lopifi/use-live-value"
      ],
      "title": "BalanceCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Assets / liabilities / equity, with the balance check.",
      "files": [
        {
          "path": "components/ledger/balance-sheet.tsx",
          "target": "components/ledger/balance-sheet.tsx",
          "type": "registry:component"
        }
      ],
      "name": "balance-sheet",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/statement-table"
      ],
      "title": "BalanceSheet",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Routing + account with checksum validation.",
      "files": [
        {
          "path": "components/ledger/bank-account-input.tsx",
          "target": "components/ledger/bank-account-input.tsx",
          "type": "registry:component"
        }
      ],
      "name": "bank-account-input",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "BankAccountInput",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Polarity-aware, materiality-filtered, versions tracked.",
      "files": [
        {
          "path": "components/ledger/budget-vs-actual.tsx",
          "target": "components/ledger/budget-vs-actual.tsx",
          "type": "registry:component"
        }
      ],
      "name": "budget-vs-actual",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/forecast",
        "@lopifi/format-money",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/period-grid",
        "@lopifi/rule"
      ],
      "title": "BudgetVsActual",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Selection count + actions, safe-area aware.",
      "files": [
        {
          "path": "components/ledger/bulk-action-bar.tsx",
          "target": "components/ledger/bulk-action-bar.tsx",
          "type": "registry:component"
        }
      ],
      "name": "bulk-action-bar",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn"
      ],
      "title": "BulkActionBar",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "class-variance-authority"
      ],
      "description": "Lopifi component: Button.",
      "files": [
        {
          "path": "components/ledger/button.tsx",
          "target": "components/ledger/button.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "button",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Button",
      "type": "registry:ui"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "For FX/crypto pairs.",
      "files": [
        {
          "path": "components/ledger/candlestick-chart.tsx",
          "target": "components/ledger/candlestick-chart.tsx",
          "type": "registry:component"
        }
      ],
      "name": "candlestick-chart",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/chart-primitives",
        "@lopifi/chart-utils"
      ],
      "title": "CandlestickChart",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "PAN / expiry / CVC with correct autocomplete.",
      "files": [
        {
          "path": "components/ledger/card-input.tsx",
          "target": "components/ledger/card-input.tsx",
          "type": "registry:component"
        }
      ],
      "name": "card-input",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "CardInput",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "class-variance-authority"
      ],
      "description": "Lopifi component: Card.",
      "files": [
        {
          "path": "components/ledger/card.tsx",
          "target": "components/ledger/card.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Card",
      "type": "registry:ui"
    },
    {
      "categories": [
        "receivables-ar",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The highest-value screen in AR. Every case, not just the happy one.",
      "files": [
        {
          "path": "components/ledger/cash-application.tsx",
          "target": "components/ledger/cash-application.tsx",
          "type": "registry:component"
        }
      ],
      "name": "cash-application",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-media-query"
      ],
      "title": "CashApplication",
      "type": "registry:component"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Daily heatmap of cash movement.",
      "files": [
        {
          "path": "components/ledger/cash-calendar.tsx",
          "target": "components/ledger/cash-calendar.tsx",
          "type": "registry:component"
        }
      ],
      "name": "cash-calendar",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/format-money"
      ],
      "title": "CashCalendar",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Operating / investing / financing.",
      "files": [
        {
          "path": "components/ledger/cash-flow-statement.tsx",
          "target": "components/ledger/cash-flow-statement.tsx",
          "type": "registry:component"
        }
      ],
      "name": "cash-flow-statement",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/statement-table"
      ],
      "title": "CashFlowStatement",
      "type": "registry:component"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Ranked bars, not a pie.",
      "files": [
        {
          "path": "components/ledger/category-breakdown.tsx",
          "target": "components/ledger/category-breakdown.tsx",
          "type": "registry:component"
        }
      ],
      "name": "category-breakdown",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/allocate",
        "@lopifi/chart-utils",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent"
      ],
      "title": "CategoryBreakdown",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Hierarchical with rule creation.",
      "files": [
        {
          "path": "components/ledger/category-picker.tsx",
          "target": "components/ledger/category-picker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "category-picker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "CategoryPicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Hierarchy, statement mapping, unsupported-account flags.",
      "files": [
        {
          "path": "components/ledger/chart-of-accounts.tsx",
          "target": "components/ledger/chart-of-accounts.tsx",
          "type": "registry:component"
        }
      ],
      "name": "chart-of-accounts",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/frozen-label",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-scroll-edges"
      ],
      "title": "ChartOfAccounts",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Chart Primitives.",
      "files": [
        {
          "path": "components/ledger/chart-primitives.tsx",
          "target": "components/ledger/chart-primitives.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "chart-primitives",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Chart Primitives",
      "type": "registry:ui"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Itemized total with fees and tax.",
      "files": [
        {
          "path": "components/ledger/checkout-summary.tsx",
          "target": "components/ledger/checkout-summary.tsx",
          "type": "registry:component"
        }
      ],
      "name": "checkout-summary",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule"
      ],
      "title": "CheckoutSummary",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Tasks, owners, blockers, sign-off.",
      "files": [
        {
          "path": "components/ledger/close-checklist.tsx",
          "target": "components/ledger/close-checklist.tsx",
          "type": "registry:component"
        }
      ],
      "name": "close-checklist",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/hold-to-confirm",
        "@lopifi/icons"
      ],
      "title": "CloseChecklist",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Close Surfaces.",
      "files": [
        {
          "path": "components/ledger/close-surfaces.tsx",
          "target": "components/ledger/close-surfaces.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "close-surfaces",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/info-tip"
      ],
      "title": "Close Surfaces",
      "type": "registry:ui"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The sortable, draggable header cell.",
      "files": [
        {
          "path": "components/ledger/column-header.tsx",
          "target": "components/ledger/column-header.tsx",
          "type": "registry:component"
        }
      ],
      "name": "column-header",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/table-sort"
      ],
      "title": "ColumnHeader",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Show/hide/reorder with drag.",
      "files": [
        {
          "path": "components/ledger/column-manager.tsx",
          "target": "components/ledger/column-manager.tsx",
          "type": "registry:component"
        }
      ],
      "name": "column-manager",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "ColumnManager",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react",
        "cmdk"
      ],
      "description": "Motionless. Money-aware search.",
      "files": [
        {
          "path": "components/ledger/command-palette.tsx",
          "target": "components/ledger/command-palette.tsx",
          "type": "registry:component"
        }
      ],
      "name": "command-palette",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "CommandPalette",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Amount, destination, timing. Hold-to-confirm.",
      "files": [
        {
          "path": "components/ledger/confirm-payment-dialog.tsx",
          "target": "components/ledger/confirm-payment-dialog.tsx",
          "type": "registry:component"
        }
      ],
      "name": "confirm-payment-dialog",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/hold-to-confirm",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference"
      ],
      "title": "ConfirmPaymentDialog",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Consolidation.",
      "files": [
        {
          "path": "components/ledger/consolidation.tsx",
          "target": "components/ledger/consolidation.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "consolidation",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/roll-forward",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "Consolidation",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Controls.",
      "files": [
        {
          "path": "components/ledger/controls.tsx",
          "target": "components/ledger/controls.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "controls",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-scroll-edges"
      ],
      "title": "Controls",
      "type": "registry:ui"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Amount → fee → rate → recipient gets. Every line.",
      "files": [
        {
          "path": "components/ledger/conversion-breakdown.tsx",
          "target": "components/ledger/conversion-breakdown.tsx",
          "type": "registry:component"
        }
      ],
      "name": "conversion-breakdown",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rate-line",
        "@lopifi/rule"
      ],
      "title": "ConversionBreakdown",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "ISO code + optional flag.",
      "files": [
        {
          "path": "components/ledger/currency-badge.tsx",
          "target": "components/ledger/currency-badge.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "currency-badge",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "CurrencyBadge",
      "type": "registry:ui"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Rate history with a period selector.",
      "files": [
        {
          "path": "components/ledger/currency-pair-chart.tsx",
          "target": "components/ledger/currency-pair-chart.tsx",
          "type": "registry:component"
        }
      ],
      "name": "currency-pair-chart",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/chart-utils",
        "@lopifi/cn",
        "@lopifi/use-in-view",
        "@lopifi/use-media-query"
      ],
      "title": "CurrencyPairChart",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Searchable, with recents.",
      "files": [
        {
          "path": "components/ledger/currency-select.tsx",
          "target": "components/ledger/currency-select.tsx",
          "type": "registry:component"
        }
      ],
      "name": "currency-select",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/currency-badge",
        "@lopifi/icons"
      ],
      "title": "CurrencySelect",
      "type": "registry:component"
    },
    {
      "categories": [
        "close-controls-consolidation",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Inline, with both legitimate remedies named.",
      "files": [
        {
          "path": "components/ledger/cutoff-warning.tsx",
          "target": "components/ledger/cutoff-warning.tsx",
          "type": "registry:component"
        }
      ],
      "name": "cutoff-warning",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons"
      ],
      "title": "CutoffWarning",
      "type": "registry:component"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Responsive grid with optional rearrange.",
      "files": [
        {
          "path": "components/ledger/dashboard-shell.tsx",
          "target": "components/ledger/dashboard-shell.tsx",
          "type": "registry:block"
        }
      ],
      "name": "dashboard-shell",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "DashboardShell",
      "type": "registry:block"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "A signed change, with polarity and a redundant non-color cue.",
      "files": [
        {
          "path": "components/ledger/delta.tsx",
          "target": "components/ledger/delta.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "delta",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/tooltip"
      ],
      "title": "Delta",
      "type": "registry:ui"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Persisted, synced, phone-clamped.",
      "files": [
        {
          "path": "components/ledger/density-toggle.tsx",
          "target": "components/ledger/density-toggle.tsx",
          "type": "registry:component"
        }
      ],
      "name": "density-toggle",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money.types",
        "@lopifi/use-media-query"
      ],
      "title": "DensityToggle",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Book and tax in parallel. In-service date, not purchase date.",
      "files": [
        {
          "path": "components/ledger/depreciation-schedule.tsx",
          "target": "components/ledger/depreciation-schedule.tsx",
          "type": "registry:component"
        }
      ],
      "name": "depreciation-schedule",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/frozen-label",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "DepreciationSchedule",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Entity always required; renders what the account demands.",
      "files": [
        {
          "path": "components/ledger/dimension-picker.tsx",
          "target": "components/ledger/dimension-picker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "dimension-picker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn"
      ],
      "title": "DimensionPicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Statement line → the GL entries behind it.",
      "files": [
        {
          "path": "components/ledger/drilldown-sheet.tsx",
          "target": "components/ledger/drilldown-sheet.tsx",
          "type": "registry:component"
        }
      ],
      "name": "drilldown-sheet",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/sheet"
      ],
      "title": "DrilldownSheet",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The inputs a forecast is built from, and what they produce.",
      "files": [
        {
          "path": "components/ledger/driver-model.tsx",
          "target": "components/ledger/driver-model.tsx",
          "type": "registry:component"
        }
      ],
      "name": "driver-model",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/period-grid",
        "@lopifi/rule"
      ],
      "title": "DriverModel",
      "type": "registry:component"
    },
    {
      "categories": [
        "payables-ap",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Blocking. Duplicate payment is the most common AP loss.",
      "files": [
        {
          "path": "components/ledger/duplicate-bill-alert.tsx",
          "target": "components/ledger/duplicate-bill-alert.tsx",
          "type": "registry:component"
        }
      ],
      "name": "duplicate-bill-alert",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "DuplicateBillAlert",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Three variants. Always one next action.",
      "files": [
        {
          "path": "components/ledger/empty-state.tsx",
          "target": "components/ledger/empty-state.tsx",
          "type": "registry:component"
        }
      ],
      "name": "empty-state",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/isometric-spot"
      ],
      "title": "EmptyState",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Bank/merchant logo with the full fallback ladder.",
      "files": [
        {
          "path": "components/ledger/entity-mark.tsx",
          "target": "components/ledger/entity-mark.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "entity-mark",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "EntityMark",
      "type": "registry:ui"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Hold-to-confirm. Never a delete.",
      "files": [
        {
          "path": "components/ledger/entry-reversal-dialog.tsx",
          "target": "components/ledger/entry-reversal-dialog.tsx",
          "type": "registry:component"
        }
      ],
      "name": "entry-reversal-dialog",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/hold-to-confirm"
      ],
      "title": "EntryReversalDialog",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "With the financial reassurance sentence.",
      "files": [
        {
          "path": "components/ledger/error-state.tsx",
          "target": "components/ledger/error-state.tsx",
          "type": "registry:component"
        }
      ],
      "name": "error-state",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/info-tip"
      ],
      "title": "ErrorState",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Spend by category on three bases. Polarity derived per row from the sign convention.",
      "files": [
        {
          "path": "components/ledger/expense-tracker.tsx",
          "target": "components/ledger/expense-tracker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "expense-tracker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/period-change",
        "@lopifi/period-grid"
      ],
      "title": "ExpenseTracker",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "CSV/XLSX/PDF with a stated scope.",
      "files": [
        {
          "path": "components/ledger/export-menu.tsx",
          "target": "components/ledger/export-menu.tsx",
          "type": "registry:component"
        }
      ],
      "name": "export-menu",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "ExportMenu",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "A large display numeral with automatic size step-down.",
      "files": [
        {
          "path": "components/ledger/figure.tsx",
          "target": "components/ledger/figure.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "figure",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money.types"
      ],
      "title": "Figure",
      "type": "registry:ui"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "URL-param-backed filters with resolved-value chips.",
      "files": [
        {
          "path": "components/ledger/filter-bar.tsx",
          "target": "components/ledger/filter-bar.tsx",
          "type": "registry:component"
        }
      ],
      "name": "filter-bar",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "FilterBar",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Period-over-period explanations.",
      "files": [
        {
          "path": "components/ledger/flux-analysis.tsx",
          "target": "components/ledger/flux-analysis.tsx",
          "type": "registry:component"
        }
      ],
      "name": "flux-analysis",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "FluxAnalysis",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Projections dashed and labeled everywhere.",
      "files": [
        {
          "path": "components/ledger/forecast-table.tsx",
          "target": "components/ledger/forecast-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "forecast-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/forecast",
        "@lopifi/info-tip",
        "@lopifi/money.types",
        "@lopifi/period-grid"
      ],
      "title": "ForecastTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Position by currency with unrealized gain/loss.",
      "files": [
        {
          "path": "components/ledger/fx-exposure.tsx",
          "target": "components/ledger/fx-exposure.tsx",
          "type": "registry:component"
        }
      ],
      "name": "fx-exposure",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/cn",
        "@lopifi/currency-badge",
        "@lopifi/delta",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "FxExposure",
      "type": "registry:component"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Target vs. actual with a progress rule.",
      "files": [
        {
          "path": "components/ledger/goal-card.tsx",
          "target": "components/ledger/goal-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "goal-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent"
      ],
      "title": "GoalCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Grid Keyboard.",
      "files": [
        {
          "path": "components/ledger/grid-keyboard.tsx",
          "target": "components/ledger/grid-keyboard.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "grid-keyboard",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/clipboard",
        "@lopifi/cn"
      ],
      "title": "Grid Keyboard",
      "type": "registry:ui"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "One cut through a table, with subtotals per group.",
      "files": [
        {
          "path": "components/ledger/group-picker.tsx",
          "target": "components/ledger/group-picker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "group-picker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "GroupPicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Irreversible actions, with accessible fallbacks.",
      "files": [
        {
          "path": "components/ledger/hold-to-confirm.tsx",
          "target": "components/ledger/hold-to-confirm.tsx",
          "type": "registry:component"
        }
      ],
      "name": "hold-to-confirm",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/use-media-query"
      ],
      "title": "HoldToConfirm",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Icons.",
      "files": [
        {
          "path": "components/ledger/icons.tsx",
          "target": "components/ledger/icons.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "icons",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Icons",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "The ⓘ. Extra context that survives touch, because it opens on press.",
      "files": [
        {
          "path": "components/ledger/info-tip.tsx",
          "target": "components/ledger/info-tip.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "info-tip",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/tooltip"
      ],
      "title": "InfoTip",
      "type": "registry:ui"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Invoice summary with aging state.",
      "files": [
        {
          "path": "components/ledger/invoice-card.tsx",
          "target": "components/ledger/invoice-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "invoice-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/status-pill"
      ],
      "title": "InvoiceCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "receivables-ar",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "With the revenue-recognition preview per line.",
      "files": [
        {
          "path": "components/ledger/invoice-form.tsx",
          "target": "components/ledger/invoice-form.tsx",
          "type": "registry:component"
        }
      ],
      "name": "invoice-form",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/account-picker",
        "@lopifi/accounting.types",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/format-money",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule"
      ],
      "title": "InvoiceForm",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Isometric Spot.",
      "files": [
        {
          "path": "components/ledger/isometric-spot.tsx",
          "target": "components/ledger/isometric-spot.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "isometric-spot",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Isometric Spot",
      "type": "registry:ui"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Line grid with live balance check and dimension capture.",
      "files": [
        {
          "path": "components/ledger/journal-entry-form.tsx",
          "target": "components/ledger/journal-entry-form.tsx",
          "type": "registry:component"
        }
      ],
      "name": "journal-entry-form",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/account-picker",
        "@lopifi/accounting.types",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/cutoff-warning",
        "@lopifi/dimension-picker",
        "@lopifi/format-money",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/rule"
      ],
      "title": "JournalEntryForm",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "All entries, with the gapless-numbering check.",
      "files": [
        {
          "path": "components/ledger/journal-entry-table.tsx",
          "target": "components/ledger/journal-entry-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "journal-entry-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/use-scroll-edges"
      ],
      "title": "JournalEntryTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Debit and credit as two columns. No signed-column variant.",
      "files": [
        {
          "path": "components/ledger/journal-entry.tsx",
          "target": "components/ledger/journal-entry.tsx",
          "type": "registry:component"
        }
      ],
      "name": "journal-entry",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/tooltip"
      ],
      "title": "JournalEntry",
      "type": "registry:component"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Metric + delta + optional sparkline.",
      "files": [
        {
          "path": "components/ledger/kpi-card.tsx",
          "target": "components/ledger/kpi-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "kpi-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/figure",
        "@lopifi/money.types",
        "@lopifi/sparkline"
      ],
      "title": "KpiCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "ROU asset and liability on diverging curves.",
      "files": [
        {
          "path": "components/ledger/lease-schedule.tsx",
          "target": "components/ledger/lease-schedule.tsx",
          "type": "registry:component"
        }
      ],
      "name": "lease-schedule",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "LeaseSchedule",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Double-entry with debit/credit columns and a balance check.",
      "files": [
        {
          "path": "components/ledger/ledger-table.tsx",
          "target": "components/ledger/ledger-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "ledger-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/group-rows",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "LedgerTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Every metric requires one. Formula with values substituted.",
      "files": [
        {
          "path": "components/ledger/metric-definition.tsx",
          "target": "components/ledger/metric-definition.tsx",
          "type": "registry:component"
        }
      ],
      "name": "metric-definition",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/rule"
      ],
      "title": "MetricDefinition",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Metrics.",
      "files": [
        {
          "path": "components/ledger/metrics.tsx",
          "target": "components/ledger/metrics.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "metrics",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/rule",
        "@lopifi/waterfall-chart"
      ],
      "title": "Metrics",
      "type": "registry:ui"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Grouped/stacked, zero-baseline origin, hatched negatives.",
      "files": [
        {
          "path": "components/ledger/money-bar-chart.tsx",
          "target": "components/ledger/money-bar-chart.tsx",
          "type": "registry:component"
        }
      ],
      "name": "money-bar-chart",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/chart-primitives",
        "@lopifi/chart-utils",
        "@lopifi/money",
        "@lopifi/use-in-view",
        "@lopifi/use-media-query"
      ],
      "title": "MoneyBarChart",
      "type": "registry:component"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Line/area with a money axis and negative-aware baseline.",
      "files": [
        {
          "path": "components/ledger/money-chart.tsx",
          "target": "components/ledger/money-chart.tsx",
          "type": "registry:component"
        }
      ],
      "name": "money-chart",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/chart-primitives",
        "@lopifi/chart-utils",
        "@lopifi/forecast",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-in-view",
        "@lopifi/use-media-query"
      ],
      "title": "MoneyChart",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "class-variance-authority"
      ],
      "description": "The core primitive. A monetary value, formatted correctly.",
      "files": [
        {
          "path": "components/ledger/money.tsx",
          "target": "components/ledger/money.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "money",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money.types",
        "@lopifi/tooltip"
      ],
      "title": "Money",
      "type": "registry:ui"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Recipient picker with fuzzy search and last-paid.",
      "files": [
        {
          "path": "components/ledger/payee-select.tsx",
          "target": "components/ledger/payee-select.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payee-select",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference"
      ],
      "title": "PayeeSelect",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Amount → payee → method → date → memo.",
      "files": [
        {
          "path": "components/ledger/payment-form.tsx",
          "target": "components/ledger/payment-form.tsx",
          "type": "registry:block"
        }
      ],
      "name": "payment-form",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/amount-input",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/confirm-payment-dialog",
        "@lopifi/currency-select",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/payee-select",
        "@lopifi/payment-method-list"
      ],
      "title": "PaymentForm",
      "type": "registry:block"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The physical card object. 3D flip, pointer tilt.",
      "files": [
        {
          "path": "components/ledger/payment-method-card.tsx",
          "target": "components/ledger/payment-method-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payment-method-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/use-media-query"
      ],
      "title": "PaymentMethodCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Selectable method cards.",
      "files": [
        {
          "path": "components/ledger/payment-method-list.tsx",
          "target": "components/ledger/payment-method-list.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payment-method-list",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference"
      ],
      "title": "PaymentMethodList",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Lopifi component: Payment Run.",
      "files": [
        {
          "path": "components/ledger/payment-run.tsx",
          "target": "components/ledger/payment-run.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "payment-run",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/hold-to-confirm",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule",
        "@lopifi/status-pill"
      ],
      "title": "Payment Run",
      "type": "registry:ui"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Submitted → sent → settled, with real timestamps.",
      "files": [
        {
          "path": "components/ledger/payment-status-timeline.tsx",
          "target": "components/ledger/payment-status-timeline.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payment-status-timeline",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons"
      ],
      "title": "PaymentStatusTimeline",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The sanctioned delight moment.",
      "files": [
        {
          "path": "components/ledger/payment-success.tsx",
          "target": "components/ledger/payment-success.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payment-success",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/figure",
        "@lopifi/fiscal-period",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/use-media-query"
      ],
      "title": "PaymentSuccess",
      "type": "registry:component"
    },
    {
      "categories": [
        "receivables-ar",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Invoice combinations summing exactly to a lump sum.",
      "files": [
        {
          "path": "components/ledger/payment-suggestion.tsx",
          "target": "components/ledger/payment-suggestion.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payment-suggestion",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "PaymentSuggestion",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Upcoming payouts calendar.",
      "files": [
        {
          "path": "components/ledger/payout-schedule.tsx",
          "target": "components/ledger/payout-schedule.tsx",
          "type": "registry:component"
        }
      ],
      "name": "payout-schedule",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/status-pill"
      ],
      "title": "PayoutSchedule",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Percent vs. percentage points, explicitly discriminated.",
      "files": [
        {
          "path": "components/ledger/percent.tsx",
          "target": "components/ledger/percent.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "percent",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money.types"
      ],
      "title": "Percent",
      "type": "registry:ui"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The ruled grid. Frozen panes, hidden columns, hover change, ⌘C.",
      "files": [
        {
          "path": "components/ledger/period-grid.tsx",
          "target": "components/ledger/period-grid.tsx",
          "type": "registry:component"
        }
      ],
      "name": "period-grid",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/column-manager",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/period-change",
        "@lopifi/use-column-widths",
        "@lopifi/use-grid-nav",
        "@lopifi/use-scroll-edges"
      ],
      "title": "PeriodGrid",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Fiscal-aware. Never assumes January.",
      "files": [
        {
          "path": "components/ledger/period-picker.tsx",
          "target": "components/ledger/period-picker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "period-picker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons"
      ],
      "title": "PeriodPicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The P&L cut by department, entity or product.",
      "files": [
        {
          "path": "components/ledger/pl-by-dimension.tsx",
          "target": "components/ledger/pl-by-dimension.tsx",
          "type": "registry:component"
        }
      ],
      "name": "pl-by-dimension",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/period-change",
        "@lopifi/period-grid"
      ],
      "title": "PlByDimension",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "P&L with period comparison and variance.",
      "files": [
        {
          "path": "components/ledger/profit-and-loss.tsx",
          "target": "components/ledger/profit-and-loss.tsx",
          "type": "registry:component"
        }
      ],
      "name": "profit-and-loss",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/statement-table"
      ],
      "title": "ProfitAndLoss",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "A rate with its timestamp. Never one without the other.",
      "files": [
        {
          "path": "components/ledger/rate-line.tsx",
          "target": "components/ledger/rate-line.tsx",
          "type": "registry:component"
        }
      ],
      "name": "rate-line",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/use-live-value"
      ],
      "title": "RateLine",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Locked rate with a countdown and expiry behavior.",
      "files": [
        {
          "path": "components/ledger/rate-lock.tsx",
          "target": "components/ledger/rate-lock.tsx",
          "type": "registry:component"
        }
      ],
      "name": "rate-lock",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/rate-line"
      ],
      "title": "RateLock",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Live multi-pair ticker with value flash.",
      "files": [
        {
          "path": "components/ledger/rate-ticker.tsx",
          "target": "components/ledger/rate-ticker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "rate-ticker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/use-live-value"
      ],
      "title": "RateTicker",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Printable/shareable receipt.",
      "files": [
        {
          "path": "components/ledger/receipt-sheet.tsx",
          "target": "components/ledger/receipt-sheet.tsx",
          "type": "registry:component"
        }
      ],
      "name": "receipt-sheet",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/rule"
      ],
      "title": "ReceiptSheet",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Two-pane matcher. The match animation.",
      "files": [
        {
          "path": "components/ledger/reconciliation-view.tsx",
          "target": "components/ledger/reconciliation-view.tsx",
          "type": "registry:block"
        }
      ],
      "name": "reconciliation-view",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-media-query"
      ],
      "title": "ReconciliationView",
      "type": "registry:block"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Template editable; instances read-only.",
      "files": [
        {
          "path": "components/ledger/recurring-entry-template.tsx",
          "target": "components/ledger/recurring-entry-template.tsx",
          "type": "registry:component"
        }
      ],
      "name": "recurring-entry-template",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/recurring-schedule",
        "@lopifi/status-pill"
      ],
      "title": "RecurringEntryTemplate",
      "type": "registry:component"
    },
    {
      "categories": [
        "payments",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Frequency, end condition, preview of next 3.",
      "files": [
        {
          "path": "components/ledger/recurring-schedule.tsx",
          "target": "components/ledger/recurring-schedule.tsx",
          "type": "registry:component"
        }
      ],
      "name": "recurring-schedule",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/fiscal-period"
      ],
      "title": "RecurringSchedule",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Masked value with reveal.",
      "files": [
        {
          "path": "components/ledger/redacted.tsx",
          "target": "components/ledger/redacted.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "redacted",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "Redacted",
      "type": "registry:ui"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Copyable transaction/account ID with disambiguated glyphs.",
      "files": [
        {
          "path": "components/ledger/reference.tsx",
          "target": "components/ledger/reference.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "reference",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/tooltip"
      ],
      "title": "Reference",
      "type": "registry:ui"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Revenue by stream, with mix, growth and concentration.",
      "files": [
        {
          "path": "components/ledger/revenue-tracker.tsx",
          "target": "components/ledger/revenue-tracker.tsx",
          "type": "registry:component"
        }
      ],
      "name": "revenue-tracker",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/percent",
        "@lopifi/period-change",
        "@lopifi/period-grid"
      ],
      "title": "RevenueTracker",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Deferred balance recognizing by future period.",
      "files": [
        {
          "path": "components/ledger/revenue-waterfall.tsx",
          "target": "components/ledger/revenue-waterfall.tsx",
          "type": "registry:component"
        }
      ],
      "name": "revenue-waterfall",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/chart-primitives",
        "@lopifi/chart-utils",
        "@lopifi/money"
      ],
      "title": "RevenueWaterfall",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Opening → movements → closing → tie. The universal shape.",
      "files": [
        {
          "path": "components/ledger/roll-forward.tsx",
          "target": "components/ledger/roll-forward.tsx",
          "type": "registry:component"
        }
      ],
      "name": "roll-forward",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule"
      ],
      "title": "RollForward",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Single / double / section accounting rule lines.",
      "files": [
        {
          "path": "components/ledger/rule.tsx",
          "target": "components/ledger/rule.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "rule",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Rule",
      "type": "registry:ui"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Months of runway with a burn line.",
      "files": [
        {
          "path": "components/ledger/runway-card.tsx",
          "target": "components/ledger/runway-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "runway-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/status-pill"
      ],
      "title": "RunwayCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "metrics-analysis",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Scenarios side by side, all measured against the base.",
      "files": [
        {
          "path": "components/ledger/scenario-compare.tsx",
          "target": "components/ledger/scenario-compare.tsx",
          "type": "registry:component"
        }
      ],
      "name": "scenario-compare",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/info-tip",
        "@lopifi/money",
        "@lopifi/percent",
        "@lopifi/period-change",
        "@lopifi/period-grid"
      ],
      "title": "ScenarioCompare",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "What the schedules will post, before they post.",
      "files": [
        {
          "path": "components/ledger/schedule-preview.tsx",
          "target": "components/ledger/schedule-preview.tsx",
          "type": "registry:component"
        }
      ],
      "name": "schedule-preview",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "SchedulePreview",
      "type": "registry:component"
    },
    {
      "categories": [
        "accounting-core-gl",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "One shell, seven presets. Prepaids through debt.",
      "files": [
        {
          "path": "components/ledger/schedule-table.tsx",
          "target": "components/ledger/schedule-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "schedule-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/accounting.types",
        "@lopifi/cn",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "ScheduleTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "vaul"
      ],
      "description": "Vaul, configured. The mobile primary overlay.",
      "files": [
        {
          "path": "components/ledger/sheet.tsx",
          "target": "components/ledger/sheet.tsx",
          "type": "registry:component"
        }
      ],
      "name": "sheet",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "Sheet",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Structural, per-component.",
      "files": [
        {
          "path": "components/ledger/skeleton.tsx",
          "target": "components/ledger/skeleton.tsx",
          "type": "registry:component"
        }
      ],
      "name": "skeleton",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Skeleton",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Tolerance setting with an explicit worst case.",
      "files": [
        {
          "path": "components/ledger/slippage-control.tsx",
          "target": "components/ledger/slippage-control.tsx",
          "type": "registry:component"
        }
      ],
      "name": "slippage-control",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "SlippageControl",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Inline trend, one-shot draw.",
      "files": [
        {
          "path": "components/ledger/sparkline.tsx",
          "target": "components/ledger/sparkline.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "sparkline",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/use-media-query"
      ],
      "title": "Sparkline",
      "type": "registry:ui"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Last-synced + retry.",
      "files": [
        {
          "path": "components/ledger/stale-indicator.tsx",
          "target": "components/ledger/stale-indicator.tsx",
          "type": "registry:component"
        }
      ],
      "name": "stale-indicator",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/as-of",
        "@lopifi/cn",
        "@lopifi/icons"
      ],
      "title": "StaleIndicator",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Indent level, subtotal, total, expand.",
      "files": [
        {
          "path": "components/ledger/statement-row.tsx",
          "target": "components/ledger/statement-row.tsx",
          "type": "registry:component"
        }
      ],
      "name": "statement-row",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rule"
      ],
      "title": "StatementRow",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The shared shell: hierarchy, periods, rules.",
      "files": [
        {
          "path": "components/ledger/statement-table.tsx",
          "target": "components/ledger/statement-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "statement-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/column-manager",
        "@lopifi/fiscal-period",
        "@lopifi/format-money",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/period-change",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges",
        "@lopifi/variance-cell"
      ],
      "title": "StatementTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Basis, period, comparison, currency, consolidation.",
      "files": [
        {
          "path": "components/ledger/statement-toolbar.tsx",
          "target": "components/ledger/statement-toolbar.tsx",
          "type": "registry:component"
        }
      ],
      "name": "statement-toolbar",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/currency-select",
        "@lopifi/export-menu",
        "@lopifi/icons",
        "@lopifi/money.types",
        "@lopifi/period-picker"
      ],
      "title": "StatementToolbar",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Payment and reconciliation states.",
      "files": [
        {
          "path": "components/ledger/status-pill.tsx",
          "target": "components/ledger/status-pill.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "status-pill",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money.types"
      ],
      "title": "StatusPill",
      "type": "registry:ui"
    },
    {
      "categories": [
        "cards",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Recurring charge with next-billing.",
      "files": [
        {
          "path": "components/ledger/subscription-card.tsx",
          "target": "components/ledger/subscription-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "subscription-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/card",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "SubscriptionCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Multi-hop path visualization.",
      "files": [
        {
          "path": "components/ledger/swap-route.tsx",
          "target": "components/ledger/swap-route.tsx",
          "type": "registry:component"
        }
      ],
      "name": "swap-route",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types"
      ],
      "title": "SwapRoute",
      "type": "registry:component"
    },
    {
      "categories": [
        "swaps-fx",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "From/to with the flip. The signature component.",
      "files": [
        {
          "path": "components/ledger/swap-widget.tsx",
          "target": "components/ledger/swap-widget.tsx",
          "type": "registry:block"
        }
      ],
      "name": "swap-widget",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/conversion-breakdown",
        "@lopifi/currency-select",
        "@lopifi/format-money",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/rate-line",
        "@lopifi/use-media-query"
      ],
      "title": "SwapWidget",
      "type": "registry:block"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Sort and resize for a table that renders on the server.",
      "files": [
        {
          "path": "components/ledger/table-columns.tsx",
          "target": "components/ledger/table-columns.tsx",
          "type": "registry:component"
        }
      ],
      "name": "table-columns",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/table-sort"
      ],
      "title": "TableColumns",
      "type": "registry:component"
    },
    {
      "categories": [
        "payables-ap",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Line-level variances, not header totals.",
      "files": [
        {
          "path": "components/ledger/three-way-match.tsx",
          "target": "components/ledger/three-way-match.tsx",
          "type": "registry:component"
        }
      ],
      "name": "three-way-match",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/button",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/use-scroll-edges"
      ],
      "title": "ThreeWayMatch",
      "type": "registry:component"
    },
    {
      "categories": [
        "system-states",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "sonner"
      ],
      "description": "Sonner, configured to our tokens.",
      "files": [
        {
          "path": "components/ledger/toast.tsx",
          "target": "components/ledger/toast.tsx",
          "type": "registry:component"
        }
      ],
      "name": "toast",
      "registryDependencies": [
        "@lopifi/theme"
      ],
      "title": "Toast",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "Hover/focus restatement. Never the only home of a fact.",
      "files": [
        {
          "path": "components/ledger/tooltip.tsx",
          "target": "components/ledger/tooltip.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "tooltip",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn"
      ],
      "title": "Tooltip",
      "type": "registry:ui"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react"
      ],
      "description": "The mobile re-rank.",
      "files": [
        {
          "path": "components/ledger/transaction-card.tsx",
          "target": "components/ledger/transaction-card.tsx",
          "type": "registry:component"
        }
      ],
      "name": "transaction-card",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/status-pill",
        "@lopifi/transaction-table"
      ],
      "title": "TransactionCard",
      "type": "registry:component"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Full detail sheet with attachments and audit trail.",
      "files": [
        {
          "path": "components/ledger/transaction-detail.tsx",
          "target": "components/ledger/transaction-detail.tsx",
          "type": "registry:block"
        }
      ],
      "name": "transaction-detail",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/figure",
        "@lopifi/fiscal-period",
        "@lopifi/money",
        "@lopifi/reference",
        "@lopifi/sheet",
        "@lopifi/status-pill",
        "@lopifi/transaction-table"
      ],
      "title": "TransactionDetail",
      "type": "registry:block"
    },
    {
      "categories": [
        "ledger-tables",
        "finance",
        "accounting"
      ],
      "dependencies": [
        "@base-ui-components/react",
        "@tanstack/react-virtual"
      ],
      "description": "The workhorse. Virtualized, sticky, priority-collapsing.",
      "files": [
        {
          "path": "components/ledger/transaction-table.tsx",
          "target": "components/ledger/transaction-table.tsx",
          "type": "registry:component"
        }
      ],
      "name": "transaction-table",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/clipboard",
        "@lopifi/cn",
        "@lopifi/column-header",
        "@lopifi/entity-mark",
        "@lopifi/fiscal-period",
        "@lopifi/format-money",
        "@lopifi/group-rows",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/reference",
        "@lopifi/status-pill",
        "@lopifi/table-sort",
        "@lopifi/transaction-card",
        "@lopifi/use-column-priority",
        "@lopifi/use-column-widths",
        "@lopifi/use-density",
        "@lopifi/use-grid-nav",
        "@lopifi/use-table-sort"
      ],
      "title": "TransactionTable",
      "type": "registry:component"
    },
    {
      "categories": [
        "primitives",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Arrow + delta + optional sparkline, composed.",
      "files": [
        {
          "path": "components/ledger/trend.tsx",
          "target": "components/ledger/trend.tsx",
          "type": "registry:ui"
        }
      ],
      "name": "trend",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/delta",
        "@lopifi/money.types",
        "@lopifi/sparkline"
      ],
      "title": "Trend",
      "type": "registry:ui"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "All accounts with the debit=credit proof.",
      "files": [
        {
          "path": "components/ledger/trial-balance.tsx",
          "target": "components/ledger/trial-balance.tsx",
          "type": "registry:component"
        }
      ],
      "name": "trial-balance",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/icons",
        "@lopifi/money",
        "@lopifi/rule",
        "@lopifi/use-scroll-edges"
      ],
      "title": "TrialBalance",
      "type": "registry:component"
    },
    {
      "categories": [
        "statements",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "Absolute + percent + significance flag.",
      "files": [
        {
          "path": "components/ledger/variance-cell.tsx",
          "target": "components/ledger/variance-cell.tsx",
          "type": "registry:component"
        }
      ],
      "name": "variance-cell",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/cn",
        "@lopifi/format-money",
        "@lopifi/money",
        "@lopifi/money.types",
        "@lopifi/percent",
        "@lopifi/tooltip"
      ],
      "title": "VarianceCell",
      "type": "registry:component"
    },
    {
      "categories": [
        "dashboard-charts",
        "finance",
        "accounting"
      ],
      "dependencies": [],
      "description": "The P&L bridge. Essential and rare.",
      "files": [
        {
          "path": "components/ledger/waterfall-chart.tsx",
          "target": "components/ledger/waterfall-chart.tsx",
          "type": "registry:component"
        }
      ],
      "name": "waterfall-chart",
      "registryDependencies": [
        "@lopifi/theme",
        "@lopifi/chart-primitives",
        "@lopifi/chart-utils",
        "@lopifi/money"
      ],
      "title": "WaterfallChart",
      "type": "registry:component"
    }
  ],
  "name": "ledger"
}
