fluentui-design 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,31 @@ Each release records three things: the skill version, the baseline
8
8
  `@fluentui/react-components` package version, and the pinned `fluentui-mcp` facts commit. See
9
9
  [MAINTENANCE.md](MAINTENANCE.md) for the re-pin procedure.
10
10
 
11
+ ## [0.3.0] - 2026-09-22
12
+
13
+ ### Baseline
14
+
15
+ | Item | Value |
16
+ | --- | --- |
17
+ | `@fluentui/react-components` | 9.74.7 |
18
+ | `fluentui-mcp` facts commit | d595d79 |
19
+
20
+ ### Fixes
21
+
22
+ - forms: align the numeric rule severity and provenance
23
+
24
+ ### Documentation
25
+
26
+ - plan: correct the form-inputs coverage progress count
27
+ - plan: add the form-inputs coverage requirements and plan
28
+ - roadmap: complete the datagrid coverage feature
29
+
30
+ ### Features
31
+
32
+ - forms: enrich the form pattern and regenerate the skill
33
+ - forms: add control-choice and input rules
34
+ - forms: analyze the form input sources
35
+
11
36
  ## [0.2.0] - 2026-09-21
12
37
 
13
38
  ### Baseline
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluentui-design",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Evidence-backed Agent Skill for composing web applications with Fluent UI React v9",
6
6
  "license": "MIT",
@@ -16,8 +16,8 @@ For exact component props and imports, use the sibling `fluentui` skill
16
16
  | `data-surface` | PAT-002 | RULE-010, RULE-011, RULE-012, RULE-016, RULE-031, RULE-032, RULE-033, RULE-034, RULE-035, RULE-036 |
17
17
  | `edit-surface` | PAT-005 | RULE-008, RULE-009, RULE-029 |
18
18
  | `feedback-channel` | PAT-008 | RULE-003, RULE-015, RULE-016 |
19
- | `field-annotation` | PAT-004 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030 |
20
- | `form-layout` | PAT-004 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030 |
19
+ | `field-annotation` | PAT-004 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030, RULE-037, RULE-038, RULE-039, RULE-040, RULE-041, RULE-042 |
20
+ | `form-layout` | PAT-004 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030, RULE-037, RULE-038, RULE-039, RULE-040, RULE-041, RULE-042 |
21
21
  | `modal-behavior` | PAT-005 | RULE-008, RULE-009, RULE-029 |
22
22
  | `navigation-model` | PAT-001, PAT-006 | RULE-001, RULE-002, RULE-003, RULE-013, RULE-014 |
23
23
  | `permission-state` | PAT-003, PAT-008 | RULE-003, RULE-015, RULE-016, RULE-029 |
@@ -25,7 +25,7 @@ For exact component props and imports, use the sibling `fluentui` skill
25
25
  | `row-activation` | PAT-002 | RULE-010, RULE-011, RULE-012, RULE-016, RULE-031, RULE-032, RULE-033, RULE-034, RULE-035, RULE-036 |
26
26
  | `save-model` | PAT-007 | RULE-029, RULE-030 |
27
27
  | `selection-scope` | PAT-002 | RULE-010, RULE-011, RULE-012, RULE-016, RULE-031, RULE-032, RULE-033, RULE-034, RULE-035, RULE-036 |
28
- | `submit-feedback` | PAT-004, PAT-007 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030 |
28
+ | `submit-feedback` | PAT-004, PAT-007 | RULE-005, RULE-006, RULE-007, RULE-029, RULE-030, RULE-037, RULE-038, RULE-039, RULE-040, RULE-041, RULE-042 |
29
29
  | `virtualization` | PAT-002 | RULE-010, RULE-011, RULE-012, RULE-016, RULE-031, RULE-032, RULE-033, RULE-034, RULE-035, RULE-036 |
30
30
 
31
31
  ## Application patterns
@@ -2,8 +2,8 @@
2
2
  id: PAT-004
3
3
  title: Create and edit form page
4
4
  decisions: [form-layout, field-annotation, submit-feedback]
5
- rules: [RULE-005, RULE-006, RULE-007, RULE-029, RULE-030]
6
- components: [Field, Input, Textarea, Select, Combobox, Dropdown, Option, Checkbox, Radio, RadioGroup, Switch, Slider, Label, Button, MessageBar, MessageBarBody, Spinner]
5
+ rules: [RULE-005, RULE-006, RULE-007, RULE-029, RULE-030, RULE-037, RULE-038, RULE-039, RULE-040, RULE-041, RULE-042]
6
+ components: [Field, Input, Textarea, Select, Combobox, Dropdown, Option, Checkbox, Radio, RadioGroup, Switch, Slider, SpinButton, Label, Button, MessageBar, MessageBarBody, Spinner]
7
7
  derived: [application-owned FormSection grouping, application-owned validation schema]
8
8
  ---
9
9
 
@@ -29,9 +29,15 @@ page for editing one or two fields in the context of a list; use the contextual-
29
29
  ## Component mapping
30
30
 
31
31
  Field, Input, Textarea, Select, Combobox, Dropdown, Option, Checkbox, Radio, RadioGroup, Switch,
32
- Slider, Label, Button, MessageBar, and Spinner are verified exports. The FormSection grouping and
33
- the validation schema are application-owned. Validation, persistence, and authorization are
34
- application responsibilities.
32
+ Slider, SpinButton, Label, Button, MessageBar, and Spinner are verified exports. Each value's domain
33
+ chooses its control: free text uses Input or Textarea, a small exclusive set uses RadioGroup, a short
34
+ fixed list uses a native Select, a long or searchable list uses Combobox or Dropdown, a submitted
35
+ boolean uses Checkbox, an immediate on/off uses Switch, and a bounded quantity uses SpinButton. A
36
+ complex option also carries a plain-text value. A bounded numeric field sets its minimum and
37
+ maximum, a step that divides the range, a page step that is a multiple of the step, and a formatted
38
+ display value that parses back to the stored number. The FormSection grouping and the validation
39
+ schema are application-owned. Validation, persistence, and authorization are application
40
+ responsibilities.
35
41
 
36
42
  ## Interaction flow
37
43
 
@@ -52,20 +58,24 @@ Short related pairs may share a row above the project's narrow breakpoint only.
52
58
 
53
59
  ## Accessibility
54
60
 
55
- Every control has a programmatic label and, where needed, help text tied to the control. The error
56
- summary is announced on submit, and focus moves to the summary or the first invalid field. The
57
- pending submit action keeps an accessible name.
61
+ Every control has a programmatic label and, where needed, help text tied to the control. A complex
62
+ option exposes its plain text as the accessible name, and an option popup follows its trigger in DOM
63
+ order so screen-reader navigation reaches the list. A Switch applies immediately while a Checkbox is
64
+ submitted with the form, and a parent Checkbox shows the indeterminate state for a partially
65
+ selected group. The error summary is announced on submit, and focus moves to the summary or the
66
+ first invalid field. The pending submit action keeps an accessible name.
58
67
 
59
68
  ## Edge cases
60
69
 
61
- Server-side validation errors map onto their fields and are also summarized. A duplicate submission
62
- is prevented while a request is pending. Leaving the page with unsaved changes triggers a
70
+ Server-side validation errors map onto their fields and are also summarized. A numeric value with no
71
+ meaningful step, such as a phone number, stays a plain Input rather than a SpinButton. A duplicate
72
+ submission is prevented while a request is pending. Leaving the page with unsaved changes triggers a
63
73
  confirmation. A field whose value arrives after load shows a pending state rather than an empty
64
74
  value.
65
75
 
66
76
  ## Rules applied
67
77
 
68
- RULE-005, RULE-006, RULE-007, RULE-029, RULE-030
78
+ RULE-005, RULE-006, RULE-007, RULE-029, RULE-030, RULE-037, RULE-038, RULE-039, RULE-040, RULE-041, RULE-042
69
79
 
70
80
  ## Derived decisions
71
81
 
@@ -42,6 +42,12 @@ when it applies, and where its evidence comes from. Full provenance lives in
42
42
  | RULE-005 | must | Wrap each control in a Field that provides a visible label, and place help or error text through the Field's message slot rather than beside it. |
43
43
  | RULE-006 | should | Show a field error after the user leaves the field or submits the form, and never before the user has entered a value, so the form does not scold an untouched field. |
44
44
  | RULE-007 | should | Lay fields out in one column by default and group related fields under a shared heading, because a single reading path is easier to follow and to complete. |
45
+ | RULE-037 | should | Choose Input or Textarea for free-form text, RadioGroup for a small exclusive set, Select for a short fixed list, Combobox or Dropdown for a long or searchable list, Checkbox for a submitted boolean, Switch for an immediate on/off, and SpinButton for a bounded numeric quantity. |
46
+ | RULE-038 | must | Use a Switch only when the change takes effect immediately, and use a Checkbox for a value submitted with the form; give a parent Checkbox an indeterminate state when it controls a partially selected group. |
47
+ | RULE-039 | should | Prefer a native Select for a short, fixed list of options, and choose Combobox or Dropdown when the list is long, must be searched or typed into, or needs custom option content. |
48
+ | RULE-040 | must | Provide a plain-text value for every Dropdown or Combobox option whose visible content is complex or composed, so the closed field and type-ahead matching use the text. |
49
+ | RULE-041 | should | Prefer an inline option popup that follows the trigger in the DOM so assistive navigation reaches the list where aria-owns is unsupported. |
50
+ | RULE-042 | should | Set the minimum and maximum on a bounded numeric input, choose a step that divides the range, set the larger page step as a multiple, and parse a formatted display value back to a number. |
45
51
 
46
52
  ## data-grid
47
53