superdesk-ui-framework 4.0.82 → 4.0.83

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.
@@ -15,41 +15,41 @@ $tag-bg-colors: (
15
15
  /// Coloring classes. A map of classes to output in the CSS.
16
16
  $tag-label-palette: $tag-bg-colors !default;
17
17
 
18
- /// Default padding inside badges.
19
- $tag-label-padding: 1em 1em !default;
20
-
21
- /// Minimum width of a badge.
22
- $tag-label-minwidth: 1.8em !default;
23
-
24
- /// Default radius of a badge.
25
- $tag-label-radius: $border-radius__base--full;
26
-
27
- /// Default font size and line height for badges.
28
- $tag-label-font-size: 1.4rem !default;
29
- $tag-label-lineheight: 100% !default;
30
-
18
+ :root {
19
+ --tag-label-height: calc(3 * var(--base-increment));
20
+ --tag-label-height-small: calc(2.25 * var(--base-increment));
21
+ --tag-label-padding: 1em 1em;
22
+ --tag-label-padding-small: 1em;
23
+
24
+ --tag-label-font-size: var(--text-size-small);
25
+ --tag-label-font-size-small: 1.1rem;
26
+
27
+ --tag-label-minwidth: 1.8em;
28
+ --tag-label-radius: var(--b-radius--full);
29
+ --tag-label-lineheight: 1.1;
30
+ }
31
31
 
32
32
  /// Generates the base styles for a badge.
33
33
  @mixin tag-label {
34
34
  display: inline-flex;
35
35
  align-items: center;
36
- min-width: $tag-label-minwidth;
36
+ min-width: var(--tag-label-minwidth);
37
37
  padding: 0;
38
- padding-inline: $tag-label-padding;
39
- border-radius: $tag-label-radius;
40
- font-size: $tag-label-font-size;
38
+ padding-inline: var(--tag-label-padding);
39
+ border-radius: var(--tag-label-radius);
40
+ font-size: var(--tag-label-font-size);
41
+ line-height: var(--tag-label-lineheight);
41
42
  position: relative;
42
43
  text-align: center;
43
44
  font-weight: 400;
44
45
  transition: background-color .2s ease-out, opacity .1s ease-out;
45
- height: $sd-base-increment * 3;
46
+ height: var(--tag-label-height);
46
47
  color: var(--color-text);
47
48
  }
48
49
 
49
50
  .tag-label {
50
51
  @include tag-label;
51
- background: $tag-label-BG-default;
52
-
52
+ background: var(--sd-colour__tag-label-Bg--1);
53
53
  @each $name, $color in $tag-label-palette {
54
54
  &.tag-label--#{$name} {
55
55
  background: $color;
@@ -75,7 +75,7 @@ $tag-label-lineheight: 100% !default;
75
75
  text-decoration: none;
76
76
  text-align: center;
77
77
  vertical-align: middle;
78
- border-radius: $border-radius__base--full;
78
+ border-radius: var(--b-radius--full);
79
79
  background-color: var(--sd-colour__tag-label-remove-Bg);
80
80
  color: var(--color-text);
81
81
  cursor: pointer;
@@ -102,7 +102,7 @@ $tag-label-lineheight: 100% !default;
102
102
  }
103
103
  }
104
104
 
105
- &:active {
105
+ &:active {
106
106
  background-color: var(--sd-colour__tag-label-remove-Bg--hover);
107
107
 
108
108
  [class^="icon-"], [class*=" icon-"] {
@@ -113,29 +113,57 @@ $tag-label-lineheight: 100% !default;
113
113
  }
114
114
 
115
115
  &.tag-label--inverse {
116
- color: $tag-label-Txt-inverse;
117
- background-color: $tag-label-BG-inverse;
116
+ color: var(--sd-colour__tag-label-Txt--inverse);
117
+ background-color: var(--sd-colour__tag-label-Bg--inverse);
118
118
  }
119
-
120
119
  .tag-label--text-wrapper {
121
120
  display: flex;
122
121
  align-items: center;
123
122
  justify-content: center;
124
- gap: 4px;
123
+ gap: var(--gap-0-5);
125
124
  }
126
-
127
125
  .tag-label--text-label {
128
126
  opacity: 0.7;
129
127
  }
128
+
129
+ &.tag-label--small {
130
+ height: var(--tag-label-height-small);
131
+ font-size: var(--tag-label-font-size-small);
132
+ padding-inline: var(--tag-label-padding-small);
133
+ letter-spacing: 0.025em;
134
+ .tag-label__remove {
135
+ height: 1.4rem;
136
+ width: 1.4rem;
137
+ margin-inline-start: 0.6rem;
138
+ margin-inline-end: -0.9rem;
139
+
140
+ [class^="icon-"], [class*=" icon-"] {
141
+ --icon-size: 1.rem;
142
+ font-size: var(--icon-size);
143
+ height: var(--icon-size);
144
+ width: var(--icon-size);
145
+ }
146
+ }
147
+ &.tag-label--square {
148
+ padding-inline-start: var(--space--1);
149
+ }
150
+ &.tag-label--draggable {
151
+ border-radius: var(--b-radius--small);
152
+ padding-inline-start: 4px;
153
+ .drag-handle-wrapper {
154
+ margin-inline-end: 6px;
155
+ }
156
+ }
157
+ }
130
158
  }
131
159
 
132
160
  .tag-label--square {
133
- border-radius: $border-radius__base--small;
161
+ border-radius: var(--b-radius--small);
134
162
  padding-inline-start: var(--space--1);
135
163
  }
136
164
 
137
165
  .tag-label--draggable {
138
- border-radius: $border-radius__base--small;
166
+ border-radius: var(--b-radius--small);
139
167
  padding-inline-start: 6px;
140
168
  .drag-handle-wrapper {
141
169
  margin-inline-end: 6px;
@@ -157,11 +185,9 @@ $tag-label-lineheight: 100% !default;
157
185
 
158
186
  .sd-search-tags__tag-list {
159
187
  margin: 0.6rem 0;
160
-
161
188
  &:empty {
162
189
  padding: 0 !important;
163
190
  }
164
-
165
191
  .sd-search-tags__tag {
166
192
  margin-inline-start: 2px !important;
167
193
  margin-inline-end: 2px !important;
@@ -269,7 +269,6 @@ $sd-ListItem-column-border: var(--sd-colour-line--x-light);
269
269
  flex-direction: row;
270
270
  justify-content: flex-start;
271
271
  align-items: center;
272
- overflow: hidden;
273
272
  gap: var(--gap--small);
274
273
 
275
274
  &:first-child {
@@ -657,7 +657,7 @@
657
657
  --color-text-subdued: hsla(214, 13%, 60%, 1);
658
658
  --color-text--inverse: hsla(214, 13%, 98%, 1);
659
659
  --color-icon-default: hsla(214, 13%, 30%, 1);
660
- --sd-slugline-color: hsla(197, 100%, 15%, 1) !important;
660
+ --sd-slugline-color: hsl(197, 100%, 25%) !important;
661
661
  --sd-time-schedule-color: hsla(268, 100%, 25%, 1);
662
662
  --sd-navy-color: hsla(240, 100%, 25%, 1);
663
663
 
@@ -6,6 +6,7 @@ interface IProps {
6
6
  text: string;
7
7
  label?: string;
8
8
  keyValue?: number;
9
+ size?: 'small' | 'normal'; // default normal
9
10
  shade?: 'light' | 'darker' | 'highlight1' | 'highlight2' | 'inverse'; // default light
10
11
  shape?: 'round' | 'square'; // default round
11
12
  readOnly?: boolean;
@@ -13,11 +14,12 @@ interface IProps {
13
14
  onClick?(): void;
14
15
  }
15
16
 
16
- export const Tag = ({text, keyValue, shade, shape, readOnly, onClick, label, draggable}: IProps) => {
17
+ export const Tag = ({text, keyValue, shade, shape, readOnly, onClick, label, draggable, size}: IProps) => {
17
18
  let classes = classNames('tag-label', {
18
19
  [`tag-label--${shade}`]: shade && shade !== 'light',
19
20
  'tag-label--square': shape === 'square',
20
21
  'tag-label--draggable': draggable === true,
22
+ [`tag-label--${size}`]: size !== 'normal' && size !== undefined,
21
23
  });
22
24
 
23
25
  const removeButton =
@@ -158,13 +158,13 @@ export default class BadgeDoc extends React.Component {
158
158
  <Markup.ReactMarkupPreview>
159
159
  <div className="docs-page__content-row">
160
160
  <Badge text="8" type="primary">
161
- <Button text="default" onClick={() => false} />
161
+ <Button text="secondary" type="secondary" onClick={() => false} />
162
162
  </Badge>
163
163
  <Badge text="6">
164
164
  <Button text="primary" type="primary" onClick={() => false} />
165
165
  </Badge>
166
166
  <Badge text="4" type="highlight">
167
- <Button text="hollow" style="hollow" onClick={() => false} />
167
+ <Button text="tertiary" type="tertiary" onClick={() => false} />
168
168
  </Badge>
169
169
  </div>
170
170
  </Markup.ReactMarkupPreview>
@@ -6,6 +6,7 @@ import {Tag, Prop, PropsList} from '../../../app-typescript';
6
6
  interface ITag {
7
7
  tags: Array<any>;
8
8
  tags2: Array<any>;
9
+ tags3: Array<any>;
9
10
  }
10
11
  export default class TagDoc extends React.Component<{}, ITag> {
11
12
  constructor(props) {
@@ -23,6 +24,17 @@ export default class TagDoc extends React.Component<{}, ITag> {
23
24
  tags2: [
24
25
  {text: 'Tag with label', label: 'Label'},
25
26
  {text: 'I am', draggable: true, label: 'Draggable'},
27
+ {text: 'Tag with label', label: 'Label', size: 'small'},
28
+ {text: 'I am', draggable: true, label: 'Draggable', size: 'small'},
29
+ ],
30
+ tags3: [
31
+ {text: 'This is a small tag', size: 'small'},
32
+ {text: 'Another small tag', size: 'small', shade: 'darker'},
33
+ {text: 'Inverse small tag', size: 'small', shade: 'inverse'},
34
+ {text: 'Lorem ipsum', size: 'small', shade: 'highlight1'},
35
+ {text: 'Dolor amet ', size: 'small', shade: 'highlight2', shape: 'square'},
36
+ {text: 'Read only small tag', size: 'small', readOnly: true},
37
+ {text: 'Draggable small tag', size: 'small', draggable: true},
26
38
  ],
27
39
  };
28
40
  this.handleClick = this.handleClick.bind(this);
@@ -68,6 +80,26 @@ export default class TagDoc extends React.Component<{}, ITag> {
68
80
  label={tag.label}
69
81
  readOnly={tag.readOnly}
70
82
  draggable={tag.draggable}
83
+ size={tag.size}
84
+ onClick={() => this.handleClick(index)}
85
+ />
86
+ </React.Fragment>
87
+ );
88
+ })}
89
+ </div>
90
+ <div className="docs-page__content-row d-flex gap-1 mt-1">
91
+ {this.state.tags3.map((tag, index) => {
92
+ return (
93
+ <React.Fragment key={index}>
94
+ <Tag
95
+ keyValue={index}
96
+ text={tag.text}
97
+ shade={tag.shade}
98
+ shape={tag.shape}
99
+ label={tag.label}
100
+ readOnly={tag.readOnly}
101
+ draggable={tag.draggable}
102
+ size={tag.size}
71
103
  onClick={() => this.handleClick(index)}
72
104
  />
73
105
  </React.Fragment>
@@ -99,6 +131,7 @@ export default class TagDoc extends React.Component<{}, ITag> {
99
131
  text={tag.text}
100
132
  label={tag.label}
101
133
  draggable={tag.draggable}
134
+ size={tag.size}
102
135
  onClick={() => this.handleClick2(index)}
103
136
  />
104
137
  </React.Fragment>
@@ -44,7 +44,9 @@
44
44
  </div>
45
45
  </div>
46
46
 
47
- <h4 class="docs-page__h4 mt-5 mb-2">Component Usage</h4>
47
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large" role="separator" />
48
+
49
+ <h3 class="docs-page__h3 mt-0 mb-3">Component Usage</h3>
48
50
  <ul class="docs-page__unordered-list mt-1 mb-5">
49
51
  <li><strong>RadioGroup:</strong> Required for all radio button implementations - handles spacing, orientation, and group behavior automatically.</li>
50
52
  <li><strong>Checkbox:</strong> Individual checkbox component for single or multiple checkbox implementations</li>
@@ -65,7 +67,7 @@
65
67
  <img src="/illustration-small--react.svg" alt="Components">
66
68
  </figure>
67
69
  <label class="docs-page__graphic-btn-label">
68
- <span>View Radio component</span>
70
+ <span>View RadioGroup component</span>
69
71
  <span class="docs-page__small-text">Components</span>
70
72
  </label>
71
73
  </a>
@@ -0,0 +1,210 @@
1
+ <section class="docs-page__container">
2
+ <h1 class="docs-page__h2">Icon Button Guidelines</h1>
3
+ <p class="docs-page__paragraph docs-page__paragraph--large">Icon buttons provide a compact way to trigger actions while maintaining clean interfaces. Since icons communicate meaning without text, choosing the right icon and providing clear tooltips becomes critical for usability. The <code>IconButton</code> component ensures consistent styling and behavior across all icon-based actions.</p>
4
+
5
+ <h3 class="docs-page__h3 mt-5">Icon Selection</h3>
6
+ <h4 class="docs-page__h4 mt-3">Choose Recognizable Icons</h4>
7
+ <p class="docs-page__paragraph">Use icons that clearly represent their action. When in doubt, prioritize universal symbols over creative interpretations.</p>
8
+
9
+ <div class="docs-page__content-block d-flex flex-wrap gap-3">
10
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
11
+ <h4 class="docs-page__do-dont-block-title">Do</h4>
12
+ <div class="docs-page__do-dont-block-content mt-0">
13
+ <ul class="docs-page__unordered-list">
14
+ <li>Magnifying glass for search</li>
15
+ <li>Pencil or edit icon for editing</li>
16
+ <li>Download arrow for downloads</li>
17
+ <li>Settings gear for configuration</li>
18
+ </ul>
19
+ </div>
20
+ </div>
21
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--dont">
22
+ <h4 class="docs-page__do-dont-block-title">Don't</h4>
23
+ <div class="docs-page__do-dont-block-content">
24
+ <ul class="docs-page__unordered-list mt-1">
25
+ <li>Abstract or ambiguous icons that require explanation</li>
26
+ <li>Icons that could have multiple interpretations</li>
27
+ <li>Custom icons when standard ones exist</li>
28
+ </ul>
29
+ </div>
30
+ </div>
31
+ </div>
32
+
33
+ <h4 class="docs-page__h4 mt-4">Icon Meaning Consistency</h4>
34
+ <p class="docs-page__paragraph">Use the same icon for the same action throughout the application. Users learn and expect consistency.</p>
35
+
36
+ <div class="docs-page__content-block d-flex flex-wrap gap-3">
37
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
38
+ <h4 class="docs-page__do-dont-block-title">Do</h4>
39
+ <div class="docs-page__do-dont-block-content">
40
+ <p class="docs-page__paragraph">
41
+ Use the same edit icon across all edit functions in your app.
42
+ </p>
43
+ </div>
44
+ </div>
45
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--dont">
46
+ <h4 class="docs-page__do-dont-block-title">Don't</h4>
47
+ <div class="docs-page__do-dont-block-content">
48
+ <p class="docs-page__paragraph">
49
+ Use different edit icons (pencil, pen, edit text) for similar editing actions.
50
+ </p>
51
+ </div>
52
+ </div>
53
+ </div>
54
+
55
+
56
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large sd-content-divider--dashed" role="separator" />
57
+
58
+ <h3 class="docs-page__h3 mt-5">Tooltip Guidelines</h3>
59
+ <h4 class="docs-page__h4 mt-3">Always Provide Tooltips</h4>
60
+ <p class="docs-page__paragraph">Every icon button must have a descriptive tooltip that clearly states what will happen when clicked.</p>
61
+
62
+ <div class="docs-page__content-block d-flex flex-wrap gap-3">
63
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
64
+ <h4 class="docs-page__do-dont-block-title">Do</h4>
65
+ <div class="docs-page__do-dont-block-content">
66
+ <ul class="docs-page__unordered-list">
67
+ <li>"Delete item"</li>
68
+ <li>"Edit profile settings"</li>
69
+ <li>"Download report as PDF"</li>
70
+ <li>"Close dialog"</li>
71
+ </ul>
72
+ </div>
73
+ </div>
74
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--dont">
75
+ <h4 class="docs-page__do-dont-block-title">Don't</h4>
76
+ <div class="docs-page__do-dont-block-content">
77
+ <ul class="docs-page__unordered-list">
78
+ <li>"Delete" (too vague)</li>
79
+ <li>"Edit" (edit what?)</li>
80
+ <li>"Download" (download what format?)</li>
81
+ <li>"Close" (close what?)</li>
82
+ </ul>
83
+ </div>
84
+ </div>
85
+ </div>
86
+
87
+ <h4 class="docs-page__h4 mt-4">Tooltip Language</h4>
88
+ <p class="docs-page__paragraph">Use action-oriented language that describes the outcome, not just the icon name.</p>
89
+
90
+ <div class="docs-page__content-block d-flex flex-wrap gap-3">
91
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
92
+ <h4 class="docs-page__do-dont-block-title">Do</h4>
93
+ <div class="docs-page__do-dont-block-content">
94
+ <p class="docs-page__paragraph">"Remove item from list" instead of "X button"</p>
95
+ </div>
96
+ </div>
97
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--dont">
98
+ <h4 class="docs-page__do-dont-block-title">Don't</h4>
99
+ <div class="docs-page__do-dont-block-content">
100
+ <p class="docs-page__paragraph">"Trash can" or "Delete icon"</p>
101
+ </div>
102
+ </div>
103
+ </div>
104
+
105
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large sd-content-divider--dashed" role="separator" />
106
+
107
+ <h3 class="docs-page__h3 mt-5 d-flex items-center gap-1">
108
+ Close <span class="docs-page__icon-wrapper"><i class="icon-close-small" aria-hidden="true"></i></span> vs
109
+ Delete <span class="docs-page__icon-wrapper"><i class="icon-trash" aria-hidden="true"></i></span> Icons
110
+ </h3>
111
+
112
+ <p class="docs-page__paragraph">Understanding when to use close versus delete icons is crucial for user expectations and preventing destructive actions. This is a common source of confusion that can lead to inconsistent user experiences.</p>
113
+
114
+ <h4 class="docs-page__h4 mt-4 d-flex items-center gap-1">Use Close <span class="docs-page__icon-wrapper"><i class="icon-close-small" aria-hidden="true"></i></span> icon for:</h4>
115
+ <h5 class="docs-page__h5 mt-2">Temporary removals or dismissals:</h5>
116
+ <ul class="docs-page__unordered-list mt-2 mb-2">
117
+ <li>Recommended in most cases but can be skipped occasionally</li>
118
+ <li>Rare exception: large and complex modals where actions happen inside the content area</li>
119
+ <li>Main action buttons always aligned to the right</li>
120
+ <li>Primary action positioned far right</li>
121
+ </ul>
122
+ <p class="docs-page__paragraph mt-0"><strong>Characteristics:</strong> Reversible, non-destructive, affects UI state rather than data.</p>
123
+
124
+ <h4 class="docs-page__h4 mt-4 d-flex items-center gap-1">Use Delete <span class="docs-page__icon-wrapper"><i class="icon-trash" aria-hidden="true"></i></span> icon for:</h4>
125
+ <h5 class="docs-page__h5 mt-2">Permanent data removal:</h5>
126
+ <ul class="docs-page__unordered-list mt-2 mb-2">
127
+ <li>Deleting files, records, or database entries</li>
128
+ <li>Removing user-created content permanently</li>
129
+ <li>Deleting accounts or user profiles</li>
130
+ <li>Deleting articles</li>
131
+ </ul>
132
+ <p class="docs-page__paragraph mt-0"><strong>Characteristics:</strong> Usually irreversible, destructive, affects actual data.</p>
133
+
134
+ <h4 class="docs-page__h4 mt-4 ">Examples</h4>
135
+
136
+ <div class="docs-page__content-block d-flex flex-wrap gap-3">
137
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
138
+ <h4 class="docs-page__do-dont-block-title d-flex items-center gap-0-5">Do - Close <span class="docs-page__icon-wrapper"><i class="icon-close-small" aria-hidden="true"></i></span> icon</h4>
139
+ <div class="docs-page__do-dont-block-content mt-0">
140
+ <ul class="docs-page__unordered-list">
141
+ <li>Closing a modal dialog: "Close dialog"</li>
142
+ <li>Removing an item from related content: "Remove from related"</li>
143
+ <li>Dismissing a notification: "Dismiss notification"</li>
144
+ <li>Closing a sidebar: "Close preview"</li>
145
+ </ul>
146
+ </div>
147
+ </div>
148
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--do">
149
+ <h4 class="docs-page__do-dont-block-title d-flex items-center gap-0-5">Do - Delete <span class="docs-page__icon-wrapper"><i class="icon-trash" aria-hidden="true"></i></span> icon</h4>
150
+ <div class="docs-page__do-dont-block-content">
151
+ <ul class="docs-page__unordered-list mt-1">
152
+ <li>Deleting a user account: "Delete account permanently"</li>
153
+ <li>Removing a saved document: "Delete document"</li>
154
+ <li>Deleting a database record: "Delete customer record"</li>
155
+ </ul>
156
+ </div>
157
+ </div>
158
+ <div class="docs-page__do-dont-block docs-page__do-dont-block--dont">
159
+ <h4 class="docs-page__do-dont-block-title">Don't</h4>
160
+ <div class="docs-page__do-dont-block-content">
161
+ <ul class="docs-page__unordered-list mt-1">
162
+ <li>Using trash icon to close dialogs or dismiss notifications</li>
163
+ <li>Using close (×) icon for permanent deletions</li>
164
+ <li>Mixing these icons inconsistently for similar actions</li>
165
+ </ul>
166
+ </div>
167
+ </div>
168
+ </div>
169
+
170
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large" role="separator" />
171
+
172
+ <h3 class="docs-page__h3 mt-0">Accessibility Considerations</h3>
173
+ <h4 class="docs-page__h4 mt-2">Color and Contrast</h4>
174
+ <p class="docs-page__paragraph mt-0">Icons should meet accessibility contrast requirements. Don't rely on color alone to convey meaning.</p>
175
+
176
+
177
+
178
+ <h4 class="docs-page__h4 mt-5">Screen Readers</h4>
179
+ <p class="docs-page__paragraph mt-0">The <code>IconButton</code> component requires an ARIA label as a mandatory prop, which serves dual purposes: providing screen reader accessibility and generating the tooltip text. Screen reader support is built directly into the component.</p>
180
+
181
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large" role="separator" />
182
+
183
+ <h3 class="docs-page__h3 mt-0 mb-3">Component Usage</h3>
184
+
185
+ <ul class="docs-page__unordered-list mt-1 mb-5" style="max-width: 85ch;">
186
+ <li><strong>IconButton:</strong> Use for all icon-based actions with proper icon selection and mandatory tooltips for clear user communication.</li>
187
+ <li><strong>ButtonGroup:</strong> When grouping multiple icon buttons, use the <code>ButtonGroup</code> component for consistent spacing and alignment. The same spacing principles that apply to regular button grouping apply here.</li>
188
+ </ul>
189
+
190
+ <div class="docs-page__button-grid">
191
+ <a class="docs-page__graphic-btn" href="#/components/icon-buttons" target="_blank">
192
+ <figure class="docs-page__graphic-btn-graphic">
193
+ <img src="/illustration-small--react.svg" alt="React components">
194
+ </figure>
195
+ <label class="docs-page__graphic-btn-label">
196
+ <span>View IconButton component</span>
197
+ <span class="docs-page__small-text">Components</span>
198
+ </label>
199
+ </a>
200
+ <a class="docs-page__graphic-btn" href="#/components/button-groups" target="_blank">
201
+ <figure class="docs-page__graphic-btn-graphic">
202
+ <img src="/illustration-small--react.svg" alt="React components">
203
+ </figure>
204
+ <label class="docs-page__graphic-btn-label">
205
+ <span>View ButtonGroup component</span>
206
+ <span class="docs-page__small-text">Components</span>
207
+ </label>
208
+ </a>
209
+ </div>
210
+ </section>
@@ -1,5 +1,5 @@
1
1
  <section class="docs-page__container">
2
- <h1 class="docs-page__h2">Modals & Dialogs</h1>
2
+ <h1 class="docs-page__h2">Modals & Dialogs Guidelines</h1>
3
3
  <p class="docs-page__paragraph docs-page__paragraph--large">Dialogs and modals are essential components in Superdesk, used frequently for everything from quick confirmations to complex workflows. Given the sophisticated nature of content management, our modals often contain substantial functionality. Consistent structure and content guidelines help users navigate these interfaces confidently.</p>
4
4
 
5
5
  <h3 class="docs-page__h3 mt-5">Structure</h3>
@@ -156,7 +156,7 @@
156
156
  </figure>
157
157
  <figcaption class="docs-page__figure-caption">
158
158
  <p class="docs-page__caption-heading docs-page__caption-heading--do">Do.</p>
159
- <p class="docs-page__caption-text">Use consistent spacing between buttons in the footer. The same spacing principles from our Button Guidelines apply here - use the <code>ButtonGroup</code> component when possible, or the <code>--gap-1</code> spacing variable for custom layouts. For more detailed information, see the guidelines for the <a href="#/design/buttons">Button component</a>.</p>
159
+ <p class="docs-page__caption-text">Use consistent spacing between buttons in the footer. The same spacing principles from our Button Guidelines apply here - use the <code>ButtonGroup</code> component when possible, or the <code>--gap-1</code> spacing variable for custom layouts. For more detailed information, see the guidelines for the <a class="docs-page__link" href="#/design/buttons">Button component</a>.</p>
160
160
  </figcaption>
161
161
  </div>
162
162
  <div class="docs-page__content-block-item">
@@ -42,26 +42,28 @@
42
42
  </div>
43
43
  </div>
44
44
 
45
- <h4 class="docs-page__h4 mt-5 mb-2">Component Usage</h4>
45
+ <hr class="sd-content-divider sd-content-divider--horizontal sd-content-divider--margin-large" role="separator" />
46
+
47
+ <h3 class="docs-page__h3 mt-0 mb-3">Component Usage</h3>
46
48
  <ul class="docs-page__unordered-list mt-1 mb-5">
47
49
  <li><strong>Switch:</strong> Individual switch component for single or multiple switch implementations</li>
48
50
  <li><strong>SwitchGroup:</strong> Used to group multiple <code>Switch</code> components with consistent spacing and alignment</li>
49
51
  </ul>
50
52
 
51
- <h4 class="docs-page__h4 mt-5 mb-2">When to Use Switches vs Checkboxes</h4>
53
+ <h4 class="docs-page__h4 mt-5 mb-2">When to use Switches vs Checkboxes</h4>
52
54
  <ul class="docs-page__unordered-list mt-1 mb-5">
53
55
  <li><strong>Switches:</strong> For settings that take effect immediately (toggle dark mode, enable notifications)</li>
54
56
  <li><strong>Checkboxes:</strong> For selections that require confirmation or submission (form selections, bulk actions)</li>
55
57
  </ul>
56
58
 
57
59
  <div class="docs-page__button-grid">
58
- <a class="docs-page__graphic-btn" href="#/react/switch" target="_blank">
60
+ <a class="docs-page__graphic-btn" href="#/components/switch" target="_blank">
59
61
  <figure class="docs-page__graphic-btn-graphic">
60
62
  <img src="/illustration-small--react.svg" alt="React components">
61
63
  </figure>
62
64
  <label class="docs-page__graphic-btn-label">
63
- <span>View react component</span>
64
- <span class="docs-page__small-text">React components</span>
65
+ <span>View Switch component</span>
66
+ <span class="docs-page__small-text">Components</span>
65
67
  </label>
66
68
  </a>
67
69
  </div>
@@ -492,7 +492,7 @@ hr {
492
492
  .docs-page__h3 {
493
493
  font-size: 32px;
494
494
  font-weight: 700;
495
- line-height: 120%;
495
+ line-height: 1.2;
496
496
  font-family: 'Merriweather', serif;
497
497
  margin: 2em 0 0.4em 0;
498
498
  }
@@ -502,11 +502,17 @@ hr {
502
502
  .docs-page__h4 {
503
503
  font-size: 22px;
504
504
  font-weight: 700;
505
- line-height: 120%;
505
+ line-height: 1.2;
506
506
  font-family: 'Merriweather', serif;
507
507
  margin: 1em 0 0.2em 0;
508
508
  color: var(--color-text-muted);
509
509
  }
510
+ .docs-page__h5 {
511
+ font-size: 18px;
512
+ font-weight: 600;
513
+ line-height: 1.2;
514
+ margin: 0 0 0.25em;
515
+ }
510
516
  .docs-page__group-heading {
511
517
  font-size: 36px;
512
518
  font-weight: 300;
@@ -743,9 +749,14 @@ hr {
743
749
  overflow-y: auto;
744
750
  position: relative;
745
751
  background-color: var(--docs-page-color-bg-00);
746
- a {
747
- color: var(--sd-colour-interactive);
748
- text-decoration: dotted;
752
+ .docs-page__link {
753
+ color: var(--sd-colour-interactive--text);
754
+ text-decoration: underline dotted;
755
+ transition: all 0.2s ease;
756
+ &:hover {
757
+ color: var(--sd-colour-interactive);
758
+ text-decoration: underline;
759
+ }
749
760
  }
750
761
  }
751
762
  .docs-page__masthead {
@@ -1434,6 +1445,15 @@ doc-gif-img:hover img {
1434
1445
  cursor: pointer;
1435
1446
  }
1436
1447
 
1448
+ .docs-page__icon-wrapper {
1449
+ display: inline-flex;
1450
+ align-items: center;
1451
+ justify-content: center;
1452
+ padding: var(--space--1);
1453
+ background-color: var(--sd-item__main-Bg);
1454
+ border-radius: var(--b-radius--full);
1455
+ }
1456
+
1437
1457
  .docs-page__container table {
1438
1458
  margin-bottom: 32px;
1439
1459
  border-color: var(--docs-page-border__table) !important;
@@ -1463,7 +1483,6 @@ doc-gif-img:hover img {
1463
1483
  position: sticky;
1464
1484
  top: 0;
1465
1485
  background-color: var(--docs-page-color-bg-00);
1466
- border-bottom:;
1467
1486
  }
1468
1487
 
1469
1488
  .docs-page__container table.utilities-table tbody td {
@@ -1536,7 +1555,6 @@ pre[class*='language-'] {
1536
1555
  border: 1px solid var(--sd-colour-line--medium);
1537
1556
  flex: 1 1%;
1538
1557
  min-width: 400px;
1539
-
1540
1558
  &.docs-page__do-dont-block--do {
1541
1559
  .docs-page__do-dont-block-title {
1542
1560
  border-color: var(--color-success-highlight);
@@ -1544,7 +1562,6 @@ pre[class*='language-'] {
1544
1562
  background-color: var(--color-success-translucent);
1545
1563
  }
1546
1564
  }
1547
-
1548
1565
  &.docs-page__do-dont-block--dont {
1549
1566
  .docs-page__do-dont-block-title {
1550
1567
  border-color: var(--color-alert-highlight);
@@ -1568,6 +1585,10 @@ pre[class*='language-'] {
1568
1585
  .docs-page__unordered-list {
1569
1586
  margin-block: var(--space--1-5);
1570
1587
  }
1588
+ .docs-page__paragraph {
1589
+ margin: 0;
1590
+ padding: var(--space--1);
1591
+ }
1571
1592
  }
1572
1593
 
1573
1594
  /*// extra large screen media query /100em = 1600px/*/