@poodle64/ui 2026.10.16 → 2026.10.18
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/README.md +135 -11
- package/dist/components/feedback/report-widget.svelte +4 -1
- package/dist/components/feedback/report-widget.svelte.d.ts +1 -0
- package/dist/components/ui/app-identity/app-identity.svelte +7 -2
- package/dist/components/ui/app-shell/texture.d.ts +5 -5
- package/dist/components/ui/app-shell/texture.js +3 -3
- package/dist/components/ui/breadcrumbs/breadcrumbs.svelte +70 -0
- package/dist/components/ui/breadcrumbs/breadcrumbs.svelte.d.ts +32 -0
- package/dist/components/ui/breadcrumbs/index.d.ts +2 -0
- package/dist/components/ui/breadcrumbs/index.js +2 -0
- package/dist/components/ui/content-skeleton/content-skeleton.svelte +94 -0
- package/dist/components/ui/content-skeleton/content-skeleton.svelte.d.ts +25 -0
- package/dist/components/ui/content-skeleton/index.d.ts +2 -0
- package/dist/components/ui/content-skeleton/index.js +2 -0
- package/dist/components/ui/document-reader/document-reader.svelte +336 -0
- package/dist/components/ui/document-reader/document-reader.svelte.d.ts +65 -0
- package/dist/components/ui/document-reader/index.d.ts +2 -0
- package/dist/components/ui/document-reader/index.js +2 -0
- package/dist/components/ui/graph-canvas/graph-canvas.svelte +922 -0
- package/dist/components/ui/graph-canvas/graph-canvas.svelte.d.ts +73 -0
- package/dist/components/ui/graph-canvas/index.d.ts +3 -0
- package/dist/components/ui/graph-canvas/index.js +2 -0
- package/dist/components/ui/graph-canvas/scene.d.ts +107 -0
- package/dist/components/ui/graph-canvas/scene.js +562 -0
- package/dist/components/ui/graph-canvas/types.d.ts +33 -0
- package/dist/components/ui/graph-canvas/types.js +1 -0
- package/dist/components/ui/page-container/index.d.ts +2 -0
- package/dist/components/ui/page-container/index.js +2 -0
- package/dist/components/ui/page-container/page-container.svelte +39 -0
- package/dist/components/ui/page-container/page-container.svelte.d.ts +24 -0
- package/dist/components/ui/page-header/page-header.svelte +12 -7
- package/dist/components/ui/page-header/page-header.svelte.d.ts +3 -2
- package/dist/components/ui/page-section/index.d.ts +2 -0
- package/dist/components/ui/page-section/index.js +2 -0
- package/dist/components/ui/page-section/page-section.svelte +92 -0
- package/dist/components/ui/page-section/page-section.svelte.d.ts +36 -0
- package/dist/components/ui/sheet/index.d.ts +13 -0
- package/dist/components/ui/sheet/index.js +15 -0
- package/dist/components/ui/sheet/sheet-body.svelte +21 -0
- package/dist/components/ui/sheet/sheet-body.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-close.svelte +11 -0
- package/dist/components/ui/sheet/sheet-close.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-content.svelte +70 -0
- package/dist/components/ui/sheet/sheet-content.svelte.d.ts +37 -0
- package/dist/components/ui/sheet/sheet-description.svelte +20 -0
- package/dist/components/ui/sheet/sheet-description.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-footer.svelte +23 -0
- package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-header.svelte +21 -0
- package/dist/components/ui/sheet/sheet-header.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte +20 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-portal.svelte +7 -0
- package/dist/components/ui/sheet/sheet-portal.svelte.d.ts +3 -0
- package/dist/components/ui/sheet/sheet-title.svelte +21 -0
- package/dist/components/ui/sheet/sheet-title.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte +11 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet.svelte +7 -0
- package/dist/components/ui/sheet/sheet.svelte.d.ts +3 -0
- package/dist/components/ui/skeleton/skeleton.svelte +1 -1
- package/dist/styles.css +8 -0
- package/package.json +4 -2
- package/registry/component-map.json +58 -5
- package/registry/component-map.md +17 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@poodle64/ui",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.18",
|
|
4
4
|
"description": "Household shared component layer: shadcn-svelte primitives (bits-ui) plus the composed page chrome every app builds its routes from, restyled by each app's @poodle64/design-tokens alias layer. One fix reaches every app.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
"@lucide/svelte": "^1.25.0",
|
|
84
84
|
"@tanstack/table-core": "^8.21.3",
|
|
85
85
|
"clsx": "^2.1.1",
|
|
86
|
+
"d3-force": "^3.0.0",
|
|
86
87
|
"esm-env": "^1.2.2",
|
|
87
88
|
"html-to-image": "^1.11.13",
|
|
88
89
|
"tailwind-merge": "^3.6.0",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"@tailwindcss/cli": "^4.3.2",
|
|
98
99
|
"@testing-library/jest-dom": "^7.0.0",
|
|
99
100
|
"@testing-library/svelte": "^5.4.2",
|
|
101
|
+
"@types/d3-force": "^3.0.10",
|
|
100
102
|
"@types/node": "^22.20.1",
|
|
101
103
|
"bits-ui": "^2.18.1",
|
|
102
104
|
"formsnap": "^2.0.1",
|
|
@@ -119,7 +121,7 @@
|
|
|
119
121
|
"registry:check": "node scripts/generate-registry.mjs --check",
|
|
120
122
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
121
123
|
"test": "pnpm run build && vitest run",
|
|
122
|
-
"test:browser": "pnpm run harness:build && node harness/drive.mjs",
|
|
124
|
+
"test:browser": "pnpm run harness:build && node harness/drive.mjs && node harness/graph.mjs",
|
|
123
125
|
"prepublishOnly": "pnpm run build",
|
|
124
126
|
"harness:build": "vite build --config harness/vite.config.ts && tailwindcss -i harness/harness.css -o harness/dist/app.css --minify",
|
|
125
127
|
"harness:serve": "python3 -m http.server 4180 --directory harness/dist"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"package": "@poodle64/ui",
|
|
4
|
-
"version": "2026.10.
|
|
4
|
+
"version": "2026.10.18",
|
|
5
5
|
"generatedBy": "scripts/generate-registry.mjs",
|
|
6
6
|
"source": "scripts/situations.json + package source (DO NOT EDIT the outputs by hand)",
|
|
7
|
-
"componentCount":
|
|
8
|
-
"situationCount":
|
|
7
|
+
"componentCount": 76,
|
|
8
|
+
"situationCount": 20
|
|
9
9
|
},
|
|
10
10
|
"situations": [
|
|
11
11
|
{
|
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
{
|
|
292
292
|
"key": "library-data",
|
|
293
293
|
"title": "Library data the app fetched",
|
|
294
|
-
"description": "The estate's shared document-library surfaces — a faceted catalogue, one collection's detail, one document's detail, a ranked search answer — rendered from plain props the app maps its own API responses into. The package never fetches and never routes: the app owns the query, the offset and every link. Configuration is the schema-driven half (SchemaForm); library data is fixed components because its shape is stable.",
|
|
294
|
+
"description": "The estate's shared document-library surfaces — a faceted catalogue, one collection's detail, one document's detail, a document to read with its contents, a ranked search answer — rendered from plain props the app maps its own API responses into. The package never fetches and never routes: the app owns the query, the offset and every link. Configuration is the schema-driven half (SchemaForm); library data is fixed components because its shape is stable.",
|
|
295
295
|
"components": [
|
|
296
296
|
{
|
|
297
297
|
"name": "LibraryBrowse",
|
|
@@ -314,6 +314,13 @@
|
|
|
314
314
|
"props": "document, loading?, error?, collectionHref?, onOpenCollection?, actions?, children?",
|
|
315
315
|
"insteadOf": "a bespoke document page: identity dl, locations, tags and memberships hand-laid-out per app"
|
|
316
316
|
},
|
|
317
|
+
{
|
|
318
|
+
"name": "DocumentReader",
|
|
319
|
+
"dir": "document-reader",
|
|
320
|
+
"import": "@poodle64/ui/document-reader",
|
|
321
|
+
"props": "title?, subtitle?, breadcrumbs?, meta?, actions?, html?, children?, contents?, contentsLabel?, aside?, footer?, loading?, error?, onRetry?",
|
|
322
|
+
"insteadOf": "a hand-built markdown page: its own h1, back row, table of contents, scroll-spy and max-w-4xl; or a document body in a box under DocumentDetail"
|
|
323
|
+
},
|
|
317
324
|
{
|
|
318
325
|
"name": "SearchResults",
|
|
319
326
|
"dir": "search-results",
|
|
@@ -344,10 +351,24 @@
|
|
|
344
351
|
}
|
|
345
352
|
]
|
|
346
353
|
},
|
|
354
|
+
{
|
|
355
|
+
"key": "relations-between-things",
|
|
356
|
+
"title": "Who is connected to what",
|
|
357
|
+
"description": "People, organisations, sources or any entities as nodes and their relations as edges: a live, explorable network rather than a list of links.",
|
|
358
|
+
"components": [
|
|
359
|
+
{
|
|
360
|
+
"name": "GraphCanvas",
|
|
361
|
+
"dir": "graph-canvas",
|
|
362
|
+
"import": "@poodle64/ui/graph-canvas",
|
|
363
|
+
"props": "nodes, edges, kinds?, selected?, hiddenKinds?, directed?, onselect?, onactivate?, detail?",
|
|
364
|
+
"insteadOf": "a hand-built canvas or SVG force layout, or a graph library's own chrome and colours"
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
},
|
|
347
368
|
{
|
|
348
369
|
"key": "page-frame",
|
|
349
370
|
"title": "The frame every route shares",
|
|
350
|
-
"description": "The standing chrome — the app shell and its nav, the one page-title treatment, the persistent right-hand context column, a foldable working list beside the page's own content.",
|
|
371
|
+
"description": "The standing chrome — the app shell and its nav, the one page-title treatment and its trail, the page's own container and sections, the persistent right-hand context column, a foldable working list beside the page's own content.",
|
|
351
372
|
"components": [
|
|
352
373
|
{
|
|
353
374
|
"name": "AppShell",
|
|
@@ -377,6 +398,27 @@
|
|
|
377
398
|
"props": "title?, eyebrow?, breadcrumbs?, icon?, subtitle?, info?, meta?, actions?",
|
|
378
399
|
"insteadOf": "a hand-written <h1> and title bar (the drift gate fails this)"
|
|
379
400
|
},
|
|
401
|
+
{
|
|
402
|
+
"name": "Breadcrumbs",
|
|
403
|
+
"dir": "breadcrumbs",
|
|
404
|
+
"import": "@poodle64/ui/breadcrumbs",
|
|
405
|
+
"props": "items, label?",
|
|
406
|
+
"insteadOf": "a hand-written chevron trail in PageHeader's breadcrumbs snippet; PageHeader takes the same items as `breadcrumbs={[…]}`"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"name": "PageContainer",
|
|
410
|
+
"dir": "page-container",
|
|
411
|
+
"import": "@poodle64/ui/page-container",
|
|
412
|
+
"props": "children",
|
|
413
|
+
"insteadOf": "a per-page wrapper picking its own vertical rhythm (space-y-6, gap-10, …)"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"name": "PageSection",
|
|
417
|
+
"dir": "page-section",
|
|
418
|
+
"import": "@poodle64/ui/page-section",
|
|
419
|
+
"props": "title, level?, description?, count?, actions?, children?, id?",
|
|
420
|
+
"insteadOf": "a hand-styled section heading (an uppercase kicker, text-lg font-semibold, a display h2) and its own gap to the content under it"
|
|
421
|
+
},
|
|
380
422
|
{
|
|
381
423
|
"name": "RecordSwitcher",
|
|
382
424
|
"dir": "record-switcher",
|
|
@@ -489,6 +531,13 @@
|
|
|
489
531
|
"props": "message?",
|
|
490
532
|
"insteadOf": "a bare spinner or 'Loading…' you place by hand"
|
|
491
533
|
},
|
|
534
|
+
{
|
|
535
|
+
"name": "ContentSkeleton",
|
|
536
|
+
"dir": "content-skeleton",
|
|
537
|
+
"import": "@poodle64/ui/content-skeleton",
|
|
538
|
+
"props": "shape?, count?, label?",
|
|
539
|
+
"insteadOf": "bare Skeleton boxes sized by hand (h-44 rounded-xl, h-24) standing in for a list, tiles or a document body while the page's header is already drawn"
|
|
540
|
+
},
|
|
492
541
|
{
|
|
493
542
|
"name": "ErrorState",
|
|
494
543
|
"dir": "error-state",
|
|
@@ -576,6 +625,10 @@
|
|
|
576
625
|
"dir": "separator",
|
|
577
626
|
"import": "@poodle64/ui/separator"
|
|
578
627
|
},
|
|
628
|
+
{
|
|
629
|
+
"dir": "sheet",
|
|
630
|
+
"import": "@poodle64/ui/sheet"
|
|
631
|
+
},
|
|
579
632
|
{
|
|
580
633
|
"dir": "skeleton",
|
|
581
634
|
"import": "@poodle64/ui/skeleton"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @poodle64/ui — situation → component map
|
|
2
2
|
|
|
3
3
|
<!-- GENERATED by scripts/generate-registry.mjs from scripts/situations.json + package source. DO NOT EDIT. -->
|
|
4
|
-
Generated from `@poodle64/ui@2026.10.
|
|
4
|
+
Generated from `@poodle64/ui@2026.10.18`. 76 components, 20 situations.
|
|
5
5
|
|
|
6
6
|
**Read this before writing a `<div>`.** Find the SITUATION you are in below, then compose the component named for it — do not hand-build it from raw `Card` or utility classes. Import is `import { Name } from '<import path>'`. Props marked `?` are optional. This map is the retrieval step the [`frontend-design` skill] makes mandatory; the [CHI 2026 study] measured composing-from-a-registry at 95% design-system compliance against 71% for writing the CSS from a prose style guide.
|
|
7
7
|
|
|
@@ -128,13 +128,14 @@ _A config object whose shape arrives at runtime as a JSON Schema plus a JSON For
|
|
|
128
128
|
|
|
129
129
|
## Library data the app fetched
|
|
130
130
|
|
|
131
|
-
_The estate's shared document-library surfaces — a faceted catalogue, one collection's detail, one document's detail, a ranked search answer — rendered from plain props the app maps its own API responses into. The package never fetches and never routes: the app owns the query, the offset and every link. Configuration is the schema-driven half (SchemaForm); library data is fixed components because its shape is stable._
|
|
131
|
+
_The estate's shared document-library surfaces — a faceted catalogue, one collection's detail, one document's detail, a document to read with its contents, a ranked search answer — rendered from plain props the app maps its own API responses into. The package never fetches and never routes: the app owns the query, the offset and every link. Configuration is the schema-driven half (SchemaForm); library data is fixed components because its shape is stable._
|
|
132
132
|
|
|
133
133
|
| Component | Import | Key props | Reach for it instead of |
|
|
134
134
|
| --- | --- | --- | --- |
|
|
135
135
|
| `LibraryBrowse` | `@poodle64/ui/library-browse` | `documents, facets?, query?, total?, offset?, limit?, loading?, error?, onQueryChange?, onFacetChange?, onPageChange?, documentHref?, onOpenDocument?, toolbar?` | a hand-built catalogue page: search box, facet rail, filter chips, results table and pager re-derived per app |
|
|
136
136
|
| `CollectionDetail` | `@poodle64/ui/collection-detail` | `collection, stats?, documents?, documentsTotal?, loading?, error?, documentsLoading?, documentsError?, onPageChange?, documentHref?, onOpenDocument?, actions?, children?` | a bespoke collection page assembled from raw Card, a hand-built table and its own stat rows |
|
|
137
137
|
| `DocumentDetail` | `@poodle64/ui/document-detail` | `document, loading?, error?, collectionHref?, onOpenCollection?, actions?, children?` | a bespoke document page: identity dl, locations, tags and memberships hand-laid-out per app |
|
|
138
|
+
| `DocumentReader` | `@poodle64/ui/document-reader` | `title?, subtitle?, breadcrumbs?, meta?, actions?, html?, children?, contents?, contentsLabel?, aside?, footer?, loading?, error?, onRetry?` | a hand-built markdown page: its own h1, back row, table of contents, scroll-spy and max-w-4xl; or a document body in a box under DocumentDetail |
|
|
138
139
|
| `SearchResults` | `@poodle64/ui/search-results` | `results, query?, total?, loading?, error?, resultHref?, onOpen?, onRetry?` | a hand-built ranked hit list minting its own highlight and relevance styling |
|
|
139
140
|
|
|
140
141
|
## A document a machine read, with evidence outlined
|
|
@@ -146,9 +147,17 @@ _One page at a time, fitted to its pane both ways so an A4 statement and a tall
|
|
|
146
147
|
| `PageCanvas` | `@poodle64/ui/page-canvas` | `pageCount, page, currentPage?, regions?, lookedRegions?, activeRegionId?, focusedRegionId?, zoom?` | a hand-built page viewer per app (godswood's DocumentViewer, pebblestone's PdfViewer) each re-deriving fit/zoom/pan, now with no way to outline what was read (#839) |
|
|
147
148
|
| `DocumentPane` | `@poodle64/ui/document-pane` | `title, subtitle?, pages?, pageCount?, page?, currentPage?, zoom?, actions?, onClose?` | a PageCanvas framed by hand with its own title row, download and close; the pane the record page opens a document in, beside the column or in its place |
|
|
148
149
|
|
|
150
|
+
## Who is connected to what
|
|
151
|
+
|
|
152
|
+
_People, organisations, sources or any entities as nodes and their relations as edges: a live, explorable network rather than a list of links._
|
|
153
|
+
|
|
154
|
+
| Component | Import | Key props | Reach for it instead of |
|
|
155
|
+
| --- | --- | --- | --- |
|
|
156
|
+
| `GraphCanvas` | `@poodle64/ui/graph-canvas` | `nodes, edges, kinds?, selected?, hiddenKinds?, directed?, onselect?, onactivate?, detail?` | a hand-built canvas or SVG force layout, or a graph library's own chrome and colours |
|
|
157
|
+
|
|
149
158
|
## The frame every route shares
|
|
150
159
|
|
|
151
|
-
_The standing chrome — the app shell and its nav, the one page-title treatment, the persistent right-hand context column, a foldable working list beside the page's own content._
|
|
160
|
+
_The standing chrome — the app shell and its nav, the one page-title treatment and its trail, the page's own container and sections, the persistent right-hand context column, a foldable working list beside the page's own content._
|
|
152
161
|
|
|
153
162
|
| Component | Import | Key props | Reach for it instead of |
|
|
154
163
|
| --- | --- | --- | --- |
|
|
@@ -156,6 +165,9 @@ _The standing chrome — the app shell and its nav, the one page-title treatment
|
|
|
156
165
|
| `ShellControls` | `@poodle64/ui/app-shell` | `children` | a scope row (entity, financial year, chart/table) hand-placed above the page body; the shell's top bar carries it |
|
|
157
166
|
| `Segmented` | `@poodle64/ui/segmented` | `value, options, label, size?` | a hand-built row of aria-pressed buttons for a small fixed choice |
|
|
158
167
|
| `PageHeader` | `@poodle64/ui/page-header` | `title?, eyebrow?, breadcrumbs?, icon?, subtitle?, info?, meta?, actions?` | a hand-written <h1> and title bar (the drift gate fails this) |
|
|
168
|
+
| `Breadcrumbs` | `@poodle64/ui/breadcrumbs` | `items, label?` | a hand-written chevron trail in PageHeader's breadcrumbs snippet; PageHeader takes the same items as `breadcrumbs={[…]}` |
|
|
169
|
+
| `PageContainer` | `@poodle64/ui/page-container` | `children` | a per-page wrapper picking its own vertical rhythm (space-y-6, gap-10, …) |
|
|
170
|
+
| `PageSection` | `@poodle64/ui/page-section` | `title, level?, description?, count?, actions?, children?, id?` | a hand-styled section heading (an uppercase kicker, text-lg font-semibold, a display h2) and its own gap to the content under it |
|
|
159
171
|
| `RecordSwitcher` | `@poodle64/ui/record-switcher` | `name, groups, current?, noun?, placeholder?, icon?, all?, pages?, separator?` | a bare record name beside a small chevrons button in the top bar, and a dropdown of names with no search, groups or thumbnails; the record's own page tabs come with it |
|
|
160
172
|
| `ContextColumn` | `@poodle64/ui/context-column` | `stats?, statsTitle?, statsInfo?, detail?, title?, subtitle?, onClose?, children?, documentPane?, ariaLabel?` | a hand-built right-hand <aside> with a stat card and a detail pane; on a record page, the one opened item (title, close, an inner scroll) and its DocumentPane, in the column's place or beside it once the page's row has room |
|
|
161
173
|
| `ListShell` | `@poodle64/ui/list-shell` | `title, children, label?, open?, actions?` | a module hand-rolling its own foldable second column beside the rail — a queue, an inbox, a working list |
|
|
@@ -190,11 +202,12 @@ _A surface with nothing to show yet, still loading, or that failed to load — t
|
|
|
190
202
|
| --- | --- | --- | --- |
|
|
191
203
|
| `EmptyState` | `@poodle64/ui/empty-state` | `title, icon?, description?, action?` | a hand-centred 'Nothing here' message |
|
|
192
204
|
| `LoadingState` | `@poodle64/ui/loading-state` | `message?` | a bare spinner or 'Loading…' you place by hand |
|
|
205
|
+
| `ContentSkeleton` | `@poodle64/ui/content-skeleton` | `shape?, count?, label?` | bare Skeleton boxes sized by hand (h-44 rounded-xl, h-24) standing in for a list, tiles or a document body while the page's header is already drawn |
|
|
193
206
|
| `ErrorState` | `@poodle64/ui/error-state` | `message, action?` | a hand-built error message with a retry button |
|
|
194
207
|
|
|
195
208
|
## Primitives you already know
|
|
196
209
|
|
|
197
210
|
_Standard shadcn-svelte / bits-ui primitives — reach for them the same way; no situation lookup needed. Import each from its path below._
|
|
198
211
|
|
|
199
|
-
`@poodle64/ui/alert` · `@poodle64/ui/alert-dialog` · `@poodle64/ui/avatar` · `@poodle64/ui/badge` · `@poodle64/ui/button` · `@poodle64/ui/card` · `@poodle64/ui/checkbox` · `@poodle64/ui/command` · `@poodle64/ui/data-table` · `@poodle64/ui/dialog` · `@poodle64/ui/dropdown-menu` · `@poodle64/ui/input` · `@poodle64/ui/input-group` · `@poodle64/ui/label` · `@poodle64/ui/password-input` · `@poodle64/ui/popover` · `@poodle64/ui/progress` · `@poodle64/ui/select` · `@poodle64/ui/separator` · `@poodle64/ui/skeleton` · `@poodle64/ui/sonner` · `@poodle64/ui/switch` · `@poodle64/ui/table` · `@poodle64/ui/tabs` · `@poodle64/ui/textarea` · `@poodle64/ui/tooltip`
|
|
212
|
+
`@poodle64/ui/alert` · `@poodle64/ui/alert-dialog` · `@poodle64/ui/avatar` · `@poodle64/ui/badge` · `@poodle64/ui/button` · `@poodle64/ui/card` · `@poodle64/ui/checkbox` · `@poodle64/ui/command` · `@poodle64/ui/data-table` · `@poodle64/ui/dialog` · `@poodle64/ui/dropdown-menu` · `@poodle64/ui/input` · `@poodle64/ui/input-group` · `@poodle64/ui/label` · `@poodle64/ui/password-input` · `@poodle64/ui/popover` · `@poodle64/ui/progress` · `@poodle64/ui/select` · `@poodle64/ui/separator` · `@poodle64/ui/sheet` · `@poodle64/ui/skeleton` · `@poodle64/ui/sonner` · `@poodle64/ui/switch` · `@poodle64/ui/table` · `@poodle64/ui/tabs` · `@poodle64/ui/textarea` · `@poodle64/ui/tooltip`
|
|
200
213
|
|