@dryui/feedback 0.0.2

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.
Files changed (79) hide show
  1. package/dist/components/annotation-marker.svelte +163 -0
  2. package/dist/components/annotation-marker.svelte.d.ts +11 -0
  3. package/dist/components/annotation-popup.svelte +669 -0
  4. package/dist/components/annotation-popup.svelte.d.ts +42 -0
  5. package/dist/components/highlight-overlay.svelte +48 -0
  6. package/dist/components/highlight-overlay.svelte.d.ts +8 -0
  7. package/dist/components/settings-panel.svelte +446 -0
  8. package/dist/components/settings-panel.svelte.d.ts +24 -0
  9. package/dist/components/toolbar.svelte +1111 -0
  10. package/dist/components/toolbar.svelte.d.ts +46 -0
  11. package/dist/constants.d.ts +9 -0
  12. package/dist/constants.js +37 -0
  13. package/dist/feedback.svelte +2879 -0
  14. package/dist/feedback.svelte.d.ts +4 -0
  15. package/dist/index.d.ts +10 -0
  16. package/dist/index.js +7 -0
  17. package/dist/layout-mode/catalog.d.ts +16 -0
  18. package/dist/layout-mode/catalog.js +81 -0
  19. package/dist/layout-mode/component-actions.svelte +84 -0
  20. package/dist/layout-mode/component-actions.svelte.d.ts +18 -0
  21. package/dist/layout-mode/component-picker.svelte +73 -0
  22. package/dist/layout-mode/component-picker.svelte.d.ts +10 -0
  23. package/dist/layout-mode/design-mode.svelte +1115 -0
  24. package/dist/layout-mode/design-mode.svelte.d.ts +24 -0
  25. package/dist/layout-mode/design-palette.svelte +396 -0
  26. package/dist/layout-mode/design-palette.svelte.d.ts +20 -0
  27. package/dist/layout-mode/element-heuristics.d.ts +5 -0
  28. package/dist/layout-mode/element-heuristics.js +51 -0
  29. package/dist/layout-mode/freeze.d.ts +6 -0
  30. package/dist/layout-mode/freeze.js +163 -0
  31. package/dist/layout-mode/generated-library.d.ts +940 -0
  32. package/dist/layout-mode/generated-library.js +1445 -0
  33. package/dist/layout-mode/geometry.d.ts +38 -0
  34. package/dist/layout-mode/geometry.js +133 -0
  35. package/dist/layout-mode/history.d.ts +10 -0
  36. package/dist/layout-mode/history.js +45 -0
  37. package/dist/layout-mode/index.d.ts +23 -0
  38. package/dist/layout-mode/index.js +18 -0
  39. package/dist/layout-mode/live-mount.d.ts +20 -0
  40. package/dist/layout-mode/live-mount.js +70 -0
  41. package/dist/layout-mode/output.d.ts +26 -0
  42. package/dist/layout-mode/output.js +550 -0
  43. package/dist/layout-mode/placement-skeleton.d.ts +9 -0
  44. package/dist/layout-mode/placement-skeleton.js +535 -0
  45. package/dist/layout-mode/rearrange-overlay.svelte +1293 -0
  46. package/dist/layout-mode/rearrange-overlay.svelte.d.ts +18 -0
  47. package/dist/layout-mode/responsive-bar.svelte +39 -0
  48. package/dist/layout-mode/responsive-bar.svelte.d.ts +8 -0
  49. package/dist/layout-mode/route-creator.svelte +70 -0
  50. package/dist/layout-mode/route-creator.svelte.d.ts +8 -0
  51. package/dist/layout-mode/section-detection.d.ts +6 -0
  52. package/dist/layout-mode/section-detection.js +214 -0
  53. package/dist/layout-mode/spatial.d.ts +42 -0
  54. package/dist/layout-mode/spatial.js +156 -0
  55. package/dist/layout-mode/types.d.ts +144 -0
  56. package/dist/layout-mode/types.js +84 -0
  57. package/dist/types.d.ts +157 -0
  58. package/dist/types.js +1 -0
  59. package/dist/utils/dryui-detection.d.ts +1 -0
  60. package/dist/utils/dryui-detection.js +219 -0
  61. package/dist/utils/element-id.d.ts +12 -0
  62. package/dist/utils/element-id.js +333 -0
  63. package/dist/utils/freeze.d.ts +7 -0
  64. package/dist/utils/freeze.js +168 -0
  65. package/dist/utils/output.d.ts +15 -0
  66. package/dist/utils/output.js +245 -0
  67. package/dist/utils/selection.d.ts +22 -0
  68. package/dist/utils/selection.js +58 -0
  69. package/dist/utils/shadow-dom.d.ts +4 -0
  70. package/dist/utils/shadow-dom.js +39 -0
  71. package/dist/utils/storage.d.ts +30 -0
  72. package/dist/utils/storage.js +206 -0
  73. package/dist/utils/svelte-detection.d.ts +8 -0
  74. package/dist/utils/svelte-detection.js +86 -0
  75. package/dist/utils/svelte-meta.d.ts +6 -0
  76. package/dist/utils/svelte-meta.js +69 -0
  77. package/dist/utils/sync.d.ts +18 -0
  78. package/dist/utils/sync.js +62 -0
  79. package/package.json +65 -0
@@ -0,0 +1,1445 @@
1
+ // Generated by packages/feedback/scripts/generate-layout-library.mjs
2
+ // Do not edit by hand.
3
+ export const GENERATED_LAYOUT_LIBRARY = [
4
+ {
5
+ "section": "Frames",
6
+ "items": [
7
+ {
8
+ "section": "Frames",
9
+ "type": "banner",
10
+ "label": "Banners",
11
+ "description": "Top-of-page announcement and campaign banners with CTA and dismissal framing.",
12
+ "sourceKind": "block",
13
+ "sourceId": "banners",
14
+ "sourceName": "Banners",
15
+ "sourceLabel": "Block",
16
+ "sourceImport": null,
17
+ "routePath": "/blocks/banners",
18
+ "tags": [
19
+ "banner",
20
+ "announcement",
21
+ "campaign",
22
+ "promo"
23
+ ],
24
+ "structure": null,
25
+ "guidance": "Start from /blocks/banners and pick the closest block variant (Announcement bar, Upgrade banner)."
26
+ },
27
+ {
28
+ "section": "Frames",
29
+ "type": "section",
30
+ "label": "Content Sections",
31
+ "description": "Package editorial layouts, long-form summaries, and product storytelling sections.",
32
+ "sourceKind": "block",
33
+ "sourceId": "content-sections",
34
+ "sourceName": "Content Sections",
35
+ "sourceLabel": "Block",
36
+ "sourceImport": null,
37
+ "routePath": "/blocks/content-sections",
38
+ "tags": [
39
+ "content",
40
+ "editorial",
41
+ "layout",
42
+ "section",
43
+ "content block",
44
+ "body section"
45
+ ],
46
+ "structure": null,
47
+ "guidance": "Start from a content-sections block when the layout needs a reusable marketing or editorial section."
48
+ },
49
+ {
50
+ "section": "Frames",
51
+ "type": "modal",
52
+ "label": "Dialog",
53
+ "description": "Modal dialog using native dialog element",
54
+ "sourceKind": "component",
55
+ "sourceId": "Dialog",
56
+ "sourceName": "Dialog",
57
+ "sourceLabel": "Component",
58
+ "sourceImport": "@dryui/ui",
59
+ "routePath": null,
60
+ "tags": [
61
+ "modal",
62
+ "overlay",
63
+ "dialog",
64
+ "popup"
65
+ ],
66
+ "structure": "`<Dialog.Root>` + `<Dialog.Trigger>` + `<Dialog.Content>`",
67
+ "guidance": "Modal dialog using native dialog element"
68
+ },
69
+ {
70
+ "section": "Frames",
71
+ "type": "drawer",
72
+ "label": "Drawer",
73
+ "description": "Slide-in panel from any edge",
74
+ "sourceKind": "component",
75
+ "sourceId": "Drawer",
76
+ "sourceName": "Drawer",
77
+ "sourceLabel": "Component",
78
+ "sourceImport": "@dryui/ui",
79
+ "routePath": null,
80
+ "tags": [
81
+ "modal",
82
+ "panel",
83
+ "slide",
84
+ "sidebar",
85
+ "drawer",
86
+ "sheet",
87
+ "slide over"
88
+ ],
89
+ "structure": "`<Drawer.Root>` + `<Drawer.Trigger>` + `<Drawer.Content>`",
90
+ "guidance": "Slide-in panel from any edge"
91
+ },
92
+ {
93
+ "section": "Frames",
94
+ "type": "footer",
95
+ "label": "Footers",
96
+ "description": "Package multi-column and compact footer systems with brand, nav, and legal framing.",
97
+ "sourceKind": "block",
98
+ "sourceId": "footers",
99
+ "sourceName": "Footers",
100
+ "sourceLabel": "Block",
101
+ "sourceImport": null,
102
+ "routePath": "/blocks/footers",
103
+ "tags": [
104
+ "footer",
105
+ "navigation",
106
+ "site",
107
+ "site footer"
108
+ ],
109
+ "structure": null,
110
+ "guidance": "Start from /blocks/footers and pick the closest block variant (Compact footer, Multi-column footer)."
111
+ },
112
+ {
113
+ "section": "Frames",
114
+ "type": "hero",
115
+ "label": "Hero Sections",
116
+ "description": "Lead with high-signal headlines, proof points, and focused call-to-action stacks.",
117
+ "sourceKind": "block",
118
+ "sourceId": "hero-sections",
119
+ "sourceName": "Hero Sections",
120
+ "sourceLabel": "Block",
121
+ "sourceImport": null,
122
+ "routePath": "/blocks/hero-sections",
123
+ "tags": [
124
+ "hero",
125
+ "marketing",
126
+ "cta",
127
+ "marketing hero",
128
+ "landing"
129
+ ],
130
+ "structure": null,
131
+ "guidance": "Start from a hero-sections block variant for the main headline, proof, and CTA stack."
132
+ },
133
+ {
134
+ "section": "Frames",
135
+ "type": "navigation",
136
+ "label": "Navbar",
137
+ "description": "Responsive navigation bar with mobile toggle",
138
+ "sourceKind": "component",
139
+ "sourceId": "Navbar",
140
+ "sourceName": "Navbar",
141
+ "sourceLabel": "Component",
142
+ "sourceImport": "@dryui/ui",
143
+ "routePath": null,
144
+ "tags": [
145
+ "navbar",
146
+ "navigation",
147
+ "responsive",
148
+ "mobile",
149
+ "nav",
150
+ "site header"
151
+ ],
152
+ "structure": "`<Navbar.Root>` + `<Navbar.Brand>` + `<Navbar.Content>` + `<Navbar.Item>`",
153
+ "guidance": "Use Navbar for the primary site navigation shell, brand, links, and top-level actions."
154
+ },
155
+ {
156
+ "section": "Frames",
157
+ "type": "header",
158
+ "label": "PageHeader",
159
+ "description": "Structured page header with title, meta, and actions",
160
+ "sourceKind": "component",
161
+ "sourceId": "PageHeader",
162
+ "sourceName": "PageHeader",
163
+ "sourceLabel": "Component",
164
+ "sourceImport": "@dryui/ui",
165
+ "routePath": null,
166
+ "tags": [
167
+ "page",
168
+ "header",
169
+ "title",
170
+ "actions",
171
+ "meta",
172
+ "page header",
173
+ "section lead"
174
+ ],
175
+ "structure": "`<PageHeader.Root>` + `<PageHeader.Content>` + `<PageHeader.Actions>` + `<PageHeader.Eyebrow>`",
176
+ "guidance": "Structured page header with title, meta, and actions"
177
+ },
178
+ {
179
+ "section": "Frames",
180
+ "type": "popover",
181
+ "label": "Popover",
182
+ "description": "Floating content panel anchored to a trigger",
183
+ "sourceKind": "component",
184
+ "sourceId": "Popover",
185
+ "sourceName": "Popover",
186
+ "sourceLabel": "Component",
187
+ "sourceImport": "@dryui/ui",
188
+ "routePath": null,
189
+ "tags": [
190
+ "popup",
191
+ "floating",
192
+ "tooltip",
193
+ "popover",
194
+ "floating panel"
195
+ ],
196
+ "structure": "`<Popover.Root>` + `<Popover.Trigger>` + `<Popover.Content>`",
197
+ "guidance": "Floating content panel anchored to a trigger"
198
+ },
199
+ {
200
+ "section": "Frames",
201
+ "type": "divider",
202
+ "label": "Separator",
203
+ "description": "Visual divider between content",
204
+ "sourceKind": "component",
205
+ "sourceId": "Separator",
206
+ "sourceName": "Separator",
207
+ "sourceLabel": "Component",
208
+ "sourceImport": "@dryui/ui",
209
+ "routePath": null,
210
+ "tags": [
211
+ "divider",
212
+ "line",
213
+ "hr",
214
+ "separator",
215
+ "rule"
216
+ ],
217
+ "structure": "`<Separator />`",
218
+ "guidance": "Visual divider between content"
219
+ },
220
+ {
221
+ "section": "Frames",
222
+ "type": "sidebar",
223
+ "label": "Sidebar",
224
+ "description": "Collapsible side navigation panel",
225
+ "sourceKind": "component",
226
+ "sourceId": "Sidebar",
227
+ "sourceName": "Sidebar",
228
+ "sourceLabel": "Component",
229
+ "sourceImport": "@dryui/ui",
230
+ "routePath": null,
231
+ "tags": [
232
+ "sidebar",
233
+ "navigation",
234
+ "panel",
235
+ "collapsible",
236
+ "aside",
237
+ "rail"
238
+ ],
239
+ "structure": "`<Sidebar.Root>` + `<Sidebar.Header>` + `<Sidebar.Content>` + `<Sidebar.Footer>`",
240
+ "guidance": "Collapsible side navigation panel"
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "section": "Content",
246
+ "items": [
247
+ {
248
+ "section": "Content",
249
+ "type": "accordion",
250
+ "label": "Accordion",
251
+ "description": "Collapsible content sections, single or multiple mode",
252
+ "sourceKind": "component",
253
+ "sourceId": "Accordion",
254
+ "sourceName": "Accordion",
255
+ "sourceLabel": "Component",
256
+ "sourceImport": "@dryui/ui",
257
+ "routePath": null,
258
+ "tags": [
259
+ "disclosure",
260
+ "collapse",
261
+ "expand",
262
+ "faq",
263
+ "accordion"
264
+ ],
265
+ "structure": "`<Accordion.Root>` + `<Accordion.Item>` + `<Accordion.Trigger>` + `<Accordion.Content>`",
266
+ "guidance": "Collapsible content sections, single or multiple mode"
267
+ },
268
+ {
269
+ "section": "Content",
270
+ "type": "card",
271
+ "label": "Card",
272
+ "description": "Contained content surface with header/content/footer sections",
273
+ "sourceKind": "component",
274
+ "sourceId": "Card",
275
+ "sourceName": "Card",
276
+ "sourceLabel": "Component",
277
+ "sourceImport": "@dryui/ui",
278
+ "routePath": null,
279
+ "tags": [
280
+ "surface",
281
+ "container",
282
+ "content",
283
+ "panel",
284
+ "card"
285
+ ],
286
+ "structure": "`<Card.Root>` + `<Card.Header>` + `<Card.Content>`",
287
+ "guidance": "Compose Card surfaces with Card.Root, Card.Header, and Card.Content instead of a generic container box."
288
+ },
289
+ {
290
+ "section": "Content",
291
+ "type": "carousel",
292
+ "label": "Carousel",
293
+ "description": "Scrollable content carousel with slide navigation",
294
+ "sourceKind": "component",
295
+ "sourceId": "Carousel",
296
+ "sourceName": "Carousel",
297
+ "sourceLabel": "Component",
298
+ "sourceImport": "@dryui/ui",
299
+ "routePath": null,
300
+ "tags": [
301
+ "slider",
302
+ "carousel",
303
+ "scroll",
304
+ "gallery",
305
+ "slideshow"
306
+ ],
307
+ "structure": "`<Carousel.Root>` + `<Carousel.Viewport>` + `<Carousel.Slide>` + `<Carousel.Prev>`",
308
+ "guidance": "Scrollable content carousel with slide navigation"
309
+ },
310
+ {
311
+ "section": "Content",
312
+ "type": "chart",
313
+ "label": "Chart",
314
+ "description": "SVG-based chart with bars, lines, and axes",
315
+ "sourceKind": "component",
316
+ "sourceId": "Chart",
317
+ "sourceName": "Chart",
318
+ "sourceLabel": "Component",
319
+ "sourceImport": "@dryui/ui",
320
+ "routePath": null,
321
+ "tags": [
322
+ "chart",
323
+ "graph",
324
+ "bar",
325
+ "line",
326
+ "data",
327
+ "visualization",
328
+ "analytics"
329
+ ],
330
+ "structure": "`<Chart.Root>` + `<Chart.Bars>` + `<Chart.Line>` + `<Chart.Area>`",
331
+ "guidance": "SVG-based chart with bars, lines, and axes"
332
+ },
333
+ {
334
+ "section": "Content",
335
+ "type": "codeBlock",
336
+ "label": "CodeBlock",
337
+ "description": "Code display with optional line numbers and copy button",
338
+ "sourceKind": "component",
339
+ "sourceId": "CodeBlock",
340
+ "sourceName": "CodeBlock",
341
+ "sourceLabel": "Component",
342
+ "sourceImport": "@dryui/ui",
343
+ "routePath": null,
344
+ "tags": [
345
+ "code",
346
+ "syntax",
347
+ "pre",
348
+ "monospace",
349
+ "copy",
350
+ "snippet"
351
+ ],
352
+ "structure": "`<CodeBlock />`",
353
+ "guidance": "Code display with optional line numbers and copy button"
354
+ },
355
+ {
356
+ "section": "Content",
357
+ "type": "faq",
358
+ "label": "FAQs",
359
+ "description": "Ship FAQ sections with hierarchy, compact answers, and support-oriented routing.",
360
+ "sourceKind": "block",
361
+ "sourceId": "faqs",
362
+ "sourceName": "FAQs",
363
+ "sourceLabel": "Block",
364
+ "sourceImport": null,
365
+ "routePath": "/blocks/faqs",
366
+ "tags": [
367
+ "faq",
368
+ "accordion",
369
+ "support",
370
+ "questions"
371
+ ],
372
+ "structure": null,
373
+ "guidance": "Start from /blocks/faqs and pick the closest block variant (Accordion FAQ, Split FAQ)."
374
+ },
375
+ {
376
+ "section": "Content",
377
+ "type": "grid",
378
+ "label": "Grid",
379
+ "description": "CSS grid layout with uniform column control",
380
+ "sourceKind": "component",
381
+ "sourceId": "Grid",
382
+ "sourceName": "Grid",
383
+ "sourceLabel": "Component",
384
+ "sourceImport": "@dryui/ui",
385
+ "routePath": null,
386
+ "tags": [
387
+ "layout",
388
+ "grid",
389
+ "columns",
390
+ "responsive",
391
+ "cards"
392
+ ],
393
+ "structure": "`<Grid />`",
394
+ "guidance": "CSS grid layout with uniform column control"
395
+ },
396
+ {
397
+ "section": "Content",
398
+ "type": "image",
399
+ "label": "Image",
400
+ "description": "Image with loading states and fallback support",
401
+ "sourceKind": "component",
402
+ "sourceId": "Image",
403
+ "sourceName": "Image",
404
+ "sourceLabel": "Component",
405
+ "sourceImport": "@dryui/ui",
406
+ "routePath": null,
407
+ "tags": [
408
+ "image",
409
+ "lazy",
410
+ "loading",
411
+ "fallback",
412
+ "media",
413
+ "photo"
414
+ ],
415
+ "structure": "`<Image />`",
416
+ "guidance": "Image with loading states and fallback support"
417
+ },
418
+ {
419
+ "section": "Content",
420
+ "type": "list",
421
+ "label": "List",
422
+ "description": "Structured list with items, icons, and subheaders",
423
+ "sourceKind": "component",
424
+ "sourceId": "List",
425
+ "sourceName": "List",
426
+ "sourceLabel": "Component",
427
+ "sourceImport": "@dryui/ui",
428
+ "routePath": null,
429
+ "tags": [
430
+ "list",
431
+ "item",
432
+ "icon",
433
+ "dense",
434
+ "items"
435
+ ],
436
+ "structure": "`<List.Root>` + `<List.Item>` + `<List.ItemIcon>` + `<List.ItemText>`",
437
+ "guidance": "Structured list with items, icons, and subheaders"
438
+ },
439
+ {
440
+ "section": "Content",
441
+ "type": "logo",
442
+ "label": "LogoCloud",
443
+ "description": "Grid of logos or brand icons with uniform sizing",
444
+ "sourceKind": "component",
445
+ "sourceId": "LogoCloud",
446
+ "sourceName": "LogoCloud",
447
+ "sourceLabel": "Component",
448
+ "sourceImport": "@dryui/ui",
449
+ "routePath": null,
450
+ "tags": [
451
+ "logo",
452
+ "brand",
453
+ "grid",
454
+ "partners",
455
+ "sponsors",
456
+ "logo cloud",
457
+ "logos"
458
+ ],
459
+ "structure": "`<LogoCloud.Root>` + `<LogoCloud.Item>`",
460
+ "guidance": "Grid of logos or brand icons with uniform sizing"
461
+ },
462
+ {
463
+ "section": "Content",
464
+ "type": "map",
465
+ "label": "Map",
466
+ "description": "Interactive map container with markers, popups, layers, and controls",
467
+ "sourceKind": "component",
468
+ "sourceId": "Map",
469
+ "sourceName": "Map",
470
+ "sourceLabel": "Component",
471
+ "sourceImport": "@dryui/ui",
472
+ "routePath": null,
473
+ "tags": [
474
+ "map",
475
+ "geo",
476
+ "marker",
477
+ "popup",
478
+ "layer",
479
+ "geojson",
480
+ "location"
481
+ ],
482
+ "structure": "`<Map.Root>` + `<Map.Marker>` + `<Map.Popup>` + `<Map.Layer>`",
483
+ "guidance": "Interactive map container with markers, popups, layers, and controls"
484
+ },
485
+ {
486
+ "section": "Content",
487
+ "type": "gallery",
488
+ "label": "PromoMosaic",
489
+ "description": "Promotional tile mosaic for mixed-size marketing cards, badges, and CTA overlays",
490
+ "sourceKind": "component",
491
+ "sourceId": "PromoMosaic",
492
+ "sourceName": "PromoMosaic",
493
+ "sourceLabel": "Component",
494
+ "sourceImport": "@dryui/ui",
495
+ "routePath": null,
496
+ "tags": [
497
+ "promo",
498
+ "mosaic",
499
+ "marketing",
500
+ "grid",
501
+ "tiles",
502
+ "gallery",
503
+ "promo grid"
504
+ ],
505
+ "structure": "`<PromoMosaic.Root>` + `<PromoMosaic.HeroTile>` + `<PromoMosaic.Tile>` + `<PromoMosaic.Overlay>`",
506
+ "guidance": "Promotional tile mosaic for mixed-size marketing cards, badges, and CTA overlays"
507
+ },
508
+ {
509
+ "section": "Content",
510
+ "type": "table",
511
+ "label": "Table",
512
+ "description": "Data table with header, body, footer sections",
513
+ "sourceKind": "component",
514
+ "sourceId": "Table",
515
+ "sourceName": "Table",
516
+ "sourceLabel": "Component",
517
+ "sourceImport": "@dryui/ui",
518
+ "routePath": null,
519
+ "tags": [
520
+ "data",
521
+ "table",
522
+ "grid",
523
+ "rows",
524
+ "columns",
525
+ "data table"
526
+ ],
527
+ "structure": "`<Table.Root>` + `<Table.Header>` + `<Table.Body>` + `<Table.Footer>`",
528
+ "guidance": "Data table with header, body, footer sections"
529
+ },
530
+ {
531
+ "section": "Content",
532
+ "type": "text",
533
+ "label": "Text",
534
+ "description": "Standalone body copy export for starter-kit typography",
535
+ "sourceKind": "component",
536
+ "sourceId": "Text",
537
+ "sourceName": "Text",
538
+ "sourceLabel": "Component",
539
+ "sourceImport": "@dryui/ui",
540
+ "routePath": null,
541
+ "tags": [
542
+ "text",
543
+ "copy",
544
+ "paragraph",
545
+ "typography",
546
+ "body"
547
+ ],
548
+ "structure": "`<Text />`",
549
+ "guidance": "Standalone body copy export for starter-kit typography"
550
+ },
551
+ {
552
+ "section": "Content",
553
+ "type": "timeline",
554
+ "label": "Timeline",
555
+ "description": "Vertical timeline for activity feeds and history",
556
+ "sourceKind": "component",
557
+ "sourceId": "Timeline",
558
+ "sourceName": "Timeline",
559
+ "sourceLabel": "Component",
560
+ "sourceImport": "@dryui/ui",
561
+ "routePath": null,
562
+ "tags": [
563
+ "timeline",
564
+ "activity",
565
+ "feed",
566
+ "history",
567
+ "events"
568
+ ],
569
+ "structure": "`<Timeline.Root>` + `<Timeline.Item>` + `<Timeline.Icon>` + `<Timeline.Content>`",
570
+ "guidance": "Vertical timeline for activity feeds and history"
571
+ },
572
+ {
573
+ "section": "Content",
574
+ "type": "video",
575
+ "label": "VideoEmbed",
576
+ "description": "Video player embed for YouTube, Vimeo, and native sources",
577
+ "sourceKind": "component",
578
+ "sourceId": "VideoEmbed",
579
+ "sourceName": "VideoEmbed",
580
+ "sourceLabel": "Component",
581
+ "sourceImport": "@dryui/ui",
582
+ "routePath": null,
583
+ "tags": [
584
+ "video",
585
+ "embed",
586
+ "youtube",
587
+ "vimeo",
588
+ "player",
589
+ "media"
590
+ ],
591
+ "structure": "`<VideoEmbed />`",
592
+ "guidance": "Video player embed for YouTube, Vimeo, and native sources"
593
+ }
594
+ ]
595
+ },
596
+ {
597
+ "section": "Forms",
598
+ "items": [
599
+ {
600
+ "section": "Forms",
601
+ "type": "button",
602
+ "label": "Button",
603
+ "description": "Interactive button or link-styled action for submissions and calls to action",
604
+ "sourceKind": "component",
605
+ "sourceId": "Button",
606
+ "sourceName": "Button",
607
+ "sourceLabel": "Component",
608
+ "sourceImport": "@dryui/ui",
609
+ "routePath": null,
610
+ "tags": [
611
+ "form",
612
+ "action",
613
+ "click",
614
+ "submit",
615
+ "cta",
616
+ "link-button",
617
+ "button"
618
+ ],
619
+ "structure": "`<Button />`",
620
+ "guidance": "Interactive button or link-styled action for submissions and calls to action"
621
+ },
622
+ {
623
+ "section": "Forms",
624
+ "type": "checkbox",
625
+ "label": "Checkbox",
626
+ "description": "Boolean toggle input with indeterminate state",
627
+ "sourceKind": "component",
628
+ "sourceId": "Checkbox",
629
+ "sourceName": "Checkbox",
630
+ "sourceLabel": "Component",
631
+ "sourceImport": "@dryui/ui",
632
+ "routePath": null,
633
+ "tags": [
634
+ "form",
635
+ "toggle",
636
+ "boolean",
637
+ "check",
638
+ "checkbox"
639
+ ],
640
+ "structure": "`<Checkbox />`",
641
+ "guidance": "Boolean toggle input with indeterminate state"
642
+ },
643
+ {
644
+ "section": "Forms",
645
+ "type": "calendar",
646
+ "label": "DateTimeInput",
647
+ "description": "Combined date and time input with locale-aware segments",
648
+ "sourceKind": "component",
649
+ "sourceId": "DateTimeInput",
650
+ "sourceName": "DateTimeInput",
651
+ "sourceLabel": "Component",
652
+ "sourceImport": "@dryui/ui",
653
+ "routePath": null,
654
+ "tags": [
655
+ "date",
656
+ "time",
657
+ "datetime",
658
+ "input",
659
+ "form",
660
+ "locale",
661
+ "calendar",
662
+ "date grid",
663
+ "calendar picker"
664
+ ],
665
+ "structure": "`<DateTimeInput />`",
666
+ "guidance": "Combined date and time input with locale-aware segments"
667
+ },
668
+ {
669
+ "section": "Forms",
670
+ "type": "datePicker",
671
+ "label": "DateTimeInput",
672
+ "description": "Combined date and time input with locale-aware segments",
673
+ "sourceKind": "component",
674
+ "sourceId": "DateTimeInput",
675
+ "sourceName": "DateTimeInput",
676
+ "sourceLabel": "Component",
677
+ "sourceImport": "@dryui/ui",
678
+ "routePath": null,
679
+ "tags": [
680
+ "date",
681
+ "time",
682
+ "datetime",
683
+ "input",
684
+ "form",
685
+ "locale",
686
+ "calendar"
687
+ ],
688
+ "structure": "`<DateTimeInput />`",
689
+ "guidance": "Combined date and time input with locale-aware segments"
690
+ },
691
+ {
692
+ "section": "Forms",
693
+ "type": "form",
694
+ "label": "Fieldset",
695
+ "description": "Structured field grouping with legend, description, and content",
696
+ "sourceKind": "component",
697
+ "sourceId": "Fieldset",
698
+ "sourceName": "Fieldset",
699
+ "sourceLabel": "Component",
700
+ "sourceImport": "@dryui/ui",
701
+ "routePath": null,
702
+ "tags": [
703
+ "form",
704
+ "group",
705
+ "legend",
706
+ "settings",
707
+ "fieldset",
708
+ "form group"
709
+ ],
710
+ "structure": "`<Fieldset.Root>` + `<Fieldset.Legend>` + `<Fieldset.Description>` + `<Fieldset.Content>`",
711
+ "guidance": "Compose forms with Fieldset, Field.Root, Input, Checkbox, and Button instead of a generic form rectangle."
712
+ },
713
+ {
714
+ "section": "Forms",
715
+ "type": "fileUpload",
716
+ "label": "FileUpload",
717
+ "description": "File selection with drag-and-drop dropzone",
718
+ "sourceKind": "component",
719
+ "sourceId": "FileUpload",
720
+ "sourceName": "FileUpload",
721
+ "sourceLabel": "Component",
722
+ "sourceImport": "@dryui/ui",
723
+ "routePath": null,
724
+ "tags": [
725
+ "form",
726
+ "file",
727
+ "upload",
728
+ "drag",
729
+ "drop",
730
+ "file upload",
731
+ "drop zone"
732
+ ],
733
+ "structure": "`<FileUpload.Root>` + `<FileUpload.Dropzone>` + `<FileUpload.Trigger>` + `<FileUpload.List>`",
734
+ "guidance": "File selection with drag-and-drop dropzone"
735
+ },
736
+ {
737
+ "section": "Forms",
738
+ "type": "input",
739
+ "label": "Input",
740
+ "description": "Text input with size variants",
741
+ "sourceKind": "component",
742
+ "sourceId": "Input",
743
+ "sourceName": "Input",
744
+ "sourceLabel": "Component",
745
+ "sourceImport": "@dryui/ui",
746
+ "routePath": null,
747
+ "tags": [
748
+ "form",
749
+ "text",
750
+ "input",
751
+ "field",
752
+ "text field"
753
+ ],
754
+ "structure": "`<Input />`",
755
+ "guidance": "Text input with size variants"
756
+ },
757
+ {
758
+ "section": "Forms",
759
+ "type": "search",
760
+ "label": "InputGroup",
761
+ "description": "Compound input wrapper that combines prefixes, suffixes, separators, select slots, and actions",
762
+ "sourceKind": "component",
763
+ "sourceId": "InputGroup",
764
+ "sourceName": "InputGroup",
765
+ "sourceLabel": "Component",
766
+ "sourceImport": "@dryui/ui",
767
+ "routePath": null,
768
+ "tags": [
769
+ "input",
770
+ "field",
771
+ "affix",
772
+ "addon",
773
+ "control",
774
+ "search",
775
+ "search input",
776
+ "search field"
777
+ ],
778
+ "structure": "`<InputGroup.Root>` + `<InputGroup.Input>` + `<InputGroup.Action>`",
779
+ "guidance": "Compound input wrapper that combines prefixes, suffixes, separators, select slots, and actions"
780
+ },
781
+ {
782
+ "section": "Forms",
783
+ "type": "dropdown",
784
+ "label": "Listbox",
785
+ "description": "Single or multi-select list with keyboard navigation",
786
+ "sourceKind": "component",
787
+ "sourceId": "Listbox",
788
+ "sourceName": "Listbox",
789
+ "sourceLabel": "Component",
790
+ "sourceImport": "@dryui/ui",
791
+ "routePath": null,
792
+ "tags": [
793
+ "listbox",
794
+ "select",
795
+ "option",
796
+ "keyboard",
797
+ "dropdown",
798
+ "options"
799
+ ],
800
+ "structure": "`<Listbox.Root>` + `<Listbox.Item>`",
801
+ "guidance": "Single or multi-select list with keyboard navigation"
802
+ },
803
+ {
804
+ "section": "Forms",
805
+ "type": "radio",
806
+ "label": "RadioGroup",
807
+ "description": "Single selection from multiple options",
808
+ "sourceKind": "component",
809
+ "sourceId": "RadioGroup",
810
+ "sourceName": "RadioGroup",
811
+ "sourceLabel": "Component",
812
+ "sourceImport": "@dryui/ui",
813
+ "routePath": null,
814
+ "tags": [
815
+ "form",
816
+ "radio",
817
+ "select",
818
+ "option",
819
+ "group",
820
+ "options",
821
+ "choice"
822
+ ],
823
+ "structure": "`<RadioGroup.Root>` + `<RadioGroup.Item>`",
824
+ "guidance": "Single selection from multiple options"
825
+ },
826
+ {
827
+ "section": "Forms",
828
+ "type": "rating",
829
+ "label": "Rating",
830
+ "description": "Star rating input with half-star support",
831
+ "sourceKind": "component",
832
+ "sourceId": "Rating",
833
+ "sourceName": "Rating",
834
+ "sourceLabel": "Component",
835
+ "sourceImport": "@dryui/ui",
836
+ "routePath": null,
837
+ "tags": [
838
+ "form",
839
+ "stars",
840
+ "rating",
841
+ "review",
842
+ "score"
843
+ ],
844
+ "structure": "`<Rating />`",
845
+ "guidance": "Star rating input with half-star support"
846
+ },
847
+ {
848
+ "section": "Forms",
849
+ "type": "slider",
850
+ "label": "Slider",
851
+ "description": "Range input slider with thumb control",
852
+ "sourceKind": "component",
853
+ "sourceId": "Slider",
854
+ "sourceName": "Slider",
855
+ "sourceLabel": "Component",
856
+ "sourceImport": "@dryui/ui",
857
+ "routePath": null,
858
+ "tags": [
859
+ "form",
860
+ "range",
861
+ "slider",
862
+ "value"
863
+ ],
864
+ "structure": "`<Slider />`",
865
+ "guidance": "Range input slider with thumb control"
866
+ },
867
+ {
868
+ "section": "Forms",
869
+ "type": "stepper",
870
+ "label": "Stepper",
871
+ "description": "Step-by-step progress indicator",
872
+ "sourceKind": "component",
873
+ "sourceId": "Stepper",
874
+ "sourceName": "Stepper",
875
+ "sourceLabel": "Component",
876
+ "sourceImport": "@dryui/ui",
877
+ "routePath": null,
878
+ "tags": [
879
+ "steps",
880
+ "wizard",
881
+ "progress",
882
+ "workflow",
883
+ "stepper",
884
+ "progress steps"
885
+ ],
886
+ "structure": "`<Stepper.Root>` + `<Stepper.List>` + `<Stepper.Step>` + `<Stepper.Separator>`",
887
+ "guidance": "Step-by-step progress indicator"
888
+ },
889
+ {
890
+ "section": "Forms",
891
+ "type": "tabs",
892
+ "label": "Tabs",
893
+ "description": "Tabbed content navigation",
894
+ "sourceKind": "component",
895
+ "sourceId": "Tabs",
896
+ "sourceName": "Tabs",
897
+ "sourceLabel": "Component",
898
+ "sourceImport": "@dryui/ui",
899
+ "routePath": null,
900
+ "tags": [
901
+ "tabs",
902
+ "nav",
903
+ "switch",
904
+ "panel",
905
+ "switcher"
906
+ ],
907
+ "structure": "`<Tabs.Root>` + `<Tabs.List>` + `<Tabs.Trigger>` + `<Tabs.Content>`",
908
+ "guidance": "Tabbed content navigation"
909
+ },
910
+ {
911
+ "section": "Forms",
912
+ "type": "toggle",
913
+ "label": "Toggle",
914
+ "description": "Pressable toggle button",
915
+ "sourceKind": "component",
916
+ "sourceId": "Toggle",
917
+ "sourceName": "Toggle",
918
+ "sourceLabel": "Component",
919
+ "sourceImport": "@dryui/ui",
920
+ "routePath": null,
921
+ "tags": [
922
+ "button",
923
+ "toggle",
924
+ "pressed",
925
+ "switch"
926
+ ],
927
+ "structure": "`<Toggle />`",
928
+ "guidance": "Pressable toggle button"
929
+ }
930
+ ]
931
+ },
932
+ {
933
+ "section": "Feedback",
934
+ "items": [
935
+ {
936
+ "section": "Feedback",
937
+ "type": "alert",
938
+ "label": "Alert",
939
+ "description": "Contextual feedback message with variant styling",
940
+ "sourceKind": "component",
941
+ "sourceId": "Alert",
942
+ "sourceName": "Alert",
943
+ "sourceLabel": "Component",
944
+ "sourceImport": "@dryui/ui",
945
+ "routePath": null,
946
+ "tags": [
947
+ "message",
948
+ "notification",
949
+ "info",
950
+ "warning",
951
+ "error",
952
+ "alert"
953
+ ],
954
+ "structure": "`<Alert.Root>` + `<Alert.Title>` + `<Alert.Description>`",
955
+ "guidance": "Contextual feedback message with variant styling"
956
+ },
957
+ {
958
+ "section": "Feedback",
959
+ "type": "avatar",
960
+ "label": "Avatar",
961
+ "description": "User profile image with fallback initials",
962
+ "sourceKind": "component",
963
+ "sourceId": "Avatar",
964
+ "sourceName": "Avatar",
965
+ "sourceLabel": "Component",
966
+ "sourceImport": "@dryui/ui",
967
+ "routePath": null,
968
+ "tags": [
969
+ "user",
970
+ "profile",
971
+ "image",
972
+ "initials",
973
+ "avatar",
974
+ "profile photo"
975
+ ],
976
+ "structure": "`<Avatar />`",
977
+ "guidance": "User profile image with fallback initials"
978
+ },
979
+ {
980
+ "section": "Feedback",
981
+ "type": "badge",
982
+ "label": "Badge",
983
+ "description": "Small status indicator label",
984
+ "sourceKind": "component",
985
+ "sourceId": "Badge",
986
+ "sourceName": "Badge",
987
+ "sourceLabel": "Component",
988
+ "sourceImport": "@dryui/ui",
989
+ "routePath": null,
990
+ "tags": [
991
+ "status",
992
+ "count",
993
+ "label",
994
+ "tag",
995
+ "badge"
996
+ ],
997
+ "structure": "`<Badge />`",
998
+ "guidance": "Small status indicator label"
999
+ },
1000
+ {
1001
+ "section": "Feedback",
1002
+ "type": "breadcrumb",
1003
+ "label": "Breadcrumb",
1004
+ "description": "Navigation trail showing page hierarchy",
1005
+ "sourceKind": "component",
1006
+ "sourceId": "Breadcrumb",
1007
+ "sourceName": "Breadcrumb",
1008
+ "sourceLabel": "Component",
1009
+ "sourceImport": "@dryui/ui",
1010
+ "routePath": null,
1011
+ "tags": [
1012
+ "nav",
1013
+ "path",
1014
+ "hierarchy",
1015
+ "trail",
1016
+ "breadcrumb"
1017
+ ],
1018
+ "structure": "`<Breadcrumb.Root>` + `<Breadcrumb.List>` + `<Breadcrumb.Item>` + `<Breadcrumb.Link>`",
1019
+ "guidance": "Navigation trail showing page hierarchy"
1020
+ },
1021
+ {
1022
+ "section": "Feedback",
1023
+ "type": "tag",
1024
+ "label": "Chip",
1025
+ "description": "Interactive pill for filters, selections, and inline state",
1026
+ "sourceKind": "component",
1027
+ "sourceId": "Chip",
1028
+ "sourceName": "Chip",
1029
+ "sourceLabel": "Component",
1030
+ "sourceImport": "@dryui/ui",
1031
+ "routePath": null,
1032
+ "tags": [
1033
+ "chip",
1034
+ "pill",
1035
+ "filter",
1036
+ "selection",
1037
+ "tag"
1038
+ ],
1039
+ "structure": "`<Chip />`",
1040
+ "guidance": "Interactive pill for filters, selections, and inline state"
1041
+ },
1042
+ {
1043
+ "section": "Feedback",
1044
+ "type": "chip",
1045
+ "label": "Chip",
1046
+ "description": "Interactive pill for filters, selections, and inline state",
1047
+ "sourceKind": "component",
1048
+ "sourceId": "Chip",
1049
+ "sourceName": "Chip",
1050
+ "sourceLabel": "Component",
1051
+ "sourceImport": "@dryui/ui",
1052
+ "routePath": null,
1053
+ "tags": [
1054
+ "chip",
1055
+ "pill",
1056
+ "filter",
1057
+ "selection",
1058
+ "tag"
1059
+ ],
1060
+ "structure": "`<Chip />`",
1061
+ "guidance": "Interactive pill for filters, selections, and inline state"
1062
+ },
1063
+ {
1064
+ "section": "Feedback",
1065
+ "type": "icon",
1066
+ "label": "Icon",
1067
+ "description": "Sized and colored SVG icon wrapper with accessibility label",
1068
+ "sourceKind": "component",
1069
+ "sourceId": "Icon",
1070
+ "sourceName": "Icon",
1071
+ "sourceLabel": "Component",
1072
+ "sourceImport": "@dryui/ui",
1073
+ "routePath": null,
1074
+ "tags": [
1075
+ "icon",
1076
+ "svg",
1077
+ "size",
1078
+ "color",
1079
+ "accessible",
1080
+ "glyph"
1081
+ ],
1082
+ "structure": "`<Icon />`",
1083
+ "guidance": "Sized and colored SVG icon wrapper with accessibility label"
1084
+ },
1085
+ {
1086
+ "section": "Feedback",
1087
+ "type": "pagination",
1088
+ "label": "Pagination",
1089
+ "description": "Page navigation with previous/next and page links",
1090
+ "sourceKind": "component",
1091
+ "sourceId": "Pagination",
1092
+ "sourceName": "Pagination",
1093
+ "sourceLabel": "Component",
1094
+ "sourceImport": "@dryui/ui",
1095
+ "routePath": null,
1096
+ "tags": [
1097
+ "nav",
1098
+ "pages",
1099
+ "paging",
1100
+ "navigation",
1101
+ "pagination"
1102
+ ],
1103
+ "structure": "`<Pagination.Root>` + `<Pagination.Content>` + `<Pagination.Item>` + `<Pagination.Previous>`",
1104
+ "guidance": "Page navigation with previous/next and page links"
1105
+ },
1106
+ {
1107
+ "section": "Feedback",
1108
+ "type": "progress",
1109
+ "label": "Progress",
1110
+ "description": "Progress bar indicator",
1111
+ "sourceKind": "component",
1112
+ "sourceId": "Progress",
1113
+ "sourceName": "Progress",
1114
+ "sourceLabel": "Component",
1115
+ "sourceImport": "@dryui/ui",
1116
+ "routePath": null,
1117
+ "tags": [
1118
+ "loading",
1119
+ "progress",
1120
+ "bar",
1121
+ "percentage",
1122
+ "meter"
1123
+ ],
1124
+ "structure": "`<Progress />`",
1125
+ "guidance": "Progress bar indicator"
1126
+ },
1127
+ {
1128
+ "section": "Feedback",
1129
+ "type": "skeleton",
1130
+ "label": "Skeleton",
1131
+ "description": "Loading placeholder animation",
1132
+ "sourceKind": "component",
1133
+ "sourceId": "Skeleton",
1134
+ "sourceName": "Skeleton",
1135
+ "sourceLabel": "Component",
1136
+ "sourceImport": "@dryui/ui",
1137
+ "routePath": null,
1138
+ "tags": [
1139
+ "loading",
1140
+ "placeholder",
1141
+ "shimmer",
1142
+ "skeleton"
1143
+ ],
1144
+ "structure": "`<Skeleton />`",
1145
+ "guidance": "Loading placeholder animation"
1146
+ },
1147
+ {
1148
+ "section": "Feedback",
1149
+ "type": "spinner",
1150
+ "label": "Spinner",
1151
+ "description": "Loading spinner animation",
1152
+ "sourceKind": "component",
1153
+ "sourceId": "Spinner",
1154
+ "sourceName": "Spinner",
1155
+ "sourceLabel": "Component",
1156
+ "sourceImport": "@dryui/ui",
1157
+ "routePath": null,
1158
+ "tags": [
1159
+ "loading",
1160
+ "spinner",
1161
+ "wait",
1162
+ "processing"
1163
+ ],
1164
+ "structure": "`<Spinner />`",
1165
+ "guidance": "Loading spinner animation"
1166
+ },
1167
+ {
1168
+ "section": "Feedback",
1169
+ "type": "stat",
1170
+ "label": "StatCard",
1171
+ "description": "Metric card with label, value, and trend parts",
1172
+ "sourceKind": "component",
1173
+ "sourceId": "StatCard",
1174
+ "sourceName": "StatCard",
1175
+ "sourceLabel": "Component",
1176
+ "sourceImport": "@dryui/ui",
1177
+ "routePath": null,
1178
+ "tags": [
1179
+ "stats",
1180
+ "kpi",
1181
+ "metric",
1182
+ "dashboard",
1183
+ "trend",
1184
+ "stat"
1185
+ ],
1186
+ "structure": "`<StatCard.Root>` + `<StatCard.Label>` + `<StatCard.Value>` + `<StatCard.Trend>`",
1187
+ "guidance": "Metric card with label, value, and trend parts"
1188
+ },
1189
+ {
1190
+ "section": "Feedback",
1191
+ "type": "toast",
1192
+ "label": "Toast",
1193
+ "description": "Temporary notification message",
1194
+ "sourceKind": "component",
1195
+ "sourceId": "Toast",
1196
+ "sourceName": "Toast",
1197
+ "sourceLabel": "Component",
1198
+ "sourceImport": "@dryui/ui",
1199
+ "routePath": null,
1200
+ "tags": [
1201
+ "notification",
1202
+ "toast",
1203
+ "snackbar",
1204
+ "alert"
1205
+ ],
1206
+ "structure": "`<Toast.Provider>` + `<Toast.Root>` + `<Toast.Title>` + `<Toast.Description>`",
1207
+ "guidance": "Temporary notification message"
1208
+ },
1209
+ {
1210
+ "section": "Feedback",
1211
+ "type": "notification",
1212
+ "label": "Toast",
1213
+ "description": "Temporary notification message",
1214
+ "sourceKind": "component",
1215
+ "sourceId": "Toast",
1216
+ "sourceName": "Toast",
1217
+ "sourceLabel": "Component",
1218
+ "sourceImport": "@dryui/ui",
1219
+ "routePath": null,
1220
+ "tags": [
1221
+ "notification",
1222
+ "toast",
1223
+ "snackbar",
1224
+ "alert"
1225
+ ],
1226
+ "structure": "`<Toast.Provider>` + `<Toast.Root>` + `<Toast.Title>` + `<Toast.Description>`",
1227
+ "guidance": "Use Toast for transient notifications and Alert for persistent inline status."
1228
+ },
1229
+ {
1230
+ "section": "Feedback",
1231
+ "type": "tooltip",
1232
+ "label": "Tooltip",
1233
+ "description": "Hover/focus popup with descriptive text",
1234
+ "sourceKind": "component",
1235
+ "sourceId": "Tooltip",
1236
+ "sourceName": "Tooltip",
1237
+ "sourceLabel": "Component",
1238
+ "sourceImport": "@dryui/ui",
1239
+ "routePath": null,
1240
+ "tags": [
1241
+ "hover",
1242
+ "info",
1243
+ "tooltip",
1244
+ "hint"
1245
+ ],
1246
+ "structure": "`<Tooltip.Root>` + `<Tooltip.Trigger>` + `<Tooltip.Content>`",
1247
+ "guidance": "Hover/focus popup with descriptive text"
1248
+ }
1249
+ ]
1250
+ },
1251
+ {
1252
+ "section": "Blocks",
1253
+ "items": [
1254
+ {
1255
+ "section": "Blocks",
1256
+ "type": "login",
1257
+ "label": "Auth Form",
1258
+ "description": "Structured field grouping with legend, description, and content",
1259
+ "sourceKind": "component",
1260
+ "sourceId": "Fieldset",
1261
+ "sourceName": "Fieldset",
1262
+ "sourceLabel": "Component",
1263
+ "sourceImport": "@dryui/ui",
1264
+ "routePath": null,
1265
+ "tags": [
1266
+ "form",
1267
+ "group",
1268
+ "legend",
1269
+ "settings",
1270
+ "login",
1271
+ "auth",
1272
+ "signin"
1273
+ ],
1274
+ "structure": "`<Fieldset>` + `<Input>` + `<Checkbox>` + `<Button>`",
1275
+ "guidance": "Compose login and auth layouts from Fieldset, Input, Checkbox, and Button."
1276
+ },
1277
+ {
1278
+ "section": "Blocks",
1279
+ "type": "contact",
1280
+ "label": "Contact Sections",
1281
+ "description": "Add support, sales, and outreach sections with cleaner routing and expectation-setting.",
1282
+ "sourceKind": "block",
1283
+ "sourceId": "contact-sections",
1284
+ "sourceName": "Contact Sections",
1285
+ "sourceLabel": "Block",
1286
+ "sourceImport": null,
1287
+ "routePath": "/blocks/contact-sections",
1288
+ "tags": [
1289
+ "contact",
1290
+ "support",
1291
+ "sales",
1292
+ "contact form"
1293
+ ],
1294
+ "structure": null,
1295
+ "guidance": "Start from /blocks/contact-sections and pick the closest block variant (Sales contact, Support split)."
1296
+ },
1297
+ {
1298
+ "section": "Blocks",
1299
+ "type": "cta",
1300
+ "label": "CTA Sections",
1301
+ "description": "Ship end-cap conversion bands, split CTAs, and proof-backed final asks.",
1302
+ "sourceKind": "block",
1303
+ "sourceId": "cta-sections",
1304
+ "sourceName": "CTA Sections",
1305
+ "sourceLabel": "Block",
1306
+ "sourceImport": null,
1307
+ "routePath": "/blocks/cta-sections",
1308
+ "tags": [
1309
+ "cta",
1310
+ "conversion",
1311
+ "marketing",
1312
+ "call to action"
1313
+ ],
1314
+ "structure": null,
1315
+ "guidance": "Start from /blocks/cta-sections and pick the closest block variant (End-cap band, Split CTA)."
1316
+ },
1317
+ {
1318
+ "section": "Blocks",
1319
+ "type": "feature",
1320
+ "label": "FeatureSplitSection",
1321
+ "description": "Split editorial section pairing feature copy with supporting media and call-to-action content",
1322
+ "sourceKind": "component",
1323
+ "sourceId": "FeatureSplitSection",
1324
+ "sourceName": "FeatureSplitSection",
1325
+ "sourceLabel": "Component",
1326
+ "sourceImport": "@dryui/ui",
1327
+ "routePath": null,
1328
+ "tags": [
1329
+ "feature",
1330
+ "split",
1331
+ "media",
1332
+ "section",
1333
+ "marketing",
1334
+ "split section"
1335
+ ],
1336
+ "structure": "`<FeatureSplitSection.Root>` + `<FeatureSplitSection.Content>` + `<FeatureSplitSection.Kicker>` + `<FeatureSplitSection.Heading>`",
1337
+ "guidance": "Split editorial section pairing feature copy with supporting media and call-to-action content"
1338
+ },
1339
+ {
1340
+ "section": "Blocks",
1341
+ "type": "pricing",
1342
+ "label": "Pricing Sections",
1343
+ "description": "Package plan comparisons, bill-frequency toggles, and contract framing.",
1344
+ "sourceKind": "block",
1345
+ "sourceId": "pricing-sections",
1346
+ "sourceName": "Pricing Sections",
1347
+ "sourceLabel": "Block",
1348
+ "sourceImport": null,
1349
+ "routePath": "/blocks/pricing-sections",
1350
+ "tags": [
1351
+ "pricing",
1352
+ "plans",
1353
+ "comparison"
1354
+ ],
1355
+ "structure": null,
1356
+ "guidance": "Start from /blocks/pricing-sections and pick the closest block variant (Plan grid, Comparison ladder)."
1357
+ },
1358
+ {
1359
+ "section": "Blocks",
1360
+ "type": "productCard",
1361
+ "label": "Product Card",
1362
+ "description": "Contained content surface with header/content/footer sections",
1363
+ "sourceKind": "component",
1364
+ "sourceId": "Card",
1365
+ "sourceName": "Card",
1366
+ "sourceLabel": "Component",
1367
+ "sourceImport": "@dryui/ui",
1368
+ "routePath": null,
1369
+ "tags": [
1370
+ "surface",
1371
+ "container",
1372
+ "content",
1373
+ "panel",
1374
+ "product card",
1375
+ "commerce",
1376
+ "tile"
1377
+ ],
1378
+ "structure": "`<Card.Root>` + media + pricing + CTA",
1379
+ "guidance": "Compose a product tile with Card plus media, pricing, and CTA content instead of a generic product rectangle."
1380
+ },
1381
+ {
1382
+ "section": "Blocks",
1383
+ "type": "team",
1384
+ "label": "Team Sections",
1385
+ "description": "Publish founder, leadership, and team rosters with designed identity cards.",
1386
+ "sourceKind": "block",
1387
+ "sourceId": "team-sections",
1388
+ "sourceName": "Team Sections",
1389
+ "sourceLabel": "Block",
1390
+ "sourceImport": null,
1391
+ "routePath": "/blocks/team-sections",
1392
+ "tags": [
1393
+ "team",
1394
+ "about",
1395
+ "people"
1396
+ ],
1397
+ "structure": null,
1398
+ "guidance": "Start from /blocks/team-sections and pick the closest block variant (Leadership grid, Editorial bios)."
1399
+ },
1400
+ {
1401
+ "section": "Blocks",
1402
+ "type": "testimonial",
1403
+ "label": "Testimonials",
1404
+ "description": "Package customer quotes, logos, and role metadata in reusable cards.",
1405
+ "sourceKind": "block",
1406
+ "sourceId": "testimonials",
1407
+ "sourceName": "Testimonials",
1408
+ "sourceLabel": "Block",
1409
+ "sourceImport": null,
1410
+ "routePath": "/blocks/testimonials",
1411
+ "tags": [
1412
+ "testimonials",
1413
+ "quotes",
1414
+ "customers",
1415
+ "testimonial",
1416
+ "quote",
1417
+ "customer proof"
1418
+ ],
1419
+ "structure": null,
1420
+ "guidance": "Start from /blocks/testimonials and pick the closest block variant (Quote grid, Hero quote)."
1421
+ },
1422
+ {
1423
+ "section": "Blocks",
1424
+ "type": "profile",
1425
+ "label": "User",
1426
+ "description": "User identity display with avatar, name, and description",
1427
+ "sourceKind": "component",
1428
+ "sourceId": "User",
1429
+ "sourceName": "User",
1430
+ "sourceLabel": "Component",
1431
+ "sourceImport": "@dryui/ui",
1432
+ "routePath": null,
1433
+ "tags": [
1434
+ "user",
1435
+ "profile",
1436
+ "avatar",
1437
+ "identity",
1438
+ "person"
1439
+ ],
1440
+ "structure": "`<User />`",
1441
+ "guidance": "User identity display with avatar, name, and description"
1442
+ }
1443
+ ]
1444
+ }
1445
+ ];