@flood-md/agent 0.2.11 → 0.2.12

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 (32) hide show
  1. package/DESIGN.md +1 -1
  2. package/dist/catalog.json +106 -50
  3. package/dist/materials/component-app-shell.md +2 -0
  4. package/dist/materials/component-collection-toolbar.md +2 -1
  5. package/dist/materials/component-data-table.md +21 -3
  6. package/dist/materials/component-editable.md +4 -0
  7. package/dist/materials/component-heading.md +1 -1
  8. package/dist/materials/component-section.md +1 -1
  9. package/dist/materials/component-sheet.md +49 -0
  10. package/dist/materials/component-sparkline.md +41 -0
  11. package/dist/materials/component-table.md +2 -0
  12. package/dist/materials/component-toolbar.md +1 -0
  13. package/dist/materials/guide-agent-knowledge.md +5 -5
  14. package/dist/materials/guide-foundations.md +2 -2
  15. package/dist/materials/guide-installation.md +6 -6
  16. package/dist/materials/guide-motion.md +7 -10
  17. package/dist/materials/recipe-collection-views.md +69 -47
  18. package/dist/materials/recipe-record-management.md +18 -4
  19. package/lib/inspect.mjs +11 -0
  20. package/manifest.json +1 -1
  21. package/package.json +1 -1
  22. package/references/component-families.md +4 -0
  23. package/references/composition.md +12 -0
  24. package/references/flood-data-display/SKILL.md +29 -0
  25. package/references/flood-feedback/SKILL.md +12 -0
  26. package/references/flood-hierarchy/SKILL.md +4 -0
  27. package/references/flood-interface-content/SKILL.md +7 -0
  28. package/references/flood-motion/SKILL.md +3 -0
  29. package/references/flood-overlays/SKILL.md +6 -0
  30. package/references/flood-records/SKILL.md +23 -0
  31. package/references/flood-spacing/SKILL.md +7 -0
  32. package/rules.json +4 -0
package/DESIGN.md CHANGED
@@ -1,4 +1,4 @@
1
- # Flood design system · 0.2.11
1
+ # Flood design system · 0.2.12
2
2
 
3
3
  ListBox owns native required validation for accepted selection. Use its
4
4
  description/message/status props rather than duplicating feedback markup. Visual
package/dist/catalog.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.2.11",
3
+ "version": "0.2.12",
4
4
  "groups": [
5
5
  {
6
6
  "id": "foundations",
@@ -198,8 +198,8 @@
198
198
  ],
199
199
  "status": "available",
200
200
  "file": "dist/materials/component-app-shell.md",
201
- "bytes": 1829,
202
- "sha256": "f4f0a237e29bc9f217e95b65ead941a2ce3b3bf1d50d5e66ef732d9c0968f2c4",
201
+ "bytes": 2066,
202
+ "sha256": "436e8792d15ebe8e59445a2c19fd2b826c6291c1b6a40689d6fde8d00eb46ea5",
203
203
  "links": [
204
204
  "component:app-top-bar",
205
205
  "component:flood-root",
@@ -746,8 +746,8 @@
746
746
  ],
747
747
  "status": "available",
748
748
  "file": "dist/materials/component-collection-toolbar.md",
749
- "bytes": 4070,
750
- "sha256": "346f9dcfa377f46b1e6bf16c568128ff968e0be78087db49e51ed2a15c78aa44",
749
+ "bytes": 4089,
750
+ "sha256": "c9c74bb4ce0d5390e92b7985b5c82f84cb7fc88f20d61ede65197e4375971d4c",
751
751
  "links": [
752
752
  "component:flood-root",
753
753
  "workflow:accessibility",
@@ -1059,14 +1059,14 @@
1059
1059
  "id": "component:data-table",
1060
1060
  "kind": "component",
1061
1061
  "name": "DataTable",
1062
- "description": "A native data table with local sorting, page-scoped selection and pagination.",
1062
+ "description": "A native data table with sorting, selection, pagination, column layout and expandable records.",
1063
1063
  "groups": [
1064
1064
  "data-feedback"
1065
1065
  ],
1066
1066
  "status": "available",
1067
1067
  "file": "dist/materials/component-data-table.md",
1068
- "bytes": 3704,
1069
- "sha256": "168c77e6ff17ea57d596b3653b6ebaa9dbc4e90dee9a7ccd61bd525744f5e695",
1068
+ "bytes": 5366,
1069
+ "sha256": "e2156e0a9c054b92ecbd49b5be1aea735eaf5d847bd89b179ee4da20d694794c",
1070
1070
  "links": [
1071
1071
  "component:flood-root",
1072
1072
  "workflow:accessibility",
@@ -1386,8 +1386,8 @@
1386
1386
  ],
1387
1387
  "status": "available",
1388
1388
  "file": "dist/materials/component-editable.md",
1389
- "bytes": 2193,
1390
- "sha256": "597fe441be8199c7c812c797be2a77b3baa314afb34970eeacb04624fe3d25cc",
1389
+ "bytes": 2456,
1390
+ "sha256": "139a730b16527729c3d40f03b41a79c4c3058efaa5cadcc30bb0206c2f63f99b",
1391
1391
  "links": [
1392
1392
  "component:flood-root",
1393
1393
  "workflow:accessibility",
@@ -1761,8 +1761,8 @@
1761
1761
  ],
1762
1762
  "status": "available",
1763
1763
  "file": "dist/materials/component-heading.md",
1764
- "bytes": 1063,
1765
- "sha256": "0d5b400db7ed3b545302aa2bac30910a095859fe4abd13c5b388250ab544f647",
1764
+ "bytes": 1074,
1765
+ "sha256": "51217479eacecdc2fe0aa5585577018bd0b480adc9a030a0d15d32b07c5811d7",
1766
1766
  "links": [
1767
1767
  "component:flood-root",
1768
1768
  "component:stack",
@@ -2805,8 +2805,8 @@
2805
2805
  ],
2806
2806
  "status": "available",
2807
2807
  "file": "dist/materials/component-section.md",
2808
- "bytes": 1729,
2809
- "sha256": "5aa30e3f5314a6a27e7bd389b946513a3016293f96d094899b6b7f684b54f1de",
2808
+ "bytes": 1706,
2809
+ "sha256": "61d76e4edbdcf24400ced3c6b75ada1174f396ec48afa81b8ccf33a7034f4dcd",
2810
2810
  "links": [
2811
2811
  "component:flood-root",
2812
2812
  "component:text",
@@ -2879,6 +2879,35 @@
2879
2879
  ],
2880
2880
  "requires": []
2881
2881
  },
2882
+ {
2883
+ "id": "component:sheet",
2884
+ "kind": "component",
2885
+ "name": "Sheet",
2886
+ "description": "A bottom-aligned modal for short tasks, navigation and touch-friendly choices.",
2887
+ "groups": [
2888
+ "interaction"
2889
+ ],
2890
+ "status": "available",
2891
+ "file": "dist/materials/component-sheet.md",
2892
+ "bytes": 1966,
2893
+ "sha256": "a862eaf138ceff617d01bcec1ee4bdc1509ae421bd58200d8a8959849655662d",
2894
+ "links": [
2895
+ "component:button",
2896
+ "component:field",
2897
+ "component:flood-root",
2898
+ "component:input",
2899
+ "workflow:accessibility",
2900
+ "workflow:composition",
2901
+ "workflow:foundations",
2902
+ "workflow:hierarchy",
2903
+ "workflow:interface-content",
2904
+ "workflow:motion",
2905
+ "workflow:overlays",
2906
+ "workflow:spacing",
2907
+ "workflow:verification"
2908
+ ],
2909
+ "requires": []
2910
+ },
2882
2911
  {
2883
2912
  "id": "component:sidebar",
2884
2913
  "kind": "component",
@@ -2982,6 +3011,31 @@
2982
3011
  ],
2983
3012
  "requires": []
2984
3013
  },
3014
+ {
3015
+ "id": "component:sparkline",
3016
+ "kind": "component",
3017
+ "name": "Sparkline",
3018
+ "description": "A compact line or area chart for trends in a table cell, list or metric.",
3019
+ "groups": [
3020
+ "data-feedback"
3021
+ ],
3022
+ "status": "available",
3023
+ "file": "dist/materials/component-sparkline.md",
3024
+ "bytes": 1583,
3025
+ "sha256": "e763920bd0249f9538f6488d1e50b0bf99f562fd5b9c63afeaa5e879eb6287dd",
3026
+ "links": [
3027
+ "component:flood-root",
3028
+ "workflow:accessibility",
3029
+ "workflow:composition",
3030
+ "workflow:data-display",
3031
+ "workflow:foundations",
3032
+ "workflow:interface-content",
3033
+ "workflow:motion",
3034
+ "workflow:spacing",
3035
+ "workflow:verification"
3036
+ ],
3037
+ "requires": []
3038
+ },
2985
3039
  {
2986
3040
  "id": "component:spinner",
2987
3041
  "kind": "component",
@@ -3173,8 +3227,8 @@
3173
3227
  ],
3174
3228
  "status": "available",
3175
3229
  "file": "dist/materials/component-table.md",
3176
- "bytes": 1966,
3177
- "sha256": "0ab770f72d7b8b355a97e1e4e5b887cc9a4160ab39d2d82b1b792decf0009e8d",
3230
+ "bytes": 2073,
3231
+ "sha256": "4c4e1f868d97181377372a6d66c2219d1629ef08f88def6f6fcaad9fb48f600b",
3178
3232
  "links": [
3179
3233
  "component:flood-root",
3180
3234
  "workflow:accessibility",
@@ -3481,8 +3535,8 @@
3481
3535
  ],
3482
3536
  "status": "available",
3483
3537
  "file": "dist/materials/component-toolbar.md",
3484
- "bytes": 1965,
3485
- "sha256": "da9796228143a59f6a0c3dd197aa273104ea2797444e533bcfde484dfadb21a8",
3538
+ "bytes": 2144,
3539
+ "sha256": "f68ac9be4923723ec625f27137a2980ae56e5f823ffbc1e3e588d42b7a7ffa7c",
3486
3540
  "links": [
3487
3541
  "component:button",
3488
3542
  "component:flood-root",
@@ -3673,7 +3727,7 @@
3673
3727
  "status": "available",
3674
3728
  "file": "dist/materials/guide-agent-knowledge.md",
3675
3729
  "bytes": 5231,
3676
- "sha256": "132be327ad1a3f3e7c39a956f61ec4d270181050781cb34b8768467376a1feaf",
3730
+ "sha256": "2078cd00202a091236d0f1eabd50bd050ff071799228f0295b8ada803f0219ad",
3677
3731
  "links": [],
3678
3732
  "requires": []
3679
3733
  },
@@ -3704,7 +3758,7 @@
3704
3758
  "status": "available",
3705
3759
  "file": "DESIGN.md",
3706
3760
  "bytes": 28249,
3707
- "sha256": "66bb49be55fd6995930a8eee0f7018ebc59fb6034e481eac8be931ada27b12a2",
3761
+ "sha256": "885af67a21fa8607f4db97c2c0d5b3ed1628cbc6009f89df158b39da7fdbb245",
3708
3762
  "links": [
3709
3763
  "component:button",
3710
3764
  "component:field",
@@ -3779,7 +3833,7 @@
3779
3833
  "status": "available",
3780
3834
  "file": "dist/materials/guide-foundations.md",
3781
3835
  "bytes": 15084,
3782
- "sha256": "6cafde8aa6c7bd96435691cfa00d213026c04ab61555c26fbc2782636a98ff5f",
3836
+ "sha256": "27896d8d3459ab235adbdd43805ead352887b8c159c425441bbcacd813446616",
3783
3837
  "links": [],
3784
3838
  "requires": []
3785
3839
  },
@@ -3794,7 +3848,7 @@
3794
3848
  "status": "available",
3795
3849
  "file": "dist/materials/guide-installation.md",
3796
3850
  "bytes": 3356,
3797
- "sha256": "82b1d209dd0d9ac8938f5a7df43e1d9ff177f3a4724cff4a50d44018d88c89d5",
3851
+ "sha256": "0fe3d391efa460494fd8ce34f1b8953cdb30efda386d747aa9d8ce71d4e4c100",
3798
3852
  "links": [
3799
3853
  "component:button",
3800
3854
  "component:flood-root",
@@ -3868,8 +3922,8 @@
3868
3922
  ],
3869
3923
  "status": "available",
3870
3924
  "file": "dist/materials/guide-motion.md",
3871
- "bytes": 6769,
3872
- "sha256": "860fc1caf3b94116e6f31b8219db0eeff001806be6fff675d80ce8940cce7e61",
3925
+ "bytes": 7078,
3926
+ "sha256": "d2dd48d3225dca550ba2408f221faefc310a6a0dfee6e035075391f60cfb91e0",
3873
3927
  "links": [],
3874
3928
  "requires": []
3875
3929
  },
@@ -3950,8 +4004,8 @@
3950
4004
  ],
3951
4005
  "status": "available",
3952
4006
  "file": "dist/materials/recipe-collection-views.md",
3953
- "bytes": 44787,
3954
- "sha256": "b47b2bd5bd6ff91d28a671ef8381b2423a152e16ae29f3c634c9675ef5618550",
4007
+ "bytes": 46259,
4008
+ "sha256": "29e18eea0073391c890dedb2c5710f9dba07e3c325a189e37e0a6f7388cdaaca",
3955
4009
  "links": [
3956
4010
  "component:alert",
3957
4011
  "component:alert-dialog",
@@ -3975,8 +4029,10 @@
3975
4029
  "component:select",
3976
4030
  "component:stack",
3977
4031
  "component:status-indicator",
4032
+ "component:surface",
3978
4033
  "component:tabs",
3979
4034
  "component:tag",
4035
+ "component:toast-region",
3980
4036
  "component:visually-hidden"
3981
4037
  ],
3982
4038
  "requires": [
@@ -4136,8 +4192,8 @@
4136
4192
  ],
4137
4193
  "status": "available",
4138
4194
  "file": "dist/materials/recipe-record-management.md",
4139
- "bytes": 14092,
4140
- "sha256": "1ae165bfc9389fc3349dcd2d3168f0f3688e2487d417854a5c509e24013b78e8",
4195
+ "bytes": 14645,
4196
+ "sha256": "231825c073a619d4b9e8c95618bd6c7d8e01e285bfb0355f3030d9d32a663b3a",
4141
4197
  "links": [
4142
4198
  "component:alert",
4143
4199
  "component:button",
@@ -4392,8 +4448,8 @@
4392
4448
  ],
4393
4449
  "status": "available",
4394
4450
  "file": "references/component-families.md",
4395
- "bytes": 9305,
4396
- "sha256": "7fb761c31a7b8ddae922396c0156e3369b04a4a464bf4ac952c5938257fba10e",
4451
+ "bytes": 9535,
4452
+ "sha256": "030673fa301a7ca0a9075cc31cb9eeee37ebea3052df4e755f96d59079b1116e",
4397
4453
  "links": [],
4398
4454
  "requires": [
4399
4455
  "workflow:composition",
@@ -4412,8 +4468,8 @@
4412
4468
  ],
4413
4469
  "status": "available",
4414
4470
  "file": "references/composition.md",
4415
- "bytes": 20787,
4416
- "sha256": "7b6c35335a2a87216690010bb01c821a7469708cf9f2b0b2f8263faa956cf730",
4471
+ "bytes": 21577,
4472
+ "sha256": "073ac0ade4d7351dca2afb276417a03130f4324663cff6960375afe0c4bb66aa",
4417
4473
  "links": [
4418
4474
  "reference:spacing",
4419
4475
  "reference:verification",
@@ -4531,8 +4587,8 @@
4531
4587
  ],
4532
4588
  "status": "available",
4533
4589
  "file": "rules.json",
4534
- "bytes": 29571,
4535
- "sha256": "836a2e29497715c34d81a32f5a8291c70b225ff6ea055029f8f0fcafaa06c591",
4590
+ "bytes": 30084,
4591
+ "sha256": "e3d494e6c092ceafd3b1aee4803a0f964887d5b35ac9880bc0254a99e1326564",
4536
4592
  "links": [],
4537
4593
  "requires": [],
4538
4594
  "installedTarget": "flood/rules.json"
@@ -8474,8 +8530,8 @@
8474
8530
  ],
8475
8531
  "status": "available",
8476
8532
  "file": "references/flood-data-display/SKILL.md",
8477
- "bytes": 12222,
8478
- "sha256": "a7f71686b7c4389ba8065f59f3c83fde4f5b2a5502699d36d7156f903b42b784",
8533
+ "bytes": 14375,
8534
+ "sha256": "203caa82726e1823a8a7b25cb70d4b10aef31b299e67d19f46f22eaf7a9dd1ab",
8479
8535
  "links": [
8480
8536
  "workflow:composition",
8481
8537
  "workflow:records"
@@ -8495,8 +8551,8 @@
8495
8551
  ],
8496
8552
  "status": "available",
8497
8553
  "file": "references/flood-feedback/SKILL.md",
8498
- "bytes": 4978,
8499
- "sha256": "875a1475d1f418aa511052cdedffb5fd2bcd05ef5ab83f522b202e9643908145",
8554
+ "bytes": 5728,
8555
+ "sha256": "1eb153c0a84ef1ebea0361e5d40227ec6273ee8b54ffdbb2c8fa46efd330bf16",
8500
8556
  "links": [
8501
8557
  "reference:accessibility",
8502
8558
  "workflow:records"
@@ -8556,8 +8612,8 @@
8556
8612
  ],
8557
8613
  "status": "available",
8558
8614
  "file": "references/flood-hierarchy/SKILL.md",
8559
- "bytes": 6113,
8560
- "sha256": "c86d1d287b6ed9a819020885c2693d466e53c7ade156c18c54c07f3f15e39f9a",
8615
+ "bytes": 6417,
8616
+ "sha256": "a2c271533b6a1890b14d470191800514214cf03ca2eefe67f91b9dfed6225ddc",
8561
8617
  "links": [
8562
8618
  "reference:spacing",
8563
8619
  "workflow:records"
@@ -8578,8 +8634,8 @@
8578
8634
  ],
8579
8635
  "status": "available",
8580
8636
  "file": "references/flood-interface-content/SKILL.md",
8581
- "bytes": 9710,
8582
- "sha256": "da8ed5e8e87e1d68b6f489a6bdaab496ac2c1d9f6d6b14c1ac539088acb14414",
8637
+ "bytes": 10160,
8638
+ "sha256": "bf8ea4bc6d33c546916f7d0d08be238c1dbc9d6feebc7d4ed5d128c8f6055b71",
8583
8639
  "links": [
8584
8640
  "reference:interface-content-examples",
8585
8641
  "workflow:records"
@@ -8598,8 +8654,8 @@
8598
8654
  ],
8599
8655
  "status": "available",
8600
8656
  "file": "references/flood-motion/SKILL.md",
8601
- "bytes": 3116,
8602
- "sha256": "08903398f54e877c5e8d0f83e2e57c854f48c757f451b6f8f13c912b3b94e8b1",
8657
+ "bytes": 3333,
8658
+ "sha256": "ae13d4d4324b6951d9c32843561138c895534a2f0de15b4c9960ada8d32e1456",
8603
8659
  "links": [],
8604
8660
  "requires": [],
8605
8661
  "installedTarget": ".agents/skills/flood-ui/references/flood-motion/SKILL.md"
@@ -8632,8 +8688,8 @@
8632
8688
  ],
8633
8689
  "status": "available",
8634
8690
  "file": "references/flood-overlays/SKILL.md",
8635
- "bytes": 5105,
8636
- "sha256": "e1616524155019a6334fd32112ebec1af33104ff80a5f4e14b8322749d2e0f1a",
8691
+ "bytes": 5485,
8692
+ "sha256": "edbf696378b7ffb321bc0bfc590bb206c3f1b3b8e01585686360411a87feb6b2",
8637
8693
  "links": [
8638
8694
  "reference:accessibility",
8639
8695
  "workflow:hierarchy"
@@ -8654,8 +8710,8 @@
8654
8710
  ],
8655
8711
  "status": "available",
8656
8712
  "file": "references/flood-records/SKILL.md",
8657
- "bytes": 8961,
8658
- "sha256": "efa9c64d084224195444a88e982429c232a7286c5f44597013d7b939e1aa79ad",
8713
+ "bytes": 10423,
8714
+ "sha256": "2bcd77da6b49540f280aba9913bd3b59e41ba0764b3dc3967f4289a140f63a30",
8659
8715
  "links": [
8660
8716
  "reference:record-decisions",
8661
8717
  "workflow:hierarchy",
@@ -8679,8 +8735,8 @@
8679
8735
  ],
8680
8736
  "status": "available",
8681
8737
  "file": "references/flood-spacing/SKILL.md",
8682
- "bytes": 5920,
8683
- "sha256": "84da37f01b968a66ed28567b46a7631a6d2d6772460a407946a8778d59e78b10",
8738
+ "bytes": 6418,
8739
+ "sha256": "1f30cc0c8a0016ea831579fae228c02dd6e2e3eb696a8f0ed8f9dfad7f4e8e4b",
8684
8740
  "links": [
8685
8741
  "reference:spacing",
8686
8742
  "workflow:hierarchy"
@@ -24,6 +24,7 @@ export function Example() {
24
24
  ## Design notes
25
25
 
26
26
  - Content scrolling keeps navigation, top bar and footer outside the work scrollport. Use scroll="page" for a document that scrolls as a whole.
27
+ - Content mode uses Flood ScrollArea. Set scrollContentInset="none" when existing workspace padding clears the overlay rails and the content width needs to stay fixed.
27
28
  - Supply Sidebar for docked navigation. Set navigationDrawer with a shell-width threshold and Drawer content to swap automatically. Share accepted route and branch state between the two presentations.
28
29
  - Use mainAs="section" only when embedding a shell inside an existing main landmark.
29
30
 
@@ -43,5 +44,6 @@ export function Example() {
43
44
  | `mainRef` | `Ref<HTMLElement>` | `—` |
44
45
  | `scrollLabel` | `string` | `—` |
45
46
  | `scrollOrientation` | `ScrollAreaProps["orientation"]` | `—` |
47
+ | `scrollContentInset` | `ScrollAreaProps["contentInset"]` | `—` |
46
48
  | `skipLabel` | `string` | `—` |
47
49
  | `Native HTML props` | `HTMLAttributes<HTMLDivElement>` | `Forwarded` |
@@ -30,7 +30,7 @@ export function Example() {
30
30
  - filterContent supplies the existing filter editor, including FilterGroup or a project-specific form. The host retains draft validation, Apply/Cancel, query evaluation, persistence and saved views. filtersOpen/onFiltersOpenChange optionally control the existing Popover; filterPanelRef and filterPanelClassName support real panel focus and sizing.
31
31
  - Clear keeps its space immediately before the right-anchored Filters trigger while inactive. Removing a summary or clearing returns focus to Filters, or Search when no panel exists. Filter disclosure is omitted when no filterContent is supplied.
32
32
  - quickFilters is an optional slot for at most two task-important properties; larger property sets belong inside filterContent. The host owns the threshold and slot behavior. Supply canClear when active state is not represented by searchValue/appliedFilters, such as controls in that slot.
33
- - Search, accepted summaries and commands share a responsive row; long summaries can wrap without clipping and the filter action remains at the logical end. Saved-view selectors and save/rename actions stay outside this query row.
33
+ - Search, accepted summaries and commands share a responsive row. The actions slot places table commands, such as Columns, next to Filters. Saved-view selectors and save/rename actions stay outside this query row.
34
34
  - controlSize defaults to sm; action/field sizes and chip typography follow the shared family. disabled applies to the complete fieldset, including native quick-filter controls and panel descendants. Labels and summaries remain host-localizable.
35
35
 
36
36
  ## API reference
@@ -54,6 +54,7 @@ export function Example() {
54
54
  | `appliedFiltersLabel` | `string` | `—` |
55
55
  | `summaryPrefix` | `ReactNode` | `—` |
56
56
  | `quickFilters` | `ReactNode` | `—` |
57
+ | `actions` | `ReactNode` | `—` |
57
58
  | `filterContent` | `ReactNode` | `—` |
58
59
  | `filtersLabel` | `string` | `—` |
59
60
  | `filterTitle` | `string` | `—` |
@@ -1,6 +1,6 @@
1
1
  # DataTable
2
2
 
3
- A native data table with local sorting, page-scoped selection and pagination.
3
+ A native data table with sorting, selection, pagination, column layout and expandable records.
4
4
 
5
5
  Connect Flood once using [the installation guide](https://flood.md/docs/installation). Then import the components you use; no per-component add command is needed.
6
6
 
@@ -25,10 +25,15 @@ export function Example() {
25
25
 
26
26
  ## Design notes
27
27
 
28
- - Supply the complete client collection; remote/server pagination and virtualization are not part of this API.
28
+ - Supply the complete collection in client mode. Server mode accepts one page with controlled page and totalRows, and controlled sort when enabled.
29
+ - Offer Columns when users need different subsets of fields. Pass its toolbar control into CollectionToolbar.actions alongside search and filters. Reset restores initial visibility and widths.
30
+ - Opt in to resizable columns and logical start/end pinning for wider tables. Persist width and visibility preferences by column ID.
31
+ - Keep headers short and use the optional column unit badge for values such as USD or kg. A constrained header remains on one line with its full accessible name.
32
+ - Use expandedContent for short related details and a captioned Flood Table for nested line items. Use Sparkline for compact trend cells with a shared domain when comparing magnitudes.
29
33
  - Select all affects selectable rows on the current page and preserves selection on other pages.
30
34
  - Use sortValues for rich React cells; missing values sort last in both directions.
31
35
  - Use showResults={false} to omit a redundant result range. Selection feedback and pagination remain, and the footer disappears when it has no other content.
36
+ - Use showSelection={false} when a floating BulkActionBar displays the selected count. The table retains its accessible selection status.
32
37
  - Set column.numeric for comparable amounts and quantities. Header and cells align to the logical end with tabular figures, while explicit align takes precedence. Keep numeric identifiers as text and provide raw sortValues for localized amounts.
33
38
  - For in-place record details, supply row.primaryAction with the identity column, title, optional description and native button props. Pointer activation extends across the row, while keyboard focus lands on the title button. Secondary controls retain their own behavior.
34
39
  - Use toolbar for the heading and filters that share the table surface. Set inset to roomy for a shared outer inset on toolbar, table cells and footer.
@@ -38,16 +43,28 @@ export function Example() {
38
43
 
39
44
  | Prop | Values | Default |
40
45
  | --- | --- | --- |
41
- | `toolbar` | `ReactNode` | `—` |
46
+ | `toolbar` | `ReactNode \| (controls: { columns: ReactNode }) => ReactNode` | `—` |
42
47
  | `inset` | `"standard" \| "roomy"` | `—` |
43
48
  | `emptyContent` | `ReactNode` | `—` |
44
49
  | `caption` | `string` | `Required` |
45
50
  | `hideCaption` | `boolean` | `—` |
46
51
  | `columns` | `readonly DataTableColumn[]` | `Required` |
52
+ | `showColumnVisibility` | `boolean` | `—` |
53
+ | `hiddenColumnIds` | `readonly string[]` | `—` |
54
+ | `defaultHiddenColumnIds` | `readonly string[]` | `—` |
55
+ | `onHiddenColumnIdsChange` | `(ids: string[]) => void` | `—` |
56
+ | `columnWidths` | `Readonly<Record<string, number>>` | `—` |
57
+ | `defaultColumnWidths` | `Readonly<Record<string, number>>` | `—` |
58
+ | `onColumnWidthsChange` | `(widths: Record<string, number>) => void` | `—` |
47
59
  | `rows` | `readonly DataTableRow[]` | `Required` |
60
+ | `expandedIds` | `readonly string[]` | `—` |
61
+ | `defaultExpandedIds` | `readonly string[]` | `—` |
62
+ | `onExpandedChange` | `(ids: string[]) => void` | `—` |
48
63
  | `density` | `"compact" \| "comfortable"` | `—` |
49
64
  | `striped` | `boolean` | `—` |
50
65
  | `minWidth` | `CSSProperties["minWidth"]` | `—` |
66
+ | `maxViewportHeight` | `CSSProperties["maxBlockSize"]` | `—` |
67
+ | `stickyHeader` | `boolean` | `—` |
51
68
  | `sort` | `DataTableSort \| null` | `—` |
52
69
  | `defaultSort` | `DataTableSort \| null` | `—` |
53
70
  | `onSortChange` | `(sort: DataTableSort \| null) => void` | `—` |
@@ -61,6 +78,7 @@ export function Example() {
61
78
  | `pageSize` | `number` | `—` |
62
79
  | `onPageChange` | `(page: number) => void` | `—` |
63
80
  | `showResults` | `boolean` | `—` |
81
+ | `showSelection` | `boolean` | `—` |
64
82
  | `paginationMode` | `"client" \| "server"` | `—` |
65
83
  | `totalRows` | `number` | `—` |
66
84
  | `selectionScope` | `"page" \| "dataset"` | `—` |
@@ -42,6 +42,10 @@ export function Example() {
42
42
  | `onEditingChange` | `(editing: boolean) => void` | `—` |
43
43
  | `onCommit` | `(value: string) => void` | `—` |
44
44
  | `onCancel` | `() => void` | `—` |
45
+ | `validate` | `(value: string) => string \| undefined` | `—` |
46
+ | `inputMode` | `InputHTMLAttributes<HTMLInputElement>["inputMode"]` | `—` |
47
+ | `previewVariant` | `"subtle" \| "ghost"` | `—` |
48
+ | `editorOverlayWidth` | `CSSProperties["inlineSize"]` | `—` |
45
49
  | `blurAction` | `"commit" \| "cancel" \| "none"` | `"commit"` |
46
50
  | `readOnly` | `boolean` | `—` |
47
51
  | `disabled` | `boolean` | `—` |
@@ -34,5 +34,5 @@ export function Example() {
34
34
  | Prop | Values | Default |
35
35
  | --- | --- | --- |
36
36
  | `level` | `1 \| 2 \| 3 \| 4 \| 5 \| 6` | `2` |
37
- | `size` | `"display" \| "large" \| "page" \| "section"` | `"page"` |
37
+ | `size` | `"display" \| "large" \| "page" \| "section" \| "group"` | `"page"` |
38
38
  | `Native HTML props` | `HTMLAttributes<HTMLHeadingElement>` | `Forwarded` |
@@ -38,5 +38,5 @@ export function Example() {
38
38
  | `description` | `ReactNode` | `—` |
39
39
  | `actions` | `ReactNode` | `—` |
40
40
  | `headingLevel` | `2 \| 3 \| 4 \| 5 \| 6` | `2` |
41
- | `headingSize` | `"display" \| "large" \| "page" \| "section"` | `"section"` |
41
+ | `headingSize` | `HeadingProps["size"]` | `"section"` |
42
42
  | `Native HTML props` | `Omit<HTMLAttributes<HTMLElement>, "title">` | `Forwarded` |
@@ -0,0 +1,49 @@
1
+ # Sheet
2
+
3
+ A bottom-aligned modal for short tasks, navigation and touch-friendly choices.
4
+
5
+ Connect Flood once using [the installation guide](https://flood.md/docs/installation). Then import the components you use; no per-component add command is needed.
6
+
7
+ ## Example
8
+
9
+ ```tsx
10
+ "use client";
11
+
12
+ import { FloodRoot, Sheet, Button, Field, Input } from "@flood-md/react";
13
+ import "@flood-md/react/styles.css";
14
+
15
+ export function Example() {
16
+ return (
17
+ <FloodRoot>
18
+ <Sheet title="Project settings" trigger={props => <Button {...props}>Open settings</Button>}>
19
+ <Field label="Project name">{control => <Input {...control} defaultValue="Flood" />}</Field>
20
+ </Sheet>
21
+ </FloodRoot>
22
+ );
23
+ }
24
+ ```
25
+
26
+ ## Design notes
27
+
28
+ - Sheet shares Drawer's modal semantics, dismissal, focus restoration, scrollable body and optional footer. Its scrollbar fits in the panel padding. Placement is always bottom.
29
+ - The panel grows with content up to its size limit. Keep actions that must remain visible in the footer and use ListBox for selectable options.
30
+ - Use a sheet for touch navigation or short choices that benefit from a wider target. Anchored popovers and selects remain useful on desktop. Available in 0.2.12.
31
+
32
+ ## API reference
33
+
34
+ | Prop | Values | Default |
35
+ | --- | --- | --- |
36
+ | `title` | `string` | `Required` |
37
+ | `description` | `string` | `—` |
38
+ | `trigger` | `(props: OverlayTriggerProps) => ReactNode` | `Required` |
39
+ | `children` | `ReactNode` | `—` |
40
+ | `open` | `boolean` | `—` |
41
+ | `defaultOpen` | `boolean` | `—` |
42
+ | `onOpenChange` | `(open: boolean) => void` | `—` |
43
+ | `disabled` | `boolean` | `—` |
44
+ | `closeLabel` | `string` | `—` |
45
+ | `closeOnOutsideClick` | `boolean` | `—` |
46
+ | `initialFocusRef` | `RefObject<HTMLElement \| null>` | `—` |
47
+ | `size` | `"sm" \| "md" \| "lg"` | `"md"` |
48
+ | `footer` | `ReactNode` | `—` |
49
+ | `Native HTML props` | `Omit<Omit<HTMLAttributes<HTMLDialogElement>, "children" \| "title" \| "role">, "side">` | `Forwarded` |
@@ -0,0 +1,41 @@
1
+ # Sparkline
2
+
3
+ A compact line or area chart for trends in a table cell, list or metric.
4
+
5
+ Connect Flood once using [the installation guide](https://flood.md/docs/installation). Then import the components you use; no per-component add command is needed.
6
+
7
+ ## Example
8
+
9
+ ```tsx
10
+ "use client";
11
+
12
+ import { FloodRoot, Sparkline } from "@flood-md/react";
13
+ import "@flood-md/react/styles.css";
14
+
15
+ export function Example() {
16
+ return (
17
+ <FloodRoot>
18
+ <Sparkline label="Revenue rose from $8,000 to $12,000" values={[8000, 8200, null, 9500, 11000, 12000]} domain={[0, 15000]} />
19
+ </FloodRoot>
20
+ );
21
+ }
22
+ ```
23
+
24
+ ## Design notes
25
+
26
+ - Give the graphic a label that communicates the metric and the trend. Set showLabel to make that label visible.
27
+ - Use a shared domain for comparing magnitudes across rows. Null and nonfinite samples leave gaps in both the stroke and area.
28
+ - The default area uses an accent stroke with a gradient below it. Choose variant line for stroke only and use semantic tones only when the data has a known interpretation.
29
+
30
+ ## API reference
31
+
32
+ | Prop | Values | Default |
33
+ | --- | --- | --- |
34
+ | `values` | `readonly (number \| null)[]` | `Required` |
35
+ | `label` | `string` | `Required` |
36
+ | `showLabel` | `boolean` | `false` |
37
+ | `domain` | `readonly [number, number]` | `—` |
38
+ | `size` | `"sm" \| "md"` | `"md"` |
39
+ | `tone` | `"neutral" \| "accent" \| "success" \| "warning" \| "error"` | `"accent"` |
40
+ | `variant` | `"line" \| "area"` | `"area"` |
41
+ | `Native HTML props` | `Omit<HTMLAttributes<HTMLDivElement>, "children" \| "role" \| "aria-label" \| "aria-labelledby">` | `Forwarded` |
@@ -42,5 +42,7 @@ export function Example() {
42
42
  | `density` | `"compact" \| "comfortable"` | `"comfortable"` |
43
43
  | `striped` | `boolean` | `false` |
44
44
  | `scrollLabel` | `string` | `—` |
45
+ | `maxViewportHeight` | `CSSProperties["maxBlockSize"]` | `—` |
46
+ | `stickyHeader` | `boolean` | `false` |
45
47
  | `cellVerticalAlign` | `"top" \| "middle" \| "bottom"` | `"middle"` |
46
48
  | `Native HTML props` | `Omit<TableHTMLAttributes<HTMLTableElement>, "children">` | `Forwarded` |
@@ -30,6 +30,7 @@ export function Example() {
30
30
  - Use Button, IconButton, Toggle, native buttons/links and Menu triggers. Keep inputs, Select, Tabs and ToggleGroup outside this action-only toolbar.
31
31
  - Arrows move focus without activation; Home/End jump to the ends. Disabled and hidden actions are skipped. One Tab entry is established after hydration; before JavaScript native child tab order remains.
32
32
  - Horizontal arrows follow writing direction. Vertical arrows move between actions; open a vertical toolbar Menu with Enter/Space. Horizontal menus retain ArrowUp/Down opening.
33
+ - A vertical pill centers its controls on one axis. Use consistently sized icon-only actions with accessible names. Use the rounded shape for a vertical group of labeled actions.
33
34
  - loop defaults to true. Native div props/ref target the toolbar; preserve a meaningful label. Available in 0.2.4.
34
35
  - shape defaults to rounded; pill uses the action radius and a horizontal single scrollable rail.
35
36
  - variant="plain" removes the material and outer inset for grouping peer controls; contained remains the default. Keyboard ownership is unchanged.
@@ -7,11 +7,11 @@ The same package sources build the website, CLI results and agent instructions.
7
7
  ## Discover, then read
8
8
 
9
9
  ```sh
10
- npx @flood-md/cli@0.2.11 info --json
11
- npx @flood-md/cli@0.2.11 catalog --kind workflow --group foundations
12
- npx @flood-md/cli@0.2.11 catalog --kind component --search table
13
- npx @flood-md/cli@0.2.11 read recipe:table-bulk-actions
14
- npx @flood-md/cli@0.2.11 read component:data-table
10
+ npx @flood-md/cli@0.2.12 info --json
11
+ npx @flood-md/cli@0.2.12 catalog --kind workflow --group foundations
12
+ npx @flood-md/cli@0.2.12 catalog --kind component --search table
13
+ npx @flood-md/cli@0.2.12 read recipe:table-bulk-actions
14
+ npx @flood-md/cli@0.2.12 read component:data-table
15
15
  ```
16
16
 
17
17
  These commands return JSON and do not install dependencies, edit files, execute
@@ -1,6 +1,6 @@
1
- # Foundations tokens · 0.2.11 candidate
1
+ # Foundations tokens · 0.2.12 candidate
2
2
 
3
- This guide describes the **0.2.11 candidate** foundation exports. Keep Flood packages at
3
+ This guide describes the **0.2.12 candidate** foundation exports. Keep Flood packages at
4
4
  matching exact versions. Existing 0.1.1 installs use their earlier token contract.
5
5
 
6
6
  Foundations separates fixed reference values (`ref`) from semantic roles (`sys`).