You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| Nov 7, 2025 | 2.4.0 | <ul><li>A new Read-only variant has been added for the .Checkbox.Indicator component, supporting three states – Selected, Unselected, and Indeterminate. This variant introduces two new color tokens: <ul><li>ouds/color/action/read-only-primary – used for the indicator (shape) <li>ouds/color/action/read-only-secondary – used for the stroke</ul> <li>The new Read-only variant has been integrated into the Read-only variant of both the Checkbox and Checkbox Itemcomponents. <li>We replaced the token in Error text container ouds-control-text-input-space-padding-block-top-helper-text with ouds-control-control-item-space-padding-block-top-error-text. <li>"Helper text" is now called "Description".</ul> |
5
7
| Oct 20, 2025 | 2.3.0 | <ul><li>The "Selection status" variant has been restructured from six options (Selected / Selected error / Unselected / Unselected error / Indeterminate / Indeterminate error) into three base variants: <ul><li>Selected <li>Unselected <li>Indeterminate</ul> <li>Each variant now includes a boolean property to control the Error state (Error = True/False). <li>The divider color is now functional in the Error state – it changes dynamically according to the component status. <li>The icon in the Error state is fixed to .Component/alert/important; its color changes together with the divider depending on the component's status. <ul><li>The new token $control-control-item-size-error-icon is used for the icon size. <li>The new token $control-text-input-space-padding-inline-error-icon is used for the error icon container.</ul> 🆕 Both tokens are now available in the latest release of the Token Library 2.1.0. <li>Added Error text (from the Input component) – it follows the same padding-inline as control-item (16px) and uses $control-text-input-space-padding-block-top-helper-text for block padding. By default, the Error text adapts automatically to match the component status: <ul><li>Selected → displays the corresponding default error message for the selected state. <li>Unselected → displays the corresponding default error message for the unselected state. <li>Indeterminate → displays the corresponding default error message for the indeterminate state.</ul> <li>The "Read only" state has been updated to replace disabled control items with the Tag → Text only → Mutedcomponent: <ul><li>Positive with label "Selected" <li>Negative with label "Unselected" <li>Caution with label "Indeterminate"</ul> <li>Harmonisation of spacing across the control-item family We've unified sizing tokens across the entire control-item family (previously they were defined per component) to align spacing with other control items such as Text input. Replacement note: instead of the single token padding inset 12, use the following tokens: <ul><li>ouds/_control/control-item/space/padding-inline → 16 <li>ouds/_control/control-item/space/padding-block → 12</ul> Additionally, for the control-item family: <ul><li>ouds/_control/control-item/space/column-gap → 12 <li>ouds/_control/control-item/size/max-width → 480</ul></ul> |
**If all fields are mandatory (several fields present):**
2
+
1. Display the message "All fields are mandatory." at the top.
3
+
2. Do not use an asterisk (*) at the end of each field label, nor the word "mandatory."
4
+
5
+
**If not all fields are mandatory (and there are several fields present):**
6
+
1. Display the message "All fields marked with an * are mandatory." at the top.
7
+
2. Use an asterisk (*) at the end of each mandatory field label.
8
+
**⚠️ Important:**
9
+
* In Figma, the asterisk must be entered manually by designers in the label text. UI rendering of the asterisk: **font-weight-bold + color-content-negative (red)**.
10
+
* Technically, for web/iOS/Android, the asterisk is positioned in a dedicated container after the label text. Spacing between label and asterisk: 4px
11
+
3. Either the technology allows a 'required' attribute to be managed on the fields (usually in Web), in which case any asterisks must be hidden from users using assistive technologies, Or the technology does not allow the mandatory nature of the field to be indicated. In this case, the asterisk must be vocalised as well as a 'mandatory' mention. Please refer to the technical documentations for more information.
12
+
4. Depending on the use case, an 'optional' label can be added to non-mandatory fields.
13
+
14
+
**Indication of mandatory status for a group of control items:**
15
+
When a group of control items (Radio Button, Checkbox, or Switch item) is mandatory, the indication of requirement must be carried only by the group title.
16
+
The asterisk (*) must be placed at the end of the group title and must not be repeated in the labels of the individual items.
17
+
This rule avoids visual redundancy, clarifies that the requirement applies to the group rather than each option, and improves information hierarchy and form readability.
18
+
19
+
**If there is only one field in the form, or if the mandatory nature is obvious (such as login/password), no mention is necessary since the fields are essential to the form's functionality.**
This component allows multi-line text editing. Although the number of lines is not technically limited, it is recommended not to exceed 2 lines of text. In its "Text + icon" variant, if the label spans multiple lines, the label remains centred.
3
+
4
+
**Max-width vs full-width**
5
+
For greater flexibility, this component doesn't have a default max-width. To avoid exceeding a width that would degrade readability and the perception of a compact interactive element, we recommend applying **a max-width of around 480px.**
6
+
For mobile or tablet use (or if the component is positioned inside a specific container), it is possible to set this component to use the full available width (of the screen or the container).
7
+
Please note that this behavior is not the default rule; it may be preferred if the template allows it (to improve user comfort or for better page structure/hierarchy).
8
+
9
+
**User zoom in/out**
10
+
The behavior of the text during user zoom in/out must follow a fundamental principle: the text must remain readable, accessible, and must never break the structure or lose information.
11
+
* The text must always scale proportionally with user zoom. Text resizing must never be blocked.
12
+
* Zooming must never cause text to be truncated or hidden. The component must expand vertically to allow line wrapping.
13
+
* The component's height and width must be flexible, never fixed, in order to automatically adapt its dimensions according to the level of zoom.
14
+
* In order to preserve the minimun interactive area during user zoom out, this component have a min-width **of 160px** and a min-height **of 52px**.
15
+
* Even if, the component has a max-height or a max-width for resizing control purposes, technically, during user zoom in, these limitations are not fixed but must be scalable in order to adapt to the user's zoom level.
16
+
* As the control item and error icon are functional, they must follow the same rules as text.
17
+
* In order to preserve the same display rendering as the component's error state, even if the icons is purely decorative, the icons follow the same rules as the text.
* Strong text can be used sparingly to highlight key information within the content. Text is allowed using the corresponding "Strong" token (e.g. Label/Medium/Strong).
3
+
* No other text styles or custom font weights should be used.
4
+
5
+
**⚠️ Underline text**
6
+
* Underlined text must not be applied manually (e.g. in error message), as it is commonly associated with hyperlinks and may mislead users.
Even though, in Figma, the component structure is unique (for easier use by designers), technically the versions differ in order to respect best practices for each environment (paradigm shift between the web "Container" vs. the native "Edge-to-Edge"):
2
+
3
+
**Web (mobile, tablet, and desktop)**
4
+
The component is contained within the browser window and has "safety margins." It therefore cannot appear in the area corresponding to the margin grid.
5
+
The component has internal padding-inline, and its display position must be between several columns (which varies depending on the number of containers used on a horizontal row).
6
+
7
+
**Native app (Android, iOS, Flutter)**
8
+
The display position of the component corresponds to the entire screen display area (edge to edge).
9
+
Its internal padding-inline is therefore replaced by the grid-margin tokens.
| Mar 16, 2026 | - | <ul><li>Documentation writing:<ul><li>Mandatory field indication<li>Multiline and responsiveness<li>Technical layout adjustments</ul></ul> | Maxime Tonnerre |
| Nov 7, 2025 | 2.4.0 | • A new Read-only variant has been added for the .Checkbox.Indicator component, supporting three states — Selected, Unselected, and Indeterminate. This variant introduces two new color tokens: • ouds/color/action/read-only-primary — used for the indicator (shape) • ouds/color/action/read-only-secondary — used for the stroke • The new Read-only variant has been integrated into the Read-only variant of both the Checkbox and Checkbox Itemcomponents. • We replaced the token in Error text container ouds-control-text-input-space-padding-block-top-helper-text with ouds-control-control-item-space-padding-block-top-error-text. • "Helper text" is now called "Description". | Anton Astafev |
4
7
| Oct 20, 2025 | 2.3.0 | • The "Selection status" variant has been restructured from six options (Selected / Selected error / Unselected / Unselected error / Indeterminate / Indeterminate error) into three base variants: → Selected → Unselected → Indeterminate • Each variant now includes a boolean property to control the Error state (Error = True/False). • The divider color is now functional in the Error state — it changes dynamically according to the component status. • The icon in the Error state is fixed to .Component/alert/important; its color changes together with the divider depending on the component's status. → The new token $control-control-item-size-error-icon is used for the icon size. → The new token $control-text-input-space-padding-inline-error-icon is used for the error icon container. 🆕 Both tokens are now available in the latest release of the Token Library 2.1.0. • Added Error text (from the Input component) — it follows the same padding-inline as control-item (16px) and uses → $control-text-input-space-padding-block-top-helper-text for block padding. By default, the Error text adapts automatically to match the component status: → Selected → displays the corresponding default error message for the selected state. → Unselected → displays the corresponding default error message for the unselected state. → Indeterminate → displays the corresponding default error message for the indeterminate state. • The "Read only" state has been updated to replace disabled control items with the Tag → Text only → Mutedcomponent: → Positive with label "Selected" → Negative with label "Unselected" → Caution with label "Indeterminate" • Harmonisation of spacing across the control-item family We've unified sizing tokens across the entire control-item family (previously they were defined per component) to align spacing with other control items such as Text input. Replacement note: instead of the single token padding inset 12, use the following tokens: → ouds/_control/control-item/space/padding-inline → 16 → ouds/_control/control-item/space/padding-block → 12 Additionally, for the control-item family: → ouds/_control/control-item/space/column-gap → 12 → ouds/_control/control-item/size/max-width → 480 | Anton Astafev |
5
8
| Sep 19, 2025 | 2.2.0 | • In the initial settings, the 'Divider' variant is now hidden. | Maxime Tonnerre |
Copy file name to clipboardExpand all lines: components/control/checkbox/figma/checkbox_overview.md
+71Lines changed: 71 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -71,4 +71,75 @@ From left to right, the order of the elements is as follows: icon / text / check
71
71
72
72
**`Error message`** In the context where the component is in its "Error" true option, the error message can be displayed.
73
73
74
+
---
75
+
76
+
## Mandatory field indication
77
+
78
+
**If all fields are mandatory (several fields present):**
79
+
1. Display the message "All fields are mandatory." at the top.
80
+
2. Do not use an asterisk (*) at the end of each field label, nor the word "mandatory."
81
+
82
+
**If not all fields are mandatory (and there are several fields present):**
83
+
1. Display the message "All fields marked with an * are mandatory." at the top.
84
+
2. Use an asterisk (*) at the end of each mandatory field label.
85
+
**⚠️ Important:**
86
+
* In Figma, the asterisk must be entered manually by designers in the label text. UI rendering of the asterisk: **font-weight-bold + color-content-negative (red)**.
87
+
* Technically, for web/iOS/Android, the asterisk is positioned in a dedicated container after the label text. Spacing between label and asterisk: 4px
88
+
3. Either the technology allows a 'required' attribute to be managed on the fields (usually in Web), in which case any asterisks must be hidden from users using assistive technologies, Or the technology does not allow the mandatory nature of the field to be indicated. In this case, the asterisk must be vocalised as well as a 'mandatory' mention. Please refer to the technical documentations for more information.
89
+
4. Depending on the use case, an 'optional' label can be added to non-mandatory fields.
90
+
91
+
**Indication of mandatory status for a group of control items:**
92
+
When a group of control items (Radio Button, Checkbox, or Switch item) is mandatory, the indication of requirement must be carried only by the group title.
93
+
The asterisk (*) must be placed at the end of the group title and must not be repeated in the labels of the individual items.
94
+
This rule avoids visual redundancy, clarifies that the requirement applies to the group rather than each option, and improves information hierarchy and form readability.
95
+
96
+
**If there is only one field in the form, or if the mandatory nature is obvious (such as login/password), no mention is necessary since the fields are essential to the form's functionality.**
97
+
98
+
---
99
+
100
+
## Multiline and responsiveness
101
+
102
+
**Multiline**
103
+
This component allows multi-line text editing. Although the number of lines is not technically limited, it is recommended not to exceed 2 lines of text. In its "Text + icon" variant, if the label spans multiple lines, the label remains centred.
104
+
105
+
**Max-width vs full-width**
106
+
For greater flexibility, this component doesn't have a default max-width. To avoid exceeding a width that would degrade readability and the perception of a compact interactive element, we recommend applying **a max-width of around 480px.**
107
+
For mobile or tablet use (or if the component is positioned inside a specific container), it is possible to set this component to use the full available width (of the screen or the container).
108
+
Please note that this behavior is not the default rule; it may be preferred if the template allows it (to improve user comfort or for better page structure/hierarchy).
109
+
110
+
**User zoom in/out**
111
+
The behavior of the text during user zoom in/out must follow a fundamental principle: the text must remain readable, accessible, and must never break the structure or lose information.
112
+
* The text must always scale proportionally with user zoom. Text resizing must never be blocked.
113
+
* Zooming must never cause text to be truncated or hidden. The component must expand vertically to allow line wrapping.
114
+
* The component's height and width must be flexible, never fixed, in order to automatically adapt its dimensions according to the level of zoom.
115
+
* In order to preserve the minimun interactive area during user zoom out, this component have a min-width **of 160px** and a min-height **of 52px**.
116
+
* Even if, the component has a max-height or a max-width for resizing control purposes, technically, during user zoom in, these limitations are not fixed but must be scalable in order to adapt to the user's zoom level.
117
+
* As the control item and error icon are functional, they must follow the same rules as text.
118
+
* In order to preserve the same display rendering as the component's error state, even if the icons is purely decorative, the icons follow the same rules as the text.
119
+
120
+
---
121
+
122
+
## Technical layout adjustments
123
+
124
+
Even though, in Figma, the component structure is unique (for easier use by designers), technically the versions differ in order to respect best practices for each environment (paradigm shift between the web "Container" vs. the native "Edge-to-Edge"):
125
+
126
+
**Web (mobile, tablet, and desktop)**
127
+
The component is contained within the browser window and has "safety margins." It therefore cannot appear in the area corresponding to the margin grid.
128
+
The component has internal padding-inline, and its display position must be between several columns (which varies depending on the number of containers used on a horizontal row).
129
+
130
+
**Native app (Android, iOS, Flutter)**
131
+
The display position of the component corresponds to the entire screen display area (edge to edge).
132
+
Its internal padding-inline is therefore replaced by the grid-margin tokens.
133
+
134
+
---
135
+
136
+
## Rich text
137
+
138
+
**Strong text**
139
+
* Strong text can be used sparingly to highlight key information within the content. Text is allowed using the corresponding "Strong" token (e.g. Label/Medium/Strong).
140
+
* No other text styles or custom font weights should be used.
141
+
142
+
**⚠️ Underline text**
143
+
* Underlined text must not be applied manually (e.g. in error message), as it is commonly associated with hyperlinks and may mislead users.
0 commit comments