laif-ds 1.0.1 → 1.0.2-app-data-grid.76

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 (69) hide show
  1. package/dist/CHANGELOG.md +263 -0
  2. package/dist/_virtual/index7.js +5 -2
  3. package/dist/_virtual/index8.js +2 -5
  4. package/dist/agent-docs/adoption-report.json +152 -73
  5. package/dist/agent-docs/components/AppBottomNav.md +7 -8
  6. package/dist/agent-docs/components/AppCard.md +25 -21
  7. package/dist/agent-docs/components/AppDataGrid.md +2602 -0
  8. package/dist/agent-docs/components/AppEditor.md +18 -13
  9. package/dist/agent-docs/components/AppSelect.md +50 -0
  10. package/dist/agent-docs/components/DataTable.md +34 -3
  11. package/dist/agent-docs/components/DatePicker.md +7 -7
  12. package/dist/agent-docs/components/FileUploader.md +12 -12
  13. package/dist/agent-docs/components/GridFilterPanel.md +112 -0
  14. package/dist/agent-docs/components/SidebarMenuBadge.md +87 -0
  15. package/dist/agent-docs/components-list.md +44 -0
  16. package/dist/agent-docs/manifest.json +264 -27
  17. package/dist/components/design-tokens.js +138 -2
  18. package/dist/components/ui/app-bottom-nav.js +74 -78
  19. package/dist/components/ui/app-data-grid/app-data-grid.js +874 -0
  20. package/dist/components/ui/app-data-grid/engine/use-grid-column-resize.js +110 -0
  21. package/dist/components/ui/app-data-grid/engine/use-grid-engine.js +598 -0
  22. package/dist/components/ui/app-data-grid/engine/use-grid-infinite-loader.js +50 -0
  23. package/dist/components/ui/app-data-grid/engine/use-grid-virtualizer.js +90 -0
  24. package/dist/components/ui/app-data-grid/grid-aggregate.js +5 -0
  25. package/dist/components/ui/app-data-grid/grid-column-registry.js +28 -0
  26. package/dist/components/ui/app-data-grid/grid-columns.js +204 -0
  27. package/dist/components/ui/app-data-grid/grid-filter-compile.js +33 -0
  28. package/dist/components/ui/app-data-grid/grid-filter-operators.js +139 -0
  29. package/dist/components/ui/app-data-grid/grid-grouping.js +104 -0
  30. package/dist/components/ui/app-data-grid/grid-header-matrix.js +112 -0
  31. package/dist/components/ui/app-data-grid/grid-i18n.js +207 -0
  32. package/dist/components/ui/app-data-grid/grid-mount-count.js +8 -0
  33. package/dist/components/ui/app-data-grid/grid-reducer.js +200 -0
  34. package/dist/components/ui/app-data-grid/grid-result-scope.js +35 -0
  35. package/dist/components/ui/app-data-grid/grid-tokens.js +169 -0
  36. package/dist/components/ui/app-data-grid/grid-view-preset.js +97 -0
  37. package/dist/components/ui/app-data-grid/parts/grid-actions-row.js +86 -0
  38. package/dist/components/ui/app-data-grid/parts/grid-cell-text.js +67 -0
  39. package/dist/components/ui/app-data-grid/parts/grid-column-registry-panel.js +320 -0
  40. package/dist/components/ui/app-data-grid/parts/grid-density-control.js +88 -0
  41. package/dist/components/ui/app-data-grid/parts/grid-filter-chips.js +224 -0
  42. package/dist/components/ui/app-data-grid/parts/grid-filter-editor.js +197 -0
  43. package/dist/components/ui/app-data-grid/parts/grid-filter-panel.js +386 -0
  44. package/dist/components/ui/app-data-grid/parts/grid-filter-row.js +273 -0
  45. package/dist/components/ui/app-data-grid/parts/grid-fullscreen-toggle.js +29 -0
  46. package/dist/components/ui/app-data-grid/parts/grid-group-row.js +135 -0
  47. package/dist/components/ui/app-data-grid/parts/grid-header.js +338 -0
  48. package/dist/components/ui/app-data-grid/parts/grid-pagination-control.js +218 -0
  49. package/dist/components/ui/app-data-grid/parts/grid-row.js +181 -0
  50. package/dist/components/ui/app-data-grid/parts/grid-scroll-area.js +186 -0
  51. package/dist/components/ui/app-data-grid/parts/grid-selection-bar.js +195 -0
  52. package/dist/components/ui/app-data-grid/parts/grid-status-surface.js +66 -0
  53. package/dist/components/ui/app-data-grid/parts/grid-table.js +482 -0
  54. package/dist/components/ui/app-data-grid/parts/grid-toolbar-slots.js +192 -0
  55. package/dist/components/ui/app-data-grid/use-grid-filters.js +173 -0
  56. package/dist/components/ui/app-select.js +332 -222
  57. package/dist/components/ui/button.js +2 -1
  58. package/dist/components/ui/gantt/components/Chart/Chart.js +1 -1
  59. package/dist/components/ui/tables/data-cross-table/data-cross-table.js +6 -6
  60. package/dist/components/ui/tables/data-table/data-table-constants.js +36 -16
  61. package/dist/components/ui/tables/data-table/data-table-i18n.js +135 -1
  62. package/dist/css-for-template.css +27 -0
  63. package/dist/index.d.ts +5711 -76
  64. package/dist/index.js +473 -406
  65. package/dist/node_modules/eventemitter3/index2.js +1 -1
  66. package/dist/styles.css +2 -1
  67. package/dist/styles.v3.css +1 -1
  68. package/package.json +25 -7
  69. /package/dist/agent-docs/components/{truncated-cell.md → TruncatedCell.md} +0 -0
@@ -1,23 +1,78 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-09-17T14:06:59.977Z",
3
+ "generatedAt": "2026-09-22T08:46:36.530Z",
4
4
  "package": {
5
5
  "name": "laif-ds",
6
- "version": "1.0.1"
6
+ "version": "1.0.2-app-data-grid.76"
7
7
  },
8
8
  "summary": {
9
- "scannedFiles": 404,
10
- "deprecatedComponentsCount": 2,
11
- "deprecatedComponentsUsedCount": 0,
9
+ "scannedFiles": 487,
10
+ "deprecatedComponentsCount": 4,
11
+ "deprecatedComponentsUsedCount": 2,
12
12
  "componentsWithoutExamplesCount": 5,
13
13
  "componentsWithoutPropsTableCount": 30,
14
14
  "repeatedClassPatternsCount": 25,
15
- "lowAiReadinessComponentsCount": 41,
15
+ "lowAiReadinessComponentsCount": 42,
16
16
  "componentsWithoutAccessibilityCoverageCount": 45,
17
- "componentsWithWeakStateCoverageCount": 71,
18
- "averageAiReadinessScore": 56.17
17
+ "componentsWithWeakStateCoverageCount": 73,
18
+ "averageAiReadinessScore": 56.55
19
19
  },
20
- "deprecatedUsage": [],
20
+ "deprecatedUsage": [
21
+ {
22
+ "component": "DataTable",
23
+ "replacement": "AppDataGrid",
24
+ "totalOccurrences": 12,
25
+ "usages": [
26
+ {
27
+ "file": "src/components/design-tokens.ts",
28
+ "occurrences": 2
29
+ },
30
+ {
31
+ "file": "src/components/ui/app-data-grid/parts/grid-scroll-area.tsx",
32
+ "occurrences": 2
33
+ },
34
+ {
35
+ "file": "src/components/ui/tables/data-table/data-table.tsx",
36
+ "occurrences": 2
37
+ },
38
+ {
39
+ "file": "src/components/ui/app-data-grid/app-data-grid.tsx",
40
+ "occurrences": 1
41
+ },
42
+ {
43
+ "file": "src/components/ui/app-data-grid/app-data-grid.types.ts",
44
+ "occurrences": 1
45
+ },
46
+ {
47
+ "file": "src/components/ui/app-data-grid/grid-filter-operators.ts",
48
+ "occurrences": 1
49
+ },
50
+ {
51
+ "file": "src/components/ui/app-data-grid/grid-i18n.ts",
52
+ "occurrences": 1
53
+ },
54
+ {
55
+ "file": "src/components/ui/app-select.tsx",
56
+ "occurrences": 1
57
+ },
58
+ {
59
+ "file": "src/components/ui/tables/data-table/data-table.utils.ts",
60
+ "occurrences": 1
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "component": "SidebarMenuBadge",
66
+ "replacement": "NavItem.badge",
67
+ "totalOccurrences": 4,
68
+ "usages": [
69
+ {
70
+ "file": "src/components/ui/sidebar.tsx",
71
+ "occurrences": 4
72
+ }
73
+ ]
74
+ }
75
+ ],
21
76
  "documentationGaps": {
22
77
  "componentsWithoutExamples": [
23
78
  "AppMultipleSelectDropdown",
@@ -136,6 +191,7 @@
136
191
  "FilePreviewer",
137
192
  "Form",
138
193
  "GanttChart",
194
+ "GridFilterPanel",
139
195
  "HoverCard",
140
196
  "Icon",
141
197
  "Input",
@@ -161,6 +217,7 @@
161
217
  "Sheet",
162
218
  "ShikiHighlighter",
163
219
  "Sidebar",
220
+ "SidebarMenuBadge",
164
221
  "Skeleton",
165
222
  "Slider",
166
223
  "Sonner",
@@ -317,6 +374,10 @@
317
374
  "name": "SecurePdfViewer",
318
375
  "score": 40
319
376
  },
377
+ {
378
+ "name": "SidebarMenuBadge",
379
+ "score": 40
380
+ },
320
381
  {
321
382
  "name": "Toggle",
322
383
  "score": 40
@@ -351,13 +412,16 @@
351
412
  "repeatedClassNames": [
352
413
  {
353
414
  "className": "flex items-center gap-2",
354
- "occurrences": 36,
415
+ "occurrences": 41,
355
416
  "files": [
356
417
  "src/components/stories/app-checkbox.stories.tsx",
418
+ "src/components/stories/app-data-grid-completa.stories.tsx",
419
+ "src/components/stories/app-data-grid-confronto.stories.tsx",
357
420
  "src/components/stories/app-dialog.stories.tsx",
358
421
  "src/components/stories/app-radio-group.stories.tsx",
359
422
  "src/components/stories/app-select.stories.tsx",
360
423
  "src/components/stories/app-tooltip.stories.tsx",
424
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
361
425
  "src/components/stories/badge.stories.tsx",
362
426
  "src/components/stories/button.stories.tsx",
363
427
  "src/components/stories/data-table-docs.stories.tsx",
@@ -446,6 +510,36 @@
446
510
  "src/components/stories/switch.stories.tsx"
447
511
  ]
448
512
  },
513
+ {
514
+ "className": "text-sm font-semibold",
515
+ "occurrences": 14,
516
+ "files": [
517
+ "src/components/stories/app-bottom-nav.stories.tsx",
518
+ "src/components/stories/app-data-grid-confronto.stories.tsx",
519
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
520
+ "src/components/stories/collapsible.stories.tsx",
521
+ "src/components/stories/data-table-utils-example.stories.tsx",
522
+ "src/components/stories/truncated-cell.stories.tsx",
523
+ "src/components/ui/weekly-calendar/appointment-card.tsx"
524
+ ]
525
+ },
526
+ {
527
+ "className": "text-d-muted-foreground",
528
+ "occurrences": 14,
529
+ "files": [
530
+ "src/components/stories/app-data-grid-completa.stories.tsx",
531
+ "src/components/stories/app-data-grid-preset.stories.tsx",
532
+ "src/components/stories/app-dialog.stories.tsx",
533
+ "src/components/stories/app-time-picker.stories.tsx",
534
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
535
+ "src/components/ui/app-data-grid/parts/grid-toolbar-slots.tsx",
536
+ "src/components/ui/app-form.tsx",
537
+ "src/components/ui/app-multiple-select-dropdown.tsx",
538
+ "src/components/ui/app-select.tsx",
539
+ "src/components/ui/date-picker.tsx",
540
+ "src/components/ui/weekly-calendar/calendar-header.tsx"
541
+ ]
542
+ },
449
543
  {
450
544
  "className": "border-d-border bg-d-muted rounded-lg border p-4",
451
545
  "occurrences": 14,
@@ -468,6 +562,21 @@
468
562
  "src/components/stories/sidebar.stories.tsx"
469
563
  ]
470
564
  },
565
+ {
566
+ "className": "text-d-muted-foreground text-xs",
567
+ "occurrences": 11,
568
+ "files": [
569
+ "src/components/editor/plugins/mention-plugin.tsx",
570
+ "src/components/stories/app-card.stories.tsx",
571
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
572
+ "src/components/stories/button.stories.tsx",
573
+ "src/components/stories/input.stories.tsx",
574
+ "src/components/ui/app-data-grid/parts/grid-filter-editor.tsx",
575
+ "src/components/ui/tables/data-cross-table/cell-editor-dialog.tsx",
576
+ "src/components/ui/tables/data-cross-table/data-cross-table.tsx",
577
+ "src/components/ui/tables/data-cross-table/editable-input.tsx"
578
+ ]
579
+ },
471
580
  {
472
581
  "className": "flex w-[550px] flex-col gap-6",
473
582
  "occurrences": 10,
@@ -476,6 +585,14 @@
476
585
  "src/components/stories/app-radio-group.stories.tsx"
477
586
  ]
478
587
  },
588
+ {
589
+ "className": "text-d-foreground text-xs",
590
+ "occurrences": 9,
591
+ "files": [
592
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
593
+ "src/components/ui/app-select.tsx"
594
+ ]
595
+ },
479
596
  {
480
597
  "className": "text-d-muted-foreground max-w-prose text-sm",
481
598
  "occurrences": 9,
@@ -492,16 +609,14 @@
492
609
  ]
493
610
  },
494
611
  {
495
- "className": "text-d-muted-foreground text-xs",
612
+ "className": "text-lg font-semibold",
496
613
  "occurrences": 8,
497
614
  "files": [
498
- "src/components/editor/plugins/mention-plugin.tsx",
499
- "src/components/stories/app-card.stories.tsx",
500
- "src/components/stories/button.stories.tsx",
501
- "src/components/stories/input.stories.tsx",
502
- "src/components/ui/tables/data-cross-table/cell-editor-dialog.tsx",
503
- "src/components/ui/tables/data-cross-table/data-cross-table.tsx",
504
- "src/components/ui/tables/data-cross-table/editable-input.tsx"
615
+ "src/components/stories/app-data-grid-confronto.stories.tsx",
616
+ "src/components/stories/app-kanban.stories.tsx",
617
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
618
+ "src/components/stories/changelog.stories.tsx",
619
+ "src/components/stories/playground.stories.tsx"
505
620
  ]
506
621
  },
507
622
  {
@@ -538,78 +653,42 @@
538
653
  ]
539
654
  },
540
655
  {
541
- "className": "text-d-muted-foreground",
656
+ "className": "flex items-center gap-1",
542
657
  "occurrences": 7,
543
658
  "files": [
544
- "src/components/stories/app-dialog.stories.tsx",
545
- "src/components/stories/app-time-picker.stories.tsx",
546
- "src/components/ui/app-form.tsx",
547
- "src/components/ui/app-multiple-select-dropdown.tsx",
548
- "src/components/ui/app-select.tsx",
549
- "src/components/ui/date-picker.tsx",
550
- "src/components/ui/weekly-calendar/calendar-header.tsx"
551
- ]
552
- },
553
- {
554
- "className": "bg-muted/50 rounded p-4 text-sm",
555
- "occurrences": 7,
556
- "files": [
557
- "src/components/stories/app-select.stories.tsx"
659
+ "src/components/editor/plugins/toolbar/history-toolbar-plugin.tsx",
660
+ "src/components/stories/app-select.stories.tsx",
661
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
662
+ "src/components/ui/app-data-grid/parts/grid-group-row.tsx",
663
+ "src/components/ui/app-kanban.tsx",
664
+ "src/components/ui/calendar.tsx"
558
665
  ]
559
666
  },
560
667
  {
561
- "className": "flex-1 space-y-3 overflow-auto p-4",
668
+ "className": "min-w-0 flex-1 truncate",
562
669
  "occurrences": 7,
563
670
  "files": [
564
- "src/components/stories/app-sidebar.stories.tsx"
671
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
672
+ "src/components/ui/app-select.tsx",
673
+ "src/components/ui/app-sidebar.tsx"
565
674
  ]
566
675
  },
567
676
  {
568
- "className": "border-d-border border px-3 py-1 text-center text-sm font-light",
677
+ "className": "flex flex-wrap gap-2",
569
678
  "occurrences": 7,
570
679
  "files": [
571
- "src/components/stories/badge.stories.tsx",
572
- "src/components/stories/button.stories.tsx"
680
+ "src/components/stories/app-card.stories.tsx",
681
+ "src/components/stories/app-data-grid-filtri-custom.stories.tsx",
682
+ "src/components/stories/AppDataGrid.mockup.stories.tsx",
683
+ "src/components/stories/file-preview.stories.tsx",
684
+ "src/components/stories/toaster.stories.tsx"
573
685
  ]
574
686
  },
575
687
  {
576
- "className": "flex flex-col items-center gap-2",
688
+ "className": "bg-muted/50 rounded p-4 text-sm",
577
689
  "occurrences": 7,
578
690
  "files": [
579
- "src/components/stories/icon.stories.tsx",
580
- "src/components/stories/spinner.stories.tsx"
581
- ]
582
- },
583
- {
584
- "className": "flex items-center gap-1 font-normal",
585
- "occurrences": 6,
586
- "files": [
587
- "src/components/editor/plugins/toolbar/block-format/format-bulleted-list.tsx",
588
- "src/components/editor/plugins/toolbar/block-format/format-check-list.tsx",
589
- "src/components/editor/plugins/toolbar/block-format/format-heading.tsx",
590
- "src/components/editor/plugins/toolbar/block-format/format-numbered-list.tsx",
591
- "src/components/editor/plugins/toolbar/block-format/format-paragraph.tsx",
592
- "src/components/editor/plugins/toolbar/block-format/format-quote.tsx"
593
- ]
594
- },
595
- {
596
- "className": "text-sm font-semibold",
597
- "occurrences": 6,
598
- "files": [
599
- "src/components/stories/app-bottom-nav.stories.tsx",
600
- "src/components/stories/collapsible.stories.tsx",
601
- "src/components/stories/data-table-utils-example.stories.tsx",
602
- "src/components/stories/truncated-cell.stories.tsx",
603
- "src/components/ui/weekly-calendar/appointment-card.tsx"
604
- ]
605
- },
606
- {
607
- "className": "text-lg font-semibold",
608
- "occurrences": 6,
609
- "files": [
610
- "src/components/stories/app-kanban.stories.tsx",
611
- "src/components/stories/changelog.stories.tsx",
612
- "src/components/stories/playground.stories.tsx"
691
+ "src/components/stories/app-select.stories.tsx"
613
692
  ]
614
693
  }
615
694
  ]
@@ -231,14 +231,13 @@ claymorphism theme, while the dock around it is a fixed `rounded-t-lg`.
231
231
  - **Parent whose child is current** (any `subItems[].isActive`) → the cell is a
232
232
  `<button>`, marked, **without** `aria-current`: a button is not a page, it is a
233
233
  disclosure. So the app only has to mark the leaf.
234
- - **Nothing in the bar owns the route** → the **Menu** cell takes the pill, with
235
- no `aria-current` and no `aria-expanded="true"`. Five neutral cells read as
236
- "the component failed to work out where I am"; the truthful statement is "the
237
- page you are on is reachable through here", and it is redundant for a screen
238
- reader, so nothing is added to the accessibility tree. With
239
- `showMenu={false}` there is nothing to hand the pill to and the bar does
240
- render entirely neutral — the honest state when every cell is a destination
241
- and none of them is the current one.
234
+ - **Nothing in the bar owns the route** → **no cell is marked**, Menu included.
235
+ The bar renders entirely neutral, exactly as it always has with
236
+ `showMenu={false}`. The Menu cell is a disclosure, not a destination: the pill
237
+ means "this is the page you are on", and handing it to a button that opens a
238
+ panel says that about something which is not a page. A route outside the bar's
239
+ five destinations is a real state, and the honest way to render it is no pill
240
+ at all.
242
241
  - Two active items is an app bug: the first in order wins and one warning is
243
242
  logged.
244
243
 
@@ -10,24 +10,24 @@ Enhanced card component built on top of the base Card component. Provides a simp
10
10
 
11
11
  ### AppCardProps
12
12
 
13
- | Prop | Type | Default | Description |
14
- | ------------------ | ------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------------- |
15
- | `title` | `string \| React.ReactNode` | `undefined` | Card title displayed in the header. |
16
- | `description` | `string \| React.ReactNode` | `undefined` | Card description displayed below the title. |
17
- | `header` | `React.ReactNode` | `undefined` | Custom header content; overrides `title` and `description`. |
18
- | `body` | `React.ReactNode` | `undefined` | Main content rendered inside CardContent. |
19
- | `children` | `React.ReactNode` | `undefined` | Fallback body content when `body` is not provided. |
20
- | `actions` | `React.ReactNode` | `undefined` | Right-aligned action elements inside the header. |
21
- | `footer` | `React.ReactNode` | `undefined` | Footer content (typically action buttons). |
22
- | `variant` | `AppCardVariant` | `"default"` | Visual variant of the card (see table below). |
23
- | `size` | `"sm" \| "default" \| "lg" \| "none"` | `undefined` | Controls internal padding via the base Card component. |
24
- | `isLoading` | `boolean` | `false` | When true, renders skeleton placeholders instead of content. |
25
- | `showHeaderBorder` | `boolean` | `false` | Displays a border between the header and body sections. |
26
- | `showFooterBorder` | `boolean` | `false` | Displays a border between the body and footer sections. |
27
- | `className` | `string` | `undefined` | Additional classes for the card container. |
28
- | `headerClassName` | `string` | `undefined` | Additional classes for the header section. |
29
- | `bodyClassName` | `string` | `undefined` | Additional classes for the body section. |
30
- | `footerClassName` | `string` | `undefined` | Additional classes for the footer section. |
13
+ | Prop | Type | Default | Description |
14
+ | ------------------ | ------------------------------------- | ----------- | ------------------------------------------------------------ |
15
+ | `title` | `string \| React.ReactNode` | `undefined` | Card title displayed in the header. |
16
+ | `description` | `string \| React.ReactNode` | `undefined` | Card description displayed below the title. |
17
+ | `header` | `React.ReactNode` | `undefined` | Custom header content; overrides `title` and `description`. |
18
+ | `body` | `React.ReactNode` | `undefined` | Main content rendered inside CardContent. |
19
+ | `children` | `React.ReactNode` | `undefined` | Fallback body content when `body` is not provided. |
20
+ | `actions` | `React.ReactNode` | `undefined` | Right-aligned action elements inside the header. |
21
+ | `footer` | `React.ReactNode` | `undefined` | Footer content (typically action buttons). |
22
+ | `variant` | `AppCardVariant` | `"default"` | Visual variant of the card (see table below). |
23
+ | `size` | `"sm" \| "default" \| "lg" \| "none"` | `undefined` | Controls internal padding via the base Card component. |
24
+ | `isLoading` | `boolean` | `false` | When true, renders skeleton placeholders instead of content. |
25
+ | `showHeaderBorder` | `boolean` | `false` | Displays a border between the header and body sections. |
26
+ | `showFooterBorder` | `boolean` | `false` | Displays a border between the body and footer sections. |
27
+ | `className` | `string` | `undefined` | Additional classes for the card container. |
28
+ | `headerClassName` | `string` | `undefined` | Additional classes for the header section. |
29
+ | `bodyClassName` | `string` | `undefined` | Additional classes for the body section. |
30
+ | `footerClassName` | `string` | `undefined` | Additional classes for the footer section. |
31
31
 
32
32
  ### Variant Reference
33
33
 
@@ -203,13 +203,17 @@ export function NestedCards() {
203
203
  <div className="flex flex-col gap-3">
204
204
  <AppCard
205
205
  title="Nested Item A"
206
- body={<p className="text-sm">Flat cards have no border or shadow.</p>}
206
+ body={
207
+ <p className="text-sm">Flat cards have no border or shadow.</p>
208
+ }
207
209
  variant="flat"
208
210
  size="sm"
209
211
  />
210
212
  <AppCard
211
213
  title="Nested Item B"
212
- body={<p className="text-sm">Good for secondary content regions.</p>}
214
+ body={
215
+ <p className="text-sm">Good for secondary content regions.</p>
216
+ }
213
217
  variant="flat"
214
218
  size="sm"
215
219
  />
@@ -228,7 +232,7 @@ import { AppCard } from "laif-ds";
228
232
 
229
233
  export function SizeVariants() {
230
234
  return (
231
- <div className="flex flex-col gap-6 w-[400px]">
235
+ <div className="flex w-[400px] flex-col gap-6">
232
236
  <AppCard
233
237
  size="sm"
234
238
  title="Size: Small"