astralyx-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/bin/index.d.ts +2 -0
- package/bin/index.js +404 -0
- package/bin/registry.d.ts +37 -0
- package/bin/registry.js +69 -0
- package/package.json +89 -0
- package/registry/index.json +3914 -0
- package/registry/items/accordion.json +22 -0
- package/registry/items/address-input.json +21 -0
- package/registry/items/agent-steps.json +23 -0
- package/registry/items/alert-dialog.json +22 -0
- package/registry/items/alert-triage.json +25 -0
- package/registry/items/alert.json +21 -0
- package/registry/items/anomaly-chart.json +18 -0
- package/registry/items/api-keys.json +25 -0
- package/registry/items/aspect-ratio.json +18 -0
- package/registry/items/attachment-preview.json +23 -0
- package/registry/items/audit-log.json +26 -0
- package/registry/items/avatar.json +21 -0
- package/registry/items/badge.json +22 -0
- package/registry/items/banner.json +22 -0
- package/registry/items/benchmark-table.json +20 -0
- package/registry/items/bet-input.json +23 -0
- package/registry/items/blame-view.json +22 -0
- package/registry/items/branch-select.json +21 -0
- package/registry/items/breadcrumb.json +22 -0
- package/registry/items/bridge-status.json +24 -0
- package/registry/items/build-log.json +23 -0
- package/registry/items/bulk-action-bar.json +21 -0
- package/registry/items/bundle-treemap.json +20 -0
- package/registry/items/button-group.json +21 -0
- package/registry/items/button.json +22 -0
- package/registry/items/cache-stats.json +21 -0
- package/registry/items/calendar.json +25 -0
- package/registry/items/campaign-card.json +22 -0
- package/registry/items/candlestick-chart.json +18 -0
- package/registry/items/card-input.json +22 -0
- package/registry/items/card.json +21 -0
- package/registry/items/carousel.json +22 -0
- package/registry/items/cart.json +23 -0
- package/registry/items/chain-select.json +24 -0
- package/registry/items/changelog-entry.json +21 -0
- package/registry/items/chart.json +19 -0
- package/registry/items/checkbox.json +22 -0
- package/registry/items/checkout-summary.json +20 -0
- package/registry/items/citations.json +22 -0
- package/registry/items/code-block.json +23 -0
- package/registry/items/code-search.json +22 -0
- package/registry/items/cohort-table.json +19 -0
- package/registry/items/collapsible.json +23 -0
- package/registry/items/color-picker.json +24 -0
- package/registry/items/combobox.json +23 -0
- package/registry/items/command.json +23 -0
- package/registry/items/commit-graph.json +20 -0
- package/registry/items/commit-list.json +26 -0
- package/registry/items/composer.json +30 -0
- package/registry/items/confidence-meter.json +18 -0
- package/registry/items/connection-string.json +24 -0
- package/registry/items/container-list.json +24 -0
- package/registry/items/context-menu.json +20 -0
- package/registry/items/context-picker.json +25 -0
- package/registry/items/coordinate-input.json +21 -0
- package/registry/items/copy-button.json +22 -0
- package/registry/items/cost-breakdown.json +20 -0
- package/registry/items/coverage-report.json +22 -0
- package/registry/items/cron-schedule.json +24 -0
- package/registry/items/curl-command.json +18 -0
- package/registry/items/data-grid.json +24 -0
- package/registry/items/date-picker.json +24 -0
- package/registry/items/date-range-compare.json +24 -0
- package/registry/items/dependency-list.json +23 -0
- package/registry/items/deploy-list.json +27 -0
- package/registry/items/description-list.json +18 -0
- package/registry/items/device-list.json +24 -0
- package/registry/items/dialog.json +24 -0
- package/registry/items/diff-proposal.json +23 -0
- package/registry/items/diff-stat.json +18 -0
- package/registry/items/diff-view.json +23 -0
- package/registry/items/donut.json +19 -0
- package/registry/items/drawer.json +19 -0
- package/registry/items/dropdown-menu.json +24 -0
- package/registry/items/dropzone.json +22 -0
- package/registry/items/empty.json +19 -0
- package/registry/items/endpoint-list.json +24 -0
- package/registry/items/env-diff.json +23 -0
- package/registry/items/env-vars.json +24 -0
- package/registry/items/error-boundary.json +22 -0
- package/registry/items/eval-results.json +21 -0
- package/registry/items/feature-flag.json +23 -0
- package/registry/items/feedback.json +23 -0
- package/registry/items/field.json +19 -0
- package/registry/items/file-tree.json +21 -0
- package/registry/items/fingerprint-diff.json +23 -0
- package/registry/items/flame-graph.json +19 -0
- package/registry/items/fmt.json +16 -0
- package/registry/items/form.json +21 -0
- package/registry/items/fraud-verdict.json +24 -0
- package/registry/items/funnel.json +18 -0
- package/registry/items/gas-tracker.json +21 -0
- package/registry/items/gauge.json +18 -0
- package/registry/items/governance-proposal.json +24 -0
- package/registry/items/group.json +21 -0
- package/registry/items/health-checks.json +23 -0
- package/registry/items/heatmap-grid.json +19 -0
- package/registry/items/hover-card.json +20 -0
- package/registry/items/http-status.json +19 -0
- package/registry/items/incident-card.json +24 -0
- package/registry/items/input-file.json +22 -0
- package/registry/items/input-otp.json +19 -0
- package/registry/items/input.json +23 -0
- package/registry/items/invoice-list.json +24 -0
- package/registry/items/ip-cluster.json +22 -0
- package/registry/items/json-viewer.json +21 -0
- package/registry/items/jwt-inspector.json +25 -0
- package/registry/items/kanban.json +20 -0
- package/registry/items/kbd.json +18 -0
- package/registry/items/label-picker.json +24 -0
- package/registry/items/label.json +18 -0
- package/registry/items/leaderboard.json +23 -0
- package/registry/items/ledger-table.json +22 -0
- package/registry/items/lib-date.json +14 -0
- package/registry/items/lib-highlighter.json +16 -0
- package/registry/items/lib-styles.json +14 -0
- package/registry/items/lib-use-clipboard.json +14 -0
- package/registry/items/lib-utils.json +16 -0
- package/registry/items/lighthouse-score.json +19 -0
- package/registry/items/liquidity-position.json +23 -0
- package/registry/items/live-announcer.json +16 -0
- package/registry/items/location-picker.json +26 -0
- package/registry/items/log-viewer.json +24 -0
- package/registry/items/login-form.json +26 -0
- package/registry/items/map-embed.json +22 -0
- package/registry/items/market-table.json +23 -0
- package/registry/items/mask-input.json +19 -0
- package/registry/items/media-gallery.json +25 -0
- package/registry/items/mention-input.json +21 -0
- package/registry/items/menubar.json +21 -0
- package/registry/items/merge-conflict.json +20 -0
- package/registry/items/message.json +25 -0
- package/registry/items/migration-list.json +23 -0
- package/registry/items/mint-panel.json +23 -0
- package/registry/items/model-comparison.json +24 -0
- package/registry/items/model-select.json +20 -0
- package/registry/items/moderation-queue.json +26 -0
- package/registry/items/money-input.json +19 -0
- package/registry/items/multi-select.json +23 -0
- package/registry/items/multiplier-chart.json +18 -0
- package/registry/items/navigation-menu.json +23 -0
- package/registry/items/network-status.json +23 -0
- package/registry/items/nft-card.json +23 -0
- package/registry/items/notification-inbox.json +25 -0
- package/registry/items/number-input.json +21 -0
- package/registry/items/odds-display.json +21 -0
- package/registry/items/on-call-schedule.json +25 -0
- package/registry/items/order-book.json +19 -0
- package/registry/items/page-header.json +18 -0
- package/registry/items/pagination.json +21 -0
- package/registry/items/password-input.json +21 -0
- package/registry/items/payment-method.json +23 -0
- package/registry/items/payout-status.json +24 -0
- package/registry/items/permission-matrix.json +22 -0
- package/registry/items/pipeline.json +23 -0
- package/registry/items/popover.json +22 -0
- package/registry/items/port-table.json +22 -0
- package/registry/items/portfolio-balance.json +22 -0
- package/registry/items/postback-config.json +26 -0
- package/registry/items/presence.json +20 -0
- package/registry/items/price-ticker.json +21 -0
- package/registry/items/pricing-table.json +24 -0
- package/registry/items/primitive-collapsible.json +16 -0
- package/registry/items/primitive-dialog.json +16 -0
- package/registry/items/primitive-dismissable.json +14 -0
- package/registry/items/primitive-field.json +16 -0
- package/registry/items/primitive-focus-trap.json +14 -0
- package/registry/items/primitive-media-query.json +14 -0
- package/registry/items/primitive-popper.json +14 -0
- package/registry/items/primitive-portal.json +14 -0
- package/registry/items/primitive-radio-group.json +16 -0
- package/registry/items/primitive-router.json +14 -0
- package/registry/items/primitive-slot.json +16 -0
- package/registry/items/primitive-tabs.json +16 -0
- package/registry/items/progress.json +21 -0
- package/registry/items/prompt-input.json +25 -0
- package/registry/items/prompt-template.json +23 -0
- package/registry/items/pull-request-card.json +25 -0
- package/registry/items/query-editor.json +25 -0
- package/registry/items/query-plan.json +23 -0
- package/registry/items/queue-monitor.json +22 -0
- package/registry/items/radio-group.json +22 -0
- package/registry/items/range-slider.json +19 -0
- package/registry/items/rate-limit-meter.json +20 -0
- package/registry/items/rating.json +21 -0
- package/registry/items/reasoning-block.json +23 -0
- package/registry/items/regex-tester.json +25 -0
- package/registry/items/release-list.json +22 -0
- package/registry/items/request-builder.json +28 -0
- package/registry/items/resizable.json +22 -0
- package/registry/items/resource-meter.json +19 -0
- package/registry/items/response-viewer.json +26 -0
- package/registry/items/retrieval-results.json +23 -0
- package/registry/items/revenue-share-table.json +20 -0
- package/registry/items/review-thread.json +25 -0
- package/registry/items/risk-score.json +18 -0
- package/registry/items/root-cause-tree.json +20 -0
- package/registry/items/round-history.json +21 -0
- package/registry/items/runbook-steps.json +24 -0
- package/registry/items/schema-table.json +22 -0
- package/registry/items/schema-viewer.json +22 -0
- package/registry/items/scroll-area.json +18 -0
- package/registry/items/seed-phrase.json +22 -0
- package/registry/items/select.json +24 -0
- package/registry/items/separator.json +18 -0
- package/registry/items/service-status.json +21 -0
- package/registry/items/session-list.json +24 -0
- package/registry/items/sheet.json +24 -0
- package/registry/items/shortcut-sheet.json +19 -0
- package/registry/items/sidebar.json +24 -0
- package/registry/items/skeleton.json +21 -0
- package/registry/items/skip-link.json +19 -0
- package/registry/items/slider.json +21 -0
- package/registry/items/slo-budget.json +19 -0
- package/registry/items/sparkline.json +18 -0
- package/registry/items/spinner.json +20 -0
- package/registry/items/stack-trace.json +23 -0
- package/registry/items/staking-panel.json +24 -0
- package/registry/items/stat.json +21 -0
- package/registry/items/status-checks.json +23 -0
- package/registry/items/stepper.json +22 -0
- package/registry/items/streaming-text.json +19 -0
- package/registry/items/subscription-state.json +22 -0
- package/registry/items/suggestions.json +19 -0
- package/registry/items/swap-panel.json +22 -0
- package/registry/items/switch.json +21 -0
- package/registry/items/symbol-outline.json +22 -0
- package/registry/items/table-of-contents.json +19 -0
- package/registry/items/table.json +19 -0
- package/registry/items/tabs.json +22 -0
- package/registry/items/tag-input.json +21 -0
- package/registry/items/terminal.json +20 -0
- package/registry/items/test-results.json +24 -0
- package/registry/items/textarea.json +21 -0
- package/registry/items/theme-toggle.json +20 -0
- package/registry/items/theme.json +18 -0
- package/registry/items/thread-list.json +24 -0
- package/registry/items/ticket-card.json +24 -0
- package/registry/items/time-picker.json +23 -0
- package/registry/items/timeline.json +19 -0
- package/registry/items/timezone-select.json +18 -0
- package/registry/items/toast.json +22 -0
- package/registry/items/toggle.json +21 -0
- package/registry/items/token-amount.json +18 -0
- package/registry/items/token-approvals.json +25 -0
- package/registry/items/token-select.json +25 -0
- package/registry/items/token-usage.json +20 -0
- package/registry/items/tool-call.json +24 -0
- package/registry/items/toolbar.json +19 -0
- package/registry/items/tooltip.json +19 -0
- package/registry/items/topology-map.json +20 -0
- package/registry/items/tour.json +25 -0
- package/registry/items/traffic-split.json +20 -0
- package/registry/items/transaction-list.json +23 -0
- package/registry/items/transaction-status.json +25 -0
- package/registry/items/tree.json +21 -0
- package/registry/items/two-factor-setup.json +25 -0
- package/registry/items/typing-indicator.json +19 -0
- package/registry/items/typography.json +18 -0
- package/registry/items/upload-list.json +24 -0
- package/registry/items/uptime-strip.json +19 -0
- package/registry/items/user-menu.json +24 -0
- package/registry/items/utm-builder.json +24 -0
- package/registry/items/validator-list.json +23 -0
- package/registry/items/video-player.json +23 -0
- package/registry/items/virtual-list.json +18 -0
- package/registry/items/visually-hidden.json +19 -0
- package/registry/items/wallet-address.json +22 -0
- package/registry/items/wallet-connect.json +25 -0
- package/registry/items/webhook-inspector.json +26 -0
- package/registry/items/websocket-frames.json +24 -0
|
@@ -0,0 +1,3914 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "astralyx-ui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"homepage": "https://ui.astralyx.dev",
|
|
5
|
+
"items": [
|
|
6
|
+
{
|
|
7
|
+
"name": "accordion",
|
|
8
|
+
"type": "registry:ui",
|
|
9
|
+
"title": "Accordion",
|
|
10
|
+
"description": "A stack of collapsible sections. Each header is a real button inside a heading, which is what makes the set navigable by heading in a screen reader.",
|
|
11
|
+
"category": "Navigation",
|
|
12
|
+
"dependencies": [
|
|
13
|
+
"lucide-react@^1.39.0"
|
|
14
|
+
],
|
|
15
|
+
"registryDependencies": [
|
|
16
|
+
"lib-styles",
|
|
17
|
+
"lib-utils",
|
|
18
|
+
"primitive-collapsible"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "address-input",
|
|
23
|
+
"type": "registry:ui",
|
|
24
|
+
"title": "Address Input",
|
|
25
|
+
"description": "A postal address whose shape follows the country. A US form asks for a State and a ZIP; a UK one asks for a County and a Postcode; Japan puts the postal code first. Shipping the US layout everywhere is how forms reject valid addresses.",
|
|
26
|
+
"category": "Geo",
|
|
27
|
+
"dependencies": [],
|
|
28
|
+
"registryDependencies": [
|
|
29
|
+
"combobox",
|
|
30
|
+
"input",
|
|
31
|
+
"label",
|
|
32
|
+
"lib-utils"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "agent-steps",
|
|
37
|
+
"type": "registry:ui",
|
|
38
|
+
"title": "Agent Steps",
|
|
39
|
+
"description": "An agent's plan with each step's state. The whole plan is shown from the start, including steps not yet reached — revealing them one at a time hides how much is left, which is what someone watching most wants to know.",
|
|
40
|
+
"category": "AI",
|
|
41
|
+
"dependencies": [
|
|
42
|
+
"lucide-react@^1.39.0"
|
|
43
|
+
],
|
|
44
|
+
"registryDependencies": [
|
|
45
|
+
"fmt",
|
|
46
|
+
"lib-styles",
|
|
47
|
+
"lib-utils",
|
|
48
|
+
"spinner"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "alert-dialog",
|
|
53
|
+
"type": "registry:ui",
|
|
54
|
+
"title": "Alert Dialog",
|
|
55
|
+
"description": "A modal that interrupts to confirm something consequential. Unlike Dialog it has no backdrop dismissal and no corner close — a destructive confirmation should take a deliberate answer.",
|
|
56
|
+
"category": "Overlays",
|
|
57
|
+
"dependencies": [],
|
|
58
|
+
"registryDependencies": [
|
|
59
|
+
"button",
|
|
60
|
+
"lib-styles",
|
|
61
|
+
"lib-utils",
|
|
62
|
+
"primitive-dialog",
|
|
63
|
+
"primitive-slot"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "alert-triage",
|
|
68
|
+
"type": "registry:ui",
|
|
69
|
+
"title": "Alert Triage",
|
|
70
|
+
"description": "An alert queue grouped by fingerprint. A flapping check fires two hundred times, and an ungrouped list buries every other alert underneath it — which is how real pages get missed.",
|
|
71
|
+
"category": "AIOps",
|
|
72
|
+
"dependencies": [
|
|
73
|
+
"lucide-react@^1.39.0"
|
|
74
|
+
],
|
|
75
|
+
"registryDependencies": [
|
|
76
|
+
"badge",
|
|
77
|
+
"button",
|
|
78
|
+
"checkbox",
|
|
79
|
+
"fmt",
|
|
80
|
+
"lib-styles",
|
|
81
|
+
"lib-utils"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "alert",
|
|
86
|
+
"type": "registry:ui",
|
|
87
|
+
"title": "Alert",
|
|
88
|
+
"description": "A prominent message that stays on the page. Keeps the colour system, and picks its ARIA role from severity — a destructive alert interrupts, the rest wait their turn.",
|
|
89
|
+
"category": "Feedback",
|
|
90
|
+
"dependencies": [
|
|
91
|
+
"class-variance-authority@^0.7.1"
|
|
92
|
+
],
|
|
93
|
+
"registryDependencies": [
|
|
94
|
+
"lib-styles",
|
|
95
|
+
"lib-utils"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "anomaly-chart",
|
|
100
|
+
"type": "registry:ui",
|
|
101
|
+
"title": "Anomaly Chart",
|
|
102
|
+
"description": "A metric against its expected range, with outliers marked. The band is the point — 400ms at 03:00 may be an incident while 400ms at peak is Tuesday.",
|
|
103
|
+
"category": "AIOps",
|
|
104
|
+
"dependencies": [],
|
|
105
|
+
"registryDependencies": [
|
|
106
|
+
"lib-utils"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "api-keys",
|
|
111
|
+
"type": "registry:ui",
|
|
112
|
+
"title": "API Keys",
|
|
113
|
+
"description": "Credentials, listed and revocable. A key is shown in full exactly once — after that only the prefix and last four, because a list that can reveal every key means a session holds every secret.",
|
|
114
|
+
"category": "Auth",
|
|
115
|
+
"dependencies": [
|
|
116
|
+
"lucide-react@^1.39.0"
|
|
117
|
+
],
|
|
118
|
+
"registryDependencies": [
|
|
119
|
+
"badge",
|
|
120
|
+
"button",
|
|
121
|
+
"copy-button",
|
|
122
|
+
"fmt",
|
|
123
|
+
"lib-styles",
|
|
124
|
+
"lib-utils"
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "aspect-ratio",
|
|
129
|
+
"type": "registry:ui",
|
|
130
|
+
"title": "Aspect Ratio",
|
|
131
|
+
"description": "Hold a box at a fixed ratio while its width is fluid. Modern CSS aspect-ratio, so no padding-top hack.",
|
|
132
|
+
"category": "Display",
|
|
133
|
+
"dependencies": [],
|
|
134
|
+
"registryDependencies": [
|
|
135
|
+
"lib-utils"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "attachment-preview",
|
|
140
|
+
"type": "registry:ui",
|
|
141
|
+
"title": "Attachment Preview",
|
|
142
|
+
"description": "A file chip with an icon chosen from the MIME type. Never from the extension: a `.dat` that is really a PDF should show a PDF, and a `.pdf` that is really an executable should not.",
|
|
143
|
+
"category": "Messaging",
|
|
144
|
+
"dependencies": [
|
|
145
|
+
"lucide-react@^1.39.0"
|
|
146
|
+
],
|
|
147
|
+
"registryDependencies": [
|
|
148
|
+
"button",
|
|
149
|
+
"lib-styles",
|
|
150
|
+
"lib-utils",
|
|
151
|
+
"progress"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "audit-log",
|
|
156
|
+
"type": "registry:ui",
|
|
157
|
+
"title": "Audit Log",
|
|
158
|
+
"description": "Who did what to which thing, when. Denied and errored attempts are kept and marked rather than filtered out — a log of successes only tells you nothing about the attack you are looking for.",
|
|
159
|
+
"category": "Admin",
|
|
160
|
+
"dependencies": [
|
|
161
|
+
"lucide-react@^1.39.0"
|
|
162
|
+
],
|
|
163
|
+
"registryDependencies": [
|
|
164
|
+
"avatar",
|
|
165
|
+
"badge",
|
|
166
|
+
"fmt",
|
|
167
|
+
"input",
|
|
168
|
+
"json-viewer",
|
|
169
|
+
"lib-styles",
|
|
170
|
+
"lib-utils"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"name": "avatar",
|
|
175
|
+
"type": "registry:ui",
|
|
176
|
+
"title": "Avatar",
|
|
177
|
+
"description": "An image standing in for a person, with a fallback that always renders. Initials are derived from the name, and a broken image falls through to them.",
|
|
178
|
+
"category": "Display",
|
|
179
|
+
"dependencies": [
|
|
180
|
+
"class-variance-authority@^0.7.1"
|
|
181
|
+
],
|
|
182
|
+
"registryDependencies": [
|
|
183
|
+
"lib-styles",
|
|
184
|
+
"lib-utils"
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "badge",
|
|
189
|
+
"type": "registry:ui",
|
|
190
|
+
"title": "Badge",
|
|
191
|
+
"description": "A short status or category marker. Unlike a field, a badge exists to be noticed, so it keeps the full colour system and the tint escape hatch.",
|
|
192
|
+
"category": "Display",
|
|
193
|
+
"dependencies": [
|
|
194
|
+
"class-variance-authority@^0.7.1"
|
|
195
|
+
],
|
|
196
|
+
"registryDependencies": [
|
|
197
|
+
"lib-styles",
|
|
198
|
+
"lib-utils",
|
|
199
|
+
"primitive-slot"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"name": "banner",
|
|
204
|
+
"type": "registry:ui",
|
|
205
|
+
"title": "Banner",
|
|
206
|
+
"description": "A page-level announcement strip. Distinct from Alert, which belongs to the content around it — a banner spans the page and belongs to the session.",
|
|
207
|
+
"category": "Feedback",
|
|
208
|
+
"dependencies": [
|
|
209
|
+
"lucide-react@^1.39.0"
|
|
210
|
+
],
|
|
211
|
+
"registryDependencies": [
|
|
212
|
+
"button",
|
|
213
|
+
"lib-styles",
|
|
214
|
+
"lib-utils"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"name": "benchmark-table",
|
|
219
|
+
"type": "registry:ui",
|
|
220
|
+
"title": "Benchmark Table",
|
|
221
|
+
"description": "Ranked results with variance. A difference inside the combined error bars is reported as \"within noise\" rather than as a win — printing \"1.03× faster\" from two noisy runs is how performance myths start.",
|
|
222
|
+
"category": "Build & Perf",
|
|
223
|
+
"dependencies": [],
|
|
224
|
+
"registryDependencies": [
|
|
225
|
+
"badge",
|
|
226
|
+
"lib-styles",
|
|
227
|
+
"lib-utils"
|
|
228
|
+
]
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "bet-input",
|
|
232
|
+
"type": "registry:ui",
|
|
233
|
+
"title": "Bet Input",
|
|
234
|
+
"description": "A stake field with quick multipliers and a live return. Stakes are integer minor units and the max is clamped to the balance, so \"all in\" cannot stake money that is not there.",
|
|
235
|
+
"category": "Gaming",
|
|
236
|
+
"dependencies": [
|
|
237
|
+
"lucide-react@^1.39.0"
|
|
238
|
+
],
|
|
239
|
+
"registryDependencies": [
|
|
240
|
+
"button",
|
|
241
|
+
"lib-styles",
|
|
242
|
+
"lib-utils",
|
|
243
|
+
"money-input"
|
|
244
|
+
]
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "blame-view",
|
|
248
|
+
"type": "registry:ui",
|
|
249
|
+
"title": "Blame View",
|
|
250
|
+
"description": "Every line attributed to the commit that last touched it. Consecutive lines from one commit collapse into a single gutter entry — a blame view that repeats itself hides where one commit ends and the next begins.",
|
|
251
|
+
"category": "Development",
|
|
252
|
+
"dependencies": [],
|
|
253
|
+
"registryDependencies": [
|
|
254
|
+
"avatar",
|
|
255
|
+
"fmt",
|
|
256
|
+
"lib-styles",
|
|
257
|
+
"lib-utils",
|
|
258
|
+
"tooltip"
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"name": "branch-select",
|
|
263
|
+
"type": "registry:ui",
|
|
264
|
+
"title": "Branch Select",
|
|
265
|
+
"description": "A branch and tag picker. A Combobox underneath — repositories routinely have hundreds of branches, so search is not optional — with the default branch pinned first and tags labelled.",
|
|
266
|
+
"category": "Development",
|
|
267
|
+
"dependencies": [
|
|
268
|
+
"lucide-react@^1.39.0"
|
|
269
|
+
],
|
|
270
|
+
"registryDependencies": [
|
|
271
|
+
"combobox",
|
|
272
|
+
"lib-styles"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "breadcrumb",
|
|
277
|
+
"type": "registry:ui",
|
|
278
|
+
"title": "Breadcrumb",
|
|
279
|
+
"description": "The trail back up the hierarchy. An ordered list in a labelled nav, with the current page marked aria-current and deliberately not linked.",
|
|
280
|
+
"category": "Navigation",
|
|
281
|
+
"dependencies": [
|
|
282
|
+
"lucide-react@^1.39.0"
|
|
283
|
+
],
|
|
284
|
+
"registryDependencies": [
|
|
285
|
+
"lib-styles",
|
|
286
|
+
"lib-utils",
|
|
287
|
+
"primitive-slot"
|
|
288
|
+
]
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "bridge-status",
|
|
292
|
+
"type": "registry:ui",
|
|
293
|
+
"title": "Bridge Status",
|
|
294
|
+
"description": "A cross-chain transfer as its two legs. Not one progress bar: the legs fail independently and the second cannot begin until the first is final, so a single bar implies a state that does not exist.",
|
|
295
|
+
"category": "Crypto",
|
|
296
|
+
"dependencies": [
|
|
297
|
+
"lucide-react@^1.39.0"
|
|
298
|
+
],
|
|
299
|
+
"registryDependencies": [
|
|
300
|
+
"fmt",
|
|
301
|
+
"lib-styles",
|
|
302
|
+
"lib-utils",
|
|
303
|
+
"progress",
|
|
304
|
+
"spinner"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"name": "build-log",
|
|
309
|
+
"type": "registry:ui",
|
|
310
|
+
"title": "Build Log",
|
|
311
|
+
"description": "Steps with their own output and timing bars. Failed steps open by default and successful ones stay closed — nobody opens a build log to read the steps that worked.",
|
|
312
|
+
"category": "Build & Perf",
|
|
313
|
+
"dependencies": [
|
|
314
|
+
"lucide-react@^1.39.0"
|
|
315
|
+
],
|
|
316
|
+
"registryDependencies": [
|
|
317
|
+
"lib-styles",
|
|
318
|
+
"lib-utils",
|
|
319
|
+
"spinner",
|
|
320
|
+
"terminal"
|
|
321
|
+
]
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"name": "bulk-action-bar",
|
|
325
|
+
"type": "registry:ui",
|
|
326
|
+
"title": "Bulk Action Bar",
|
|
327
|
+
"description": "The bar that appears once rows are selected. It states the count in words next to the destructive button, because \"Delete\" and \"Delete 4,812 records\" deserve different amounts of hesitation.",
|
|
328
|
+
"category": "Admin",
|
|
329
|
+
"dependencies": [
|
|
330
|
+
"lucide-react@^1.39.0"
|
|
331
|
+
],
|
|
332
|
+
"registryDependencies": [
|
|
333
|
+
"lib-styles",
|
|
334
|
+
"lib-utils"
|
|
335
|
+
]
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"name": "bundle-treemap",
|
|
339
|
+
"type": "registry:ui",
|
|
340
|
+
"title": "Bundle Treemap",
|
|
341
|
+
"description": "Bundle size by module, laid out by compressed size. Raw bytes overstate text-heavy modules dramatically — a 400KB locale file that gzips to 12KB dominates a raw treemap and barely matters on the wire.",
|
|
342
|
+
"category": "Build & Perf",
|
|
343
|
+
"dependencies": [],
|
|
344
|
+
"registryDependencies": [
|
|
345
|
+
"fmt",
|
|
346
|
+
"lib-styles",
|
|
347
|
+
"lib-utils"
|
|
348
|
+
]
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"name": "button-group",
|
|
352
|
+
"type": "registry:ui",
|
|
353
|
+
"title": "Button Group",
|
|
354
|
+
"description": "Joins controls into one segmented unit — buttons, inputs, selects, or a mix. Inner corners are squared and adjacent borders overlap, so the row reads as a single control rather than a queue of separate ones.",
|
|
355
|
+
"category": "Forms",
|
|
356
|
+
"dependencies": [
|
|
357
|
+
"class-variance-authority@^0.7.1"
|
|
358
|
+
],
|
|
359
|
+
"registryDependencies": [
|
|
360
|
+
"lib-styles",
|
|
361
|
+
"lib-utils"
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"name": "button",
|
|
366
|
+
"type": "registry:ui",
|
|
367
|
+
"title": "Button",
|
|
368
|
+
"description": "A control for a single action. Six variants across eight colour sets, ten sizes, and `asChild` to render as any element. Destructive is a colour, not a variant.",
|
|
369
|
+
"category": "Forms",
|
|
370
|
+
"dependencies": [
|
|
371
|
+
"class-variance-authority@^0.7.1"
|
|
372
|
+
],
|
|
373
|
+
"registryDependencies": [
|
|
374
|
+
"lib-styles",
|
|
375
|
+
"lib-utils",
|
|
376
|
+
"primitive-slot"
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"name": "cache-stats",
|
|
381
|
+
"type": "registry:ui",
|
|
382
|
+
"title": "Cache Stats",
|
|
383
|
+
"description": "Hit rate with the numbers behind it. 99% on 40 requests a day is noise and 80% on 4 million is a cost centre, so volume sits beside the percentage.",
|
|
384
|
+
"category": "Runtime",
|
|
385
|
+
"dependencies": [],
|
|
386
|
+
"registryDependencies": [
|
|
387
|
+
"fmt",
|
|
388
|
+
"lib-styles",
|
|
389
|
+
"lib-utils",
|
|
390
|
+
"sparkline"
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"name": "calendar",
|
|
395
|
+
"type": "registry:ui",
|
|
396
|
+
"title": "Calendar",
|
|
397
|
+
"description": "A date grid in single or range mode, with presets, times, dropdown captions and multiple months. No date library — the grid, weekday names and times all come from Intl.",
|
|
398
|
+
"category": "Display",
|
|
399
|
+
"dependencies": [
|
|
400
|
+
"lucide-react@^1.39.0"
|
|
401
|
+
],
|
|
402
|
+
"registryDependencies": [
|
|
403
|
+
"button",
|
|
404
|
+
"lib-date",
|
|
405
|
+
"lib-styles",
|
|
406
|
+
"lib-utils",
|
|
407
|
+
"select",
|
|
408
|
+
"separator"
|
|
409
|
+
]
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"name": "campaign-card",
|
|
413
|
+
"type": "registry:ui",
|
|
414
|
+
"title": "Campaign Card",
|
|
415
|
+
"description": "An affiliate offer with its performance. EPC leads, not revenue — £40,000 and £4,000 cannot be ranked without knowing the traffic behind each, and earnings per click is the only comparable figure.",
|
|
416
|
+
"category": "Affiliate",
|
|
417
|
+
"dependencies": [],
|
|
418
|
+
"registryDependencies": [
|
|
419
|
+
"badge",
|
|
420
|
+
"fmt",
|
|
421
|
+
"lib-styles",
|
|
422
|
+
"lib-utils",
|
|
423
|
+
"sparkline"
|
|
424
|
+
]
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"name": "candlestick-chart",
|
|
428
|
+
"type": "registry:ui",
|
|
429
|
+
"title": "Candlestick Chart",
|
|
430
|
+
"description": "OHLC candles with a volume strip. Unlike every other chart here it does not stretch — a stretched candle varies its body width with the container while the wick stays one unit, and the body-versus-wick reading stops working.",
|
|
431
|
+
"category": "Crypto",
|
|
432
|
+
"dependencies": [],
|
|
433
|
+
"registryDependencies": [
|
|
434
|
+
"lib-utils"
|
|
435
|
+
]
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"name": "card-input",
|
|
439
|
+
"type": "registry:ui",
|
|
440
|
+
"title": "Card Input",
|
|
441
|
+
"description": "Card number, expiry and CVC in one control, with brand detection and a Luhn check. Client-side validation catches the typo; it never claims the card is good.",
|
|
442
|
+
"category": "Finance",
|
|
443
|
+
"dependencies": [
|
|
444
|
+
"lucide-react@^1.39.0"
|
|
445
|
+
],
|
|
446
|
+
"registryDependencies": [
|
|
447
|
+
"lib-styles",
|
|
448
|
+
"lib-utils",
|
|
449
|
+
"mask-input"
|
|
450
|
+
]
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"name": "card",
|
|
454
|
+
"type": "registry:ui",
|
|
455
|
+
"title": "Card",
|
|
456
|
+
"description": "A surface that groups related content. Header and footer are optional and draw their own dividers — a Card holding only a CardBody is just a padded box.",
|
|
457
|
+
"category": "Display",
|
|
458
|
+
"dependencies": [
|
|
459
|
+
"class-variance-authority@^0.7.1"
|
|
460
|
+
],
|
|
461
|
+
"registryDependencies": [
|
|
462
|
+
"lib-styles",
|
|
463
|
+
"lib-utils"
|
|
464
|
+
]
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"name": "carousel",
|
|
468
|
+
"type": "registry:ui",
|
|
469
|
+
"title": "Carousel",
|
|
470
|
+
"description": "A horizontally scrolling row of slides, built on CSS scroll-snap rather than a transform track — so touch swiping, momentum and keyboard scrolling all keep working.",
|
|
471
|
+
"category": "Display",
|
|
472
|
+
"dependencies": [
|
|
473
|
+
"lucide-react@^1.39.0"
|
|
474
|
+
],
|
|
475
|
+
"registryDependencies": [
|
|
476
|
+
"button",
|
|
477
|
+
"lib-styles",
|
|
478
|
+
"lib-utils"
|
|
479
|
+
]
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"name": "cart",
|
|
483
|
+
"type": "registry:ui",
|
|
484
|
+
"title": "Cart",
|
|
485
|
+
"description": "A basket with quantities and per-line totals. Stock limits are enforced at the stepper, not on submit — letting someone add a ninth of eight units and saying so at checkout is the worst possible order.",
|
|
486
|
+
"category": "Commerce",
|
|
487
|
+
"dependencies": [
|
|
488
|
+
"lucide-react@^1.39.0"
|
|
489
|
+
],
|
|
490
|
+
"registryDependencies": [
|
|
491
|
+
"button",
|
|
492
|
+
"fmt",
|
|
493
|
+
"lib-styles",
|
|
494
|
+
"lib-utils"
|
|
495
|
+
]
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"name": "chain-select",
|
|
499
|
+
"type": "registry:ui",
|
|
500
|
+
"title": "Chain Select",
|
|
501
|
+
"description": "A network switcher. Testnets are labelled and grouped below mainnets — transacting on the wrong network is the most expensive user error in this space, and an unlabelled list invites it.",
|
|
502
|
+
"category": "Crypto",
|
|
503
|
+
"dependencies": [
|
|
504
|
+
"lucide-react@^1.39.0"
|
|
505
|
+
],
|
|
506
|
+
"registryDependencies": [
|
|
507
|
+
"badge",
|
|
508
|
+
"lib-styles",
|
|
509
|
+
"lib-utils",
|
|
510
|
+
"primitive-dismissable",
|
|
511
|
+
"primitive-popper"
|
|
512
|
+
]
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
"name": "changelog-entry",
|
|
516
|
+
"type": "registry:ui",
|
|
517
|
+
"title": "Changelog Entry",
|
|
518
|
+
"description": "A release grouped by change type, with breaking changes hoisted to the top whatever order they came in. Everything else in a changelog is optional reading; a breaking change is not.",
|
|
519
|
+
"category": "Code Tools",
|
|
520
|
+
"dependencies": [],
|
|
521
|
+
"registryDependencies": [
|
|
522
|
+
"badge",
|
|
523
|
+
"fmt",
|
|
524
|
+
"lib-styles",
|
|
525
|
+
"lib-utils"
|
|
526
|
+
]
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"name": "chart",
|
|
530
|
+
"type": "registry:ui",
|
|
531
|
+
"title": "Chart",
|
|
532
|
+
"description": "A small line, area or bar plot in plain SVG. Not a charting library — everything here is a scale and a path, which is the right trade for six numbers on a dashboard card.",
|
|
533
|
+
"category": "Display",
|
|
534
|
+
"dependencies": [],
|
|
535
|
+
"registryDependencies": [
|
|
536
|
+
"lib-styles",
|
|
537
|
+
"lib-utils"
|
|
538
|
+
]
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"name": "checkbox",
|
|
542
|
+
"type": "registry:ui",
|
|
543
|
+
"title": "Checkbox",
|
|
544
|
+
"description": "A binary choice. A real native checkbox under a styled box, so labels, forms, keyboard and the indeterminate state all work.",
|
|
545
|
+
"category": "Forms",
|
|
546
|
+
"dependencies": [
|
|
547
|
+
"class-variance-authority@^0.7.1",
|
|
548
|
+
"lucide-react@^1.39.0"
|
|
549
|
+
],
|
|
550
|
+
"registryDependencies": [
|
|
551
|
+
"lib-styles",
|
|
552
|
+
"lib-utils"
|
|
553
|
+
]
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"name": "checkout-summary",
|
|
557
|
+
"type": "registry:ui",
|
|
558
|
+
"title": "Checkout Summary",
|
|
559
|
+
"description": "The order total, broken into its lines. A charge that is not yet known renders as \"calculated at next step\" rather than as £0.00 — showing zero for a charge you will apply is a promise you cannot keep.",
|
|
560
|
+
"category": "Commerce",
|
|
561
|
+
"dependencies": [],
|
|
562
|
+
"registryDependencies": [
|
|
563
|
+
"fmt",
|
|
564
|
+
"lib-styles",
|
|
565
|
+
"lib-utils"
|
|
566
|
+
]
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
"name": "citations",
|
|
570
|
+
"type": "registry:ui",
|
|
571
|
+
"title": "Citations",
|
|
572
|
+
"description": "Numbered sources for a generated answer. A marker is a real anchor with an accessible name, because a bare superscript \"3\" is meaningless read aloud — exactly when checking a claim matters most.",
|
|
573
|
+
"category": "AI",
|
|
574
|
+
"dependencies": [
|
|
575
|
+
"lucide-react@^1.39.0"
|
|
576
|
+
],
|
|
577
|
+
"registryDependencies": [
|
|
578
|
+
"hover-card",
|
|
579
|
+
"lib-styles",
|
|
580
|
+
"lib-utils"
|
|
581
|
+
]
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"name": "code-block",
|
|
585
|
+
"type": "registry:ui",
|
|
586
|
+
"title": "Code Block",
|
|
587
|
+
"description": "Syntax-highlighted source with an optional title or file path, copy, inline editing, line numbers and collapsing.",
|
|
588
|
+
"category": "Display",
|
|
589
|
+
"dependencies": [
|
|
590
|
+
"lucide-react@^1.39.0"
|
|
591
|
+
],
|
|
592
|
+
"registryDependencies": [
|
|
593
|
+
"lib-highlighter",
|
|
594
|
+
"lib-styles",
|
|
595
|
+
"lib-use-clipboard",
|
|
596
|
+
"lib-utils"
|
|
597
|
+
]
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
"name": "code-search",
|
|
601
|
+
"type": "registry:ui",
|
|
602
|
+
"title": "Code Search",
|
|
603
|
+
"description": "Search hits grouped by file, with the match marked inside its line. Ranges are clamped on render, because a wrong highlight is worse than none — it looks right.",
|
|
604
|
+
"category": "Development",
|
|
605
|
+
"dependencies": [
|
|
606
|
+
"lucide-react@^1.39.0"
|
|
607
|
+
],
|
|
608
|
+
"registryDependencies": [
|
|
609
|
+
"badge",
|
|
610
|
+
"lib-styles",
|
|
611
|
+
"lib-utils"
|
|
612
|
+
]
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "cohort-table",
|
|
616
|
+
"type": "registry:ui",
|
|
617
|
+
"title": "Cohort Table",
|
|
618
|
+
"description": "Retention by signup period, as a triangle. Cells are shaded by rate rather than by count, so a small cohort that retains well is not washed out by a large one that does not.",
|
|
619
|
+
"category": "Analytics",
|
|
620
|
+
"dependencies": [],
|
|
621
|
+
"registryDependencies": [
|
|
622
|
+
"lib-styles",
|
|
623
|
+
"lib-utils"
|
|
624
|
+
]
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
"name": "collapsible",
|
|
628
|
+
"type": "registry:ui",
|
|
629
|
+
"title": "Collapsible",
|
|
630
|
+
"description": "A single panel that expands and collapses. The open height is measured rather than assumed, because height: auto cannot be transitioned.",
|
|
631
|
+
"category": "Navigation",
|
|
632
|
+
"dependencies": [
|
|
633
|
+
"lucide-react@^1.39.0"
|
|
634
|
+
],
|
|
635
|
+
"registryDependencies": [
|
|
636
|
+
"lib-styles",
|
|
637
|
+
"lib-utils",
|
|
638
|
+
"primitive-collapsible",
|
|
639
|
+
"primitive-slot"
|
|
640
|
+
]
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"name": "color-picker",
|
|
644
|
+
"type": "registry:ui",
|
|
645
|
+
"title": "Color Picker",
|
|
646
|
+
"description": "A palette first, free entry second. Most product colour pickers choose a label or category colour, where an arbitrary hex is a liability — a gradient invites a colour nobody can read text on.",
|
|
647
|
+
"category": "Forms",
|
|
648
|
+
"dependencies": [
|
|
649
|
+
"lucide-react@^1.39.0"
|
|
650
|
+
],
|
|
651
|
+
"registryDependencies": [
|
|
652
|
+
"label-picker",
|
|
653
|
+
"lib-styles",
|
|
654
|
+
"lib-utils",
|
|
655
|
+
"primitive-dismissable",
|
|
656
|
+
"primitive-popper"
|
|
657
|
+
]
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"name": "combobox",
|
|
661
|
+
"type": "registry:ui",
|
|
662
|
+
"title": "Combobox",
|
|
663
|
+
"description": "A Select you can type into. The search box lives inside the panel rather than replacing the trigger, so the chosen value stays visible while you filter.",
|
|
664
|
+
"category": "Forms",
|
|
665
|
+
"dependencies": [
|
|
666
|
+
"lucide-react@^1.39.0"
|
|
667
|
+
],
|
|
668
|
+
"registryDependencies": [
|
|
669
|
+
"lib-styles",
|
|
670
|
+
"lib-utils",
|
|
671
|
+
"primitive-dismissable",
|
|
672
|
+
"primitive-popper"
|
|
673
|
+
]
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"name": "command",
|
|
677
|
+
"type": "registry:ui",
|
|
678
|
+
"title": "Command",
|
|
679
|
+
"description": "A command palette: type to filter, arrows to move, Enter to run. Items are data rather than children, because filtering has to reorder and hide them.",
|
|
680
|
+
"category": "Overlays",
|
|
681
|
+
"dependencies": [
|
|
682
|
+
"lucide-react@^1.39.0"
|
|
683
|
+
],
|
|
684
|
+
"registryDependencies": [
|
|
685
|
+
"kbd",
|
|
686
|
+
"lib-styles",
|
|
687
|
+
"lib-utils",
|
|
688
|
+
"primitive-dialog"
|
|
689
|
+
]
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"name": "commit-graph",
|
|
693
|
+
"type": "registry:ui",
|
|
694
|
+
"title": "Commit Graph",
|
|
695
|
+
"description": "The branch graph beside a commit list. Lanes are held by the commit each one is waiting for, which is what keeps a branch on a single vertical line instead of drifting sideways at every merge.",
|
|
696
|
+
"category": "Development",
|
|
697
|
+
"dependencies": [],
|
|
698
|
+
"registryDependencies": [
|
|
699
|
+
"avatar",
|
|
700
|
+
"fmt",
|
|
701
|
+
"lib-utils"
|
|
702
|
+
]
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
"name": "commit-list",
|
|
706
|
+
"type": "registry:ui",
|
|
707
|
+
"title": "Commit List",
|
|
708
|
+
"description": "A history, grouped by day. The grouping is the point — a flat list of forty commits is unreadable, and \"when\" is the axis people actually scan along.",
|
|
709
|
+
"category": "Development",
|
|
710
|
+
"dependencies": [
|
|
711
|
+
"lucide-react@^1.39.0"
|
|
712
|
+
],
|
|
713
|
+
"registryDependencies": [
|
|
714
|
+
"avatar",
|
|
715
|
+
"badge",
|
|
716
|
+
"button",
|
|
717
|
+
"diff-stat",
|
|
718
|
+
"lib-styles",
|
|
719
|
+
"lib-utils",
|
|
720
|
+
"tooltip"
|
|
721
|
+
]
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
"name": "composer",
|
|
725
|
+
"type": "registry:ui",
|
|
726
|
+
"title": "Composer",
|
|
727
|
+
"description": "A live playground: drive a set of props and watch the generated source follow. Assembled from the kit’s own controls, so anything awkward about Select, Switch or NumberInput surfaces here first.",
|
|
728
|
+
"category": "Utility",
|
|
729
|
+
"dependencies": [
|
|
730
|
+
"lucide-react@^1.39.0"
|
|
731
|
+
],
|
|
732
|
+
"registryDependencies": [
|
|
733
|
+
"button",
|
|
734
|
+
"card",
|
|
735
|
+
"code-block",
|
|
736
|
+
"color-picker",
|
|
737
|
+
"input",
|
|
738
|
+
"label",
|
|
739
|
+
"lib-highlighter",
|
|
740
|
+
"lib-utils",
|
|
741
|
+
"number-input",
|
|
742
|
+
"select",
|
|
743
|
+
"switch"
|
|
744
|
+
]
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
"name": "confidence-meter",
|
|
748
|
+
"type": "registry:ui",
|
|
749
|
+
"title": "Confidence Meter",
|
|
750
|
+
"description": "How sure a model is, in five steps. Segmented on purpose — a smooth bar invites reading 0.834 as different from 0.851, which is not what a calibration score supports.",
|
|
751
|
+
"category": "AI",
|
|
752
|
+
"dependencies": [],
|
|
753
|
+
"registryDependencies": [
|
|
754
|
+
"lib-utils"
|
|
755
|
+
]
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"name": "connection-string",
|
|
759
|
+
"type": "registry:ui",
|
|
760
|
+
"title": "Connection String",
|
|
761
|
+
"description": "A DSN parsed into the parts that matter for its driver. A file-backed database has a path and no host, user or port — pretending every database is Postgres is what makes most of these components useless outside it.",
|
|
762
|
+
"category": "Database",
|
|
763
|
+
"dependencies": [
|
|
764
|
+
"lucide-react@^1.39.0"
|
|
765
|
+
],
|
|
766
|
+
"registryDependencies": [
|
|
767
|
+
"badge",
|
|
768
|
+
"button",
|
|
769
|
+
"copy-button",
|
|
770
|
+
"lib-styles",
|
|
771
|
+
"lib-utils"
|
|
772
|
+
]
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"name": "container-list",
|
|
776
|
+
"type": "registry:ui",
|
|
777
|
+
"title": "Container List",
|
|
778
|
+
"description": "Running containers with state, image tag and resource use. Restart count is shown whenever it is non-zero — a container \"running\" with 47 restarts is crash-looping, and its state says everything is fine.",
|
|
779
|
+
"category": "Runtime",
|
|
780
|
+
"dependencies": [
|
|
781
|
+
"lucide-react@^1.39.0"
|
|
782
|
+
],
|
|
783
|
+
"registryDependencies": [
|
|
784
|
+
"badge",
|
|
785
|
+
"button",
|
|
786
|
+
"fmt",
|
|
787
|
+
"lib-styles",
|
|
788
|
+
"lib-utils"
|
|
789
|
+
]
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
"name": "context-menu",
|
|
793
|
+
"type": "registry:ui",
|
|
794
|
+
"title": "Context Menu",
|
|
795
|
+
"description": "A menu opened by right-click, positioned at the pointer. It has no element to anchor to — the anchor is a point — so it clamps against the viewport rather than flipping.",
|
|
796
|
+
"category": "Overlays",
|
|
797
|
+
"dependencies": [],
|
|
798
|
+
"registryDependencies": [
|
|
799
|
+
"lib-styles",
|
|
800
|
+
"lib-utils",
|
|
801
|
+
"primitive-dismissable"
|
|
802
|
+
]
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
"name": "context-picker",
|
|
806
|
+
"type": "registry:ui",
|
|
807
|
+
"title": "Context Picker",
|
|
808
|
+
"description": "Picks what an assistant can see. A dropdown rather than a dialog, because attaching context happens mid-thought and a modal takes focus off the prompt you were writing.",
|
|
809
|
+
"category": "AI",
|
|
810
|
+
"dependencies": [
|
|
811
|
+
"lucide-react@^1.39.0"
|
|
812
|
+
],
|
|
813
|
+
"registryDependencies": [
|
|
814
|
+
"badge",
|
|
815
|
+
"button",
|
|
816
|
+
"dropdown-menu",
|
|
817
|
+
"input",
|
|
818
|
+
"lib-styles",
|
|
819
|
+
"lib-utils"
|
|
820
|
+
]
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"name": "coordinate-input",
|
|
824
|
+
"type": "registry:ui",
|
|
825
|
+
"title": "Coordinate Input",
|
|
826
|
+
"description": "Latitude and longitude, accepting decimal degrees or DMS. A latitude above 90 is reported as \"is this a longitude?\" rather than \"out of range\" — swapped pairs are the most common coordinate bug there is.",
|
|
827
|
+
"category": "Geo",
|
|
828
|
+
"dependencies": [],
|
|
829
|
+
"registryDependencies": [
|
|
830
|
+
"copy-button",
|
|
831
|
+
"input",
|
|
832
|
+
"label",
|
|
833
|
+
"lib-utils"
|
|
834
|
+
]
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
"name": "copy-button",
|
|
838
|
+
"type": "registry:ui",
|
|
839
|
+
"title": "Copy Button",
|
|
840
|
+
"description": "Copies a string and says so. Extracted after the same clipboard-plus-timer was written four times in this kit — CodeBlock, Terminal, EnvVars and Message all route through it now.",
|
|
841
|
+
"category": "Utility",
|
|
842
|
+
"dependencies": [
|
|
843
|
+
"lucide-react@^1.39.0"
|
|
844
|
+
],
|
|
845
|
+
"registryDependencies": [
|
|
846
|
+
"button",
|
|
847
|
+
"lib-use-clipboard",
|
|
848
|
+
"lib-utils"
|
|
849
|
+
]
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
"name": "cost-breakdown",
|
|
853
|
+
"type": "registry:ui",
|
|
854
|
+
"title": "Cost Breakdown",
|
|
855
|
+
"description": "Spend by model, with token volume beside it. The two routinely disagree — the cheap model handling 90% of calls is often 10% of the bill — and either number alone leads to the wrong optimisation.",
|
|
856
|
+
"category": "AI",
|
|
857
|
+
"dependencies": [],
|
|
858
|
+
"registryDependencies": [
|
|
859
|
+
"fmt",
|
|
860
|
+
"lib-styles",
|
|
861
|
+
"lib-utils"
|
|
862
|
+
]
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"name": "coverage-report",
|
|
866
|
+
"type": "registry:ui",
|
|
867
|
+
"title": "Coverage Report",
|
|
868
|
+
"description": "Coverage per file, ranked by uncovered lines rather than by percentage. A 400-line file at 92% has 32 untested lines; a 12-line file at 60% has 5 — and percentage ranks the small one first.",
|
|
869
|
+
"category": "Build & Perf",
|
|
870
|
+
"dependencies": [
|
|
871
|
+
"lucide-react@^1.39.0"
|
|
872
|
+
],
|
|
873
|
+
"registryDependencies": [
|
|
874
|
+
"badge",
|
|
875
|
+
"lib-styles",
|
|
876
|
+
"lib-utils"
|
|
877
|
+
]
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
"name": "cron-schedule",
|
|
881
|
+
"type": "registry:ui",
|
|
882
|
+
"title": "Cron Schedule",
|
|
883
|
+
"description": "Scheduled jobs: when each next runs and how the last went. An overdue job — next run in the past with nothing running — is called out, since that is the failure a schedule list exists to catch.",
|
|
884
|
+
"category": "Operations",
|
|
885
|
+
"dependencies": [
|
|
886
|
+
"lucide-react@^1.39.0"
|
|
887
|
+
],
|
|
888
|
+
"registryDependencies": [
|
|
889
|
+
"badge",
|
|
890
|
+
"fmt",
|
|
891
|
+
"lib-styles",
|
|
892
|
+
"lib-utils",
|
|
893
|
+
"spinner"
|
|
894
|
+
]
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"name": "curl-command",
|
|
898
|
+
"type": "registry:ui",
|
|
899
|
+
"title": "Curl Command",
|
|
900
|
+
"description": "A request as a runnable curl command, shell-quoted and with secrets masked. This output gets pasted into tickets, and an Authorization header pasted into a ticket is a leaked credential.",
|
|
901
|
+
"category": "API",
|
|
902
|
+
"dependencies": [],
|
|
903
|
+
"registryDependencies": [
|
|
904
|
+
"code-block"
|
|
905
|
+
]
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"name": "data-grid",
|
|
909
|
+
"type": "registry:ui",
|
|
910
|
+
"title": "Data Grid",
|
|
911
|
+
"description": "Sorting and selection over Table, driven by a column definition. The sort is stable and never mutates your array, so re-sorting on an equal column leaves settled rows where they were.",
|
|
912
|
+
"category": "Display",
|
|
913
|
+
"dependencies": [
|
|
914
|
+
"lucide-react@^1.39.0"
|
|
915
|
+
],
|
|
916
|
+
"registryDependencies": [
|
|
917
|
+
"checkbox",
|
|
918
|
+
"empty",
|
|
919
|
+
"lib-styles",
|
|
920
|
+
"lib-utils",
|
|
921
|
+
"table"
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
"name": "date-picker",
|
|
926
|
+
"type": "registry:ui",
|
|
927
|
+
"title": "Date Picker",
|
|
928
|
+
"description": "Calendar in a Popover with a trigger that reads like an Input. Every Calendar capability passes through — range, presets, times, multiple months — so there is one date implementation, not two.",
|
|
929
|
+
"category": "Forms",
|
|
930
|
+
"dependencies": [
|
|
931
|
+
"lucide-react@^1.39.0"
|
|
932
|
+
],
|
|
933
|
+
"registryDependencies": [
|
|
934
|
+
"calendar",
|
|
935
|
+
"lib-date",
|
|
936
|
+
"lib-styles",
|
|
937
|
+
"lib-utils",
|
|
938
|
+
"popover"
|
|
939
|
+
]
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"name": "date-range-compare",
|
|
943
|
+
"type": "registry:ui",
|
|
944
|
+
"title": "Date Range Compare",
|
|
945
|
+
"description": "A metric against the same metric last period, with the basis named. \"+18%\" is meaningless until you know against what — and against a partial period it is meaningless full stop.",
|
|
946
|
+
"category": "Analytics",
|
|
947
|
+
"dependencies": [
|
|
948
|
+
"lucide-react@^1.39.0"
|
|
949
|
+
],
|
|
950
|
+
"registryDependencies": [
|
|
951
|
+
"fmt",
|
|
952
|
+
"lib-styles",
|
|
953
|
+
"lib-utils",
|
|
954
|
+
"select",
|
|
955
|
+
"sparkline"
|
|
956
|
+
]
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
"name": "dependency-list",
|
|
960
|
+
"type": "registry:ui",
|
|
961
|
+
"title": "Dependency List",
|
|
962
|
+
"description": "Packages with their update and vulnerability state. Severity outranks staleness in the sort, because ordering by how out of date things are buries a critical advisory behind forty patch bumps.",
|
|
963
|
+
"category": "Development",
|
|
964
|
+
"dependencies": [
|
|
965
|
+
"lucide-react@^1.39.0"
|
|
966
|
+
],
|
|
967
|
+
"registryDependencies": [
|
|
968
|
+
"badge",
|
|
969
|
+
"input",
|
|
970
|
+
"lib-styles",
|
|
971
|
+
"lib-utils"
|
|
972
|
+
]
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"name": "deploy-list",
|
|
976
|
+
"type": "registry:ui",
|
|
977
|
+
"title": "Deploy List",
|
|
978
|
+
"description": "Deployments, newest first. A running deploy shows an indeterminate bar rather than a fabricated percentage — a number nobody can compute is worse than admitting you cannot.",
|
|
979
|
+
"category": "Development",
|
|
980
|
+
"dependencies": [
|
|
981
|
+
"lucide-react@^1.39.0"
|
|
982
|
+
],
|
|
983
|
+
"registryDependencies": [
|
|
984
|
+
"avatar",
|
|
985
|
+
"badge",
|
|
986
|
+
"button",
|
|
987
|
+
"lib-styles",
|
|
988
|
+
"lib-utils",
|
|
989
|
+
"progress",
|
|
990
|
+
"spinner",
|
|
991
|
+
"tooltip"
|
|
992
|
+
]
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"name": "description-list",
|
|
996
|
+
"type": "registry:ui",
|
|
997
|
+
"title": "Description List",
|
|
998
|
+
"description": "Key/value metadata as a real <dl>, so a screen reader announces each term with its value. Columns on wide screens, stacked on narrow ones.",
|
|
999
|
+
"category": "Display",
|
|
1000
|
+
"dependencies": [],
|
|
1001
|
+
"registryDependencies": [
|
|
1002
|
+
"lib-utils"
|
|
1003
|
+
]
|
|
1004
|
+
},
|
|
1005
|
+
{
|
|
1006
|
+
"name": "device-list",
|
|
1007
|
+
"type": "registry:ui",
|
|
1008
|
+
"title": "Device List",
|
|
1009
|
+
"description": "Devices trusted to skip the second factor, and when that trust lapses. A grant that expires in three days is worth seeing before you are asked for a code at an airport.",
|
|
1010
|
+
"category": "Auth",
|
|
1011
|
+
"dependencies": [
|
|
1012
|
+
"lucide-react@^1.39.0"
|
|
1013
|
+
],
|
|
1014
|
+
"registryDependencies": [
|
|
1015
|
+
"badge",
|
|
1016
|
+
"button",
|
|
1017
|
+
"fmt",
|
|
1018
|
+
"lib-styles",
|
|
1019
|
+
"lib-utils"
|
|
1020
|
+
]
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
"name": "dialog",
|
|
1024
|
+
"type": "registry:ui",
|
|
1025
|
+
"title": "Dialog",
|
|
1026
|
+
"description": "A modal window, built on the native <dialog> element — so the focus trap, background inerting, Escape handling and top-layer stacking come from the platform rather than from JavaScript.",
|
|
1027
|
+
"category": "Overlays",
|
|
1028
|
+
"dependencies": [
|
|
1029
|
+
"lucide-react@^1.39.0"
|
|
1030
|
+
],
|
|
1031
|
+
"registryDependencies": [
|
|
1032
|
+
"button",
|
|
1033
|
+
"lib-styles",
|
|
1034
|
+
"lib-utils",
|
|
1035
|
+
"primitive-dialog",
|
|
1036
|
+
"primitive-slot"
|
|
1037
|
+
]
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
"name": "diff-proposal",
|
|
1041
|
+
"type": "registry:ui",
|
|
1042
|
+
"title": "Diff Proposal",
|
|
1043
|
+
"description": "A model-proposed edit with accept and reject. The decision is reported, never applied — and once made, the actions are replaced by the outcome so a stale card cannot be clicked twice.",
|
|
1044
|
+
"category": "AI",
|
|
1045
|
+
"dependencies": [
|
|
1046
|
+
"lucide-react@^1.39.0"
|
|
1047
|
+
],
|
|
1048
|
+
"registryDependencies": [
|
|
1049
|
+
"button",
|
|
1050
|
+
"diff-view",
|
|
1051
|
+
"lib-styles",
|
|
1052
|
+
"lib-utils"
|
|
1053
|
+
]
|
|
1054
|
+
},
|
|
1055
|
+
{
|
|
1056
|
+
"name": "diff-stat",
|
|
1057
|
+
"type": "registry:ui",
|
|
1058
|
+
"title": "Diff Stat",
|
|
1059
|
+
"description": "Added and removed line counts with the five-square bar. The squares are proportional but never empty — one line changed in a thousand still lights one square.",
|
|
1060
|
+
"category": "Development",
|
|
1061
|
+
"dependencies": [],
|
|
1062
|
+
"registryDependencies": [
|
|
1063
|
+
"lib-utils"
|
|
1064
|
+
]
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"name": "diff-view",
|
|
1068
|
+
"type": "registry:ui",
|
|
1069
|
+
"title": "Diff View",
|
|
1070
|
+
"description": "A unified or side-by-side diff. Takes parsed hunks rather than a patch string, with parseUnifiedDiff exported alongside for when you only have the text.",
|
|
1071
|
+
"category": "Development",
|
|
1072
|
+
"dependencies": [
|
|
1073
|
+
"lucide-react@^1.39.0"
|
|
1074
|
+
],
|
|
1075
|
+
"registryDependencies": [
|
|
1076
|
+
"badge",
|
|
1077
|
+
"diff-stat",
|
|
1078
|
+
"lib-styles",
|
|
1079
|
+
"lib-utils"
|
|
1080
|
+
]
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"name": "donut",
|
|
1084
|
+
"type": "registry:ui",
|
|
1085
|
+
"title": "Donut",
|
|
1086
|
+
"description": "Parts against a whole. Arcs are stroke-dasharray on a circle rather than wedge paths — one number per slice, and no arc-flag branch at the halfway point.",
|
|
1087
|
+
"category": "Display",
|
|
1088
|
+
"dependencies": [],
|
|
1089
|
+
"registryDependencies": [
|
|
1090
|
+
"lib-styles",
|
|
1091
|
+
"lib-utils"
|
|
1092
|
+
]
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"name": "drawer",
|
|
1096
|
+
"type": "registry:ui",
|
|
1097
|
+
"title": "Drawer",
|
|
1098
|
+
"description": "A bottom sheet you can drag away. Built on a native dialog, so focus containment and inerting the page come from the platform rather than a hand-rolled trap.",
|
|
1099
|
+
"category": "Overlays",
|
|
1100
|
+
"dependencies": [],
|
|
1101
|
+
"registryDependencies": [
|
|
1102
|
+
"lib-styles",
|
|
1103
|
+
"lib-utils"
|
|
1104
|
+
]
|
|
1105
|
+
},
|
|
1106
|
+
{
|
|
1107
|
+
"name": "dropdown-menu",
|
|
1108
|
+
"type": "registry:ui",
|
|
1109
|
+
"title": "Dropdown Menu",
|
|
1110
|
+
"description": "A menu of actions hung off a trigger. Unlike Select this is a list of commands, not a value — items are buttons, the menu closes on activation, and focus returns to the trigger.",
|
|
1111
|
+
"category": "Overlays",
|
|
1112
|
+
"dependencies": [
|
|
1113
|
+
"lucide-react@^1.39.0"
|
|
1114
|
+
],
|
|
1115
|
+
"registryDependencies": [
|
|
1116
|
+
"lib-styles",
|
|
1117
|
+
"lib-utils",
|
|
1118
|
+
"primitive-dismissable",
|
|
1119
|
+
"primitive-popper",
|
|
1120
|
+
"primitive-slot"
|
|
1121
|
+
]
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
"name": "dropzone",
|
|
1125
|
+
"type": "registry:ui",
|
|
1126
|
+
"title": "Dropzone",
|
|
1127
|
+
"description": "A drop target that is also a button, so the file picker stays reachable from the keyboard. Drag highlighting counts enter and leave rather than tracking a flag, which is what stops it flickering over child elements.",
|
|
1128
|
+
"category": "Forms",
|
|
1129
|
+
"dependencies": [
|
|
1130
|
+
"lucide-react@^1.39.0"
|
|
1131
|
+
],
|
|
1132
|
+
"registryDependencies": [
|
|
1133
|
+
"button",
|
|
1134
|
+
"lib-styles",
|
|
1135
|
+
"lib-utils"
|
|
1136
|
+
]
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
"name": "empty",
|
|
1140
|
+
"type": "registry:ui",
|
|
1141
|
+
"title": "Empty",
|
|
1142
|
+
"description": "The state a list is in before it has anything in it. An icon, a reason and a next action are what make the empty case useful rather than merely honest.",
|
|
1143
|
+
"category": "Display",
|
|
1144
|
+
"dependencies": [],
|
|
1145
|
+
"registryDependencies": [
|
|
1146
|
+
"lib-styles",
|
|
1147
|
+
"lib-utils"
|
|
1148
|
+
]
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
"name": "endpoint-list",
|
|
1152
|
+
"type": "registry:ui",
|
|
1153
|
+
"title": "Endpoint List",
|
|
1154
|
+
"description": "API routes, grouped and filterable. The method badge is fixed-width because a route table is scanned down the method column, and a ragged left edge makes that scan impossible.",
|
|
1155
|
+
"category": "API",
|
|
1156
|
+
"dependencies": [
|
|
1157
|
+
"lucide-react@^1.39.0"
|
|
1158
|
+
],
|
|
1159
|
+
"registryDependencies": [
|
|
1160
|
+
"badge",
|
|
1161
|
+
"http-status",
|
|
1162
|
+
"input",
|
|
1163
|
+
"lib-styles",
|
|
1164
|
+
"lib-utils"
|
|
1165
|
+
]
|
|
1166
|
+
},
|
|
1167
|
+
{
|
|
1168
|
+
"name": "env-diff",
|
|
1169
|
+
"type": "registry:ui",
|
|
1170
|
+
"title": "Env Diff",
|
|
1171
|
+
"description": "Two environments side by side, values masked by default. A variable missing from one side is drawn differently from one whose value merely differs — \"not set\" and \"set to something else\" have different causes.",
|
|
1172
|
+
"category": "Runtime",
|
|
1173
|
+
"dependencies": [
|
|
1174
|
+
"lucide-react@^1.39.0"
|
|
1175
|
+
],
|
|
1176
|
+
"registryDependencies": [
|
|
1177
|
+
"badge",
|
|
1178
|
+
"button",
|
|
1179
|
+
"lib-styles",
|
|
1180
|
+
"lib-utils"
|
|
1181
|
+
]
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"name": "env-vars",
|
|
1185
|
+
"type": "registry:ui",
|
|
1186
|
+
"title": "Env Vars",
|
|
1187
|
+
"description": "Environment variables with secrets masked until asked for. Reveal is per-row and never sticky — nothing survives a remount, so a shared screen cannot leak what someone expanded an hour ago.",
|
|
1188
|
+
"category": "Operations",
|
|
1189
|
+
"dependencies": [
|
|
1190
|
+
"lucide-react@^1.39.0"
|
|
1191
|
+
],
|
|
1192
|
+
"registryDependencies": [
|
|
1193
|
+
"badge",
|
|
1194
|
+
"button",
|
|
1195
|
+
"copy-button",
|
|
1196
|
+
"lib-styles",
|
|
1197
|
+
"lib-utils"
|
|
1198
|
+
]
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
"name": "error-boundary",
|
|
1202
|
+
"type": "registry:ui",
|
|
1203
|
+
"title": "Error Boundary",
|
|
1204
|
+
"description": "Catches a render error in its subtree and shows a fallback. The one component here that must be a class — getDerivedStateFromError has no hook equivalent.",
|
|
1205
|
+
"category": "Utility",
|
|
1206
|
+
"dependencies": [
|
|
1207
|
+
"lucide-react@^1.39.0"
|
|
1208
|
+
],
|
|
1209
|
+
"registryDependencies": [
|
|
1210
|
+
"button",
|
|
1211
|
+
"lib-styles",
|
|
1212
|
+
"lib-utils"
|
|
1213
|
+
]
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"name": "eval-results",
|
|
1217
|
+
"type": "registry:ui",
|
|
1218
|
+
"title": "Eval Results",
|
|
1219
|
+
"description": "A model-versus-benchmark score matrix. The best result is marked per benchmark rather than overall — a model can lead on reasoning and trail on latency, and one winner badge hides that.",
|
|
1220
|
+
"category": "AI",
|
|
1221
|
+
"dependencies": [
|
|
1222
|
+
"lucide-react@^1.39.0"
|
|
1223
|
+
],
|
|
1224
|
+
"registryDependencies": [
|
|
1225
|
+
"lib-styles",
|
|
1226
|
+
"lib-utils"
|
|
1227
|
+
]
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
"name": "feature-flag",
|
|
1231
|
+
"type": "registry:ui",
|
|
1232
|
+
"title": "Feature Flag",
|
|
1233
|
+
"description": "A flag with its rollout percentage and targeting rules. The kill switch is a separate control from the rollout — during an incident, turning it off must be one action, not a slider drag.",
|
|
1234
|
+
"category": "Operations",
|
|
1235
|
+
"dependencies": [
|
|
1236
|
+
"lucide-react@^1.39.0"
|
|
1237
|
+
],
|
|
1238
|
+
"registryDependencies": [
|
|
1239
|
+
"badge",
|
|
1240
|
+
"lib-styles",
|
|
1241
|
+
"lib-utils",
|
|
1242
|
+
"switch"
|
|
1243
|
+
]
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
"name": "feedback",
|
|
1247
|
+
"type": "registry:ui",
|
|
1248
|
+
"title": "Feedback",
|
|
1249
|
+
"description": "Thumbs up or down, with an optional reason. The rating sends on click and the comment is a separate follow-up — holding the rating hostage to a comment box is how feedback widgets collect nothing.",
|
|
1250
|
+
"category": "AI",
|
|
1251
|
+
"dependencies": [
|
|
1252
|
+
"lucide-react@^1.39.0"
|
|
1253
|
+
],
|
|
1254
|
+
"registryDependencies": [
|
|
1255
|
+
"button",
|
|
1256
|
+
"lib-styles",
|
|
1257
|
+
"lib-utils",
|
|
1258
|
+
"textarea"
|
|
1259
|
+
]
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
"name": "field",
|
|
1263
|
+
"type": "registry:ui",
|
|
1264
|
+
"title": "Field",
|
|
1265
|
+
"description": "Wires a label, a control, help text and an error message together — id, aria-describedby and aria-invalid, all of which are easy to get one short of by hand.",
|
|
1266
|
+
"category": "Forms",
|
|
1267
|
+
"dependencies": [],
|
|
1268
|
+
"registryDependencies": [
|
|
1269
|
+
"label",
|
|
1270
|
+
"lib-utils"
|
|
1271
|
+
]
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
"name": "file-tree",
|
|
1275
|
+
"type": "registry:ui",
|
|
1276
|
+
"title": "File Tree",
|
|
1277
|
+
"description": "Files and directories as a tree. Uses the ARIA tree pattern with roving focus — arrow keys move between rows, so a repository with 200 files does not cost 200 tab stops.",
|
|
1278
|
+
"category": "Development",
|
|
1279
|
+
"dependencies": [
|
|
1280
|
+
"lucide-react@^1.39.0"
|
|
1281
|
+
],
|
|
1282
|
+
"registryDependencies": [
|
|
1283
|
+
"lib-styles",
|
|
1284
|
+
"lib-utils"
|
|
1285
|
+
]
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
"name": "fingerprint-diff",
|
|
1289
|
+
"type": "registry:ui",
|
|
1290
|
+
"title": "Fingerprint Diff",
|
|
1291
|
+
"description": "Two device fingerprints, with only the differing attributes shown. The question is never what a device looks like — it is what changed between two sessions, and twenty-eight matching rows hide the two that matter.",
|
|
1292
|
+
"category": "Security",
|
|
1293
|
+
"dependencies": [
|
|
1294
|
+
"lucide-react@^1.39.0"
|
|
1295
|
+
],
|
|
1296
|
+
"registryDependencies": [
|
|
1297
|
+
"badge",
|
|
1298
|
+
"button",
|
|
1299
|
+
"lib-styles",
|
|
1300
|
+
"lib-utils"
|
|
1301
|
+
]
|
|
1302
|
+
},
|
|
1303
|
+
{
|
|
1304
|
+
"name": "flame-graph",
|
|
1305
|
+
"type": "registry:ui",
|
|
1306
|
+
"title": "Flame Graph",
|
|
1307
|
+
"description": "Width is time, depth is stack. Frames stay in call order rather than being sorted by cost — reordering them destroys the shape a flame graph exists to show.",
|
|
1308
|
+
"category": "Build & Perf",
|
|
1309
|
+
"dependencies": [],
|
|
1310
|
+
"registryDependencies": [
|
|
1311
|
+
"lib-styles",
|
|
1312
|
+
"lib-utils"
|
|
1313
|
+
]
|
|
1314
|
+
},
|
|
1315
|
+
{
|
|
1316
|
+
"name": "fmt",
|
|
1317
|
+
"type": "registry:ui",
|
|
1318
|
+
"title": "Fmt",
|
|
1319
|
+
"description": "One component for every formatted value — dates, numbers, currency, bytes, durations, relative times — so the locale is a single decision rather than three developers reaching for toLocaleString, toFixed and padStart on one screen.",
|
|
1320
|
+
"category": "Display",
|
|
1321
|
+
"dependencies": [],
|
|
1322
|
+
"registryDependencies": []
|
|
1323
|
+
},
|
|
1324
|
+
{
|
|
1325
|
+
"name": "form",
|
|
1326
|
+
"type": "registry:ui",
|
|
1327
|
+
"title": "Form",
|
|
1328
|
+
"description": "A thin bridge between React Hook Form and Field. Field owns the accessibility wiring and knows nothing about any form library; this adds only state and validation.",
|
|
1329
|
+
"category": "Forms",
|
|
1330
|
+
"dependencies": [
|
|
1331
|
+
"react-hook-form@^7.87.0"
|
|
1332
|
+
],
|
|
1333
|
+
"registryDependencies": [
|
|
1334
|
+
"field",
|
|
1335
|
+
"lib-utils"
|
|
1336
|
+
]
|
|
1337
|
+
},
|
|
1338
|
+
{
|
|
1339
|
+
"name": "fraud-verdict",
|
|
1340
|
+
"type": "registry:ui",
|
|
1341
|
+
"title": "Fraud Verdict",
|
|
1342
|
+
"description": "The decision at the end of a review: what was decided, on what basis, by whom. A settled verdict offers to reopen rather than accept a second one, because two conflicting verdicts on one case is the failure this shape prevents.",
|
|
1343
|
+
"category": "Security",
|
|
1344
|
+
"dependencies": [
|
|
1345
|
+
"lucide-react@^1.39.0"
|
|
1346
|
+
],
|
|
1347
|
+
"registryDependencies": [
|
|
1348
|
+
"badge",
|
|
1349
|
+
"button",
|
|
1350
|
+
"fmt",
|
|
1351
|
+
"lib-styles",
|
|
1352
|
+
"lib-utils"
|
|
1353
|
+
]
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
"name": "funnel",
|
|
1357
|
+
"type": "registry:ui",
|
|
1358
|
+
"title": "Funnel",
|
|
1359
|
+
"description": "Conversion through ordered stages, with both the overall rate and the step rate. A funnel showing only the overall rate hides which single step is losing people.",
|
|
1360
|
+
"category": "Display",
|
|
1361
|
+
"dependencies": [],
|
|
1362
|
+
"registryDependencies": [
|
|
1363
|
+
"lib-utils"
|
|
1364
|
+
]
|
|
1365
|
+
},
|
|
1366
|
+
{
|
|
1367
|
+
"name": "gas-tracker",
|
|
1368
|
+
"type": "registry:ui",
|
|
1369
|
+
"title": "Gas Tracker",
|
|
1370
|
+
"description": "Gas tiers with what each actually costs. Gwei alone is not a decision — the same gas price costs four times more for a swap than a transfer, which is why gasLimit is a prop.",
|
|
1371
|
+
"category": "Crypto",
|
|
1372
|
+
"dependencies": [
|
|
1373
|
+
"lucide-react@^1.39.0"
|
|
1374
|
+
],
|
|
1375
|
+
"registryDependencies": [
|
|
1376
|
+
"lib-styles",
|
|
1377
|
+
"lib-utils"
|
|
1378
|
+
]
|
|
1379
|
+
},
|
|
1380
|
+
{
|
|
1381
|
+
"name": "gauge",
|
|
1382
|
+
"type": "registry:ui",
|
|
1383
|
+
"title": "Gauge",
|
|
1384
|
+
"description": "A radial meter — the circular counterpart to Progress. Drawn with stroke-dasharray rather than an arc path, so the sweep is one number and there is no arc-flag maths to get wrong.",
|
|
1385
|
+
"category": "Display",
|
|
1386
|
+
"dependencies": [],
|
|
1387
|
+
"registryDependencies": [
|
|
1388
|
+
"lib-utils"
|
|
1389
|
+
]
|
|
1390
|
+
},
|
|
1391
|
+
{
|
|
1392
|
+
"name": "governance-proposal",
|
|
1393
|
+
"type": "registry:ui",
|
|
1394
|
+
"title": "Governance Proposal",
|
|
1395
|
+
"description": "A proposal with its tally. Quorum is tracked separately from the majority because they are separate tests — a 92% \"for\" reads as passing right up until it fails for turnout.",
|
|
1396
|
+
"category": "Crypto",
|
|
1397
|
+
"dependencies": [
|
|
1398
|
+
"lucide-react@^1.39.0"
|
|
1399
|
+
],
|
|
1400
|
+
"registryDependencies": [
|
|
1401
|
+
"badge",
|
|
1402
|
+
"button",
|
|
1403
|
+
"fmt",
|
|
1404
|
+
"lib-styles",
|
|
1405
|
+
"lib-utils"
|
|
1406
|
+
]
|
|
1407
|
+
},
|
|
1408
|
+
{
|
|
1409
|
+
"name": "group",
|
|
1410
|
+
"type": "registry:ui",
|
|
1411
|
+
"title": "Group",
|
|
1412
|
+
"description": "A recessed container that holds a set of cards. Padding and gap are the same value, and the corner radius is concentric with the cards inside it.",
|
|
1413
|
+
"category": "Display",
|
|
1414
|
+
"dependencies": [
|
|
1415
|
+
"class-variance-authority@^0.7.1"
|
|
1416
|
+
],
|
|
1417
|
+
"registryDependencies": [
|
|
1418
|
+
"lib-styles",
|
|
1419
|
+
"lib-utils"
|
|
1420
|
+
]
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
"name": "health-checks",
|
|
1424
|
+
"type": "registry:ui",
|
|
1425
|
+
"title": "Health Checks",
|
|
1426
|
+
"description": "Endpoint probes with status, latency and history. A 200 that takes four seconds reads as degraded — a probe list that only reports the status code is why slow outages get noticed by customers first.",
|
|
1427
|
+
"category": "Operations",
|
|
1428
|
+
"dependencies": [
|
|
1429
|
+
"lucide-react@^1.39.0"
|
|
1430
|
+
],
|
|
1431
|
+
"registryDependencies": [
|
|
1432
|
+
"badge",
|
|
1433
|
+
"lib-styles",
|
|
1434
|
+
"lib-utils",
|
|
1435
|
+
"sparkline"
|
|
1436
|
+
]
|
|
1437
|
+
},
|
|
1438
|
+
{
|
|
1439
|
+
"name": "heatmap-grid",
|
|
1440
|
+
"type": "registry:ui",
|
|
1441
|
+
"title": "Heatmap Grid",
|
|
1442
|
+
"description": "A calendar heatmap — weeks as columns, weekdays as rows. UptimeStrip is the one-dimensional case; this is the grid.",
|
|
1443
|
+
"category": "Display",
|
|
1444
|
+
"dependencies": [],
|
|
1445
|
+
"registryDependencies": [
|
|
1446
|
+
"lib-utils",
|
|
1447
|
+
"tooltip"
|
|
1448
|
+
]
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
"name": "hover-card",
|
|
1452
|
+
"type": "registry:ui",
|
|
1453
|
+
"title": "Hover Card",
|
|
1454
|
+
"description": "A preview card shown on hover — richer than a tooltip, and pointer-only. There is a close delay as well as an open delay, so the pointer can travel into the card without it vanishing.",
|
|
1455
|
+
"category": "Overlays",
|
|
1456
|
+
"dependencies": [],
|
|
1457
|
+
"registryDependencies": [
|
|
1458
|
+
"lib-styles",
|
|
1459
|
+
"lib-utils",
|
|
1460
|
+
"primitive-popper"
|
|
1461
|
+
]
|
|
1462
|
+
},
|
|
1463
|
+
{
|
|
1464
|
+
"name": "http-status",
|
|
1465
|
+
"type": "registry:ui",
|
|
1466
|
+
"title": "HTTP Status",
|
|
1467
|
+
"description": "A status code with its reason phrase. Colour follows the class, never the individual code — grading a 503 as worse than a 500 invents a severity ordering that does not exist.",
|
|
1468
|
+
"category": "API",
|
|
1469
|
+
"dependencies": [],
|
|
1470
|
+
"registryDependencies": [
|
|
1471
|
+
"badge",
|
|
1472
|
+
"lib-utils"
|
|
1473
|
+
]
|
|
1474
|
+
},
|
|
1475
|
+
{
|
|
1476
|
+
"name": "incident-card",
|
|
1477
|
+
"type": "registry:ui",
|
|
1478
|
+
"title": "Incident Card",
|
|
1479
|
+
"description": "An incident: severity, state, owner, age. Severity is a left edge rather than a tinted surface, because a list of ten red cards is unreadable and the stripe scales to a queue.",
|
|
1480
|
+
"category": "Operations",
|
|
1481
|
+
"dependencies": [
|
|
1482
|
+
"lucide-react@^1.39.0"
|
|
1483
|
+
],
|
|
1484
|
+
"registryDependencies": [
|
|
1485
|
+
"avatar",
|
|
1486
|
+
"badge",
|
|
1487
|
+
"fmt",
|
|
1488
|
+
"lib-styles",
|
|
1489
|
+
"lib-utils"
|
|
1490
|
+
]
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"name": "input-file",
|
|
1494
|
+
"type": "registry:ui",
|
|
1495
|
+
"title": "Input File",
|
|
1496
|
+
"description": "A file picker shaped like an Input, for a form row. The native control is replaced rather than restyled — its button text is not settable and its layout is unreachable, so matching the field metrics means driving a hidden input.",
|
|
1497
|
+
"category": "Forms",
|
|
1498
|
+
"dependencies": [
|
|
1499
|
+
"lucide-react@^1.39.0"
|
|
1500
|
+
],
|
|
1501
|
+
"registryDependencies": [
|
|
1502
|
+
"button",
|
|
1503
|
+
"lib-styles",
|
|
1504
|
+
"lib-utils"
|
|
1505
|
+
]
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"name": "input-otp",
|
|
1509
|
+
"type": "registry:ui",
|
|
1510
|
+
"title": "Input OTP",
|
|
1511
|
+
"description": "A fixed-length code entry, one box per character. Every box is a real input so autofill can target it, and paste is distributed across all of them.",
|
|
1512
|
+
"category": "Forms",
|
|
1513
|
+
"dependencies": [],
|
|
1514
|
+
"registryDependencies": [
|
|
1515
|
+
"lib-styles",
|
|
1516
|
+
"lib-utils"
|
|
1517
|
+
]
|
|
1518
|
+
},
|
|
1519
|
+
{
|
|
1520
|
+
"name": "input",
|
|
1521
|
+
"type": "registry:ui",
|
|
1522
|
+
"title": "Input",
|
|
1523
|
+
"description": "A single-line text field, built on the headless Field primitive. Monochrome by design — it shares the Button size steps but none of its colour sets.",
|
|
1524
|
+
"category": "Forms",
|
|
1525
|
+
"dependencies": [
|
|
1526
|
+
"class-variance-authority@^0.7.1",
|
|
1527
|
+
"lucide-react@^1.39.0"
|
|
1528
|
+
],
|
|
1529
|
+
"registryDependencies": [
|
|
1530
|
+
"lib-styles",
|
|
1531
|
+
"lib-utils",
|
|
1532
|
+
"primitive-field"
|
|
1533
|
+
]
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"name": "invoice-list",
|
|
1537
|
+
"type": "registry:ui",
|
|
1538
|
+
"title": "Invoice List",
|
|
1539
|
+
"description": "Billing history. Amounts are right-aligned and tabular, which is the whole reason this is not a generic list — a money column that does not line up cannot be scanned.",
|
|
1540
|
+
"category": "Finance",
|
|
1541
|
+
"dependencies": [
|
|
1542
|
+
"lucide-react@^1.39.0"
|
|
1543
|
+
],
|
|
1544
|
+
"registryDependencies": [
|
|
1545
|
+
"badge",
|
|
1546
|
+
"button",
|
|
1547
|
+
"fmt",
|
|
1548
|
+
"lib-styles",
|
|
1549
|
+
"lib-utils"
|
|
1550
|
+
]
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
"name": "ip-cluster",
|
|
1554
|
+
"type": "registry:ui",
|
|
1555
|
+
"title": "IP Cluster",
|
|
1556
|
+
"description": "Accounts grouped by a shared address or device. The shape is the finding: one node fanning out to eight accounts is multi-accounting, eight accounts each on their own address is a shared ISP.",
|
|
1557
|
+
"category": "Security",
|
|
1558
|
+
"dependencies": [
|
|
1559
|
+
"lucide-react@^1.39.0"
|
|
1560
|
+
],
|
|
1561
|
+
"registryDependencies": [
|
|
1562
|
+
"badge",
|
|
1563
|
+
"lib-styles",
|
|
1564
|
+
"lib-utils"
|
|
1565
|
+
]
|
|
1566
|
+
},
|
|
1567
|
+
{
|
|
1568
|
+
"name": "json-viewer",
|
|
1569
|
+
"type": "registry:ui",
|
|
1570
|
+
"title": "JSON Viewer",
|
|
1571
|
+
"description": "A collapsible view of a parsed value. Collapsed nodes show their size, because \"three entries or three thousand\" is the question you have before expanding one.",
|
|
1572
|
+
"category": "Development",
|
|
1573
|
+
"dependencies": [
|
|
1574
|
+
"lucide-react@^1.39.0"
|
|
1575
|
+
],
|
|
1576
|
+
"registryDependencies": [
|
|
1577
|
+
"lib-styles",
|
|
1578
|
+
"lib-utils"
|
|
1579
|
+
]
|
|
1580
|
+
},
|
|
1581
|
+
{
|
|
1582
|
+
"name": "jwt-inspector",
|
|
1583
|
+
"type": "registry:ui",
|
|
1584
|
+
"title": "JWT Inspector",
|
|
1585
|
+
"description": "Decodes a token into header, payload and signature. Decoding is not verification and the component says so — a green tick without the signing key would be actively dangerous.",
|
|
1586
|
+
"category": "Code Tools",
|
|
1587
|
+
"dependencies": [
|
|
1588
|
+
"lucide-react@^1.39.0"
|
|
1589
|
+
],
|
|
1590
|
+
"registryDependencies": [
|
|
1591
|
+
"badge",
|
|
1592
|
+
"button",
|
|
1593
|
+
"fmt",
|
|
1594
|
+
"json-viewer",
|
|
1595
|
+
"lib-styles",
|
|
1596
|
+
"lib-utils"
|
|
1597
|
+
]
|
|
1598
|
+
},
|
|
1599
|
+
{
|
|
1600
|
+
"name": "kanban",
|
|
1601
|
+
"type": "registry:ui",
|
|
1602
|
+
"title": "Kanban",
|
|
1603
|
+
"description": "Columns of cards, movable between them. Drag-and-drop is pointer-only, so every card also moves with the arrow keys — a board you can only drag excludes keyboard users from its main action.",
|
|
1604
|
+
"category": "Display",
|
|
1605
|
+
"dependencies": [],
|
|
1606
|
+
"registryDependencies": [
|
|
1607
|
+
"badge",
|
|
1608
|
+
"lib-styles",
|
|
1609
|
+
"lib-utils"
|
|
1610
|
+
]
|
|
1611
|
+
},
|
|
1612
|
+
{
|
|
1613
|
+
"name": "kbd",
|
|
1614
|
+
"type": "registry:ui",
|
|
1615
|
+
"title": "Kbd",
|
|
1616
|
+
"description": "A keyboard key. Splits on \"+\" so a chord can be written as one string.",
|
|
1617
|
+
"category": "Display",
|
|
1618
|
+
"dependencies": [],
|
|
1619
|
+
"registryDependencies": [
|
|
1620
|
+
"lib-utils"
|
|
1621
|
+
]
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"name": "label-picker",
|
|
1625
|
+
"type": "registry:ui",
|
|
1626
|
+
"title": "Label Picker",
|
|
1627
|
+
"description": "Coloured repository labels, picked from a searchable list. Chip text is derived from the fill by luminance, since a label set imported from a forge only gives you a background colour.",
|
|
1628
|
+
"category": "Development",
|
|
1629
|
+
"dependencies": [
|
|
1630
|
+
"lucide-react@^1.39.0"
|
|
1631
|
+
],
|
|
1632
|
+
"registryDependencies": [
|
|
1633
|
+
"button",
|
|
1634
|
+
"input",
|
|
1635
|
+
"lib-styles",
|
|
1636
|
+
"lib-utils",
|
|
1637
|
+
"popover"
|
|
1638
|
+
]
|
|
1639
|
+
},
|
|
1640
|
+
{
|
|
1641
|
+
"name": "label",
|
|
1642
|
+
"type": "registry:ui",
|
|
1643
|
+
"title": "Label",
|
|
1644
|
+
"description": "A form label. htmlFor is the point — clicking it focuses the control, and a screen reader announces the two together.",
|
|
1645
|
+
"category": "Forms",
|
|
1646
|
+
"dependencies": [],
|
|
1647
|
+
"registryDependencies": [
|
|
1648
|
+
"lib-utils"
|
|
1649
|
+
]
|
|
1650
|
+
},
|
|
1651
|
+
{
|
|
1652
|
+
"name": "leaderboard",
|
|
1653
|
+
"type": "registry:ui",
|
|
1654
|
+
"title": "Leaderboard",
|
|
1655
|
+
"description": "Ranked scores with movement since the last period, and the current user pinned even when they are nowhere near the top. A board you cannot find yourself on is a board you stop opening.",
|
|
1656
|
+
"category": "Gaming",
|
|
1657
|
+
"dependencies": [
|
|
1658
|
+
"lucide-react@^1.39.0"
|
|
1659
|
+
],
|
|
1660
|
+
"registryDependencies": [
|
|
1661
|
+
"avatar",
|
|
1662
|
+
"badge",
|
|
1663
|
+
"lib-styles",
|
|
1664
|
+
"lib-utils"
|
|
1665
|
+
]
|
|
1666
|
+
},
|
|
1667
|
+
{
|
|
1668
|
+
"name": "ledger-table",
|
|
1669
|
+
"type": "registry:ui",
|
|
1670
|
+
"title": "Ledger Table",
|
|
1671
|
+
"description": "Double-entry lines with a running balance. Debits and credits get their own columns and are totalled separately, because a ledger where the two do not agree is the finding.",
|
|
1672
|
+
"category": "Finance",
|
|
1673
|
+
"dependencies": [
|
|
1674
|
+
"lucide-react@^1.39.0"
|
|
1675
|
+
],
|
|
1676
|
+
"registryDependencies": [
|
|
1677
|
+
"fmt",
|
|
1678
|
+
"lib-styles",
|
|
1679
|
+
"lib-utils"
|
|
1680
|
+
]
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
"name": "lighthouse-score",
|
|
1684
|
+
"type": "registry:ui",
|
|
1685
|
+
"title": "Lighthouse Score",
|
|
1686
|
+
"description": "Category rings with the metrics behind them. A performance score of 62 is not actionable; \"LCP 4.1s\" is — so the metrics are shown, not hidden behind the summary.",
|
|
1687
|
+
"category": "Build & Perf",
|
|
1688
|
+
"dependencies": [],
|
|
1689
|
+
"registryDependencies": [
|
|
1690
|
+
"lib-styles",
|
|
1691
|
+
"lib-utils"
|
|
1692
|
+
]
|
|
1693
|
+
},
|
|
1694
|
+
{
|
|
1695
|
+
"name": "liquidity-position",
|
|
1696
|
+
"type": "registry:ui",
|
|
1697
|
+
"title": "Liquidity Position",
|
|
1698
|
+
"description": "A concentrated-liquidity position with its range. In-range versus out-of-range is the headline — a position outside its range earns nothing, and a card showing only \"fees earned\" while it stopped earning last week is misleading.",
|
|
1699
|
+
"category": "Crypto",
|
|
1700
|
+
"dependencies": [
|
|
1701
|
+
"lucide-react@^1.39.0"
|
|
1702
|
+
],
|
|
1703
|
+
"registryDependencies": [
|
|
1704
|
+
"badge",
|
|
1705
|
+
"button",
|
|
1706
|
+
"lib-styles",
|
|
1707
|
+
"lib-utils"
|
|
1708
|
+
]
|
|
1709
|
+
},
|
|
1710
|
+
{
|
|
1711
|
+
"name": "live-announcer",
|
|
1712
|
+
"type": "registry:ui",
|
|
1713
|
+
"title": "Live Announcer",
|
|
1714
|
+
"description": "Imperative screen-reader announcements for things with no visible region of their own — a background save finishing, a filter narrowing a list.",
|
|
1715
|
+
"category": "Utility",
|
|
1716
|
+
"dependencies": [],
|
|
1717
|
+
"registryDependencies": []
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
"name": "location-picker",
|
|
1721
|
+
"type": "registry:ui",
|
|
1722
|
+
"title": "Location Picker",
|
|
1723
|
+
"description": "Pick a place by searching, or by typing coordinates. Both routes stay open: search covers the common case, the fields cover the field site or mooring that no geocoder knows.",
|
|
1724
|
+
"category": "Geo",
|
|
1725
|
+
"dependencies": [
|
|
1726
|
+
"lucide-react@^1.39.0"
|
|
1727
|
+
],
|
|
1728
|
+
"registryDependencies": [
|
|
1729
|
+
"button",
|
|
1730
|
+
"coordinate-input",
|
|
1731
|
+
"input",
|
|
1732
|
+
"lib-styles",
|
|
1733
|
+
"lib-utils",
|
|
1734
|
+
"map-embed",
|
|
1735
|
+
"spinner"
|
|
1736
|
+
]
|
|
1737
|
+
},
|
|
1738
|
+
{
|
|
1739
|
+
"name": "log-viewer",
|
|
1740
|
+
"type": "registry:ui",
|
|
1741
|
+
"title": "Log Viewer",
|
|
1742
|
+
"description": "Structured logs with level filters, search and counts. Matches are highlighted in place rather than filtering the list down, so a search shows where the hits are in context.",
|
|
1743
|
+
"category": "Development",
|
|
1744
|
+
"dependencies": [
|
|
1745
|
+
"lucide-react@^1.39.0"
|
|
1746
|
+
],
|
|
1747
|
+
"registryDependencies": [
|
|
1748
|
+
"badge",
|
|
1749
|
+
"input",
|
|
1750
|
+
"lib-styles",
|
|
1751
|
+
"lib-utils",
|
|
1752
|
+
"select"
|
|
1753
|
+
]
|
|
1754
|
+
},
|
|
1755
|
+
{
|
|
1756
|
+
"name": "login-form",
|
|
1757
|
+
"type": "registry:ui",
|
|
1758
|
+
"title": "Login Form",
|
|
1759
|
+
"description": "Email and password, with somewhere for SSO buttons and an error. The error is announced, not just coloured — a failed sign-in that only turns red is invisible to a screen reader.",
|
|
1760
|
+
"category": "Auth",
|
|
1761
|
+
"dependencies": [
|
|
1762
|
+
"lucide-react@^1.39.0"
|
|
1763
|
+
],
|
|
1764
|
+
"registryDependencies": [
|
|
1765
|
+
"button",
|
|
1766
|
+
"input",
|
|
1767
|
+
"label",
|
|
1768
|
+
"lib-styles",
|
|
1769
|
+
"lib-utils",
|
|
1770
|
+
"password-input",
|
|
1771
|
+
"separator"
|
|
1772
|
+
]
|
|
1773
|
+
},
|
|
1774
|
+
{
|
|
1775
|
+
"name": "map-embed",
|
|
1776
|
+
"type": "registry:ui",
|
|
1777
|
+
"title": "Map Embed",
|
|
1778
|
+
"description": "A map on CARTO's near-monochrome basemap. A full-colour street map fights everything drawn on top of it; a greyscale ground lets the marker be the only saturated thing on screen.",
|
|
1779
|
+
"category": "Geo",
|
|
1780
|
+
"dependencies": [
|
|
1781
|
+
"lucide-react@^1.39.0"
|
|
1782
|
+
],
|
|
1783
|
+
"registryDependencies": [
|
|
1784
|
+
"button",
|
|
1785
|
+
"lib-styles",
|
|
1786
|
+
"lib-utils"
|
|
1787
|
+
]
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"name": "market-table",
|
|
1791
|
+
"type": "registry:ui",
|
|
1792
|
+
"title": "Market Table",
|
|
1793
|
+
"description": "A market list with price, change, volume and cap. Rank is the caller’s, never the row index — a re-sorted table that renumbers from one destroys the identifier people use to talk about a market.",
|
|
1794
|
+
"category": "Crypto",
|
|
1795
|
+
"dependencies": [
|
|
1796
|
+
"lucide-react@^1.39.0"
|
|
1797
|
+
],
|
|
1798
|
+
"registryDependencies": [
|
|
1799
|
+
"input",
|
|
1800
|
+
"lib-styles",
|
|
1801
|
+
"lib-utils",
|
|
1802
|
+
"sparkline"
|
|
1803
|
+
]
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"name": "mask-input",
|
|
1807
|
+
"type": "registry:ui",
|
|
1808
|
+
"title": "Mask Input",
|
|
1809
|
+
"description": "Formats as you type — card numbers, phone numbers, dates. Hands back the raw characters alongside the formatted text, so a form does not submit \"(555) 010-9999\" to an API expecting digits.",
|
|
1810
|
+
"category": "Forms",
|
|
1811
|
+
"dependencies": [],
|
|
1812
|
+
"registryDependencies": [
|
|
1813
|
+
"lib-styles",
|
|
1814
|
+
"lib-utils"
|
|
1815
|
+
]
|
|
1816
|
+
},
|
|
1817
|
+
{
|
|
1818
|
+
"name": "media-gallery",
|
|
1819
|
+
"type": "registry:ui",
|
|
1820
|
+
"title": "Media Gallery",
|
|
1821
|
+
"description": "A grid that opens into a lightbox. `alt` is required by the type rather than optional, because a gallery is exactly where missing alt text accumulates.",
|
|
1822
|
+
"category": "Media",
|
|
1823
|
+
"dependencies": [
|
|
1824
|
+
"lucide-react@^1.39.0"
|
|
1825
|
+
],
|
|
1826
|
+
"registryDependencies": [
|
|
1827
|
+
"aspect-ratio",
|
|
1828
|
+
"button",
|
|
1829
|
+
"lib-styles",
|
|
1830
|
+
"lib-utils",
|
|
1831
|
+
"primitive-focus-trap",
|
|
1832
|
+
"primitive-portal"
|
|
1833
|
+
]
|
|
1834
|
+
},
|
|
1835
|
+
{
|
|
1836
|
+
"name": "mention-input",
|
|
1837
|
+
"type": "registry:ui",
|
|
1838
|
+
"title": "Mention Input",
|
|
1839
|
+
"description": "A textarea with @-mention autocomplete. The trigger only fires at a word boundary, so an email address does not open the menu halfway through every address anyone types.",
|
|
1840
|
+
"category": "Product",
|
|
1841
|
+
"dependencies": [],
|
|
1842
|
+
"registryDependencies": [
|
|
1843
|
+
"avatar",
|
|
1844
|
+
"lib-styles",
|
|
1845
|
+
"lib-utils",
|
|
1846
|
+
"textarea"
|
|
1847
|
+
]
|
|
1848
|
+
},
|
|
1849
|
+
{
|
|
1850
|
+
"name": "menubar",
|
|
1851
|
+
"type": "registry:ui",
|
|
1852
|
+
"title": "Menubar",
|
|
1853
|
+
"description": "An application menu bar. What makes it a menu bar rather than a row of dropdowns: once one menu is open, moving along the bar opens the next instead of merely focusing it.",
|
|
1854
|
+
"category": "Navigation",
|
|
1855
|
+
"dependencies": [],
|
|
1856
|
+
"registryDependencies": [
|
|
1857
|
+
"lib-styles",
|
|
1858
|
+
"lib-utils",
|
|
1859
|
+
"primitive-dismissable",
|
|
1860
|
+
"primitive-popper"
|
|
1861
|
+
]
|
|
1862
|
+
},
|
|
1863
|
+
{
|
|
1864
|
+
"name": "merge-conflict",
|
|
1865
|
+
"type": "registry:ui",
|
|
1866
|
+
"title": "Merge Conflict",
|
|
1867
|
+
"description": "Both sides of a conflict with a resolution per hunk. \"Keep both\" is offered because it is frequently right — two people adding a different import conflict textually and agree semantically.",
|
|
1868
|
+
"category": "Code Tools",
|
|
1869
|
+
"dependencies": [],
|
|
1870
|
+
"registryDependencies": [
|
|
1871
|
+
"button",
|
|
1872
|
+
"lib-styles",
|
|
1873
|
+
"lib-utils"
|
|
1874
|
+
]
|
|
1875
|
+
},
|
|
1876
|
+
{
|
|
1877
|
+
"name": "message",
|
|
1878
|
+
"type": "registry:ui",
|
|
1879
|
+
"title": "Message",
|
|
1880
|
+
"description": "One turn in a conversation. The two roles are shaped differently on purpose — a user message is a bubble, an assistant message is full-width prose, because a long answer in a bubble is unreadable.",
|
|
1881
|
+
"category": "AI",
|
|
1882
|
+
"dependencies": [
|
|
1883
|
+
"lucide-react@^1.39.0"
|
|
1884
|
+
],
|
|
1885
|
+
"registryDependencies": [
|
|
1886
|
+
"avatar",
|
|
1887
|
+
"button",
|
|
1888
|
+
"lib-styles",
|
|
1889
|
+
"lib-use-clipboard",
|
|
1890
|
+
"lib-utils",
|
|
1891
|
+
"tooltip"
|
|
1892
|
+
]
|
|
1893
|
+
},
|
|
1894
|
+
{
|
|
1895
|
+
"name": "migration-list",
|
|
1896
|
+
"type": "registry:ui",
|
|
1897
|
+
"title": "Migration List",
|
|
1898
|
+
"description": "Applied and pending migrations, sorted by version. A migration applied after a later version is flagged — that is the signature of two branches merged without a rebase, and it means this schema matches no single branch.",
|
|
1899
|
+
"category": "Database",
|
|
1900
|
+
"dependencies": [
|
|
1901
|
+
"lucide-react@^1.39.0"
|
|
1902
|
+
],
|
|
1903
|
+
"registryDependencies": [
|
|
1904
|
+
"badge",
|
|
1905
|
+
"fmt",
|
|
1906
|
+
"lib-styles",
|
|
1907
|
+
"lib-utils"
|
|
1908
|
+
]
|
|
1909
|
+
},
|
|
1910
|
+
{
|
|
1911
|
+
"name": "mint-panel",
|
|
1912
|
+
"type": "registry:ui",
|
|
1913
|
+
"title": "Mint Panel",
|
|
1914
|
+
"description": "Supply, price and quantity, with the total shown before the button. A price of \"0.08 ETH\" beside a quantity of 5 is not a number anyone should be multiplying in their head at a mint.",
|
|
1915
|
+
"category": "Crypto",
|
|
1916
|
+
"dependencies": [],
|
|
1917
|
+
"registryDependencies": [
|
|
1918
|
+
"badge",
|
|
1919
|
+
"button",
|
|
1920
|
+
"lib-styles",
|
|
1921
|
+
"lib-utils",
|
|
1922
|
+
"number-input",
|
|
1923
|
+
"progress"
|
|
1924
|
+
]
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
"name": "model-comparison",
|
|
1928
|
+
"type": "registry:ui",
|
|
1929
|
+
"title": "Model Comparison",
|
|
1930
|
+
"description": "Two or more outputs side by side with a pick. Columns are equal width and height regardless of content, because a taller box reads as the better answer before a word of it is read.",
|
|
1931
|
+
"category": "AI",
|
|
1932
|
+
"dependencies": [
|
|
1933
|
+
"lucide-react@^1.39.0"
|
|
1934
|
+
],
|
|
1935
|
+
"registryDependencies": [
|
|
1936
|
+
"badge",
|
|
1937
|
+
"button",
|
|
1938
|
+
"fmt",
|
|
1939
|
+
"lib-styles",
|
|
1940
|
+
"lib-utils"
|
|
1941
|
+
]
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
"name": "model-select",
|
|
1945
|
+
"type": "registry:ui",
|
|
1946
|
+
"title": "Model Select",
|
|
1947
|
+
"description": "Picks which model answers. A Select with the naming convention folded in, so \"Opus · most capable\" is scannable where a bare model id is not.",
|
|
1948
|
+
"category": "AI",
|
|
1949
|
+
"dependencies": [
|
|
1950
|
+
"lucide-react@^1.39.0"
|
|
1951
|
+
],
|
|
1952
|
+
"registryDependencies": [
|
|
1953
|
+
"select"
|
|
1954
|
+
]
|
|
1955
|
+
},
|
|
1956
|
+
{
|
|
1957
|
+
"name": "moderation-queue",
|
|
1958
|
+
"type": "registry:ui",
|
|
1959
|
+
"title": "Moderation Queue",
|
|
1960
|
+
"description": "Reported content with its report reasons and a decision. Sensitive items are blurred until revealed, because a moderator should choose when to look at the worst thing in the queue.",
|
|
1961
|
+
"category": "Admin",
|
|
1962
|
+
"dependencies": [
|
|
1963
|
+
"lucide-react@^1.39.0"
|
|
1964
|
+
],
|
|
1965
|
+
"registryDependencies": [
|
|
1966
|
+
"avatar",
|
|
1967
|
+
"badge",
|
|
1968
|
+
"button",
|
|
1969
|
+
"checkbox",
|
|
1970
|
+
"fmt",
|
|
1971
|
+
"lib-styles",
|
|
1972
|
+
"lib-utils"
|
|
1973
|
+
]
|
|
1974
|
+
},
|
|
1975
|
+
{
|
|
1976
|
+
"name": "money-input",
|
|
1977
|
+
"type": "registry:ui",
|
|
1978
|
+
"title": "Money Input",
|
|
1979
|
+
"description": "A currency field that reads and writes integer minor units. Money that has been through a float has already lost — the value that leaves this control is a whole number of cents.",
|
|
1980
|
+
"category": "Finance",
|
|
1981
|
+
"dependencies": [],
|
|
1982
|
+
"registryDependencies": [
|
|
1983
|
+
"lib-styles",
|
|
1984
|
+
"lib-utils"
|
|
1985
|
+
]
|
|
1986
|
+
},
|
|
1987
|
+
{
|
|
1988
|
+
"name": "multi-select",
|
|
1989
|
+
"type": "registry:ui",
|
|
1990
|
+
"title": "Multi Select",
|
|
1991
|
+
"description": "Pick several options. The gap Select cannot fill — it is a single-value combobox by construction, which is why the LogViewer level filter had to become a threshold instead of a set.",
|
|
1992
|
+
"category": "Forms",
|
|
1993
|
+
"dependencies": [
|
|
1994
|
+
"lucide-react@^1.39.0"
|
|
1995
|
+
],
|
|
1996
|
+
"registryDependencies": [
|
|
1997
|
+
"lib-styles",
|
|
1998
|
+
"lib-utils",
|
|
1999
|
+
"primitive-dismissable",
|
|
2000
|
+
"primitive-popper"
|
|
2001
|
+
]
|
|
2002
|
+
},
|
|
2003
|
+
{
|
|
2004
|
+
"name": "multiplier-chart",
|
|
2005
|
+
"type": "registry:ui",
|
|
2006
|
+
"title": "Multiplier Chart",
|
|
2007
|
+
"description": "The rising curve of a crash-style round. The crash is a state, not an animation that ends — the frozen curve and the final figure stay on screen so a player who looked away still sees what happened.",
|
|
2008
|
+
"category": "Gaming",
|
|
2009
|
+
"dependencies": [],
|
|
2010
|
+
"registryDependencies": [
|
|
2011
|
+
"lib-utils"
|
|
2012
|
+
]
|
|
2013
|
+
},
|
|
2014
|
+
{
|
|
2015
|
+
"name": "navigation-menu",
|
|
2016
|
+
"type": "registry:ui",
|
|
2017
|
+
"title": "Navigation Menu",
|
|
2018
|
+
"description": "A site nav bar with mega-menu panels and hover intent — a short open delay so crossing the bar does not flash panels, and a longer close delay so the panel is reachable.",
|
|
2019
|
+
"category": "Navigation",
|
|
2020
|
+
"dependencies": [
|
|
2021
|
+
"lucide-react@^1.39.0"
|
|
2022
|
+
],
|
|
2023
|
+
"registryDependencies": [
|
|
2024
|
+
"lib-styles",
|
|
2025
|
+
"lib-utils",
|
|
2026
|
+
"primitive-dismissable",
|
|
2027
|
+
"primitive-popper"
|
|
2028
|
+
]
|
|
2029
|
+
},
|
|
2030
|
+
{
|
|
2031
|
+
"name": "network-status",
|
|
2032
|
+
"type": "registry:ui",
|
|
2033
|
+
"title": "Network Status",
|
|
2034
|
+
"description": "RPC health: block height, latency, sync state. Staleness is derived from the age of the last block — a stuck node answers cheerfully with an old height, so \"connected\" from the node proves nothing.",
|
|
2035
|
+
"category": "Crypto",
|
|
2036
|
+
"dependencies": [
|
|
2037
|
+
"lucide-react@^1.39.0"
|
|
2038
|
+
],
|
|
2039
|
+
"registryDependencies": [
|
|
2040
|
+
"badge",
|
|
2041
|
+
"fmt",
|
|
2042
|
+
"lib-styles",
|
|
2043
|
+
"lib-utils"
|
|
2044
|
+
]
|
|
2045
|
+
},
|
|
2046
|
+
{
|
|
2047
|
+
"name": "nft-card",
|
|
2048
|
+
"type": "registry:ui",
|
|
2049
|
+
"title": "NFT Card",
|
|
2050
|
+
"description": "A token tile: media, collection, price. Broken media resolves to a placeholder rather than collapsing the tile — IPFS gateways fail constantly and a grid that reflows on every 404 is unusable.",
|
|
2051
|
+
"category": "Crypto",
|
|
2052
|
+
"dependencies": [
|
|
2053
|
+
"lucide-react@^1.39.0"
|
|
2054
|
+
],
|
|
2055
|
+
"registryDependencies": [
|
|
2056
|
+
"aspect-ratio",
|
|
2057
|
+
"badge",
|
|
2058
|
+
"lib-styles",
|
|
2059
|
+
"lib-utils"
|
|
2060
|
+
]
|
|
2061
|
+
},
|
|
2062
|
+
{
|
|
2063
|
+
"name": "notification-inbox",
|
|
2064
|
+
"type": "registry:ui",
|
|
2065
|
+
"title": "Notification Inbox",
|
|
2066
|
+
"description": "A notification list grouped by day, with unread state. Unread is reported, never assumed — a panel that marks everything read on render clears what the user never saw.",
|
|
2067
|
+
"category": "Product",
|
|
2068
|
+
"dependencies": [
|
|
2069
|
+
"lucide-react@^1.39.0"
|
|
2070
|
+
],
|
|
2071
|
+
"registryDependencies": [
|
|
2072
|
+
"avatar",
|
|
2073
|
+
"badge",
|
|
2074
|
+
"button",
|
|
2075
|
+
"fmt",
|
|
2076
|
+
"lib-styles",
|
|
2077
|
+
"lib-utils"
|
|
2078
|
+
]
|
|
2079
|
+
},
|
|
2080
|
+
{
|
|
2081
|
+
"name": "number-input",
|
|
2082
|
+
"type": "registry:ui",
|
|
2083
|
+
"title": "Number Input",
|
|
2084
|
+
"description": "A number field with steppers. Uses type=\"text\" with inputMode=\"decimal\", because the native number input silently discards what it cannot parse — a half-typed \"1e\" or \"-\" vanishes as you type it.",
|
|
2085
|
+
"category": "Forms",
|
|
2086
|
+
"dependencies": [
|
|
2087
|
+
"lucide-react@^1.39.0"
|
|
2088
|
+
],
|
|
2089
|
+
"registryDependencies": [
|
|
2090
|
+
"lib-styles",
|
|
2091
|
+
"lib-utils"
|
|
2092
|
+
]
|
|
2093
|
+
},
|
|
2094
|
+
{
|
|
2095
|
+
"name": "odds-display",
|
|
2096
|
+
"type": "registry:ui",
|
|
2097
|
+
"title": "Odds Display",
|
|
2098
|
+
"description": "A selectable price in decimal, fractional or American. Decimal is the source of truth and the others are derived, so a format switch can never change what the bet actually pays.",
|
|
2099
|
+
"category": "Gaming",
|
|
2100
|
+
"dependencies": [
|
|
2101
|
+
"lucide-react@^1.39.0"
|
|
2102
|
+
],
|
|
2103
|
+
"registryDependencies": [
|
|
2104
|
+
"lib-styles",
|
|
2105
|
+
"lib-utils"
|
|
2106
|
+
]
|
|
2107
|
+
},
|
|
2108
|
+
{
|
|
2109
|
+
"name": "on-call-schedule",
|
|
2110
|
+
"type": "registry:ui",
|
|
2111
|
+
"title": "On-call Schedule",
|
|
2112
|
+
"description": "A rotation across a window of days. Shifts are positioned proportionally rather than snapped to a day grid — rotations hand over at 09:00, and rounding shows the wrong person on call for most of two days.",
|
|
2113
|
+
"category": "AIOps",
|
|
2114
|
+
"dependencies": [
|
|
2115
|
+
"lucide-react@^1.39.0"
|
|
2116
|
+
],
|
|
2117
|
+
"registryDependencies": [
|
|
2118
|
+
"avatar",
|
|
2119
|
+
"badge",
|
|
2120
|
+
"fmt",
|
|
2121
|
+
"lib-styles",
|
|
2122
|
+
"lib-utils",
|
|
2123
|
+
"tooltip"
|
|
2124
|
+
]
|
|
2125
|
+
},
|
|
2126
|
+
{
|
|
2127
|
+
"name": "order-book",
|
|
2128
|
+
"type": "registry:ui",
|
|
2129
|
+
"title": "Order Book",
|
|
2130
|
+
"description": "Bids and asks with cumulative depth. The bar is the running total from the top of book, not the size at that level — what matters when taking liquidity is how much sits between you and a price.",
|
|
2131
|
+
"category": "Crypto",
|
|
2132
|
+
"dependencies": [],
|
|
2133
|
+
"registryDependencies": [
|
|
2134
|
+
"lib-styles",
|
|
2135
|
+
"lib-utils"
|
|
2136
|
+
]
|
|
2137
|
+
},
|
|
2138
|
+
{
|
|
2139
|
+
"name": "page-header",
|
|
2140
|
+
"type": "registry:ui",
|
|
2141
|
+
"title": "Page Header",
|
|
2142
|
+
"description": "The masthead a page opens with: eyebrow, title, lead and a meta row. Extracted after four pages in this catalogue had each grown their own copy and drifted apart.",
|
|
2143
|
+
"category": "Utility",
|
|
2144
|
+
"dependencies": [],
|
|
2145
|
+
"registryDependencies": [
|
|
2146
|
+
"lib-utils"
|
|
2147
|
+
]
|
|
2148
|
+
},
|
|
2149
|
+
{
|
|
2150
|
+
"name": "pagination",
|
|
2151
|
+
"type": "registry:ui",
|
|
2152
|
+
"title": "Pagination",
|
|
2153
|
+
"description": "Move between pages of results. The windowing rule — how many neighbours to show and where the gaps fall — is exported as pageItems, so it can be reused or tested on its own.",
|
|
2154
|
+
"category": "Navigation",
|
|
2155
|
+
"dependencies": [
|
|
2156
|
+
"lucide-react@^1.39.0"
|
|
2157
|
+
],
|
|
2158
|
+
"registryDependencies": [
|
|
2159
|
+
"button",
|
|
2160
|
+
"lib-utils"
|
|
2161
|
+
]
|
|
2162
|
+
},
|
|
2163
|
+
{
|
|
2164
|
+
"name": "password-input",
|
|
2165
|
+
"type": "registry:ui",
|
|
2166
|
+
"title": "Password Input",
|
|
2167
|
+
"description": "A password field with a reveal toggle and an optional strength meter that rewards length over symbols — the thing naive meters get wrong when they demand punctuation from a passphrase.",
|
|
2168
|
+
"category": "Forms",
|
|
2169
|
+
"dependencies": [
|
|
2170
|
+
"lucide-react@^1.39.0"
|
|
2171
|
+
],
|
|
2172
|
+
"registryDependencies": [
|
|
2173
|
+
"lib-styles",
|
|
2174
|
+
"lib-utils"
|
|
2175
|
+
]
|
|
2176
|
+
},
|
|
2177
|
+
{
|
|
2178
|
+
"name": "payment-method",
|
|
2179
|
+
"type": "registry:ui",
|
|
2180
|
+
"title": "Payment Method",
|
|
2181
|
+
"description": "Saved cards and accounts, with expiry warnings. A card expiring next month is the reason a subscription fails, and saying so before it does is the entire value of this list.",
|
|
2182
|
+
"category": "Finance",
|
|
2183
|
+
"dependencies": [
|
|
2184
|
+
"lucide-react@^1.39.0"
|
|
2185
|
+
],
|
|
2186
|
+
"registryDependencies": [
|
|
2187
|
+
"badge",
|
|
2188
|
+
"button",
|
|
2189
|
+
"lib-styles",
|
|
2190
|
+
"lib-utils"
|
|
2191
|
+
]
|
|
2192
|
+
},
|
|
2193
|
+
{
|
|
2194
|
+
"name": "payout-status",
|
|
2195
|
+
"type": "registry:ui",
|
|
2196
|
+
"title": "Payout Status",
|
|
2197
|
+
"description": "Where a payout is and when the money lands. \"Expected Thursday\" is the thing people open this to find out; the status word alone never answers it.",
|
|
2198
|
+
"category": "Finance",
|
|
2199
|
+
"dependencies": [
|
|
2200
|
+
"lucide-react@^1.39.0"
|
|
2201
|
+
],
|
|
2202
|
+
"registryDependencies": [
|
|
2203
|
+
"badge",
|
|
2204
|
+
"fmt",
|
|
2205
|
+
"lib-styles",
|
|
2206
|
+
"lib-utils",
|
|
2207
|
+
"stepper"
|
|
2208
|
+
]
|
|
2209
|
+
},
|
|
2210
|
+
{
|
|
2211
|
+
"name": "permission-matrix",
|
|
2212
|
+
"type": "registry:ui",
|
|
2213
|
+
"title": "Permission Matrix",
|
|
2214
|
+
"description": "Roles against permissions, in a grid. Inherited grants are drawn differently from direct ones, because \"why can this role still delete things\" is the question a flat list of ticks cannot answer.",
|
|
2215
|
+
"category": "Auth",
|
|
2216
|
+
"dependencies": [
|
|
2217
|
+
"lucide-react@^1.39.0"
|
|
2218
|
+
],
|
|
2219
|
+
"registryDependencies": [
|
|
2220
|
+
"checkbox",
|
|
2221
|
+
"lib-styles",
|
|
2222
|
+
"lib-utils"
|
|
2223
|
+
]
|
|
2224
|
+
},
|
|
2225
|
+
{
|
|
2226
|
+
"name": "pipeline",
|
|
2227
|
+
"type": "registry:ui",
|
|
2228
|
+
"title": "Pipeline",
|
|
2229
|
+
"description": "CI stages left to right with parallel jobs stacked inside each. A stage is as bad as its worst job, so its state is derived rather than being another field to keep in sync.",
|
|
2230
|
+
"category": "Operations",
|
|
2231
|
+
"dependencies": [
|
|
2232
|
+
"lucide-react@^1.39.0"
|
|
2233
|
+
],
|
|
2234
|
+
"registryDependencies": [
|
|
2235
|
+
"fmt",
|
|
2236
|
+
"lib-styles",
|
|
2237
|
+
"lib-utils",
|
|
2238
|
+
"spinner"
|
|
2239
|
+
]
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"name": "popover",
|
|
2243
|
+
"type": "registry:ui",
|
|
2244
|
+
"title": "Popover",
|
|
2245
|
+
"description": "Rich content anchored to a trigger. Positioned with a fixed-position popper that flips when it would overflow, and dismissed by Escape or an outside press.",
|
|
2246
|
+
"category": "Overlays",
|
|
2247
|
+
"dependencies": [],
|
|
2248
|
+
"registryDependencies": [
|
|
2249
|
+
"lib-styles",
|
|
2250
|
+
"lib-utils",
|
|
2251
|
+
"primitive-dismissable",
|
|
2252
|
+
"primitive-popper",
|
|
2253
|
+
"primitive-slot"
|
|
2254
|
+
]
|
|
2255
|
+
},
|
|
2256
|
+
{
|
|
2257
|
+
"name": "port-table",
|
|
2258
|
+
"type": "registry:ui",
|
|
2259
|
+
"title": "Port Table",
|
|
2260
|
+
"description": "Published ports with their bind address. `0.0.0.0:5432` and `127.0.0.1:5432` are the difference between a database on the internet and a database on the machine — printing only the number hides that.",
|
|
2261
|
+
"category": "Runtime",
|
|
2262
|
+
"dependencies": [
|
|
2263
|
+
"lucide-react@^1.39.0"
|
|
2264
|
+
],
|
|
2265
|
+
"registryDependencies": [
|
|
2266
|
+
"badge",
|
|
2267
|
+
"lib-styles",
|
|
2268
|
+
"lib-utils"
|
|
2269
|
+
]
|
|
2270
|
+
},
|
|
2271
|
+
{
|
|
2272
|
+
"name": "portfolio-balance",
|
|
2273
|
+
"type": "registry:ui",
|
|
2274
|
+
"title": "Portfolio Balance",
|
|
2275
|
+
"description": "Total value with its allocation. The hide toggle is part of the component, not an app-level bolt-on — people check balances on trains. Allocation is computed from the values, never taken as a percentage prop.",
|
|
2276
|
+
"category": "Crypto",
|
|
2277
|
+
"dependencies": [
|
|
2278
|
+
"lucide-react@^1.39.0"
|
|
2279
|
+
],
|
|
2280
|
+
"registryDependencies": [
|
|
2281
|
+
"button",
|
|
2282
|
+
"lib-styles",
|
|
2283
|
+
"lib-utils"
|
|
2284
|
+
]
|
|
2285
|
+
},
|
|
2286
|
+
{
|
|
2287
|
+
"name": "postback-config",
|
|
2288
|
+
"type": "registry:ui",
|
|
2289
|
+
"title": "Postback Config",
|
|
2290
|
+
"description": "A server-to-server postback URL, validated against its macros. A postback missing {click_id} returns 200 and attributes nothing — this says so before it ships rather than in a reconciliation weeks later.",
|
|
2291
|
+
"category": "Affiliate",
|
|
2292
|
+
"dependencies": [
|
|
2293
|
+
"lucide-react@^1.39.0"
|
|
2294
|
+
],
|
|
2295
|
+
"registryDependencies": [
|
|
2296
|
+
"badge",
|
|
2297
|
+
"copy-button",
|
|
2298
|
+
"input",
|
|
2299
|
+
"label",
|
|
2300
|
+
"lib-styles",
|
|
2301
|
+
"lib-utils",
|
|
2302
|
+
"select"
|
|
2303
|
+
]
|
|
2304
|
+
},
|
|
2305
|
+
{
|
|
2306
|
+
"name": "presence",
|
|
2307
|
+
"type": "registry:ui",
|
|
2308
|
+
"title": "Presence",
|
|
2309
|
+
"description": "Who else is here. The overflow count carries its own tooltip listing the rest — a \"+5\" that cannot tell you who is unhelpful in exactly the moment you care.",
|
|
2310
|
+
"category": "Product",
|
|
2311
|
+
"dependencies": [],
|
|
2312
|
+
"registryDependencies": [
|
|
2313
|
+
"avatar",
|
|
2314
|
+
"lib-utils",
|
|
2315
|
+
"tooltip"
|
|
2316
|
+
]
|
|
2317
|
+
},
|
|
2318
|
+
{
|
|
2319
|
+
"name": "price-ticker",
|
|
2320
|
+
"type": "registry:ui",
|
|
2321
|
+
"title": "Price Ticker",
|
|
2322
|
+
"description": "A live price with its change. The flash on update is colour only — a ticker that moves makes the whole page twitch — and it compares against the previous rendered price, not the day’s direction.",
|
|
2323
|
+
"category": "Crypto",
|
|
2324
|
+
"dependencies": [
|
|
2325
|
+
"lucide-react@^1.39.0"
|
|
2326
|
+
],
|
|
2327
|
+
"registryDependencies": [
|
|
2328
|
+
"lib-utils",
|
|
2329
|
+
"sparkline"
|
|
2330
|
+
]
|
|
2331
|
+
},
|
|
2332
|
+
{
|
|
2333
|
+
"name": "pricing-table",
|
|
2334
|
+
"type": "registry:ui",
|
|
2335
|
+
"title": "Pricing Table",
|
|
2336
|
+
"description": "Plans side by side. Every plan lists every feature, including the ones it lacks — omitting them makes the columns uneven and quietly hides what you would give up.",
|
|
2337
|
+
"category": "Commerce",
|
|
2338
|
+
"dependencies": [
|
|
2339
|
+
"lucide-react@^1.39.0"
|
|
2340
|
+
],
|
|
2341
|
+
"registryDependencies": [
|
|
2342
|
+
"badge",
|
|
2343
|
+
"button",
|
|
2344
|
+
"fmt",
|
|
2345
|
+
"lib-styles",
|
|
2346
|
+
"lib-utils"
|
|
2347
|
+
]
|
|
2348
|
+
},
|
|
2349
|
+
{
|
|
2350
|
+
"name": "progress",
|
|
2351
|
+
"type": "registry:ui",
|
|
2352
|
+
"title": "Progress",
|
|
2353
|
+
"description": "How far along a task is. Omit the value for an indeterminate bar, which sweeps rather than fills — the one honest way to say \"working, duration unknown\".",
|
|
2354
|
+
"category": "Feedback",
|
|
2355
|
+
"dependencies": [
|
|
2356
|
+
"class-variance-authority@^0.7.1"
|
|
2357
|
+
],
|
|
2358
|
+
"registryDependencies": [
|
|
2359
|
+
"lib-styles",
|
|
2360
|
+
"lib-utils"
|
|
2361
|
+
]
|
|
2362
|
+
},
|
|
2363
|
+
{
|
|
2364
|
+
"name": "prompt-input",
|
|
2365
|
+
"type": "registry:ui",
|
|
2366
|
+
"title": "Prompt Input",
|
|
2367
|
+
"description": "The composer for a chat: a growing textarea, attached context as removable chips, and a toolbar. Enter sends, Shift+Enter adds a newline, and IME composition is checked first.",
|
|
2368
|
+
"category": "AI",
|
|
2369
|
+
"dependencies": [
|
|
2370
|
+
"lucide-react@^1.39.0"
|
|
2371
|
+
],
|
|
2372
|
+
"registryDependencies": [
|
|
2373
|
+
"badge",
|
|
2374
|
+
"button",
|
|
2375
|
+
"lib-styles",
|
|
2376
|
+
"lib-utils",
|
|
2377
|
+
"textarea",
|
|
2378
|
+
"tooltip"
|
|
2379
|
+
]
|
|
2380
|
+
},
|
|
2381
|
+
{
|
|
2382
|
+
"name": "prompt-template",
|
|
2383
|
+
"type": "registry:ui",
|
|
2384
|
+
"title": "Prompt Template",
|
|
2385
|
+
"description": "A prompt with {{variable}} placeholders and a form to fill them. Variables are parsed out of the template rather than declared separately, so the two cannot drift.",
|
|
2386
|
+
"category": "AI",
|
|
2387
|
+
"dependencies": [],
|
|
2388
|
+
"registryDependencies": [
|
|
2389
|
+
"badge",
|
|
2390
|
+
"copy-button",
|
|
2391
|
+
"input",
|
|
2392
|
+
"label",
|
|
2393
|
+
"lib-styles",
|
|
2394
|
+
"lib-utils"
|
|
2395
|
+
]
|
|
2396
|
+
},
|
|
2397
|
+
{
|
|
2398
|
+
"name": "pull-request-card",
|
|
2399
|
+
"type": "registry:ui",
|
|
2400
|
+
"title": "Pull Request Card",
|
|
2401
|
+
"description": "A pull request at a glance — state, branches, checks, reviewers. State is shown as an icon and a word, never colour alone.",
|
|
2402
|
+
"category": "Development",
|
|
2403
|
+
"dependencies": [
|
|
2404
|
+
"lucide-react@^1.39.0"
|
|
2405
|
+
],
|
|
2406
|
+
"registryDependencies": [
|
|
2407
|
+
"avatar",
|
|
2408
|
+
"badge",
|
|
2409
|
+
"diff-stat",
|
|
2410
|
+
"fmt",
|
|
2411
|
+
"lib-styles",
|
|
2412
|
+
"lib-utils"
|
|
2413
|
+
]
|
|
2414
|
+
},
|
|
2415
|
+
{
|
|
2416
|
+
"name": "query-editor",
|
|
2417
|
+
"type": "registry:ui",
|
|
2418
|
+
"title": "Query Editor",
|
|
2419
|
+
"description": "A SQL editor that asks before running an UPDATE or DELETE with no WHERE clause. That is the most expensive mistake anyone makes in a query console, and it is trivial to detect.",
|
|
2420
|
+
"category": "Database",
|
|
2421
|
+
"dependencies": [
|
|
2422
|
+
"lucide-react@^1.39.0"
|
|
2423
|
+
],
|
|
2424
|
+
"registryDependencies": [
|
|
2425
|
+
"badge",
|
|
2426
|
+
"button",
|
|
2427
|
+
"code-block",
|
|
2428
|
+
"kbd",
|
|
2429
|
+
"lib-styles",
|
|
2430
|
+
"lib-utils"
|
|
2431
|
+
]
|
|
2432
|
+
},
|
|
2433
|
+
{
|
|
2434
|
+
"name": "query-plan",
|
|
2435
|
+
"type": "registry:ui",
|
|
2436
|
+
"title": "Query Plan",
|
|
2437
|
+
"description": "An EXPLAIN tree with cost bars drawn from self cost, not total. Every root holds 100% of total by definition, so a total-cost bar makes the root look like the problem in every query ever profiled.",
|
|
2438
|
+
"category": "Database",
|
|
2439
|
+
"dependencies": [
|
|
2440
|
+
"lucide-react@^1.39.0"
|
|
2441
|
+
],
|
|
2442
|
+
"registryDependencies": [
|
|
2443
|
+
"badge",
|
|
2444
|
+
"fmt",
|
|
2445
|
+
"lib-styles",
|
|
2446
|
+
"lib-utils"
|
|
2447
|
+
]
|
|
2448
|
+
},
|
|
2449
|
+
{
|
|
2450
|
+
"name": "queue-monitor",
|
|
2451
|
+
"type": "registry:ui",
|
|
2452
|
+
"title": "Queue Monitor",
|
|
2453
|
+
"description": "Depth, throughput and whether the queue is keeping up. Depth alone says nothing — 40,000 draining at 5,000/s is fine, 300 draining at 2/s is an incident.",
|
|
2454
|
+
"category": "Runtime",
|
|
2455
|
+
"dependencies": [],
|
|
2456
|
+
"registryDependencies": [
|
|
2457
|
+
"badge",
|
|
2458
|
+
"fmt",
|
|
2459
|
+
"lib-styles",
|
|
2460
|
+
"lib-utils",
|
|
2461
|
+
"sparkline"
|
|
2462
|
+
]
|
|
2463
|
+
},
|
|
2464
|
+
{
|
|
2465
|
+
"name": "radio-group",
|
|
2466
|
+
"type": "registry:ui",
|
|
2467
|
+
"title": "Radio Group",
|
|
2468
|
+
"description": "One choice out of several. Built on native radio inputs, so arrow-key roving, form submission and the single-selection invariant come from the platform.",
|
|
2469
|
+
"category": "Forms",
|
|
2470
|
+
"dependencies": [
|
|
2471
|
+
"class-variance-authority@^0.7.1"
|
|
2472
|
+
],
|
|
2473
|
+
"registryDependencies": [
|
|
2474
|
+
"lib-styles",
|
|
2475
|
+
"lib-utils",
|
|
2476
|
+
"primitive-radio-group"
|
|
2477
|
+
]
|
|
2478
|
+
},
|
|
2479
|
+
{
|
|
2480
|
+
"name": "range-slider",
|
|
2481
|
+
"type": "registry:ui",
|
|
2482
|
+
"title": "Range Slider",
|
|
2483
|
+
"description": "Two thumbs over one track. Slider is a restyled native input[type=range], which has exactly one thumb by construction — so a range needs a custom control with the ARIA written out.",
|
|
2484
|
+
"category": "Forms",
|
|
2485
|
+
"dependencies": [],
|
|
2486
|
+
"registryDependencies": [
|
|
2487
|
+
"lib-styles",
|
|
2488
|
+
"lib-utils"
|
|
2489
|
+
]
|
|
2490
|
+
},
|
|
2491
|
+
{
|
|
2492
|
+
"name": "rate-limit-meter",
|
|
2493
|
+
"type": "registry:ui",
|
|
2494
|
+
"title": "Rate Limit Meter",
|
|
2495
|
+
"description": "A quota with its reset time given equal weight. \"9,800 of 10,000\" is alarming; \"resets in 40 seconds\" makes it fine — showing the first without the second sends people to build a cache they do not need.",
|
|
2496
|
+
"category": "Runtime",
|
|
2497
|
+
"dependencies": [],
|
|
2498
|
+
"registryDependencies": [
|
|
2499
|
+
"fmt",
|
|
2500
|
+
"lib-styles",
|
|
2501
|
+
"lib-utils"
|
|
2502
|
+
]
|
|
2503
|
+
},
|
|
2504
|
+
{
|
|
2505
|
+
"name": "rating",
|
|
2506
|
+
"type": "registry:ui",
|
|
2507
|
+
"title": "Rating",
|
|
2508
|
+
"description": "A rating, readable or settable, drawn with monochrome marks. The icon is a prop; read-only renders one image with a text alternative — \"4 out of 5\" — rather than five separate announcements.",
|
|
2509
|
+
"category": "Forms",
|
|
2510
|
+
"dependencies": [
|
|
2511
|
+
"lucide-react@^1.39.0"
|
|
2512
|
+
],
|
|
2513
|
+
"registryDependencies": [
|
|
2514
|
+
"lib-styles",
|
|
2515
|
+
"lib-utils"
|
|
2516
|
+
]
|
|
2517
|
+
},
|
|
2518
|
+
{
|
|
2519
|
+
"name": "reasoning-block",
|
|
2520
|
+
"type": "registry:ui",
|
|
2521
|
+
"title": "Reasoning Block",
|
|
2522
|
+
"description": "A model's intermediate reasoning, folded away by default — it is supporting evidence, not the answer, and a panel that opens itself pushes the answer below the fold.",
|
|
2523
|
+
"category": "AI",
|
|
2524
|
+
"dependencies": [
|
|
2525
|
+
"lucide-react@^1.39.0"
|
|
2526
|
+
],
|
|
2527
|
+
"registryDependencies": [
|
|
2528
|
+
"fmt",
|
|
2529
|
+
"lib-styles",
|
|
2530
|
+
"lib-utils",
|
|
2531
|
+
"spinner"
|
|
2532
|
+
]
|
|
2533
|
+
},
|
|
2534
|
+
{
|
|
2535
|
+
"name": "regex-tester",
|
|
2536
|
+
"type": "registry:ui",
|
|
2537
|
+
"title": "Regex Tester",
|
|
2538
|
+
"description": "A pattern against a test string, with matches highlighted and capture groups listed. Zero-length matches are guarded — `/a*/g` matches empty at every position and hangs a naive exec loop.",
|
|
2539
|
+
"category": "Code Tools",
|
|
2540
|
+
"dependencies": [
|
|
2541
|
+
"lucide-react@^1.39.0"
|
|
2542
|
+
],
|
|
2543
|
+
"registryDependencies": [
|
|
2544
|
+
"badge",
|
|
2545
|
+
"input",
|
|
2546
|
+
"label",
|
|
2547
|
+
"lib-styles",
|
|
2548
|
+
"lib-utils",
|
|
2549
|
+
"textarea"
|
|
2550
|
+
]
|
|
2551
|
+
},
|
|
2552
|
+
{
|
|
2553
|
+
"name": "release-list",
|
|
2554
|
+
"type": "registry:ui",
|
|
2555
|
+
"title": "Release List",
|
|
2556
|
+
"description": "A changelog as a document — each version an article with a real heading, so it can be linked to and navigated by heading. Never sorts, since \"newest first\" cannot be derived from semver once pre-releases exist.",
|
|
2557
|
+
"category": "Development",
|
|
2558
|
+
"dependencies": [
|
|
2559
|
+
"lucide-react@^1.39.0"
|
|
2560
|
+
],
|
|
2561
|
+
"registryDependencies": [
|
|
2562
|
+
"badge",
|
|
2563
|
+
"lib-styles",
|
|
2564
|
+
"lib-utils"
|
|
2565
|
+
]
|
|
2566
|
+
},
|
|
2567
|
+
{
|
|
2568
|
+
"name": "request-builder",
|
|
2569
|
+
"type": "registry:ui",
|
|
2570
|
+
"title": "Request Builder",
|
|
2571
|
+
"description": "Method, URL, headers, query and body. Query parameters are edited as rows and the assembled URL is shown beneath — hand-editing a query string is where encoding bugs come from.",
|
|
2572
|
+
"category": "API",
|
|
2573
|
+
"dependencies": [
|
|
2574
|
+
"lucide-react@^1.39.0"
|
|
2575
|
+
],
|
|
2576
|
+
"registryDependencies": [
|
|
2577
|
+
"badge",
|
|
2578
|
+
"button",
|
|
2579
|
+
"collapsible",
|
|
2580
|
+
"input",
|
|
2581
|
+
"lib-styles",
|
|
2582
|
+
"lib-utils",
|
|
2583
|
+
"select",
|
|
2584
|
+
"switch",
|
|
2585
|
+
"textarea"
|
|
2586
|
+
]
|
|
2587
|
+
},
|
|
2588
|
+
{
|
|
2589
|
+
"name": "resizable",
|
|
2590
|
+
"type": "registry:ui",
|
|
2591
|
+
"title": "Resizable",
|
|
2592
|
+
"description": "Two panels with a draggable divider. Sizes are percentages, so the split survives a container resize — and the handle is a real slider, so arrow keys resize it too.",
|
|
2593
|
+
"category": "Navigation",
|
|
2594
|
+
"dependencies": [
|
|
2595
|
+
"lucide-react@^1.39.0"
|
|
2596
|
+
],
|
|
2597
|
+
"registryDependencies": [
|
|
2598
|
+
"lib-styles",
|
|
2599
|
+
"lib-utils",
|
|
2600
|
+
"primitive-media-query"
|
|
2601
|
+
]
|
|
2602
|
+
},
|
|
2603
|
+
{
|
|
2604
|
+
"name": "resource-meter",
|
|
2605
|
+
"type": "registry:ui",
|
|
2606
|
+
"title": "Resource Meter",
|
|
2607
|
+
"description": "Used against a cap: build minutes, storage, seats, rate limits. Unlike Progress it can exceed 100%, because a quota can be 130% used and hiding that is how a bill becomes a surprise.",
|
|
2608
|
+
"category": "Operations",
|
|
2609
|
+
"dependencies": [],
|
|
2610
|
+
"registryDependencies": [
|
|
2611
|
+
"fmt",
|
|
2612
|
+
"lib-utils"
|
|
2613
|
+
]
|
|
2614
|
+
},
|
|
2615
|
+
{
|
|
2616
|
+
"name": "response-viewer",
|
|
2617
|
+
"type": "registry:ui",
|
|
2618
|
+
"title": "Response Viewer",
|
|
2619
|
+
"description": "Status, timing, size, headers and body. The three headline figures share one line because they are read together — a 200 that took 4 seconds is a different result from one that took 40ms.",
|
|
2620
|
+
"category": "API",
|
|
2621
|
+
"dependencies": [],
|
|
2622
|
+
"registryDependencies": [
|
|
2623
|
+
"badge",
|
|
2624
|
+
"code-block",
|
|
2625
|
+
"collapsible",
|
|
2626
|
+
"fmt",
|
|
2627
|
+
"http-status",
|
|
2628
|
+
"json-viewer",
|
|
2629
|
+
"lib-highlighter",
|
|
2630
|
+
"lib-styles",
|
|
2631
|
+
"lib-utils"
|
|
2632
|
+
]
|
|
2633
|
+
},
|
|
2634
|
+
{
|
|
2635
|
+
"name": "retrieval-results",
|
|
2636
|
+
"type": "registry:ui",
|
|
2637
|
+
"title": "Retrieval Results",
|
|
2638
|
+
"description": "The chunks a retrieval step pulled, with relevance. Near-misses are dimmed rather than dropped — when an answer is wrong, \"what did it nearly retrieve\" is the useful question.",
|
|
2639
|
+
"category": "AI",
|
|
2640
|
+
"dependencies": [
|
|
2641
|
+
"lucide-react@^1.39.0"
|
|
2642
|
+
],
|
|
2643
|
+
"registryDependencies": [
|
|
2644
|
+
"badge",
|
|
2645
|
+
"confidence-meter",
|
|
2646
|
+
"lib-styles",
|
|
2647
|
+
"lib-utils"
|
|
2648
|
+
]
|
|
2649
|
+
},
|
|
2650
|
+
{
|
|
2651
|
+
"name": "revenue-share-table",
|
|
2652
|
+
"type": "registry:ui",
|
|
2653
|
+
"title": "Revenue Share Table",
|
|
2654
|
+
"description": "How a payout splits between parties. The unallocated remainder gets a named row instead of leaving the reader to subtract, and a split exceeding 100% is called out rather than quietly rendered.",
|
|
2655
|
+
"category": "Affiliate",
|
|
2656
|
+
"dependencies": [],
|
|
2657
|
+
"registryDependencies": [
|
|
2658
|
+
"fmt",
|
|
2659
|
+
"lib-utils",
|
|
2660
|
+
"table"
|
|
2661
|
+
]
|
|
2662
|
+
},
|
|
2663
|
+
{
|
|
2664
|
+
"name": "review-thread",
|
|
2665
|
+
"type": "registry:ui",
|
|
2666
|
+
"title": "Review Thread",
|
|
2667
|
+
"description": "A review conversation anchored to a line of code, with the line shown as context. Resolving is always a callback — a resolved thread is server truth other reviewers see.",
|
|
2668
|
+
"category": "Development",
|
|
2669
|
+
"dependencies": [
|
|
2670
|
+
"lucide-react@^1.39.0"
|
|
2671
|
+
],
|
|
2672
|
+
"registryDependencies": [
|
|
2673
|
+
"avatar",
|
|
2674
|
+
"badge",
|
|
2675
|
+
"button",
|
|
2676
|
+
"lib-styles",
|
|
2677
|
+
"lib-utils",
|
|
2678
|
+
"textarea"
|
|
2679
|
+
]
|
|
2680
|
+
},
|
|
2681
|
+
{
|
|
2682
|
+
"name": "risk-score",
|
|
2683
|
+
"type": "registry:ui",
|
|
2684
|
+
"title": "Risk Score",
|
|
2685
|
+
"description": "A score with the signals that produced it. The factors are the component, not a detail beside it — an analyst cannot approve or decline on \"82\", and an unexplained score is the one thing a regulator will ask you to justify.",
|
|
2686
|
+
"category": "Security",
|
|
2687
|
+
"dependencies": [],
|
|
2688
|
+
"registryDependencies": [
|
|
2689
|
+
"lib-utils"
|
|
2690
|
+
]
|
|
2691
|
+
},
|
|
2692
|
+
{
|
|
2693
|
+
"name": "root-cause-tree",
|
|
2694
|
+
"type": "registry:ui",
|
|
2695
|
+
"title": "Root Cause Tree",
|
|
2696
|
+
"description": "A causal chain from symptom to candidate causes, each with a confidence band. Built on Tree, so it inherits the keyboard model rather than growing a second one.",
|
|
2697
|
+
"category": "AIOps",
|
|
2698
|
+
"dependencies": [],
|
|
2699
|
+
"registryDependencies": [
|
|
2700
|
+
"confidence-meter",
|
|
2701
|
+
"lib-utils",
|
|
2702
|
+
"tree"
|
|
2703
|
+
]
|
|
2704
|
+
},
|
|
2705
|
+
{
|
|
2706
|
+
"name": "round-history",
|
|
2707
|
+
"type": "registry:ui",
|
|
2708
|
+
"title": "Round History",
|
|
2709
|
+
"description": "Recent results as a strip. It carries an explicit note that past rounds do not predict the next one, because a row of results is read as a pattern whether or not one exists.",
|
|
2710
|
+
"category": "Gaming",
|
|
2711
|
+
"dependencies": [],
|
|
2712
|
+
"registryDependencies": [
|
|
2713
|
+
"fmt",
|
|
2714
|
+
"lib-styles",
|
|
2715
|
+
"lib-utils",
|
|
2716
|
+
"tooltip"
|
|
2717
|
+
]
|
|
2718
|
+
},
|
|
2719
|
+
{
|
|
2720
|
+
"name": "runbook-steps",
|
|
2721
|
+
"type": "registry:ui",
|
|
2722
|
+
"title": "Runbook Steps",
|
|
2723
|
+
"description": "Remediation steps, run one at a time and only in order. Offering \"run\" on step four while step two is untried invites exactly the mistake the runbook exists to prevent.",
|
|
2724
|
+
"category": "AIOps",
|
|
2725
|
+
"dependencies": [
|
|
2726
|
+
"lucide-react@^1.39.0"
|
|
2727
|
+
],
|
|
2728
|
+
"registryDependencies": [
|
|
2729
|
+
"badge",
|
|
2730
|
+
"button",
|
|
2731
|
+
"lib-styles",
|
|
2732
|
+
"lib-utils",
|
|
2733
|
+
"spinner"
|
|
2734
|
+
]
|
|
2735
|
+
},
|
|
2736
|
+
{
|
|
2737
|
+
"name": "schema-table",
|
|
2738
|
+
"type": "registry:ui",
|
|
2739
|
+
"title": "Schema Table",
|
|
2740
|
+
"description": "Columns, keys and indexes. Foreign keys name their target inline, because `owner_id` tells you nothing about whether it points at users or accounts — which is exactly what you opened the schema to find out.",
|
|
2741
|
+
"category": "Database",
|
|
2742
|
+
"dependencies": [
|
|
2743
|
+
"lucide-react@^1.39.0"
|
|
2744
|
+
],
|
|
2745
|
+
"registryDependencies": [
|
|
2746
|
+
"badge",
|
|
2747
|
+
"lib-styles",
|
|
2748
|
+
"lib-utils"
|
|
2749
|
+
]
|
|
2750
|
+
},
|
|
2751
|
+
{
|
|
2752
|
+
"name": "schema-viewer",
|
|
2753
|
+
"type": "registry:ui",
|
|
2754
|
+
"title": "Schema Viewer",
|
|
2755
|
+
"description": "JSON Schema as a tree. Required fields are marked on the field itself rather than left in the parent's `required` array — cross-referencing that list is the one job a renderer should do for you.",
|
|
2756
|
+
"category": "API",
|
|
2757
|
+
"dependencies": [
|
|
2758
|
+
"lucide-react@^1.39.0"
|
|
2759
|
+
],
|
|
2760
|
+
"registryDependencies": [
|
|
2761
|
+
"badge",
|
|
2762
|
+
"lib-styles",
|
|
2763
|
+
"lib-utils"
|
|
2764
|
+
]
|
|
2765
|
+
},
|
|
2766
|
+
{
|
|
2767
|
+
"name": "scroll-area",
|
|
2768
|
+
"type": "registry:ui",
|
|
2769
|
+
"title": "Scroll Area",
|
|
2770
|
+
"description": "A scrollable region with a themed scrollbar, styled through the standard scrollbar properties rather than a JavaScript overlay — so native momentum and keyboard scrolling stay intact.",
|
|
2771
|
+
"category": "Navigation",
|
|
2772
|
+
"dependencies": [],
|
|
2773
|
+
"registryDependencies": [
|
|
2774
|
+
"lib-utils"
|
|
2775
|
+
]
|
|
2776
|
+
},
|
|
2777
|
+
{
|
|
2778
|
+
"name": "seed-phrase",
|
|
2779
|
+
"type": "registry:ui",
|
|
2780
|
+
"title": "Seed Phrase",
|
|
2781
|
+
"description": "A recovery phrase, blurred until revealed. Deliberately hostile to convenience: no copy button and no selection, because a seed phrase on the clipboard is readable by every page visited afterwards.",
|
|
2782
|
+
"category": "Crypto",
|
|
2783
|
+
"dependencies": [
|
|
2784
|
+
"lucide-react@^1.39.0"
|
|
2785
|
+
],
|
|
2786
|
+
"registryDependencies": [
|
|
2787
|
+
"button",
|
|
2788
|
+
"lib-styles",
|
|
2789
|
+
"lib-utils"
|
|
2790
|
+
]
|
|
2791
|
+
},
|
|
2792
|
+
{
|
|
2793
|
+
"name": "select",
|
|
2794
|
+
"type": "registry:ui",
|
|
2795
|
+
"title": "Select",
|
|
2796
|
+
"description": "A custom dropdown, not a native select — the trigger matches Input exactly and the panel is real markup. Full keyboard support, type-ahead, and dismissal on Escape or outside click.",
|
|
2797
|
+
"category": "Forms",
|
|
2798
|
+
"dependencies": [
|
|
2799
|
+
"class-variance-authority@^0.7.1",
|
|
2800
|
+
"lucide-react@^1.39.0"
|
|
2801
|
+
],
|
|
2802
|
+
"registryDependencies": [
|
|
2803
|
+
"lib-styles",
|
|
2804
|
+
"lib-utils",
|
|
2805
|
+
"primitive-dismissable",
|
|
2806
|
+
"primitive-popper"
|
|
2807
|
+
]
|
|
2808
|
+
},
|
|
2809
|
+
{
|
|
2810
|
+
"name": "separator",
|
|
2811
|
+
"type": "registry:ui",
|
|
2812
|
+
"title": "Separator",
|
|
2813
|
+
"description": "A rule between sections, horizontal or vertical, optionally with a label set into it.",
|
|
2814
|
+
"category": "Display",
|
|
2815
|
+
"dependencies": [],
|
|
2816
|
+
"registryDependencies": [
|
|
2817
|
+
"lib-utils"
|
|
2818
|
+
]
|
|
2819
|
+
},
|
|
2820
|
+
{
|
|
2821
|
+
"name": "service-status",
|
|
2822
|
+
"type": "registry:ui",
|
|
2823
|
+
"title": "Service Status",
|
|
2824
|
+
"description": "The rows of a status page. The headline banner is derived from the services — a status page whose headline can disagree with its own rows is worse than none.",
|
|
2825
|
+
"category": "Operations",
|
|
2826
|
+
"dependencies": [],
|
|
2827
|
+
"registryDependencies": [
|
|
2828
|
+
"badge",
|
|
2829
|
+
"lib-styles",
|
|
2830
|
+
"lib-utils",
|
|
2831
|
+
"uptime-strip"
|
|
2832
|
+
]
|
|
2833
|
+
},
|
|
2834
|
+
{
|
|
2835
|
+
"name": "session-list",
|
|
2836
|
+
"type": "registry:ui",
|
|
2837
|
+
"title": "Session List",
|
|
2838
|
+
"description": "Active sign-ins, with the current one pinned and unrevokable from here. Signing yourself out of the session you are using is a footgun, so it is simply not offered.",
|
|
2839
|
+
"category": "Auth",
|
|
2840
|
+
"dependencies": [
|
|
2841
|
+
"lucide-react@^1.39.0"
|
|
2842
|
+
],
|
|
2843
|
+
"registryDependencies": [
|
|
2844
|
+
"badge",
|
|
2845
|
+
"button",
|
|
2846
|
+
"fmt",
|
|
2847
|
+
"lib-styles",
|
|
2848
|
+
"lib-utils"
|
|
2849
|
+
]
|
|
2850
|
+
},
|
|
2851
|
+
{
|
|
2852
|
+
"name": "sheet",
|
|
2853
|
+
"type": "registry:ui",
|
|
2854
|
+
"title": "Sheet",
|
|
2855
|
+
"description": "A panel that slides in from an edge. Same native <dialog> machinery as Dialog, pinned to one side — so it inherits the focus trap and Escape handling.",
|
|
2856
|
+
"category": "Overlays",
|
|
2857
|
+
"dependencies": [
|
|
2858
|
+
"lucide-react@^1.39.0"
|
|
2859
|
+
],
|
|
2860
|
+
"registryDependencies": [
|
|
2861
|
+
"button",
|
|
2862
|
+
"lib-styles",
|
|
2863
|
+
"lib-utils",
|
|
2864
|
+
"primitive-dialog",
|
|
2865
|
+
"primitive-slot"
|
|
2866
|
+
]
|
|
2867
|
+
},
|
|
2868
|
+
{
|
|
2869
|
+
"name": "shortcut-sheet",
|
|
2870
|
+
"type": "registry:ui",
|
|
2871
|
+
"title": "Shortcut Sheet",
|
|
2872
|
+
"description": "A keyboard reference grouped by area. Presentational by design — it never binds the keys, because the component that shows a cheat sheet is not the one that owns the handlers.",
|
|
2873
|
+
"category": "Development",
|
|
2874
|
+
"dependencies": [],
|
|
2875
|
+
"registryDependencies": [
|
|
2876
|
+
"kbd",
|
|
2877
|
+
"lib-utils"
|
|
2878
|
+
]
|
|
2879
|
+
},
|
|
2880
|
+
{
|
|
2881
|
+
"name": "sidebar",
|
|
2882
|
+
"type": "registry:ui",
|
|
2883
|
+
"title": "Sidebar",
|
|
2884
|
+
"description": "An inset application frame: a transparent rail that collapses to a 52px icon strip, beside a rounded content panel. Inset is the only layout and icon is the only collapsed state, which is what keeps the geometry exact.",
|
|
2885
|
+
"category": "Navigation",
|
|
2886
|
+
"dependencies": [
|
|
2887
|
+
"lucide-react@^1.39.0"
|
|
2888
|
+
],
|
|
2889
|
+
"registryDependencies": [
|
|
2890
|
+
"lib-styles",
|
|
2891
|
+
"lib-utils",
|
|
2892
|
+
"primitive-media-query",
|
|
2893
|
+
"primitive-slot",
|
|
2894
|
+
"tooltip"
|
|
2895
|
+
]
|
|
2896
|
+
},
|
|
2897
|
+
{
|
|
2898
|
+
"name": "skeleton",
|
|
2899
|
+
"type": "registry:ui",
|
|
2900
|
+
"title": "Skeleton",
|
|
2901
|
+
"description": "A placeholder shape for content that has not arrived. The pulse animates opacity only, so it stays inside the kit motion rule, and stops under prefers-reduced-motion.",
|
|
2902
|
+
"category": "Display",
|
|
2903
|
+
"dependencies": [
|
|
2904
|
+
"class-variance-authority@^0.7.1"
|
|
2905
|
+
],
|
|
2906
|
+
"registryDependencies": [
|
|
2907
|
+
"lib-styles",
|
|
2908
|
+
"lib-utils"
|
|
2909
|
+
]
|
|
2910
|
+
},
|
|
2911
|
+
{
|
|
2912
|
+
"name": "skip-link",
|
|
2913
|
+
"type": "registry:ui",
|
|
2914
|
+
"title": "Skip Link",
|
|
2915
|
+
"description": "The first tab stop: jump past the navigation to the content. Invisible until focused, which is the whole design.",
|
|
2916
|
+
"category": "Utility",
|
|
2917
|
+
"dependencies": [],
|
|
2918
|
+
"registryDependencies": [
|
|
2919
|
+
"lib-styles",
|
|
2920
|
+
"lib-utils"
|
|
2921
|
+
]
|
|
2922
|
+
},
|
|
2923
|
+
{
|
|
2924
|
+
"name": "slider",
|
|
2925
|
+
"type": "registry:ui",
|
|
2926
|
+
"title": "Slider",
|
|
2927
|
+
"description": "Pick a value along a range. A restyled native range input, so arrow keys, Home/End, touch dragging and form submission all work without JavaScript.",
|
|
2928
|
+
"category": "Forms",
|
|
2929
|
+
"dependencies": [
|
|
2930
|
+
"class-variance-authority@^0.7.1"
|
|
2931
|
+
],
|
|
2932
|
+
"registryDependencies": [
|
|
2933
|
+
"lib-styles",
|
|
2934
|
+
"lib-utils"
|
|
2935
|
+
]
|
|
2936
|
+
},
|
|
2937
|
+
{
|
|
2938
|
+
"name": "slo-budget",
|
|
2939
|
+
"type": "registry:ui",
|
|
2940
|
+
"title": "SLO Budget",
|
|
2941
|
+
"description": "An error budget and how fast it is burning. Shows the budget remaining rather than availability achieved — 99.4% against a 99.9% target sounds like a near miss and is a six-times overspend.",
|
|
2942
|
+
"category": "AIOps",
|
|
2943
|
+
"dependencies": [],
|
|
2944
|
+
"registryDependencies": [
|
|
2945
|
+
"fmt",
|
|
2946
|
+
"lib-utils"
|
|
2947
|
+
]
|
|
2948
|
+
},
|
|
2949
|
+
{
|
|
2950
|
+
"name": "sparkline",
|
|
2951
|
+
"type": "registry:ui",
|
|
2952
|
+
"title": "Sparkline",
|
|
2953
|
+
"description": "A microchart with no axes, legend or dependency — plain SVG over a normalised range, sized by whatever box you put it in.",
|
|
2954
|
+
"category": "Display",
|
|
2955
|
+
"dependencies": [],
|
|
2956
|
+
"registryDependencies": [
|
|
2957
|
+
"lib-utils"
|
|
2958
|
+
]
|
|
2959
|
+
},
|
|
2960
|
+
{
|
|
2961
|
+
"name": "spinner",
|
|
2962
|
+
"type": "registry:ui",
|
|
2963
|
+
"title": "Spinner",
|
|
2964
|
+
"description": "An indeterminate busy indicator. Rotation is the one exception the motion rule has to allow — a still spinner says nothing. It stops under prefers-reduced-motion.",
|
|
2965
|
+
"category": "Feedback",
|
|
2966
|
+
"dependencies": [
|
|
2967
|
+
"class-variance-authority@^0.7.1"
|
|
2968
|
+
],
|
|
2969
|
+
"registryDependencies": [
|
|
2970
|
+
"lib-utils"
|
|
2971
|
+
]
|
|
2972
|
+
},
|
|
2973
|
+
{
|
|
2974
|
+
"name": "stack-trace",
|
|
2975
|
+
"type": "registry:ui",
|
|
2976
|
+
"title": "Stack Trace",
|
|
2977
|
+
"description": "A parsed exception with its frames. Library frames collapse behind a count — a stack is typically three frames of your code buried in forty of the framework’s.",
|
|
2978
|
+
"category": "Development",
|
|
2979
|
+
"dependencies": [
|
|
2980
|
+
"lucide-react@^1.39.0"
|
|
2981
|
+
],
|
|
2982
|
+
"registryDependencies": [
|
|
2983
|
+
"badge",
|
|
2984
|
+
"copy-button",
|
|
2985
|
+
"lib-styles",
|
|
2986
|
+
"lib-utils"
|
|
2987
|
+
]
|
|
2988
|
+
},
|
|
2989
|
+
{
|
|
2990
|
+
"name": "staking-panel",
|
|
2991
|
+
"type": "registry:ui",
|
|
2992
|
+
"title": "Staking Panel",
|
|
2993
|
+
"description": "A staking position: stake, rewards, APY and unlock. APY is labelled variable unless told otherwise, because it almost always is — a bare percentage reads as a fixed-term rate.",
|
|
2994
|
+
"category": "Crypto",
|
|
2995
|
+
"dependencies": [
|
|
2996
|
+
"lucide-react@^1.39.0"
|
|
2997
|
+
],
|
|
2998
|
+
"registryDependencies": [
|
|
2999
|
+
"badge",
|
|
3000
|
+
"button",
|
|
3001
|
+
"lib-styles",
|
|
3002
|
+
"lib-utils",
|
|
3003
|
+
"progress"
|
|
3004
|
+
]
|
|
3005
|
+
},
|
|
3006
|
+
{
|
|
3007
|
+
"name": "stat",
|
|
3008
|
+
"type": "registry:ui",
|
|
3009
|
+
"title": "Stat",
|
|
3010
|
+
"description": "One measurement: label, value and how it moved. Which direction counts as healthy is a prop, because a rise in incidents is not a rise in deployments.",
|
|
3011
|
+
"category": "Display",
|
|
3012
|
+
"dependencies": [
|
|
3013
|
+
"lucide-react@^1.39.0"
|
|
3014
|
+
],
|
|
3015
|
+
"registryDependencies": [
|
|
3016
|
+
"lib-styles",
|
|
3017
|
+
"lib-utils"
|
|
3018
|
+
]
|
|
3019
|
+
},
|
|
3020
|
+
{
|
|
3021
|
+
"name": "status-checks",
|
|
3022
|
+
"type": "registry:ui",
|
|
3023
|
+
"title": "Status Checks",
|
|
3024
|
+
"description": "The CI check list on a pull request. The summary states the blocking outcome rather than the raw tally, because \"3 failing\" says nothing about whether you can merge.",
|
|
3025
|
+
"category": "Development",
|
|
3026
|
+
"dependencies": [
|
|
3027
|
+
"lucide-react@^1.39.0"
|
|
3028
|
+
],
|
|
3029
|
+
"registryDependencies": [
|
|
3030
|
+
"badge",
|
|
3031
|
+
"lib-styles",
|
|
3032
|
+
"lib-utils",
|
|
3033
|
+
"spinner"
|
|
3034
|
+
]
|
|
3035
|
+
},
|
|
3036
|
+
{
|
|
3037
|
+
"name": "stepper",
|
|
3038
|
+
"type": "registry:ui",
|
|
3039
|
+
"title": "Stepper",
|
|
3040
|
+
"description": "Progress through a fixed sequence. One `current` index drives the common case; any step can override its own status for a failure or a skip in the middle.",
|
|
3041
|
+
"category": "Navigation",
|
|
3042
|
+
"dependencies": [
|
|
3043
|
+
"lucide-react@^1.39.0"
|
|
3044
|
+
],
|
|
3045
|
+
"registryDependencies": [
|
|
3046
|
+
"lib-styles",
|
|
3047
|
+
"lib-utils",
|
|
3048
|
+
"spinner"
|
|
3049
|
+
]
|
|
3050
|
+
},
|
|
3051
|
+
{
|
|
3052
|
+
"name": "streaming-text",
|
|
3053
|
+
"type": "registry:ui",
|
|
3054
|
+
"title": "Streaming Text",
|
|
3055
|
+
"description": "Text revealed as it arrives, with a caret while it is still coming. Driven by elapsed time rather than a per-character interval, so it never drifts or dumps a backlog after a background tab.",
|
|
3056
|
+
"category": "AI",
|
|
3057
|
+
"dependencies": [],
|
|
3058
|
+
"registryDependencies": [
|
|
3059
|
+
"lib-utils",
|
|
3060
|
+
"primitive-media-query"
|
|
3061
|
+
]
|
|
3062
|
+
},
|
|
3063
|
+
{
|
|
3064
|
+
"name": "subscription-state",
|
|
3065
|
+
"type": "registry:ui",
|
|
3066
|
+
"title": "Subscription State",
|
|
3067
|
+
"description": "Plan, price and what happens next. A cancelled subscription with three weeks of access left is the case people most often get wrong, and a status badge alone never says it.",
|
|
3068
|
+
"category": "Commerce",
|
|
3069
|
+
"dependencies": [],
|
|
3070
|
+
"registryDependencies": [
|
|
3071
|
+
"badge",
|
|
3072
|
+
"button",
|
|
3073
|
+
"fmt",
|
|
3074
|
+
"lib-styles",
|
|
3075
|
+
"lib-utils"
|
|
3076
|
+
]
|
|
3077
|
+
},
|
|
3078
|
+
{
|
|
3079
|
+
"name": "suggestions",
|
|
3080
|
+
"type": "registry:ui",
|
|
3081
|
+
"title": "Suggestions",
|
|
3082
|
+
"description": "Starter prompts, offered before the first message. Buttons rather than a list, because each one performs an action.",
|
|
3083
|
+
"category": "AI",
|
|
3084
|
+
"dependencies": [],
|
|
3085
|
+
"registryDependencies": [
|
|
3086
|
+
"button",
|
|
3087
|
+
"lib-utils"
|
|
3088
|
+
]
|
|
3089
|
+
},
|
|
3090
|
+
{
|
|
3091
|
+
"name": "swap-panel",
|
|
3092
|
+
"type": "registry:ui",
|
|
3093
|
+
"title": "Swap Panel",
|
|
3094
|
+
"description": "The pay/receive form of a token swap. Price impact is surfaced rather than buried behind a details toggle, and above a threshold the action is disabled outright.",
|
|
3095
|
+
"category": "Crypto",
|
|
3096
|
+
"dependencies": [
|
|
3097
|
+
"lucide-react@^1.39.0"
|
|
3098
|
+
],
|
|
3099
|
+
"registryDependencies": [
|
|
3100
|
+
"button",
|
|
3101
|
+
"lib-styles",
|
|
3102
|
+
"lib-utils"
|
|
3103
|
+
]
|
|
3104
|
+
},
|
|
3105
|
+
{
|
|
3106
|
+
"name": "switch",
|
|
3107
|
+
"type": "registry:ui",
|
|
3108
|
+
"title": "Switch",
|
|
3109
|
+
"description": "An instant on/off toggle. A native checkbox with role=\"switch\", so it submits with a form and toggles from the keyboard.",
|
|
3110
|
+
"category": "Forms",
|
|
3111
|
+
"dependencies": [
|
|
3112
|
+
"class-variance-authority@^0.7.1"
|
|
3113
|
+
],
|
|
3114
|
+
"registryDependencies": [
|
|
3115
|
+
"lib-styles",
|
|
3116
|
+
"lib-utils"
|
|
3117
|
+
]
|
|
3118
|
+
},
|
|
3119
|
+
{
|
|
3120
|
+
"name": "symbol-outline",
|
|
3121
|
+
"type": "registry:ui",
|
|
3122
|
+
"title": "Symbol Outline",
|
|
3123
|
+
"description": "A file's symbols as a tree, in file order rather than alphabetical. An outline is a map of the document you are reading; re-sorting it makes the outline and the editor disagree about where things are.",
|
|
3124
|
+
"category": "Code Tools",
|
|
3125
|
+
"dependencies": [
|
|
3126
|
+
"lucide-react@^1.39.0"
|
|
3127
|
+
],
|
|
3128
|
+
"registryDependencies": [
|
|
3129
|
+
"input",
|
|
3130
|
+
"lib-styles",
|
|
3131
|
+
"lib-utils"
|
|
3132
|
+
]
|
|
3133
|
+
},
|
|
3134
|
+
{
|
|
3135
|
+
"name": "table-of-contents",
|
|
3136
|
+
"type": "registry:ui",
|
|
3137
|
+
"title": "Table of Contents",
|
|
3138
|
+
"description": "An anchor list that tracks which heading is on screen, through IntersectionObserver rather than scroll offsets. Reads the DOM by default, so it works for rendered markdown.",
|
|
3139
|
+
"category": "Navigation",
|
|
3140
|
+
"dependencies": [],
|
|
3141
|
+
"registryDependencies": [
|
|
3142
|
+
"lib-styles",
|
|
3143
|
+
"lib-utils"
|
|
3144
|
+
]
|
|
3145
|
+
},
|
|
3146
|
+
{
|
|
3147
|
+
"name": "table",
|
|
3148
|
+
"type": "registry:ui",
|
|
3149
|
+
"title": "Table",
|
|
3150
|
+
"description": "Rows and columns of structured data. The wrapper scrolls rather than the page, so a wide table never forces horizontal scroll on the whole document.",
|
|
3151
|
+
"category": "Display",
|
|
3152
|
+
"dependencies": [],
|
|
3153
|
+
"registryDependencies": [
|
|
3154
|
+
"lib-styles",
|
|
3155
|
+
"lib-utils"
|
|
3156
|
+
]
|
|
3157
|
+
},
|
|
3158
|
+
{
|
|
3159
|
+
"name": "tabs",
|
|
3160
|
+
"type": "registry:ui",
|
|
3161
|
+
"title": "Tabs",
|
|
3162
|
+
"description": "Switch between panels in the same context. Full WAI-ARIA keyboard support: arrows rove, Home and End jump, and only the active tab is in the tab order.",
|
|
3163
|
+
"category": "Navigation",
|
|
3164
|
+
"dependencies": [
|
|
3165
|
+
"class-variance-authority@^0.7.1"
|
|
3166
|
+
],
|
|
3167
|
+
"registryDependencies": [
|
|
3168
|
+
"lib-styles",
|
|
3169
|
+
"lib-utils",
|
|
3170
|
+
"primitive-tabs"
|
|
3171
|
+
]
|
|
3172
|
+
},
|
|
3173
|
+
{
|
|
3174
|
+
"name": "tag-input",
|
|
3175
|
+
"type": "registry:ui",
|
|
3176
|
+
"title": "Tag Input",
|
|
3177
|
+
"description": "Free-text chips for keywords, recipients or labels. Backspace on an empty field removes the last tag, and pasting a comma-separated list splits it rather than making one long tag.",
|
|
3178
|
+
"category": "Forms",
|
|
3179
|
+
"dependencies": [
|
|
3180
|
+
"lucide-react@^1.39.0"
|
|
3181
|
+
],
|
|
3182
|
+
"registryDependencies": [
|
|
3183
|
+
"lib-styles",
|
|
3184
|
+
"lib-utils"
|
|
3185
|
+
]
|
|
3186
|
+
},
|
|
3187
|
+
{
|
|
3188
|
+
"name": "terminal",
|
|
3189
|
+
"type": "registry:ui",
|
|
3190
|
+
"title": "Terminal",
|
|
3191
|
+
"description": "Console output with ANSI colour. Follow-tail sticks to the bottom only while the reader is already there, so scrolling up to read something is never undone by the next line.",
|
|
3192
|
+
"category": "Development",
|
|
3193
|
+
"dependencies": [],
|
|
3194
|
+
"registryDependencies": [
|
|
3195
|
+
"copy-button",
|
|
3196
|
+
"lib-styles",
|
|
3197
|
+
"lib-utils"
|
|
3198
|
+
]
|
|
3199
|
+
},
|
|
3200
|
+
{
|
|
3201
|
+
"name": "test-results",
|
|
3202
|
+
"type": "registry:ui",
|
|
3203
|
+
"title": "Test Results",
|
|
3204
|
+
"description": "A test run with suites, tests and failure output. Failures expand by default and passes stay collapsed — nobody opens a report to read what passed.",
|
|
3205
|
+
"category": "Development",
|
|
3206
|
+
"dependencies": [
|
|
3207
|
+
"lucide-react@^1.39.0"
|
|
3208
|
+
],
|
|
3209
|
+
"registryDependencies": [
|
|
3210
|
+
"badge",
|
|
3211
|
+
"fmt",
|
|
3212
|
+
"lib-styles",
|
|
3213
|
+
"lib-utils",
|
|
3214
|
+
"spinner"
|
|
3215
|
+
]
|
|
3216
|
+
},
|
|
3217
|
+
{
|
|
3218
|
+
"name": "textarea",
|
|
3219
|
+
"type": "registry:ui",
|
|
3220
|
+
"title": "Textarea",
|
|
3221
|
+
"description": "The multi-line sibling of Input. Same variants, same padding rule, with a resize control and no icon slot.",
|
|
3222
|
+
"category": "Forms",
|
|
3223
|
+
"dependencies": [
|
|
3224
|
+
"class-variance-authority@^0.7.1"
|
|
3225
|
+
],
|
|
3226
|
+
"registryDependencies": [
|
|
3227
|
+
"lib-styles",
|
|
3228
|
+
"lib-utils"
|
|
3229
|
+
]
|
|
3230
|
+
},
|
|
3231
|
+
{
|
|
3232
|
+
"name": "theme-toggle",
|
|
3233
|
+
"type": "registry:ui",
|
|
3234
|
+
"title": "Theme Toggle",
|
|
3235
|
+
"description": "Switches the document between light and dark. Uncontrolled by default: it reads the class already on the element rather than flashing to its own idea of the default on mount.",
|
|
3236
|
+
"category": "Utility",
|
|
3237
|
+
"dependencies": [
|
|
3238
|
+
"lucide-react@^1.39.0"
|
|
3239
|
+
],
|
|
3240
|
+
"registryDependencies": [
|
|
3241
|
+
"button"
|
|
3242
|
+
]
|
|
3243
|
+
},
|
|
3244
|
+
{
|
|
3245
|
+
"name": "thread-list",
|
|
3246
|
+
"type": "registry:ui",
|
|
3247
|
+
"title": "Thread List",
|
|
3248
|
+
"description": "An inbox of conversations. Unread is carried by weight and a count, not by colour alone, and the timestamp coarsens with age — a message from March does not need a clock time.",
|
|
3249
|
+
"category": "Messaging",
|
|
3250
|
+
"dependencies": [
|
|
3251
|
+
"lucide-react@^1.39.0"
|
|
3252
|
+
],
|
|
3253
|
+
"registryDependencies": [
|
|
3254
|
+
"avatar",
|
|
3255
|
+
"badge",
|
|
3256
|
+
"fmt",
|
|
3257
|
+
"lib-styles",
|
|
3258
|
+
"lib-utils"
|
|
3259
|
+
]
|
|
3260
|
+
},
|
|
3261
|
+
{
|
|
3262
|
+
"name": "ticket-card",
|
|
3263
|
+
"type": "registry:ui",
|
|
3264
|
+
"title": "Ticket Card",
|
|
3265
|
+
"description": "A support ticket with its SLA. Breach risk is computed from the due time, not from how old the ticket is — a two-week ticket with a monthly SLA is fine, and an hour-old one may not be.",
|
|
3266
|
+
"category": "Messaging",
|
|
3267
|
+
"dependencies": [
|
|
3268
|
+
"lucide-react@^1.39.0"
|
|
3269
|
+
],
|
|
3270
|
+
"registryDependencies": [
|
|
3271
|
+
"avatar",
|
|
3272
|
+
"badge",
|
|
3273
|
+
"fmt",
|
|
3274
|
+
"lib-styles",
|
|
3275
|
+
"lib-utils"
|
|
3276
|
+
]
|
|
3277
|
+
},
|
|
3278
|
+
{
|
|
3279
|
+
"name": "time-picker",
|
|
3280
|
+
"type": "registry:ui",
|
|
3281
|
+
"title": "Time Picker",
|
|
3282
|
+
"description": "Pick a time of day from generated slots. The value is always HH:mm in 24-hour form regardless of how it is displayed — the format is presentation, the value is data.",
|
|
3283
|
+
"category": "Forms",
|
|
3284
|
+
"dependencies": [
|
|
3285
|
+
"lucide-react@^1.39.0"
|
|
3286
|
+
],
|
|
3287
|
+
"registryDependencies": [
|
|
3288
|
+
"lib-styles",
|
|
3289
|
+
"lib-utils",
|
|
3290
|
+
"primitive-dismissable",
|
|
3291
|
+
"primitive-popper"
|
|
3292
|
+
]
|
|
3293
|
+
},
|
|
3294
|
+
{
|
|
3295
|
+
"name": "timeline",
|
|
3296
|
+
"type": "registry:ui",
|
|
3297
|
+
"title": "Timeline",
|
|
3298
|
+
"description": "A vertical run of events sharing one rail — deploys, incidents, review activity, an agent run. The connector stops at the last item instead of dangling past it.",
|
|
3299
|
+
"category": "Navigation",
|
|
3300
|
+
"dependencies": [],
|
|
3301
|
+
"registryDependencies": [
|
|
3302
|
+
"lib-styles",
|
|
3303
|
+
"lib-utils"
|
|
3304
|
+
]
|
|
3305
|
+
},
|
|
3306
|
+
{
|
|
3307
|
+
"name": "timezone-select",
|
|
3308
|
+
"type": "registry:ui",
|
|
3309
|
+
"title": "Timezone Select",
|
|
3310
|
+
"description": "An IANA timezone picker showing each zone's current offset and local time. Zones are named by city, never by abbreviation — \"CST\" is Central, China and Cuba Standard Time.",
|
|
3311
|
+
"category": "Geo",
|
|
3312
|
+
"dependencies": [],
|
|
3313
|
+
"registryDependencies": [
|
|
3314
|
+
"combobox"
|
|
3315
|
+
]
|
|
3316
|
+
},
|
|
3317
|
+
{
|
|
3318
|
+
"name": "toast",
|
|
3319
|
+
"type": "registry:ui",
|
|
3320
|
+
"title": "Toast",
|
|
3321
|
+
"description": "Transient messages that stack and dismiss themselves. A provider plus a useToast() hook rather than a global singleton, so the queue lives in React state and two regions can coexist.",
|
|
3322
|
+
"category": "Feedback",
|
|
3323
|
+
"dependencies": [
|
|
3324
|
+
"lucide-react@^1.39.0"
|
|
3325
|
+
],
|
|
3326
|
+
"registryDependencies": [
|
|
3327
|
+
"button",
|
|
3328
|
+
"lib-styles",
|
|
3329
|
+
"lib-utils"
|
|
3330
|
+
]
|
|
3331
|
+
},
|
|
3332
|
+
{
|
|
3333
|
+
"name": "toggle",
|
|
3334
|
+
"type": "registry:ui",
|
|
3335
|
+
"title": "Toggle",
|
|
3336
|
+
"description": "A button that stays pressed. Uses aria-pressed rather than a checkbox, because this is a control that changes state, not a value submitted with a form.",
|
|
3337
|
+
"category": "Forms",
|
|
3338
|
+
"dependencies": [
|
|
3339
|
+
"class-variance-authority@^0.7.1"
|
|
3340
|
+
],
|
|
3341
|
+
"registryDependencies": [
|
|
3342
|
+
"lib-styles",
|
|
3343
|
+
"lib-utils"
|
|
3344
|
+
]
|
|
3345
|
+
},
|
|
3346
|
+
{
|
|
3347
|
+
"name": "token-amount",
|
|
3348
|
+
"type": "registry:ui",
|
|
3349
|
+
"title": "Token Amount",
|
|
3350
|
+
"description": "A balance formatted from base units without ever touching a float. 1 ETH is 10¹⁸ wei, which exceeds Number.MAX_SAFE_INTEGER by two orders of magnitude — a balance that passes through a JavaScript number is silently wrong.",
|
|
3351
|
+
"category": "Crypto",
|
|
3352
|
+
"dependencies": [],
|
|
3353
|
+
"registryDependencies": [
|
|
3354
|
+
"lib-utils"
|
|
3355
|
+
]
|
|
3356
|
+
},
|
|
3357
|
+
{
|
|
3358
|
+
"name": "token-approvals",
|
|
3359
|
+
"type": "registry:ui",
|
|
3360
|
+
"title": "Token Approvals",
|
|
3361
|
+
"description": "Spending allowances granted to contracts, with revoke. An unlimited approval is stated as \"unlimited\" rather than rendered as 2²⁵⁶−1, which reads like a display bug — it is a standing permission to move the whole balance, forever.",
|
|
3362
|
+
"category": "Crypto",
|
|
3363
|
+
"dependencies": [
|
|
3364
|
+
"lucide-react@^1.39.0"
|
|
3365
|
+
],
|
|
3366
|
+
"registryDependencies": [
|
|
3367
|
+
"badge",
|
|
3368
|
+
"button",
|
|
3369
|
+
"fmt",
|
|
3370
|
+
"lib-styles",
|
|
3371
|
+
"lib-utils",
|
|
3372
|
+
"wallet-address"
|
|
3373
|
+
]
|
|
3374
|
+
},
|
|
3375
|
+
{
|
|
3376
|
+
"name": "token-select",
|
|
3377
|
+
"type": "registry:ui",
|
|
3378
|
+
"title": "Token Select",
|
|
3379
|
+
"description": "A token picker with balances and search. Symbols are not unique — anyone can deploy a contract called \"USDC\" — so unverified tokens are segregated, badged, and shown by contract address rather than the name they claim.",
|
|
3380
|
+
"category": "Crypto",
|
|
3381
|
+
"dependencies": [
|
|
3382
|
+
"lucide-react@^1.39.0"
|
|
3383
|
+
],
|
|
3384
|
+
"registryDependencies": [
|
|
3385
|
+
"badge",
|
|
3386
|
+
"lib-styles",
|
|
3387
|
+
"lib-utils",
|
|
3388
|
+
"primitive-dismissable",
|
|
3389
|
+
"primitive-popper",
|
|
3390
|
+
"wallet-address"
|
|
3391
|
+
]
|
|
3392
|
+
},
|
|
3393
|
+
{
|
|
3394
|
+
"name": "token-usage",
|
|
3395
|
+
"type": "registry:ui",
|
|
3396
|
+
"title": "Token Usage",
|
|
3397
|
+
"description": "How much of a context window is spoken for. The colour crosses to amber at 75% and destructive at 90%, because the number only matters once it is close.",
|
|
3398
|
+
"category": "AI",
|
|
3399
|
+
"dependencies": [],
|
|
3400
|
+
"registryDependencies": [
|
|
3401
|
+
"lib-utils",
|
|
3402
|
+
"progress",
|
|
3403
|
+
"tooltip"
|
|
3404
|
+
]
|
|
3405
|
+
},
|
|
3406
|
+
{
|
|
3407
|
+
"name": "tool-call",
|
|
3408
|
+
"type": "registry:ui",
|
|
3409
|
+
"title": "Tool Call",
|
|
3410
|
+
"description": "One tool invocation inside an assistant turn. Collapsed by default — the arguments are long and the interesting part is that it ran — except a failure, which opens itself.",
|
|
3411
|
+
"category": "AI",
|
|
3412
|
+
"dependencies": [
|
|
3413
|
+
"lucide-react@^1.39.0"
|
|
3414
|
+
],
|
|
3415
|
+
"registryDependencies": [
|
|
3416
|
+
"code-block",
|
|
3417
|
+
"collapsible",
|
|
3418
|
+
"lib-styles",
|
|
3419
|
+
"lib-utils",
|
|
3420
|
+
"spinner"
|
|
3421
|
+
]
|
|
3422
|
+
},
|
|
3423
|
+
{
|
|
3424
|
+
"name": "toolbar",
|
|
3425
|
+
"type": "registry:ui",
|
|
3426
|
+
"title": "Toolbar",
|
|
3427
|
+
"description": "A group of controls that arrow keys move between — the ARIA role ButtonGroup deliberately does not claim, because claiming it without implementing it is worse than not claiming it.",
|
|
3428
|
+
"category": "Navigation",
|
|
3429
|
+
"dependencies": [],
|
|
3430
|
+
"registryDependencies": [
|
|
3431
|
+
"lib-utils",
|
|
3432
|
+
"primitive-focus-trap"
|
|
3433
|
+
]
|
|
3434
|
+
},
|
|
3435
|
+
{
|
|
3436
|
+
"name": "tooltip",
|
|
3437
|
+
"type": "registry:ui",
|
|
3438
|
+
"title": "Tooltip",
|
|
3439
|
+
"description": "A short hint on hover or focus. Focus opens it immediately — a keyboard user has already committed — while pointer hover waits, so sweeping across a toolbar does not fire a row of them.",
|
|
3440
|
+
"category": "Overlays",
|
|
3441
|
+
"dependencies": [],
|
|
3442
|
+
"registryDependencies": [
|
|
3443
|
+
"lib-utils",
|
|
3444
|
+
"primitive-popper"
|
|
3445
|
+
]
|
|
3446
|
+
},
|
|
3447
|
+
{
|
|
3448
|
+
"name": "topology-map",
|
|
3449
|
+
"type": "registry:ui",
|
|
3450
|
+
"title": "Topology Map",
|
|
3451
|
+
"description": "A service dependency graph with health. Laid out in dependency layers, not by a force simulation — during an incident nobody wants to re-find the database because the layout moved.",
|
|
3452
|
+
"category": "AIOps",
|
|
3453
|
+
"dependencies": [],
|
|
3454
|
+
"registryDependencies": [
|
|
3455
|
+
"lib-styles",
|
|
3456
|
+
"lib-utils",
|
|
3457
|
+
"tooltip"
|
|
3458
|
+
]
|
|
3459
|
+
},
|
|
3460
|
+
{
|
|
3461
|
+
"name": "tour",
|
|
3462
|
+
"type": "registry:ui",
|
|
3463
|
+
"title": "Tour",
|
|
3464
|
+
"description": "Guided coach marks over the real interface. Steps point at selectors, so a tour is data next to the copy it belongs to rather than refs threaded through every component it visits.",
|
|
3465
|
+
"category": "Overlays",
|
|
3466
|
+
"dependencies": [
|
|
3467
|
+
"lucide-react@^1.39.0"
|
|
3468
|
+
],
|
|
3469
|
+
"registryDependencies": [
|
|
3470
|
+
"button",
|
|
3471
|
+
"lib-styles",
|
|
3472
|
+
"lib-utils",
|
|
3473
|
+
"primitive-focus-trap",
|
|
3474
|
+
"primitive-popper",
|
|
3475
|
+
"primitive-portal"
|
|
3476
|
+
]
|
|
3477
|
+
},
|
|
3478
|
+
{
|
|
3479
|
+
"name": "traffic-split",
|
|
3480
|
+
"type": "registry:ui",
|
|
3481
|
+
"title": "Traffic Split",
|
|
3482
|
+
"description": "Traffic weights across versions — canary or blue/green. Weights that do not total 100 are called out rather than silently rescaled, because a config adding to 97 is a real state during an edit.",
|
|
3483
|
+
"category": "Operations",
|
|
3484
|
+
"dependencies": [],
|
|
3485
|
+
"registryDependencies": [
|
|
3486
|
+
"badge",
|
|
3487
|
+
"lib-styles",
|
|
3488
|
+
"lib-utils"
|
|
3489
|
+
]
|
|
3490
|
+
},
|
|
3491
|
+
{
|
|
3492
|
+
"name": "transaction-list",
|
|
3493
|
+
"type": "registry:ui",
|
|
3494
|
+
"title": "Transaction List",
|
|
3495
|
+
"description": "Wallet activity grouped by day. Direction is derived against the connected account, not passed in — the same transfer is a send for one wallet and a receive for another, and a self-transfer is both.",
|
|
3496
|
+
"category": "Crypto",
|
|
3497
|
+
"dependencies": [
|
|
3498
|
+
"lucide-react@^1.39.0"
|
|
3499
|
+
],
|
|
3500
|
+
"registryDependencies": [
|
|
3501
|
+
"fmt",
|
|
3502
|
+
"lib-styles",
|
|
3503
|
+
"lib-utils",
|
|
3504
|
+
"wallet-address"
|
|
3505
|
+
]
|
|
3506
|
+
},
|
|
3507
|
+
{
|
|
3508
|
+
"name": "transaction-status",
|
|
3509
|
+
"type": "registry:ui",
|
|
3510
|
+
"title": "Transaction Status",
|
|
3511
|
+
"description": "A transaction from submitted to final. Confirmations are progress toward a threshold, not a tick at one block — chains reorganise, and \"done\" at one confirmation teaches a habit that eventually costs money.",
|
|
3512
|
+
"category": "Crypto",
|
|
3513
|
+
"dependencies": [
|
|
3514
|
+
"lucide-react@^1.39.0"
|
|
3515
|
+
],
|
|
3516
|
+
"registryDependencies": [
|
|
3517
|
+
"fmt",
|
|
3518
|
+
"lib-styles",
|
|
3519
|
+
"lib-utils",
|
|
3520
|
+
"progress",
|
|
3521
|
+
"spinner",
|
|
3522
|
+
"wallet-address"
|
|
3523
|
+
]
|
|
3524
|
+
},
|
|
3525
|
+
{
|
|
3526
|
+
"name": "tree",
|
|
3527
|
+
"type": "registry:ui",
|
|
3528
|
+
"title": "Tree",
|
|
3529
|
+
"description": "A collapsible hierarchy with real keyboard navigation — arrow keys move by what is visible, one tab stop for the whole tree, and ARIA that says where each row sits in its branch.",
|
|
3530
|
+
"category": "Navigation",
|
|
3531
|
+
"dependencies": [
|
|
3532
|
+
"lucide-react@^1.39.0"
|
|
3533
|
+
],
|
|
3534
|
+
"registryDependencies": [
|
|
3535
|
+
"lib-styles",
|
|
3536
|
+
"lib-utils"
|
|
3537
|
+
]
|
|
3538
|
+
},
|
|
3539
|
+
{
|
|
3540
|
+
"name": "two-factor-setup",
|
|
3541
|
+
"type": "registry:ui",
|
|
3542
|
+
"title": "Two-Factor Setup",
|
|
3543
|
+
"description": "Scan, verify, save recovery codes. The recovery step is a step, not a footnote: an authenticator lost with no codes saved is an account lost, and burying them behind a link is why that happens.",
|
|
3544
|
+
"category": "Auth",
|
|
3545
|
+
"dependencies": [
|
|
3546
|
+
"lucide-react@^1.39.0"
|
|
3547
|
+
],
|
|
3548
|
+
"registryDependencies": [
|
|
3549
|
+
"button",
|
|
3550
|
+
"copy-button",
|
|
3551
|
+
"input-otp",
|
|
3552
|
+
"lib-styles",
|
|
3553
|
+
"lib-utils",
|
|
3554
|
+
"stepper"
|
|
3555
|
+
]
|
|
3556
|
+
},
|
|
3557
|
+
{
|
|
3558
|
+
"name": "typing-indicator",
|
|
3559
|
+
"type": "registry:ui",
|
|
3560
|
+
"title": "Typing Indicator",
|
|
3561
|
+
"description": "Who is currently typing. The animation is decorative and hidden from assistive tech; the sentence beside it is the actual content, and it is what gets announced.",
|
|
3562
|
+
"category": "Messaging",
|
|
3563
|
+
"dependencies": [],
|
|
3564
|
+
"registryDependencies": [
|
|
3565
|
+
"avatar",
|
|
3566
|
+
"lib-utils"
|
|
3567
|
+
]
|
|
3568
|
+
},
|
|
3569
|
+
{
|
|
3570
|
+
"name": "typography",
|
|
3571
|
+
"type": "registry:ui",
|
|
3572
|
+
"title": "Typography",
|
|
3573
|
+
"description": "Prose styling for content you did not author element by element — rendered markdown, a CMS body, a changelog. Headings start at h2, since the page already has its h1.",
|
|
3574
|
+
"category": "Display",
|
|
3575
|
+
"dependencies": [],
|
|
3576
|
+
"registryDependencies": [
|
|
3577
|
+
"lib-utils"
|
|
3578
|
+
]
|
|
3579
|
+
},
|
|
3580
|
+
{
|
|
3581
|
+
"name": "upload-list",
|
|
3582
|
+
"type": "registry:ui",
|
|
3583
|
+
"title": "Upload List",
|
|
3584
|
+
"description": "Files in flight, with per-file progress and a retry for the ones that failed. A failed upload keeps its row rather than vanishing — silently dropping it is how people lose work.",
|
|
3585
|
+
"category": "Media",
|
|
3586
|
+
"dependencies": [
|
|
3587
|
+
"lucide-react@^1.39.0"
|
|
3588
|
+
],
|
|
3589
|
+
"registryDependencies": [
|
|
3590
|
+
"attachment-preview",
|
|
3591
|
+
"button",
|
|
3592
|
+
"lib-styles",
|
|
3593
|
+
"lib-utils",
|
|
3594
|
+
"progress"
|
|
3595
|
+
]
|
|
3596
|
+
},
|
|
3597
|
+
{
|
|
3598
|
+
"name": "uptime-strip",
|
|
3599
|
+
"type": "registry:ui",
|
|
3600
|
+
"title": "Uptime Strip",
|
|
3601
|
+
"description": "A run of per-period bars: uptime history or a contribution heatmap. One primitive for both, since they are the same picture — buckets coloured by state or by intensity.",
|
|
3602
|
+
"category": "Operations",
|
|
3603
|
+
"dependencies": [],
|
|
3604
|
+
"registryDependencies": [
|
|
3605
|
+
"lib-utils",
|
|
3606
|
+
"tooltip"
|
|
3607
|
+
]
|
|
3608
|
+
},
|
|
3609
|
+
{
|
|
3610
|
+
"name": "user-menu",
|
|
3611
|
+
"type": "registry:ui",
|
|
3612
|
+
"title": "User Menu",
|
|
3613
|
+
"description": "The account button for a header or sidebar footer. The identity is repeated inside the panel, because on a collapsed rail the trigger is a bare avatar.",
|
|
3614
|
+
"category": "Product",
|
|
3615
|
+
"dependencies": [
|
|
3616
|
+
"lucide-react@^1.39.0"
|
|
3617
|
+
],
|
|
3618
|
+
"registryDependencies": [
|
|
3619
|
+
"avatar",
|
|
3620
|
+
"badge",
|
|
3621
|
+
"dropdown-menu",
|
|
3622
|
+
"lib-styles",
|
|
3623
|
+
"lib-utils"
|
|
3624
|
+
]
|
|
3625
|
+
},
|
|
3626
|
+
{
|
|
3627
|
+
"name": "utm-builder",
|
|
3628
|
+
"type": "registry:ui",
|
|
3629
|
+
"title": "UTM Builder",
|
|
3630
|
+
"description": "Builds a tagged campaign URL. Values are lower-cased with underscores for spaces, because analytics tools treat Summer Sale, summer sale and summer_sale as three separate campaigns and nobody reconciles them later.",
|
|
3631
|
+
"category": "Affiliate",
|
|
3632
|
+
"dependencies": [
|
|
3633
|
+
"lucide-react@^1.39.0"
|
|
3634
|
+
],
|
|
3635
|
+
"registryDependencies": [
|
|
3636
|
+
"copy-button",
|
|
3637
|
+
"input",
|
|
3638
|
+
"label",
|
|
3639
|
+
"lib-styles",
|
|
3640
|
+
"lib-utils"
|
|
3641
|
+
]
|
|
3642
|
+
},
|
|
3643
|
+
{
|
|
3644
|
+
"name": "validator-list",
|
|
3645
|
+
"type": "registry:ui",
|
|
3646
|
+
"title": "Validator List",
|
|
3647
|
+
"description": "Validators with commission, uptime and voting power. Flags membership of the smallest set controlling a third of the stake, and sorts ascending by default — the conventional descending sort pushes delegators toward whoever is already largest.",
|
|
3648
|
+
"category": "Crypto",
|
|
3649
|
+
"dependencies": [
|
|
3650
|
+
"lucide-react@^1.39.0"
|
|
3651
|
+
],
|
|
3652
|
+
"registryDependencies": [
|
|
3653
|
+
"avatar",
|
|
3654
|
+
"badge",
|
|
3655
|
+
"lib-styles",
|
|
3656
|
+
"lib-utils"
|
|
3657
|
+
]
|
|
3658
|
+
},
|
|
3659
|
+
{
|
|
3660
|
+
"name": "video-player",
|
|
3661
|
+
"type": "registry:ui",
|
|
3662
|
+
"title": "Video Player",
|
|
3663
|
+
"description": "A player with a scrubber, quality and subtitle menus. Controls are real buttons on a real timeline, so the keyboard reaches every one of them — a div-based scrubber never does.",
|
|
3664
|
+
"category": "Media",
|
|
3665
|
+
"dependencies": [
|
|
3666
|
+
"lucide-react@^1.39.0"
|
|
3667
|
+
],
|
|
3668
|
+
"registryDependencies": [
|
|
3669
|
+
"button",
|
|
3670
|
+
"dropdown-menu",
|
|
3671
|
+
"lib-styles",
|
|
3672
|
+
"lib-utils"
|
|
3673
|
+
]
|
|
3674
|
+
},
|
|
3675
|
+
{
|
|
3676
|
+
"name": "virtual-list",
|
|
3677
|
+
"type": "registry:ui",
|
|
3678
|
+
"title": "Virtual List",
|
|
3679
|
+
"description": "Renders only the rows in view. DataGrid and LogViewer both render every row they are given, which is fine until a few thousand and then stalls the main thread.",
|
|
3680
|
+
"category": "Navigation",
|
|
3681
|
+
"dependencies": [],
|
|
3682
|
+
"registryDependencies": [
|
|
3683
|
+
"lib-utils"
|
|
3684
|
+
]
|
|
3685
|
+
},
|
|
3686
|
+
{
|
|
3687
|
+
"name": "visually-hidden",
|
|
3688
|
+
"type": "registry:ui",
|
|
3689
|
+
"title": "Visually Hidden",
|
|
3690
|
+
"description": "Hidden from sight, present for screen readers. The clip technique — not display:none or visibility:hidden, both of which remove the element from the accessibility tree entirely.",
|
|
3691
|
+
"category": "Utility",
|
|
3692
|
+
"dependencies": [],
|
|
3693
|
+
"registryDependencies": [
|
|
3694
|
+
"lib-utils",
|
|
3695
|
+
"primitive-slot"
|
|
3696
|
+
]
|
|
3697
|
+
},
|
|
3698
|
+
{
|
|
3699
|
+
"name": "wallet-address",
|
|
3700
|
+
"type": "registry:ui",
|
|
3701
|
+
"title": "Wallet Address",
|
|
3702
|
+
"description": "An address shortened for display but never for copying. The truncation floor is security-relevant: attackers generate lookalikes sharing the first and last characters, so `chars` cannot go below six.",
|
|
3703
|
+
"category": "Crypto",
|
|
3704
|
+
"dependencies": [
|
|
3705
|
+
"lucide-react@^1.39.0"
|
|
3706
|
+
],
|
|
3707
|
+
"registryDependencies": [
|
|
3708
|
+
"copy-button",
|
|
3709
|
+
"lib-styles",
|
|
3710
|
+
"lib-utils"
|
|
3711
|
+
]
|
|
3712
|
+
},
|
|
3713
|
+
{
|
|
3714
|
+
"name": "wallet-connect",
|
|
3715
|
+
"type": "registry:ui",
|
|
3716
|
+
"title": "Wallet Connect",
|
|
3717
|
+
"description": "Connect button and connected account in one control. Wrong-network outranks showing a balance — a figure from the wrong ledger is worse than none, because it looks authoritative.",
|
|
3718
|
+
"category": "Crypto",
|
|
3719
|
+
"dependencies": [
|
|
3720
|
+
"lucide-react@^1.39.0"
|
|
3721
|
+
],
|
|
3722
|
+
"registryDependencies": [
|
|
3723
|
+
"badge",
|
|
3724
|
+
"button",
|
|
3725
|
+
"dropdown-menu",
|
|
3726
|
+
"lib-styles",
|
|
3727
|
+
"lib-utils",
|
|
3728
|
+
"wallet-address"
|
|
3729
|
+
]
|
|
3730
|
+
},
|
|
3731
|
+
{
|
|
3732
|
+
"name": "webhook-inspector",
|
|
3733
|
+
"type": "registry:ui",
|
|
3734
|
+
"title": "Webhook Inspector",
|
|
3735
|
+
"description": "Inbound deliveries with payload and response. Signature status is its own field, never folded into the status code — a 200 with an invalid signature is a forged request your handler accepted.",
|
|
3736
|
+
"category": "API",
|
|
3737
|
+
"dependencies": [
|
|
3738
|
+
"lucide-react@^1.39.0"
|
|
3739
|
+
],
|
|
3740
|
+
"registryDependencies": [
|
|
3741
|
+
"badge",
|
|
3742
|
+
"button",
|
|
3743
|
+
"fmt",
|
|
3744
|
+
"http-status",
|
|
3745
|
+
"json-viewer",
|
|
3746
|
+
"lib-styles",
|
|
3747
|
+
"lib-utils"
|
|
3748
|
+
]
|
|
3749
|
+
},
|
|
3750
|
+
{
|
|
3751
|
+
"name": "websocket-frames",
|
|
3752
|
+
"type": "registry:ui",
|
|
3753
|
+
"title": "WebSocket Frames",
|
|
3754
|
+
"description": "A frame log with the delta between frames. Protocol bugs are about the gap — a heartbeat that stopped arriving is obvious as a 30-second delta and invisible as a list of clock times.",
|
|
3755
|
+
"category": "Runtime",
|
|
3756
|
+
"dependencies": [
|
|
3757
|
+
"lucide-react@^1.39.0"
|
|
3758
|
+
],
|
|
3759
|
+
"registryDependencies": [
|
|
3760
|
+
"badge",
|
|
3761
|
+
"fmt",
|
|
3762
|
+
"lib-styles",
|
|
3763
|
+
"lib-utils",
|
|
3764
|
+
"select"
|
|
3765
|
+
]
|
|
3766
|
+
},
|
|
3767
|
+
{
|
|
3768
|
+
"name": "primitive-collapsible",
|
|
3769
|
+
"type": "registry:primitive",
|
|
3770
|
+
"title": "Collapsible",
|
|
3771
|
+
"description": "A single panel that expands and collapses. The open height is measured rather than assumed, because height: auto cannot be transitioned.",
|
|
3772
|
+
"category": "Navigation",
|
|
3773
|
+
"dependencies": [],
|
|
3774
|
+
"registryDependencies": []
|
|
3775
|
+
},
|
|
3776
|
+
{
|
|
3777
|
+
"name": "primitive-dialog",
|
|
3778
|
+
"type": "registry:primitive",
|
|
3779
|
+
"title": "Dialog",
|
|
3780
|
+
"description": "A modal window, built on the native <dialog> element — so the focus trap, background inerting, Escape handling and top-layer stacking come from the platform rather than from JavaScript.",
|
|
3781
|
+
"category": "Overlays",
|
|
3782
|
+
"dependencies": [],
|
|
3783
|
+
"registryDependencies": []
|
|
3784
|
+
},
|
|
3785
|
+
{
|
|
3786
|
+
"name": "primitive-dismissable",
|
|
3787
|
+
"type": "registry:primitive",
|
|
3788
|
+
"title": "dismissable",
|
|
3789
|
+
"dependencies": [],
|
|
3790
|
+
"registryDependencies": []
|
|
3791
|
+
},
|
|
3792
|
+
{
|
|
3793
|
+
"name": "primitive-field",
|
|
3794
|
+
"type": "registry:primitive",
|
|
3795
|
+
"title": "Field",
|
|
3796
|
+
"description": "Wires a label, a control, help text and an error message together — id, aria-describedby and aria-invalid, all of which are easy to get one short of by hand.",
|
|
3797
|
+
"category": "Forms",
|
|
3798
|
+
"dependencies": [],
|
|
3799
|
+
"registryDependencies": []
|
|
3800
|
+
},
|
|
3801
|
+
{
|
|
3802
|
+
"name": "primitive-focus-trap",
|
|
3803
|
+
"type": "registry:primitive",
|
|
3804
|
+
"title": "focus-trap",
|
|
3805
|
+
"dependencies": [],
|
|
3806
|
+
"registryDependencies": []
|
|
3807
|
+
},
|
|
3808
|
+
{
|
|
3809
|
+
"name": "primitive-media-query",
|
|
3810
|
+
"type": "registry:primitive",
|
|
3811
|
+
"title": "media-query",
|
|
3812
|
+
"dependencies": [],
|
|
3813
|
+
"registryDependencies": []
|
|
3814
|
+
},
|
|
3815
|
+
{
|
|
3816
|
+
"name": "primitive-popper",
|
|
3817
|
+
"type": "registry:primitive",
|
|
3818
|
+
"title": "popper",
|
|
3819
|
+
"dependencies": [],
|
|
3820
|
+
"registryDependencies": []
|
|
3821
|
+
},
|
|
3822
|
+
{
|
|
3823
|
+
"name": "primitive-portal",
|
|
3824
|
+
"type": "registry:primitive",
|
|
3825
|
+
"title": "portal",
|
|
3826
|
+
"dependencies": [],
|
|
3827
|
+
"registryDependencies": []
|
|
3828
|
+
},
|
|
3829
|
+
{
|
|
3830
|
+
"name": "primitive-radio-group",
|
|
3831
|
+
"type": "registry:primitive",
|
|
3832
|
+
"title": "Radio Group",
|
|
3833
|
+
"description": "One choice out of several. Built on native radio inputs, so arrow-key roving, form submission and the single-selection invariant come from the platform.",
|
|
3834
|
+
"category": "Forms",
|
|
3835
|
+
"dependencies": [],
|
|
3836
|
+
"registryDependencies": []
|
|
3837
|
+
},
|
|
3838
|
+
{
|
|
3839
|
+
"name": "primitive-router",
|
|
3840
|
+
"type": "registry:primitive",
|
|
3841
|
+
"title": "router",
|
|
3842
|
+
"dependencies": [],
|
|
3843
|
+
"registryDependencies": []
|
|
3844
|
+
},
|
|
3845
|
+
{
|
|
3846
|
+
"name": "primitive-slot",
|
|
3847
|
+
"type": "registry:primitive",
|
|
3848
|
+
"title": "slot",
|
|
3849
|
+
"dependencies": [],
|
|
3850
|
+
"registryDependencies": [
|
|
3851
|
+
"lib-utils"
|
|
3852
|
+
]
|
|
3853
|
+
},
|
|
3854
|
+
{
|
|
3855
|
+
"name": "primitive-tabs",
|
|
3856
|
+
"type": "registry:primitive",
|
|
3857
|
+
"title": "Tabs",
|
|
3858
|
+
"description": "Switch between panels in the same context. Full WAI-ARIA keyboard support: arrows rove, Home and End jump, and only the active tab is in the tab order.",
|
|
3859
|
+
"category": "Navigation",
|
|
3860
|
+
"dependencies": [],
|
|
3861
|
+
"registryDependencies": []
|
|
3862
|
+
},
|
|
3863
|
+
{
|
|
3864
|
+
"name": "lib-date",
|
|
3865
|
+
"type": "registry:lib",
|
|
3866
|
+
"title": "date",
|
|
3867
|
+
"dependencies": [],
|
|
3868
|
+
"registryDependencies": []
|
|
3869
|
+
},
|
|
3870
|
+
{
|
|
3871
|
+
"name": "lib-highlighter",
|
|
3872
|
+
"type": "registry:lib",
|
|
3873
|
+
"title": "highlighter",
|
|
3874
|
+
"dependencies": [
|
|
3875
|
+
"shiki@^4.4.3"
|
|
3876
|
+
],
|
|
3877
|
+
"registryDependencies": []
|
|
3878
|
+
},
|
|
3879
|
+
{
|
|
3880
|
+
"name": "lib-styles",
|
|
3881
|
+
"type": "registry:lib",
|
|
3882
|
+
"title": "styles",
|
|
3883
|
+
"dependencies": [],
|
|
3884
|
+
"registryDependencies": []
|
|
3885
|
+
},
|
|
3886
|
+
{
|
|
3887
|
+
"name": "lib-use-clipboard",
|
|
3888
|
+
"type": "registry:lib",
|
|
3889
|
+
"title": "use-clipboard",
|
|
3890
|
+
"dependencies": [],
|
|
3891
|
+
"registryDependencies": []
|
|
3892
|
+
},
|
|
3893
|
+
{
|
|
3894
|
+
"name": "lib-utils",
|
|
3895
|
+
"type": "registry:lib",
|
|
3896
|
+
"title": "utils",
|
|
3897
|
+
"dependencies": [
|
|
3898
|
+
"cn@^0.2.4"
|
|
3899
|
+
],
|
|
3900
|
+
"registryDependencies": []
|
|
3901
|
+
},
|
|
3902
|
+
{
|
|
3903
|
+
"name": "theme",
|
|
3904
|
+
"type": "registry:theme",
|
|
3905
|
+
"title": "Theme",
|
|
3906
|
+
"description": "Colour tokens, the surface ladder, and the keyframes components rely on.",
|
|
3907
|
+
"dependencies": [
|
|
3908
|
+
"tailwindcss@^4.3.3",
|
|
3909
|
+
"tw-animate-css@^1.4.0"
|
|
3910
|
+
],
|
|
3911
|
+
"registryDependencies": []
|
|
3912
|
+
}
|
|
3913
|
+
]
|
|
3914
|
+
}
|