@poodle64/ui 2026.8.14 → 2026.8.17
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 +305 -12
- package/dist/components/ui/form/form-button.svelte +7 -0
- package/dist/components/ui/form/form-button.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-description.svelte +18 -0
- package/dist/components/ui/form/form-description.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-element-field.svelte +25 -0
- package/dist/components/ui/form/form-element-field.svelte.d.ts +28 -0
- package/dist/components/ui/form/form-field-errors.svelte +31 -0
- package/dist/components/ui/form/form-field-errors.svelte.d.ts +8 -0
- package/dist/components/ui/form/form-field.svelte +25 -0
- package/dist/components/ui/form/form-field.svelte.d.ts +28 -0
- package/dist/components/ui/form/form-fieldset.svelte +16 -0
- package/dist/components/ui/form/form-fieldset.svelte.d.ts +27 -0
- package/dist/components/ui/form/form-label.svelte +25 -0
- package/dist/components/ui/form/form-label.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-legend.svelte +17 -0
- package/dist/components/ui/form/form-legend.svelte.d.ts +4 -0
- package/dist/components/ui/form/index.d.ts +11 -0
- package/dist/components/ui/form/index.js +13 -0
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/ui/library-browse/document-table.svelte +13 -1
- package/dist/components/ui/page-header/page-header.svelte +70 -33
- package/dist/components/ui/page-header/page-header.svelte.d.ts +4 -0
- package/dist/format.d.ts +222 -0
- package/dist/format.js +422 -0
- package/dist/styles.css +179 -5
- package/package.json +16 -2
- package/registry/component-map.json +74 -4
- package/registry/component-map.md +18 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"package": "@poodle64/ui",
|
|
4
|
-
"version": "2026.8.
|
|
4
|
+
"version": "2026.8.17",
|
|
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": 55,
|
|
8
|
+
"situationCount": 15
|
|
9
9
|
},
|
|
10
10
|
"situations": [
|
|
11
11
|
{
|
|
@@ -155,6 +155,76 @@
|
|
|
155
155
|
}
|
|
156
156
|
]
|
|
157
157
|
},
|
|
158
|
+
{
|
|
159
|
+
"key": "hand-written-form",
|
|
160
|
+
"title": "A form the app itself describes",
|
|
161
|
+
"description": "A form whose fields the app writes out itself, validated by superforms and wired for accessibility by Formsnap. These wrappers put the label/description/error rhythm and the ARIA wiring in one place; the schema-described renderer above is for the other case, where the shape arrives at runtime.",
|
|
162
|
+
"components": [
|
|
163
|
+
{
|
|
164
|
+
"name": "FormField",
|
|
165
|
+
"dir": "form",
|
|
166
|
+
"import": "@poodle64/ui/form",
|
|
167
|
+
"props": "form, name, class?",
|
|
168
|
+
"insteadOf": "a <div class=\"space-y-2\"> you rebuild per field, per app"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "FormControl",
|
|
172
|
+
"dir": "form",
|
|
173
|
+
"import": "@poodle64/ui/form",
|
|
174
|
+
"props": "children, id?",
|
|
175
|
+
"insteadOf": "wiring id/aria-describedby/aria-invalid onto the input by hand"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "FormLabel",
|
|
179
|
+
"dir": "form",
|
|
180
|
+
"import": "@poodle64/ui/form",
|
|
181
|
+
"props": "class?",
|
|
182
|
+
"insteadOf": "a <Label> that does not turn destructive when its field errors"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "FormDescription",
|
|
186
|
+
"dir": "form",
|
|
187
|
+
"import": "@poodle64/ui/form",
|
|
188
|
+
"props": "class?",
|
|
189
|
+
"insteadOf": "helper text the field's aria-describedby never points at"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "FormFieldErrors",
|
|
193
|
+
"dir": "form",
|
|
194
|
+
"import": "@poodle64/ui/form",
|
|
195
|
+
"props": "class?, errorClasses?",
|
|
196
|
+
"insteadOf": "hand-rendered {#each errors} blocks, styled differently in each app"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "FormFieldset",
|
|
200
|
+
"dir": "form",
|
|
201
|
+
"import": "@poodle64/ui/form",
|
|
202
|
+
"props": "form, name, class?",
|
|
203
|
+
"insteadOf": "a bare <fieldset> with no error state"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "FormLegend",
|
|
207
|
+
"dir": "form",
|
|
208
|
+
"import": "@poodle64/ui/form",
|
|
209
|
+
"props": "class?",
|
|
210
|
+
"insteadOf": "a <legend> styled per app"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "FormElementField",
|
|
214
|
+
"dir": "form",
|
|
215
|
+
"import": "@poodle64/ui/form",
|
|
216
|
+
"props": "form, name, class?",
|
|
217
|
+
"insteadOf": "hand-indexing into an array field's errors"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "FormButton",
|
|
221
|
+
"dir": "form",
|
|
222
|
+
"import": "@poodle64/ui/form",
|
|
223
|
+
"props": "children, variant?, size?, disabled?, class?",
|
|
224
|
+
"insteadOf": "remembering type=\"submit\" on every form's Button — it forwards every Button prop and sets the type"
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
},
|
|
158
228
|
{
|
|
159
229
|
"key": "server-described-form",
|
|
160
230
|
"title": "A form the server described",
|
|
@@ -220,7 +290,7 @@
|
|
|
220
290
|
"name": "PageHeader",
|
|
221
291
|
"dir": "page-header",
|
|
222
292
|
"import": "@poodle64/ui/page-header",
|
|
223
|
-
"props": "title?, eyebrow?, breadcrumbs?, subtitle?, info?, actions?",
|
|
293
|
+
"props": "title?, eyebrow?, breadcrumbs?, icon?, subtitle?, info?, meta?, actions?",
|
|
224
294
|
"insteadOf": "a hand-written <h1> and title bar (the drift gate fails this)"
|
|
225
295
|
},
|
|
226
296
|
{
|
|
@@ -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.8.
|
|
4
|
+
Generated from `@poodle64/ui@2026.8.17`. 55 components, 15 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
|
|
|
@@ -83,6 +83,22 @@ _The generic titled card every route reaches for — an optional header with ico
|
|
|
83
83
|
| --- | --- | --- | --- |
|
|
84
84
|
| `Panel` | `@poodle64/ui/panel` | `children, title?, subtitle?, icon?, action?, pad?` | raw Card + CardHeader + CardTitle assembled by hand on every route |
|
|
85
85
|
|
|
86
|
+
## A form the app itself describes
|
|
87
|
+
|
|
88
|
+
_A form whose fields the app writes out itself, validated by superforms and wired for accessibility by Formsnap. These wrappers put the label/description/error rhythm and the ARIA wiring in one place; the schema-described renderer above is for the other case, where the shape arrives at runtime._
|
|
89
|
+
|
|
90
|
+
| Component | Import | Key props | Reach for it instead of |
|
|
91
|
+
| --- | --- | --- | --- |
|
|
92
|
+
| `FormField` | `@poodle64/ui/form` | `form, name, class?` | a <div class="space-y-2"> you rebuild per field, per app |
|
|
93
|
+
| `FormControl` | `@poodle64/ui/form` | `children, id?` | wiring id/aria-describedby/aria-invalid onto the input by hand |
|
|
94
|
+
| `FormLabel` | `@poodle64/ui/form` | `class?` | a <Label> that does not turn destructive when its field errors |
|
|
95
|
+
| `FormDescription` | `@poodle64/ui/form` | `class?` | helper text the field's aria-describedby never points at |
|
|
96
|
+
| `FormFieldErrors` | `@poodle64/ui/form` | `class?, errorClasses?` | hand-rendered {#each errors} blocks, styled differently in each app |
|
|
97
|
+
| `FormFieldset` | `@poodle64/ui/form` | `form, name, class?` | a bare <fieldset> with no error state |
|
|
98
|
+
| `FormLegend` | `@poodle64/ui/form` | `class?` | a <legend> styled per app |
|
|
99
|
+
| `FormElementField` | `@poodle64/ui/form` | `form, name, class?` | hand-indexing into an array field's errors |
|
|
100
|
+
| `FormButton` | `@poodle64/ui/form` | `children, variant?, size?, disabled?, class?` | remembering type="submit" on every form's Button — it forwards every Button prop and sets the type |
|
|
101
|
+
|
|
86
102
|
## A form the server described
|
|
87
103
|
|
|
88
104
|
_A config object whose shape arrives at runtime as a JSON Schema plus a JSON Forms UI Schema — the renderer walks both and dispatches to this package's widgets. Anything it cannot dispatch renders flagged, never blank._
|
|
@@ -109,7 +125,7 @@ _The standing chrome — the app shell and its nav, the one page-title treatment
|
|
|
109
125
|
| Component | Import | Key props | Reach for it instead of |
|
|
110
126
|
| --- | --- | --- | --- |
|
|
111
127
|
| `AppShell` | `@poodle64/ui/app-shell` | `nav, currentPath, brandTitle?, actions?, context?, children` | a bespoke nav rail + header layout per app |
|
|
112
|
-
| `PageHeader` | `@poodle64/ui/page-header` | `title?, eyebrow?, breadcrumbs?, subtitle?, info?, actions?` | a hand-written <h1> and title bar (the drift gate fails this) |
|
|
128
|
+
| `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) |
|
|
113
129
|
| `ContextColumn` | `@poodle64/ui/context-column` | `stats, statsTitle?, statsInfo?, detail?, ariaLabel?` | a hand-built right-hand <aside> with a stat card and a detail pane |
|
|
114
130
|
|
|
115
131
|
## A dialog or overlay
|