{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "formance", "homepage": "https://formance.com", "items": [ { "name": "base", "type": "registry:style", "title": "Formance Base", "description": "Brand tokens, fonts, and Tailwind @theme mapping. Install with `formance-ds init`.", "dependencies": ["tw-animate-css", "@tailwindcss/typography"], "cssVars": { "theme": { "font-sans": "'Polymath', 'Figtree', ui-sans-serif, system-ui, sans-serif,\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'", "font-mono": "'Berkeley Mono', ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco,\n Consolas, 'Liberation Mono', 'Courier New', monospace", "color-background": "var(--background)", "color-foreground": "var(--foreground)", "color-card": "var(--card)", "color-card-foreground": "var(--card-foreground)", "color-popover": "var(--popover)", "color-popover-foreground": "var(--popover-foreground)", "color-primary": "var(--primary)", "color-primary-foreground": "var(--primary-foreground)", "color-secondary": "var(--secondary)", "color-secondary-foreground": "var(--secondary-foreground)", "color-accent": "var(--accent)", "color-accent-foreground": "var(--accent-foreground)", "color-destructive": "var(--destructive)", "color-destructive-foreground": "var(--destructive-foreground)", "color-border": "var(--border)", "color-input": "var(--input)", "color-ring": "var(--ring)", "color-muted": "var(--muted)", "color-muted-lighter": "var(--muted-lighter)", "color-muted-foreground": "var(--muted-foreground)", "color-valid": "var(--valid)", "color-valid-foreground": "var(--valid-foreground)", "color-success": "var(--valid)", "color-success-foreground": "var(--valid-foreground)", "color-warning": "var(--warning)", "color-warning-foreground": "var(--warning-foreground)", "color-info": "var(--info)", "color-info-foreground": "var(--info-foreground)", "color-emerald-50": "var(--emerald-50)", "color-emerald-100": "var(--emerald-100)", "color-emerald-200": "var(--emerald-200)", "color-emerald-300": "var(--emerald-300)", "color-emerald-400": "var(--emerald-400)", "color-emerald-500": "var(--emerald-500)", "color-emerald-600": "var(--emerald-600)", "color-emerald-700": "var(--emerald-700)", "color-emerald-800": "var(--emerald-800)", "color-emerald-900": "var(--emerald-900)", "color-lilac-100": "var(--lilac-100)", "color-lilac-200": "var(--lilac-200)", "color-lilac-300": "var(--lilac-300)", "color-lilac-400": "var(--lilac-400)", "color-lilac-500": "var(--lilac-500)", "color-lilac-600": "var(--lilac-600)", "color-lilac-700": "var(--lilac-700)", "color-lilac-800": "var(--lilac-800)", "color-lilac-900": "var(--lilac-900)", "color-gold-100": "var(--gold-100)", "color-gold-200": "var(--gold-200)", "color-gold-300": "var(--gold-300)", "color-gold-400": "var(--gold-400)", "color-gold-500": "var(--gold-500)", "color-gold-600": "var(--gold-600)", "color-gold-700": "var(--gold-700)", "color-gold-800": "var(--gold-800)", "color-gold-900": "var(--gold-900)", "color-cobalt-100": "var(--cobalt-100)", "color-cobalt-200": "var(--cobalt-200)", "color-cobalt-300": "var(--cobalt-300)", "color-cobalt-400": "var(--cobalt-400)", "color-cobalt-500": "var(--cobalt-500)", "color-cobalt-600": "var(--cobalt-600)", "color-cobalt-700": "var(--cobalt-700)", "color-cobalt-800": "var(--cobalt-800)", "color-cobalt-900": "var(--cobalt-900)", "color-mint-100": "var(--mint-100)", "color-mint-200": "var(--mint-200)", "color-mint-300": "var(--mint-300)", "color-mint-400": "var(--mint-400)", "color-mint-500": "var(--mint-500)", "color-mint-600": "var(--mint-600)", "color-mint-700": "var(--mint-700)", "color-mint-800": "var(--mint-800)", "color-mint-900": "var(--mint-900)", "color-sidebar": "var(--sidebar)", "color-sidebar-foreground": "var(--sidebar-foreground)", "color-sidebar-primary": "var(--sidebar-primary)", "color-sidebar-primary-foreground": "var(--sidebar-primary-foreground)", "color-sidebar-accent": "var(--sidebar-accent)", "color-sidebar-accent-foreground": "var(--sidebar-accent-foreground)", "color-sidebar-border": "var(--sidebar-border)", "color-sidebar-ring": "var(--sidebar-ring)", "color-sidebar-menu-sub-border": "var(--sidebar-menu-sub-border)", "color-red-background": "var(--red-background)", "color-red-foreground": "var(--red-foreground)", "color-orange-background": "var(--orange-background)", "color-orange-foreground": "var(--orange-foreground)", "color-amber-background": "var(--amber-background)", "color-amber-foreground": "var(--amber-foreground)", "color-yellow-background": "var(--yellow-background)", "color-yellow-foreground": "var(--yellow-foreground)", "color-lime-background": "var(--lime-background)", "color-lime-foreground": "var(--lime-foreground)", "color-green-background": "var(--green-background)", "color-green-foreground": "var(--green-foreground)", "color-teal-background": "var(--teal-background)", "color-teal-foreground": "var(--teal-foreground)", "color-cyan-background": "var(--cyan-background)", "color-cyan-foreground": "var(--cyan-foreground)", "color-sky-background": "var(--sky-background)", "color-sky-foreground": "var(--sky-foreground)", "color-blue-background": "var(--blue-background)", "color-blue-foreground": "var(--blue-foreground)", "color-indigo-background": "var(--indigo-background)", "color-indigo-foreground": "var(--indigo-foreground)", "color-violet-background": "var(--violet-background)", "color-violet-foreground": "var(--violet-foreground)", "color-purple-background": "var(--purple-background)", "color-purple-foreground": "var(--purple-foreground)", "color-fuchsia-background": "var(--fuchsia-background)", "color-fuchsia-foreground": "var(--fuchsia-foreground)", "color-pink-background": "var(--pink-background)", "color-pink-foreground": "var(--pink-foreground)", "color-rose-background": "var(--rose-background)", "color-rose-foreground": "var(--rose-foreground)", "color-zinc-background": "var(--zinc-background)", "color-zinc-foreground": "var(--zinc-foreground)", "color-chart-1": "var(--chart-1)", "color-chart-2": "var(--chart-2)", "color-chart-3": "var(--chart-3)", "color-chart-4": "var(--chart-4)", "color-chart-5": "var(--chart-5)", "blur-xs": "2px", "max-width-screen-xs": "540px", "radius-sm": "calc(var(--radius) - 4px)", "radius-md": "calc(var(--radius) - 2px)", "radius-lg": "var(--radius)", "radius-xl": "calc(var(--radius) + 4px)", "animate-accordion-down": "accordion-down 0.2s ease-out", "animate-accordion-up": "accordion-up 0.2s ease-out", "animate-collapsible-down": "collapsible-down 0.2s ease-out", "animate-collapsible-up": "collapsible-up 0.2s ease-out" }, "light": { "font-opsz-heading": "72", "font-opsz-text": "6", "sidebar-width": "16rem", "white": "var(--emerald-50)", "black": "var(--emerald-800)", "primary": "var(--emerald-700)", "primary-foreground": "var(--white)", "secondary": "var(--emerald-100)", "secondary-foreground": "var(--foreground)", "background": "var(--white)", "foreground": "var(--black)", "muted": "var(--secondary)", "muted-lighter": "color-mix(in oklch, var(--emerald-900) 2%, white)", "muted-foreground": "var(--emerald-600)", "card": "var(--white)", "card-foreground": "var(--foreground)", "popover": "var(--white)", "popover-foreground": "var(--foreground)", "border": "var(--emerald-200)", "input": "var(--emerald-200)", "accent": "var(--secondary)", "accent-foreground": "var(--primary)", "ring": "var(--emerald-500)", "radius": "0rem", "emerald-50": "oklch(1 0 0)", "emerald-100": "oklch(0.9503 0.0053 197.07)", "emerald-200": "oklch(0.9225 0.0096 196.99)", "emerald-300": "oklch(0.9001 0.0122 202.07)", "emerald-400": "oklch(0.8164 0.017 202)", "emerald-500": "oklch(0.6433 0.028 201.8)", "emerald-600": "oklch(0.4754 0.039 204.7)", "emerald-700": "oklch(0.3026 0.0516 208.89)", "emerald-800": "oklch(0.253 0.0427 208.02)", "emerald-900": "oklch(0.1879 0.032 202.57)", "lilac-100": "oklch(0.9747 0.0111 286.19)", "lilac-200": "oklch(0.9457 0.0274 288.16)", "lilac-300": "oklch(0.9181 0.0414 287.08)", "lilac-400": "oklch(0.8913 0.0558 287.5)", "lilac-500": "oklch(0.8635 0.070365 286.3527)", "lilac-600": "oklch(0.7401 0.0786 286.6)", "lilac-700": "oklch(0.5996 0.0915 284.81)", "lilac-800": "oklch(0.467 0.1001 284.09)", "lilac-900": "oklch(0.3246 0.1125 279.57)", "gold-100": "oklch(0.9007 0.0128 87.49)", "gold-200": "oklch(0.8142 0.0237 90.31)", "gold-300": "oklch(0.7306 0.0333 87.57)", "gold-400": "oklch(0.6401 0.0455 89)", "gold-500": "oklch(0.5448 0.0561 88.83)", "gold-600": "oklch(0.4637 0.046541 88.8573)", "gold-700": "oklch(0.3909 0.0391 88.86)", "gold-800": "oklch(0.2989 0.0257 87.46)", "gold-900": "oklch(0.2032 0.014347016884065901 87.53607244472055)", "cobalt-100": "oklch(0.922 0.0198 238.67)", "cobalt-200": "oklch(0.9219 0.0207 238.68)", "cobalt-300": "oklch(0.7538 0.0649 241.62)", "cobalt-400": "oklch(0.6744 0.0881 242.61)", "cobalt-500": "oklch(0.5609 0.102 244.23)", "cobalt-600": "oklch(0.5065 0.0908 244.14)", "cobalt-700": "oklch(0.4121 0.0702 243.8)", "cobalt-800": "oklch(0.323 0.05273609329791332 243.56484712380217)", "cobalt-900": "oklch(0.2168 0.0283 240.87)", "mint-100": "oklch(0.9753 0.0181 148.38)", "mint-200": "oklch(0.9567 0.0328 146.71)", "mint-300": "oklch(0.931 0.0485 146.07)", "mint-400": "oklch(0.913 0.0631 145.92)", "mint-500": "oklch(0.889 0.0812 145.7)", "mint-600": "oklch(0.7756 0.0752 146.09)", "mint-700": "oklch(0.6486 0.0683 146)", "mint-800": "oklch(0.5265 0.0674 145.34)", "mint-900": "oklch(0.3855 0.06143747659219817 145.01612489002488)", "red-background": "oklch(0.9362 0.0304 20.08)", "red-foreground": "oklch(0.5092 0.1934 27.66)", "orange-background": "oklch(0.9515 0.0263 46.56)", "orange-foreground": "oklch(0.5522 0.1722 38.86)", "amber-background": "oklch(0.9656 0.0382 88.99)", "amber-foreground": "oklch(0.553 0.1435 49.38)", "yellow-background": "oklch(0.9697 0.0413 91.72)", "yellow-foreground": "oklch(0.5528 0.1214 65.44)", "lime-background": "oklch(0.9673 0.0431 126.34)", "lime-foreground": "oklch(0.5278 0.1392 131.62)", "green-background": "oklch(0.934 0.0455 153.02)", "green-foreground": "oklch(0.482 0.1235 150.17)", "teal-background": "oklch(0.941 0.025708 184.7233)", "teal-foreground": "oklch(0.5126 0.0869 185.71)", "cyan-background": "oklch(0.9557 0.0315 209.43)", "cyan-foreground": "oklch(0.5206 0.0941 223.41)", "sky-background": "oklch(0.9552 0.0209 232.9)", "sky-foreground": "oklch(0.4976 0.1162 241.9)", "blue-background": "oklch(0.9385 0.0276 264.43)", "blue-foreground": "oklch(0.4893 0.2177 264.22)", "indigo-background": "oklch(0.9336 0.0316 285.77)", "indigo-foreground": "oklch(0.4614 0.213 277.71)", "violet-background": "oklch(0.939 0.0322 299.46)", "violet-foreground": "oklch(0.4865 0.2423 291.87)", "purple-background": "oklch(0.9407 0.0364 307.34)", "purple-foreground": "oklch(0.4948 0.237258 301.7658)", "fuchsia-background": "oklch(0.9603 0.0299 322.75)", "fuchsia-foreground": "oklch(0.5204 0.2262 324.21)", "pink-background": "oklch(0.9593 0.0241 343.22)", "pink-foreground": "oklch(0.5242 0.1983 3.76)", "rose-background": "oklch(0.956 0.0225 7.19)", "rose-foreground": "oklch(0.5149 0.1977 17.47)", "zinc-background": "oklch(0.9452 0.0014 286.37)", "zinc-foreground": "oklch(0.3701 0.0113 285.84)", "sidebar": "var(--white)", "sidebar-foreground": "var(--foreground)", "sidebar-primary": "var(--emerald-400)", "sidebar-primary-foreground": "var(--white)", "sidebar-accent": "var(--accent)", "sidebar-accent-foreground": "var(--foreground)", "sidebar-border": "var(--border)", "sidebar-ring": "var(--ring)", "sidebar-menu-sub-border": "var(--sidebar-primary)", "chart-1": "var(--emerald-600)", "chart-2": "var(--lilac-600)", "chart-3": "var(--gold-500)", "chart-4": "var(--cobalt-500)", "chart-5": "var(--mint-500)", "valid": "var(--green-background)", "valid-foreground": "var(--green-foreground)", "destructive": "var(--red-background)", "destructive-foreground": "var(--red-foreground)", "warning": "var(--amber-background)", "warning-foreground": "var(--amber-foreground)", "info": "var(--sky-background)", "info-foreground": "var(--sky-foreground)" }, "dark": { "black": "oklch(0.17 0.032 202.57)", "background": "var(--emerald-900)", "foreground": "var(--white)", "muted": "var(--black)", "muted-lighter": "var(--emerald-900)", "muted-foreground": "var(--emerald-300)", "popover": "var(--black)", "popover-foreground": "var(--foreground)", "card": "var(--black)", "card-foreground": "var(--foreground)", "border": "var(--emerald-700)", "input": "var(--emerald-700)", "primary": "var(--emerald-700)", "primary-foreground": "var(--white)", "secondary": "var(--emerald-300)", "secondary-foreground": "var(--emerald-900)", "accent": "var(--emerald-700)", "accent-foreground": "var(--emerald-100)", "ring": "var(--emerald-500)", "red-background": "oklch(0.2559 0.0945 27.15)", "red-foreground": "oklch(0.7371 0.1477 21.3)", "orange-background": "oklch(0.2679 0.0241 44.28)", "orange-foreground": "oklch(0.7577 0.159 55.91)", "amber-background": "oklch(0.283 0.0209 82.83)", "amber-foreground": "oklch(0.8334 0.1641 83.87)", "yellow-background": "oklch(0.2891 0.0251 90.4)", "yellow-foreground": "oklch(0.8836 0.1785 95.61)", "lime-background": "oklch(0.2859 0.0245 128.21)", "lime-foreground": "oklch(0.9085 0.1618 126.12)", "green-background": "oklch(0.2708 0.023 157.41)", "green-foreground": "oklch(0.7999 0.1816 151.78)", "teal-background": "oklch(0.27 0.0155 203.18)", "teal-foreground": "oklch(0.8544 0.125459 181.6121)", "cyan-background": "oklch(0.2383 0.0399 205.7)", "cyan-foreground": "oklch(0.8758 0.1194 205.35)", "sky-background": "oklch(0.2676 0.0227 243.41)", "sky-foreground": "oklch(0.8295 0.1004 229.56)", "blue-background": "oklch(0.2782 0.0415 266.01)", "blue-foreground": "oklch(0.7157 0.1425 254.45)", "indigo-background": "oklch(0.2726 0.0463 282.89)", "indigo-foreground": "oklch(0.6833 0.1558 276.67)", "violet-background": "oklch(0.2707 0.0442 295.56)", "violet-foreground": "oklch(0.7069 0.161594 294.1621)", "purple-background": "oklch(0.2719 0.0519 303.08)", "purple-foreground": "oklch(0.7188 0.1783 305.46)", "fuchsia-background": "oklch(0.2785 0.0323 316.92)", "fuchsia-foreground": "oklch(0.7535 0.2041 322.82)", "pink-background": "oklch(0.2717 0.0288 337.01)", "pink-foreground": "oklch(0.7235 0.1768 350.21)", "rose-background": "oklch(0.2689 0.0253 357.18)", "rose-foreground": "oklch(0.7164 0.172 13.29)", "zinc-background": "oklch(0.2646 0.0056 286.01)", "zinc-foreground": "oklch(0.8553 0.0063 286.27)", "sidebar": "var(--black)", "sidebar-foreground": "var(--foreground)", "sidebar-primary": "var(--emerald-500)", "sidebar-primary-foreground": "var(--white)", "sidebar-accent": "var(--accent)", "sidebar-accent-foreground": "var(--accent-foreground)", "sidebar-border": "var(--border)", "sidebar-border-items": "var(--border)", "sidebar-ring": "var(--ring)", "chart-1": "oklch(0.488 0.243 264.376)", "chart-2": "oklch(0.696 0.17 162.48)", "chart-3": "oklch(0.769 0.188 70.08)", "chart-4": "oklch(0.627 0.265 303.9)", "chart-5": "oklch(0.645 0.246 16.439)", "valid": "var(--green-background)", "valid-foreground": "var(--green-foreground)", "destructive": "var(--red-background)", "destructive-foreground": "var(--red-foreground)", "warning": "var(--amber-background)", "warning-foreground": "var(--amber-foreground)", "info": "var(--sky-background)", "info-foreground": "var(--sky-foreground)" } }, "css": { "@plugin '@tailwindcss/typography'": {}, "@import 'tw-animate-css'": {}, "@import url('https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap')": {}, "@layer base": { "*": { "border-color": "var(--border)", "outline-color": "color-mix(in oklch, var(--ring) 50%, transparent)" }, "body": { "background-color": "var(--color-muted-lighter)", "color": "var(--color-foreground)", "font-family": "var(--font-sans)", "font-variation-settings": "'opsz' var(--font-opsz-text)", "-webkit-font-smoothing": "antialiased", "-moz-osx-font-smoothing": "grayscale", "font-optical-sizing": "auto" }, "h1, h2, h3, h4, h5, h6": { "font-variation-settings": "'opsz' var(--font-opsz-heading)" }, ":not(pre) > code": { "position": "relative", "border-radius": "var(--radius-sm)", "background-color": "var(--color-muted)", "padding": "0.2rem 0.3rem", "font-family": "var(--font-mono)", "font-size": "var(--text-sm)" }, "button:not(:disabled), [role=\"button\"]:not(:disabled)": { "cursor": "pointer" } }, "@utility font-heading": { "font-variation-settings": "'opsz' var(--font-opsz-heading)" }, "@utility font-text": { "font-variation-settings": "'opsz' var(--font-opsz-text)" }, "@keyframes accordion-down": { "from": { "height": "0" }, "to": { "height": "var(--radix-accordion-content-height)" } }, "@keyframes accordion-up": { "from": { "height": "var(--radix-accordion-content-height)" }, "to": { "height": "0" } }, "@keyframes collapsible-down": { "from": { "height": "0" }, "to": { "height": "var(--radix-collapsible-content-height)" } }, "@keyframes collapsible-up": { "from": { "height": "var(--radix-collapsible-content-height)" }, "to": { "height": "0" } } } }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "A button component with Formance brand variants.", "dependencies": ["class-variance-authority", "lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/button.tsx", "type": "registry:ui" } ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "A badge component with semantic color variants.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/badge.tsx", "type": "registry:ui" } ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "An input component with size variants.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/input.tsx", "type": "registry:ui" } ] }, { "name": "label", "type": "registry:ui", "title": "Label", "description": "A label component built on Radix UI.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/label.tsx", "type": "registry:ui" } ] }, { "name": "textarea", "type": "registry:ui", "title": "Textarea", "description": "A textarea component with consistent styling.", "files": [ { "path": "registry/default/ui/textarea.tsx", "type": "registry:ui" } ] }, { "name": "select", "type": "registry:ui", "title": "Select", "description": "A select component built on Radix UI.", "dependencies": ["class-variance-authority", "lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/select.tsx", "type": "registry:ui" } ] }, { "name": "checkbox", "type": "registry:ui", "title": "Checkbox", "description": "A checkbox component built on Radix UI.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/checkbox.tsx", "type": "registry:ui" } ] }, { "name": "dialog", "type": "registry:ui", "title": "Dialog", "description": "A modal dialog component built on Radix UI.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/dialog.tsx", "type": "registry:ui" } ] }, { "name": "separator", "type": "registry:ui", "title": "Separator", "description": "A visual separator component.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/separator.tsx", "type": "registry:ui" } ] }, { "name": "skeleton", "type": "registry:ui", "title": "Skeleton", "description": "A loading skeleton placeholder.", "files": [ { "path": "registry/default/ui/skeleton.tsx", "type": "registry:ui" } ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "A card container component with variants.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/card.tsx", "type": "registry:ui" } ] }, { "name": "accordion", "type": "registry:ui", "title": "Accordion", "description": "An accordion component built on Radix UI.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/accordion.tsx", "type": "registry:ui" } ] }, { "name": "tabs", "type": "registry:ui", "title": "Tabs", "description": "A tabs component built on Radix UI.", "dependencies": ["class-variance-authority", "radix-ui"], "files": [ { "path": "registry/default/ui/tabs.tsx", "type": "registry:ui" } ] }, { "name": "tooltip", "type": "registry:ui", "title": "Tooltip", "description": "A tooltip component built on Radix UI.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/tooltip.tsx", "type": "registry:ui" } ] }, { "name": "popover", "type": "registry:ui", "title": "Popover", "description": "A popover component built on Radix UI.", "dependencies": ["class-variance-authority", "radix-ui"], "files": [ { "path": "registry/default/ui/popover.tsx", "type": "registry:ui" } ] }, { "name": "toggle", "type": "registry:ui", "title": "Toggle", "description": "A toggle component built on Radix UI.", "dependencies": ["class-variance-authority", "radix-ui"], "files": [ { "path": "registry/default/ui/toggle.tsx", "type": "registry:ui" } ] }, { "name": "collapsible", "type": "registry:ui", "title": "Collapsible", "description": "A collapsible component built on Radix UI.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/collapsible.tsx", "type": "registry:ui" } ] }, { "name": "switch", "type": "registry:ui", "title": "Switch", "description": "A switch toggle component built on Radix UI.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/switch.tsx", "type": "registry:ui" } ] }, { "name": "radio-group", "type": "registry:ui", "title": "Radio Group", "description": "A radio group component built on Radix UI.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/radio-group.tsx", "type": "registry:ui" } ] }, { "name": "drawer", "type": "registry:ui", "title": "Drawer", "description": "A drawer component built on Vaul.", "dependencies": ["vaul"], "files": [ { "path": "registry/default/ui/drawer.tsx", "type": "registry:ui" } ] }, { "name": "sheet", "type": "registry:ui", "title": "Sheet", "description": "A slide-out sheet component built on Radix UI.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/sheet.tsx", "type": "registry:ui" } ] }, { "name": "scroll-area", "type": "registry:ui", "title": "Scroll Area", "description": "A custom scroll area built on Radix UI.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/scroll-area.tsx", "type": "registry:ui" } ] }, { "name": "sonner", "type": "registry:ui", "title": "Sonner", "description": "Toast notification component.", "dependencies": ["next-themes", "sonner"], "files": [ { "path": "registry/default/ui/sonner.tsx", "type": "registry:ui" } ] }, { "name": "form", "type": "registry:ui", "title": "Form", "description": "Form components with React Hook Form and Zod integration.", "dependencies": ["radix-ui", "react-hook-form"], "registryDependencies": ["https://ds.formance.com/r/label.json"], "files": [ { "path": "registry/default/ui/form.tsx", "type": "registry:ui" } ] }, { "name": "typography", "type": "registry:ui", "title": "Typography", "description": "Typography components with Formance brand styles.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/typography.tsx", "type": "registry:ui" } ] }, { "name": "formance-logo", "type": "registry:ui", "title": "Formance Logo", "description": "The Formance logo and icon component.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/formance-logo.tsx", "type": "registry:ui" } ] }, { "name": "alert", "type": "registry:ui", "title": "Alert", "description": "Displays a callout for important messages.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/alert.tsx", "type": "registry:ui" } ] }, { "name": "alert-dialog", "type": "registry:ui", "title": "Alert Dialog", "description": "A modal dialog that interrupts the user for a critical action.", "dependencies": ["radix-ui", "sonner"], "registryDependencies": ["https://ds.formance.com/r/button.json"], "files": [ { "path": "registry/default/ui/alert-dialog.tsx", "type": "registry:ui" } ] }, { "name": "aspect-ratio", "type": "registry:ui", "title": "Aspect Ratio", "description": "Displays content within a desired ratio.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/aspect-ratio.tsx", "type": "registry:ui" } ] }, { "name": "attachment", "type": "registry:ui", "title": "Attachment", "description": "Displays a file or image attachment with media, metadata, upload state, and actions.", "dependencies": ["class-variance-authority", "radix-ui"], "registryDependencies": ["button"], "files": [ { "path": "registry/default/ui/attachment.tsx", "type": "registry:ui" } ] }, { "name": "avatar", "type": "registry:ui", "title": "Avatar", "description": "An image element with a fallback for user profiles.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/avatar.tsx", "type": "registry:ui" } ] }, { "name": "breadcrumb", "type": "registry:ui", "title": "Breadcrumb", "description": "Navigation breadcrumb showing the current page hierarchy.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/breadcrumb.tsx", "type": "registry:ui" } ] }, { "name": "calendar", "type": "registry:ui", "title": "Calendar", "description": "A date picker calendar component.", "dependencies": ["react-day-picker", "lucide-react"], "registryDependencies": ["button", "input", "label"], "files": [ { "path": "registry/default/ui/calendar.tsx", "type": "registry:ui" } ] }, { "name": "carousel", "type": "registry:ui", "title": "Carousel", "description": "A carousel for cycling through content.", "dependencies": ["embla-carousel-react", "lucide-react"], "files": [ { "path": "registry/default/ui/carousel.tsx", "type": "registry:ui" } ] }, { "name": "chart", "type": "registry:ui", "title": "Chart", "description": "Chart components built on Recharts.", "dependencies": ["recharts"], "files": [ { "path": "registry/default/ui/chart.tsx", "type": "registry:ui" } ] }, { "name": "command", "type": "registry:ui", "title": "Command", "description": "A command palette for quick actions and search.", "dependencies": ["cmdk", "lucide-react"], "files": [ { "path": "registry/default/ui/command.tsx", "type": "registry:ui" } ] }, { "name": "context-menu", "type": "registry:ui", "title": "Context Menu", "description": "A menu triggered by right-clicking.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/context-menu.tsx", "type": "registry:ui" } ] }, { "name": "dropdown-menu", "type": "registry:ui", "title": "Dropdown Menu", "description": "A menu displayed on trigger click.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/dropdown-menu.tsx", "type": "registry:ui" } ] }, { "name": "hover-card", "type": "registry:ui", "title": "Hover Card", "description": "A card displayed on hover for previewing content.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/hover-card.tsx", "type": "registry:ui" } ] }, { "name": "input-otp", "type": "registry:ui", "title": "Input OTP", "description": "One-time password input with individual slots.", "dependencies": ["input-otp", "lucide-react"], "files": [ { "path": "registry/default/ui/input-otp.tsx", "type": "registry:ui" } ] }, { "name": "menubar", "type": "registry:ui", "title": "Menubar", "description": "A horizontal menu bar component.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/menubar.tsx", "type": "registry:ui" } ] }, { "name": "navigation-menu", "type": "registry:ui", "title": "Navigation Menu", "description": "A navigation menu with dropdown content.", "dependencies": ["radix-ui", "class-variance-authority", "lucide-react"], "files": [ { "path": "registry/default/ui/navigation-menu.tsx", "type": "registry:ui" } ] }, { "name": "pagination", "type": "registry:ui", "title": "Pagination", "description": "Pagination controls for navigating pages.", "dependencies": ["lucide-react"], "files": [ { "path": "registry/default/ui/pagination.tsx", "type": "registry:ui" } ] }, { "name": "progress", "type": "registry:ui", "title": "Progress", "description": "A progress bar indicator.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/progress.tsx", "type": "registry:ui" } ] }, { "name": "resizable", "type": "registry:ui", "title": "Resizable", "description": "Resizable panel groups with drag handles.", "dependencies": ["react-resizable-panels", "lucide-react"], "files": [ { "path": "registry/default/ui/resizable.tsx", "type": "registry:ui" } ] }, { "name": "slider", "type": "registry:ui", "title": "Slider", "description": "A range slider input.", "dependencies": ["radix-ui"], "files": [ { "path": "registry/default/ui/slider.tsx", "type": "registry:ui" } ] }, { "name": "spinner", "type": "registry:ui", "title": "Spinner", "description": "A loading spinner indicator.", "dependencies": ["lucide-react"], "files": [ { "path": "registry/default/ui/spinner.tsx", "type": "registry:ui" } ] }, { "name": "table", "type": "registry:ui", "title": "Table", "description": "A table component for displaying data.", "files": [ { "path": "registry/default/ui/table.tsx", "type": "registry:ui" } ] }, { "name": "toggle-group", "type": "registry:ui", "title": "Toggle Group", "description": "A group of toggle buttons.", "dependencies": ["radix-ui", "class-variance-authority"], "files": [ { "path": "registry/default/ui/toggle-group.tsx", "type": "registry:ui" } ] }, { "name": "eyebrow", "type": "registry:ui", "title": "Eyebrow", "description": "A small label component with a colored square indicator.", "dependencies": ["class-variance-authority", "radix-ui"], "files": [ { "path": "registry/default/ui/eyebrow.tsx", "type": "registry:ui" } ] }, { "name": "empty", "type": "registry:ui", "title": "Empty", "description": "Empty state placeholder with media, title, and description.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/empty.tsx", "type": "registry:ui" } ] }, { "name": "badge-eyebrow", "type": "registry:ui", "title": "Badge Eyebrow", "description": "A badge eyebrow with brand color variants.", "dependencies": ["class-variance-authority", "radix-ui"], "files": [ { "path": "registry/default/ui/badge-eyebrow.tsx", "type": "registry:ui" } ] }, { "name": "badge-status", "type": "registry:ui", "title": "Badge Status", "description": "A status badge with animated ping indicator.", "dependencies": ["class-variance-authority"], "registryDependencies": ["https://ds.formance.com/r/badge.json"], "files": [ { "path": "registry/default/ui/badge-status.tsx", "type": "registry:ui" } ] }, { "name": "endpoint", "type": "registry:ui", "title": "Endpoint", "description": "API endpoint pill combining HTTP method, response status code, and route path.", "files": [ { "path": "registry/default/ui/endpoint.tsx", "type": "registry:ui" } ] }, { "name": "button-group", "type": "registry:ui", "title": "Button Group", "description": "A group of buttons with separator.", "registryDependencies": ["https://ds.formance.com/r/separator.json"], "files": [ { "path": "registry/default/ui/button-group.tsx", "type": "registry:ui" } ] }, { "name": "kbd", "type": "registry:ui", "title": "Kbd", "description": "Keyboard shortcut display component.", "files": [ { "path": "registry/default/ui/kbd.tsx", "type": "registry:ui" } ] }, { "name": "description-list", "type": "registry:ui", "title": "Description List", "description": "A description list and row layout for key-value pairs.", "registryDependencies": ["https://ds.formance.com/r/separator.json"], "files": [ { "path": "registry/default/ui/description-list.tsx", "type": "registry:ui" } ] }, { "name": "context-icon", "type": "registry:ui", "title": "Context Icon", "description": "Octilinear tile identifying an organization, a stack, or an app. Ships the SVG art alongside the component.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui/context-icon.tsx", "type": "registry:ui" }, { "path": "public/icons/app.svg", "type": "registry:file", "target": "public/icons/app.svg" }, { "path": "public/icons/organization.svg", "type": "registry:file", "target": "public/icons/organization.svg" }, { "path": "public/icons/stack.svg", "type": "registry:file", "target": "public/icons/stack.svg" } ] }, { "name": "combobox", "type": "registry:ui", "title": "Combobox", "description": "A combobox with search built on Command and Popover.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/command.json", "https://ds.formance.com/r/popover.json" ], "files": [ { "path": "registry/default/ui/combobox.tsx", "type": "registry:ui" } ] }, { "name": "input-password", "type": "registry:ui", "title": "Input Password", "description": "A password input with visibility toggle.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/input.json" ], "files": [ { "path": "registry/default/ui/input-password.tsx", "type": "registry:ui" } ] }, { "name": "loader", "type": "registry:ui", "title": "Loader", "description": "Loading skeleton placeholders.", "registryDependencies": ["https://ds.formance.com/r/skeleton.json"], "files": [ { "path": "registry/default/ui/loader.tsx", "type": "registry:ui" } ] }, { "name": "mode-toggle", "type": "registry:component", "title": "Mode Toggle", "description": "A theme toggle button for dark and light mode.", "dependencies": ["lucide-react", "next-themes"], "registryDependencies": ["https://ds.formance.com/r/button.json"], "files": [ { "path": "registry/default/ui-fragments/mode-toggle.tsx", "type": "registry:component", "target": "components/ui-fragments/mode-toggle.tsx" } ] }, { "name": "nav-tabs", "type": "registry:ui", "title": "Nav Tabs", "description": "Navigation tabs with pending state.", "dependencies": ["class-variance-authority"], "registryDependencies": ["https://ds.formance.com/r/tabs.json"], "files": [ { "path": "registry/default/ui/nav-tabs.tsx", "type": "registry:ui" } ] }, { "name": "field", "type": "registry:ui", "title": "Field", "description": "A full form field system with labels, descriptions, and errors.", "registryDependencies": [ "https://ds.formance.com/r/label.json", "https://ds.formance.com/r/separator.json" ], "files": [ { "path": "registry/default/ui/field.tsx", "type": "registry:ui" } ] }, { "name": "input-group", "type": "registry:ui", "title": "Input Group", "description": "Grouped input with addons, buttons, and text.", "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/input.json", "https://ds.formance.com/r/textarea.json" ], "files": [ { "path": "registry/default/ui/input-group.tsx", "type": "registry:ui" } ] }, { "name": "item", "type": "registry:ui", "title": "Item", "description": "A list item system with media, content, and actions.", "registryDependencies": ["https://ds.formance.com/r/separator.json"], "files": [ { "path": "registry/default/ui/item.tsx", "type": "registry:ui" } ] }, { "name": "multi-select", "type": "registry:component", "title": "Multi Select", "description": "A multi-select component with badges and search.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/badge.json", "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/command.json", "https://ds.formance.com/r/popover.json" ], "files": [ { "path": "registry/default/ui-fragments/multi-select.tsx", "type": "registry:component", "target": "components/ui-fragments/multi-select.tsx" } ] }, { "name": "sidebar", "type": "registry:ui", "title": "Sidebar", "description": "A collapsible sidebar with mobile support.", "dependencies": ["class-variance-authority", "lucide-react", "radix-ui"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/eyebrow.json", "https://ds.formance.com/r/input.json", "https://ds.formance.com/r/separator.json", "https://ds.formance.com/r/sheet.json", "https://ds.formance.com/r/skeleton.json", "https://ds.formance.com/r/tooltip.json" ], "files": [ { "path": "registry/default/ui/sidebar.tsx", "type": "registry:ui" } ] }, { "name": "sidebar-app-switcher", "type": "registry:ui", "title": "Sidebar App Switcher", "description": "One sidebar control for the current app and organization.", "dependencies": ["lucide-react", "radix-ui"], "registryDependencies": [ "https://ds.formance.com/r/badge.json", "https://ds.formance.com/r/context-icon.json", "https://ds.formance.com/r/dropdown-menu.json", "https://ds.formance.com/r/formance-logo.json", "https://ds.formance.com/r/sidebar.json" ], "files": [ { "path": "registry/default/ui/sidebar-app-switcher.tsx", "type": "registry:ui" } ] }, { "name": "stepper", "type": "registry:ui", "title": "Stepper", "description": "A multi-step wizard component with validation.", "dependencies": ["lucide-react", "radix-ui"], "files": [ { "path": "registry/default/ui/stepper.tsx", "type": "registry:ui" }, { "path": "lib/compose-refs.ts", "type": "registry:lib", "target": "lib/compose-refs.ts" } ] }, { "name": "page-container", "type": "registry:component", "title": "Page Container", "description": "A responsive page container with size variants.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui-fragments/page-container.tsx", "type": "registry:component", "target": "components/ui-fragments/page-container.tsx" } ] }, { "name": "page-header", "type": "registry:component", "title": "Page Header", "description": "A compound page header with breadcrumb, icon, title, description, and navigation tabs.", "dependencies": ["class-variance-authority"], "registryDependencies": [ "https://ds.formance.com/r/breadcrumb.json", "https://ds.formance.com/r/eyebrow.json", "https://ds.formance.com/r/page-container.json" ], "files": [ { "path": "registry/default/ui-fragments/page-header.tsx", "type": "registry:component", "target": "components/ui-fragments/page-header.tsx" } ] }, { "name": "page-section", "type": "registry:component", "title": "Page Section", "description": "A compound page section with title, description, and content areas.", "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/default/ui-fragments/page-section.tsx", "type": "registry:component", "target": "components/ui-fragments/page-section.tsx" } ] }, { "name": "app-card", "type": "registry:component", "title": "App Card", "description": "A card layout for app sections with optional icon, header action, separator, and footer.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/card.json" ], "files": [ { "path": "registry/default/ui-fragments/app-card.tsx", "type": "registry:component", "target": "components/ui-fragments/app-card.tsx" } ] }, { "name": "app-card-empty", "type": "registry:component", "title": "App Card Empty", "description": "Muted empty-state card with centered icon, title, description, and optional actions.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/card.json", "https://ds.formance.com/r/typography.json" ], "files": [ { "path": "registry/default/ui-fragments/app-card-empty.tsx", "type": "registry:component", "target": "components/ui-fragments/app-card-empty.tsx" } ] }, { "name": "ledger-schema", "type": "registry:component", "title": "Ledger Schema", "description": "Interactive viewer for a Formance ledger schema — chart of accounts, transactions (Numscript), and queries — with a tabbed full view and props to show a single section, transaction, or chart subtree.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/code-snippet.json", "https://ds.formance.com/r/tabs.json", "https://ds.formance.com/r/badge.json", "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/collapsible.json", "https://ds.formance.com/r/tooltip.json", "https://ds.formance.com/r/copy-button.json" ], "files": [ { "path": "registry/default/ui-fragments/ledger-schema.tsx", "type": "registry:component", "target": "components/ui-fragments/ledger-schema.tsx" }, { "path": "registry/default/ui-fragments/_ledger-schema/chart-of-accounts.tsx", "type": "registry:component", "target": "components/ui-fragments/_ledger-schema/chart-of-accounts.tsx" }, { "path": "registry/default/ui-fragments/_ledger-schema/numscript.ts", "type": "registry:component", "target": "components/ui-fragments/_ledger-schema/numscript.ts" } ] }, { "name": "ledger-schema-validator", "type": "registry:ui", "title": "Ledger Schema Validator", "description": "Validates a Formance ledger schema (YAML or JSON) against the canonical hosted schema and returns diagnostics for CodeEditor. Select base or extended, or pass a custom schema.", "dependencies": ["ajv", "yaml"], "registryDependencies": ["https://ds.formance.com/r/code-editor.json"], "files": [ { "path": "registry/default/ui/code/ledger-schema-validator.ts", "type": "registry:ui", "target": "components/code/ledger-schema-validator.ts" } ] }, { "name": "ledger-schema-editor", "type": "registry:component", "title": "Ledger Schema Editor", "description": "A ledger schema editor: a Monaco CodeEditor with a YAML/JSON toggle, live validation against the hosted canonical schema, and a valid / error status.", "dependencies": ["yaml"], "registryDependencies": [ "https://ds.formance.com/r/code-editor.json", "https://ds.formance.com/r/ledger-schema-validator.json", "https://ds.formance.com/r/tabs.json" ], "files": [ { "path": "registry/default/ui-fragments/ledger-schema-editor.tsx", "type": "registry:component", "target": "components/ui-fragments/ledger-schema-editor.tsx" } ] }, { "name": "data-table", "type": "registry:component", "title": "Data Table", "description": "A data table built on TanStack Table with sorting, filtering, pagination, and skeleton loading.", "dependencies": ["@tanstack/react-table", "lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/badge.json", "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/command.json", "https://ds.formance.com/r/dropdown-menu.json", "https://ds.formance.com/r/popover.json", "https://ds.formance.com/r/select.json", "https://ds.formance.com/r/skeleton.json", "https://ds.formance.com/r/table.json" ], "files": [ { "path": "registry/default/ui-fragments/data-table.tsx", "type": "registry:component", "target": "components/ui-fragments/data-table.tsx" } ] }, { "name": "radio-group-card", "type": "registry:ui", "title": "Radio Group Card", "description": "A card-style radio group for visual selection with optional children content.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/radio-group-card.tsx", "type": "registry:ui" } ] }, { "name": "radio-group-stacked", "type": "registry:ui", "title": "Radio Group Stacked", "description": "A stacked radio group with labels and descriptions for form selections.", "dependencies": ["radix-ui", "lucide-react"], "files": [ { "path": "registry/default/ui/radio-group-stacked.tsx", "type": "registry:ui" } ] }, { "name": "code-themes", "type": "registry:ui", "title": "Code Themes", "description": "Shared Formance Shiki/Monaco themes, language config, and highlighter singleton using CSS variables.", "dependencies": ["shiki"], "files": [ { "path": "registry/default/ui/code/code-themes.ts", "type": "registry:ui", "target": "components/code/code-themes.ts" }, { "path": "registry/default/ui/code/code-themes.css", "type": "registry:ui", "target": "components/code/code-themes.css" }, { "path": "registry/default/ui/code/numscript.tmLanguage.json", "type": "registry:ui", "target": "components/code/numscript.tmLanguage.json" } ] }, { "name": "code-snippet", "type": "registry:ui", "title": "Code Snippet", "description": "A read-only syntax-highlighted code viewer powered by Shiki with CSS variable theming.", "dependencies": ["shiki", "class-variance-authority", "lucide-react"], "registryDependencies": ["https://ds.formance.com/r/code-themes.json"], "files": [ { "path": "registry/default/ui/code/code-snippet.tsx", "type": "registry:ui", "target": "components/code/code-snippet.tsx" }, { "path": "registry/default/ui/code/render-hast.tsx", "type": "registry:ui", "target": "components/code/render-hast.tsx" } ] }, { "name": "code-editor", "type": "registry:ui", "title": "Code Editor", "description": "An editable Monaco code editor with Shiki tokenization and CSS variable theming.", "dependencies": [ "shiki", "monaco-editor-core", "@shikijs/monaco", "lucide-react" ], "registryDependencies": [ "https://ds.formance.com/r/code-themes.json", "https://ds.formance.com/r/code-navigator.json" ], "files": [ { "path": "registry/default/ui/code/code-editor.tsx", "type": "registry:ui", "target": "components/code/code-editor.tsx" } ] }, { "name": "code-navigator", "type": "registry:ui", "title": "Code Navigator", "description": "A breadcrumb navigator toolbar for jumping to sections in JSON/YAML code editors.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/code-themes.json", "https://ds.formance.com/r/badge.json", "https://ds.formance.com/r/select.json" ], "files": [ { "path": "registry/default/ui/code/code-navigator.tsx", "type": "registry:ui", "target": "components/code/code-navigator.tsx" }, { "path": "registry/default/ui/code/parse-navigation-tree.ts", "type": "registry:ui", "target": "components/code/parse-navigation-tree.ts" } ] }, { "name": "numscript-validator", "type": "registry:ui", "title": "Numscript Validator", "description": "Validates Numscript code via the playground API and returns diagnostics for CodeEditor.", "registryDependencies": ["https://ds.formance.com/r/code-editor.json"], "files": [ { "path": "registry/default/ui/code/numscript-validator.ts", "type": "registry:ui", "target": "components/code/numscript-validator.ts" } ] }, { "name": "sortable", "type": "registry:ui", "title": "Sortable", "description": "A composable sortable list built on dnd-kit with drag handles, overlay, and keyboard support.", "dependencies": [ "@dnd-kit/core", "@dnd-kit/modifiers", "@dnd-kit/sortable", "@dnd-kit/utilities", "radix-ui" ], "files": [ { "path": "registry/default/ui/sortable.tsx", "type": "registry:ui" }, { "path": "lib/compose-refs.ts", "type": "registry:lib", "target": "lib/compose-refs.ts" } ] }, { "name": "stack-operations", "type": "registry:file", "title": "Stack Operations Index", "description": "Build-time extracted OpenAPI operation index for the Formance stack (method, path, SDK module/method per operationId).", "files": [ { "path": "registry/default/lib/stack-operations.json", "type": "registry:file", "target": "lib/stack-operations.json" } ] }, { "name": "membership-operations", "type": "registry:file", "title": "Membership Operations Index", "description": "Build-time extracted OpenAPI operation index for the Formance membership/cloud API (method, path, path params per operationId). No SDK metadata — the membership API has no public TypeScript SDK.", "files": [ { "path": "registry/default/lib/membership-operations.json", "type": "registry:file", "target": "lib/membership-operations.json" } ] }, { "name": "api-snippet", "type": "registry:component", "title": "API Snippet", "description": "Tabbed API call reference (curl, HTTPie, TypeScript SDK, fctl) rendered from an OpenAPI operationId. Defaults to the stack operations index; pass a different `operations` index and select tabs via the `tabs` prop for other APIs (e.g. membership/cloud).", "registryDependencies": [ "https://ds.formance.com/r/endpoint.json", "https://ds.formance.com/r/code-snippet.json", "https://ds.formance.com/r/tabs.json", "https://ds.formance.com/r/stack-operations.json", "https://ds.formance.com/r/copy-button.json" ], "files": [ { "path": "registry/default/ui-fragments/api-snippet.tsx", "type": "registry:component", "target": "components/ui-fragments/api-snippet.tsx" }, { "path": "registry/default/ui-fragments/_api-snippet/generators.ts", "type": "registry:component", "target": "components/ui-fragments/_api-snippet/generators.ts" } ] }, { "name": "markdown", "type": "registry:component", "title": "Markdown", "description": "Formance-styled markdown renderer (GFM, code blocks, tables, math, mermaid) with an overridable component map.", "dependencies": [ "react-markdown", "remark-gfm", "remark-math", "rehype-katex", "katex", "mermaid" ], "registryDependencies": ["https://ds.formance.com/r/code-snippet.json"], "files": [ { "path": "registry/default/ui-fragments/markdown.tsx", "type": "registry:component", "target": "components/ui-fragments/markdown.tsx" } ] }, { "name": "copy-button", "type": "registry:component", "title": "Copy Button", "description": "Outline icon button that copies text to the clipboard and confirms with a check for 1.5s. Optional label swaps to \"Copied\".", "dependencies": ["lucide-react"], "registryDependencies": ["https://ds.formance.com/r/button.json"], "files": [ { "path": "registry/default/ui-fragments/copy-button.tsx", "type": "registry:component", "target": "components/ui-fragments/copy-button.tsx" } ] }, { "name": "copy-page", "type": "registry:component", "title": "Copy Page", "description": "A copy-to-clipboard button with a dropdown to view the page as Markdown or open it in ChatGPT / Claude.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/dropdown-menu.json" ], "files": [ { "path": "registry/default/ui-fragments/copy-page.tsx", "type": "registry:component", "target": "components/ui-fragments/copy-page.tsx" } ] }, { "name": "key-value-input", "type": "registry:component", "title": "Key Value Input", "description": "A sortable key/value editor with optional secret reveal and JSON preview.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://ds.formance.com/r/button.json", "https://ds.formance.com/r/code-snippet.json", "https://ds.formance.com/r/input.json", "https://ds.formance.com/r/popover.json", "https://ds.formance.com/r/sortable.json" ], "files": [ { "path": "registry/default/ui-fragments/key-value-input.tsx", "type": "registry:component", "target": "components/ui-fragments/key-value-input.tsx" } ] } ] }