@salesforce/mcp-provider-lwc-experts 0.6.3 → 0.6.4
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/index.bundle.js +109 -117
- package/knowledge/graphql/generation-guide.md +212 -0
- package/knowledge/graphql/generation-mutation.md +265 -0
- package/knowledge/graphql/generation-query.md +235 -0
- package/knowledge/graphql/generation-schema.md +20 -0
- package/knowledge/graphql/schema/shared.graphqls +1140 -0
- package/knowledge/o11y/activityApi.md +64 -0
- package/knowledge/o11y/bestPractices.md +106 -0
- package/knowledge/o11y/counterMetrics.md +61 -0
- package/knowledge/o11y/errorTracking.md +70 -0
- package/knowledge/o11y/initialization.md +46 -0
- package/knowledge/o11y/lifecycleInstrumentation.md +91 -0
- package/knowledge/o11y/logApi.md +53 -0
- package/knowledge/o11y/schemaUsage.md +48 -0
- package/knowledge/slds/styling-hooks/README.md +408 -0
- package/knowledge/slds/styling-hooks/categories/color.md +963 -0
- package/knowledge/slds/styling-hooks/categories/radius.md +526 -0
- package/knowledge/slds/styling-hooks/categories/shadow.md +489 -0
- package/knowledge/slds/styling-hooks/categories/sizing.md +667 -0
- package/knowledge/slds/styling-hooks/categories/spacing.md +501 -0
- package/knowledge/slds/styling-hooks/categories/typography.md +708 -0
- package/knowledge/slds/styling-hooks/global-semantic/accent-hooks.md +207 -0
- package/knowledge/slds/styling-hooks/global-semantic/feedback-hooks.md +819 -0
- package/knowledge/slds/styling-hooks/global-semantic/surface-hooks.md +215 -0
- package/knowledge/slds/styling-hooks/guidance.md +906 -0
- package/knowledge/slds/styling-hooks/metadata/hooks-index.json +6576 -0
- package/knowledge/utam/generation-guide.md +499 -0
- package/knowledge/utam/generation-workflow.md +243 -0
- package/knowledge/utam/namespaces-mapping.md +26 -0
- package/knowledge/utam/utam-json-schema.md +720 -0
- package/knowledge/utils.ts +27 -0
- package/package.json +4 -3
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-create-list-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-create-record.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-delete-list-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-delete-record.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-info-by-name.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-infos-by-name.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-infos-by-object-name.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-object-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-preferences.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-get-list-records-by-name.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-update-list-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-update-list-preferences.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/reference-update-record.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/lds-wire-adapter-types.json +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-list-count.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-list-info-batch.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-list-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-list-records-batch.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-list-records.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-get-related-lists-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-object-info.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-object-infos.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-picklist-values-record.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-picklist-values.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-record.md +0 -0
- /package/{agents → experts}/lds/resources/lwc/guides/reference/wire-adapters/reference-wire-adapters-records.md +0 -0
|
@@ -0,0 +1,667 @@
|
|
|
1
|
+
# SLDS Sizing Styling Hooks
|
|
2
|
+
|
|
3
|
+
**Category:** Layout / Dimensions
|
|
4
|
+
**Total Hooks:** 26 sizing hooks (16 general + 4 border + 6 typography-width)
|
|
5
|
+
**Purpose:** Define element dimensions with consistent, scalable values
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Sizing styling hooks create dimensions for elements using height and width-based properties. These hooks ensure visual consistency, align with grid systems, and scale relative to the root font-size for responsive behavior.
|
|
12
|
+
|
|
13
|
+
**Key Principles:**
|
|
14
|
+
|
|
15
|
+
- Use sizing hooks for element dimensions (width/height)
|
|
16
|
+
- Values align with 8-point grid system (multiples of 8)
|
|
17
|
+
- Sizing is relative to root font-size (responsive)
|
|
18
|
+
- **Don't** use sizing hooks for spacing (use spacing hooks instead)
|
|
19
|
+
- Most interactive elements achieve target sizing through padding, not fixed dimensions
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## General Sizing Hooks (`--slds-g-sizing-*`)
|
|
24
|
+
|
|
25
|
+
### Available Hooks
|
|
26
|
+
|
|
27
|
+
| Hook | Value | Pixels @ 16px base | Common Use |
|
|
28
|
+
| -------------------- | -------- | ------------------ | ----------------------- |
|
|
29
|
+
| `--slds-g-sizing-1` | 0.125rem | 2px | Minimal dimensions |
|
|
30
|
+
| `--slds-g-sizing-2` | 0.25rem | 4px | Very small elements |
|
|
31
|
+
| `--slds-g-sizing-3` | 0.5rem | 8px | Small icons, indicators |
|
|
32
|
+
| `--slds-g-sizing-4` | 0.75rem | 12px | Small icons |
|
|
33
|
+
| `--slds-g-sizing-5` | 1rem | 16px | Standard icons |
|
|
34
|
+
| `--slds-g-sizing-6` | 1.25rem | 20px | Medium icons |
|
|
35
|
+
| `--slds-g-sizing-7` | 1.5rem | 24px | Large icons |
|
|
36
|
+
| `--slds-g-sizing-8` | 1.75rem | 28px | Extra large icons |
|
|
37
|
+
| `--slds-g-sizing-9` | 2rem | 32px | Icon buttons, avatars |
|
|
38
|
+
| `--slds-g-sizing-10` | 3rem | 48px | Large avatars |
|
|
39
|
+
| `--slds-g-sizing-11` | 4rem | 64px | Extra large avatars |
|
|
40
|
+
| `--slds-g-sizing-12` | 5rem | 80px | Hero avatars |
|
|
41
|
+
| `--slds-g-sizing-13` | 10rem | 160px | Small containers |
|
|
42
|
+
| `--slds-g-sizing-14` | 15rem | 240px | Medium containers |
|
|
43
|
+
| `--slds-g-sizing-15` | 20rem | 320px | Large containers |
|
|
44
|
+
| `--slds-g-sizing-16` | 30rem | 480px | Extra large containers |
|
|
45
|
+
|
|
46
|
+
### Usage Guidance
|
|
47
|
+
|
|
48
|
+
#### Small Sizing (1-4): Minimal Elements
|
|
49
|
+
|
|
50
|
+
**Use For:**
|
|
51
|
+
|
|
52
|
+
- Status indicators
|
|
53
|
+
- Dots and bullets
|
|
54
|
+
- Minimal visual elements
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
.status-dot {
|
|
58
|
+
width: var(--slds-g-sizing-3);
|
|
59
|
+
height: var(--slds-g-sizing-3);
|
|
60
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Icon Sizing (3-8): Icon Elements
|
|
65
|
+
|
|
66
|
+
**Use For:**
|
|
67
|
+
|
|
68
|
+
- Icons in buttons
|
|
69
|
+
- Standalone icons
|
|
70
|
+
- Icon indicators
|
|
71
|
+
|
|
72
|
+
```css
|
|
73
|
+
.icon-small {
|
|
74
|
+
width: var(--slds-g-sizing-4);
|
|
75
|
+
height: var(--slds-g-sizing-4);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.icon-standard {
|
|
79
|
+
width: var(--slds-g-sizing-5);
|
|
80
|
+
height: var(--slds-g-sizing-5);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.icon-large {
|
|
84
|
+
width: var(--slds-g-sizing-7);
|
|
85
|
+
height: var(--slds-g-sizing-7);
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Avatar/Button Sizing (9-12): Interactive Elements
|
|
90
|
+
|
|
91
|
+
**Use For:**
|
|
92
|
+
|
|
93
|
+
- Icon-only buttons
|
|
94
|
+
- Avatar images
|
|
95
|
+
- Circular interactive elements
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
.icon-button {
|
|
99
|
+
width: var(--slds-g-sizing-9);
|
|
100
|
+
height: var(--slds-g-sizing-9);
|
|
101
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.avatar-standard {
|
|
105
|
+
width: var(--slds-g-sizing-10);
|
|
106
|
+
height: var(--slds-g-sizing-10);
|
|
107
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### Container Sizing (13-16): Layout Containers
|
|
112
|
+
|
|
113
|
+
**Use For:**
|
|
114
|
+
|
|
115
|
+
- Fixed-width containers
|
|
116
|
+
- Sidebars
|
|
117
|
+
- Modal max-widths
|
|
118
|
+
|
|
119
|
+
```css
|
|
120
|
+
.sidebar {
|
|
121
|
+
width: var(--slds-g-sizing-14);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.modal-small {
|
|
125
|
+
max-width: var(--slds-g-sizing-15);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.modal-large {
|
|
129
|
+
max-width: var(--slds-g-sizing-16);
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Typography Width Hooks (`--slds-g-sizing-content-*`, `--slds-g-sizing-heading-*`)
|
|
136
|
+
|
|
137
|
+
### Available Hooks
|
|
138
|
+
|
|
139
|
+
Character-based width sizing for optimal text readability:
|
|
140
|
+
|
|
141
|
+
| Hook | Value | Description |
|
|
142
|
+
| --------------------------- | ----- | ----------------------------------------- |
|
|
143
|
+
| `--slds-g-sizing-content-1` | 20ch | Narrow content width (20 characters) |
|
|
144
|
+
| `--slds-g-sizing-content-2` | 45ch | Comfortable reading width (45 characters) |
|
|
145
|
+
| `--slds-g-sizing-content-3` | 60ch | Wide content width (60 characters) |
|
|
146
|
+
| `--slds-g-sizing-heading-1` | 20ch | Short heading width (20 characters) |
|
|
147
|
+
| `--slds-g-sizing-heading-2` | 25ch | Medium heading width (25 characters) |
|
|
148
|
+
| `--slds-g-sizing-heading-3` | 30ch | Long heading width (30 characters) |
|
|
149
|
+
|
|
150
|
+
### Usage Guidance
|
|
151
|
+
|
|
152
|
+
**Character Width (`ch`) Units:**
|
|
153
|
+
|
|
154
|
+
- `1ch` = width of the "0" character in the current font
|
|
155
|
+
- Ensures consistent line lengths regardless of font-size
|
|
156
|
+
- Optimal for readability: 45-75 characters per line
|
|
157
|
+
|
|
158
|
+
#### Content Width Hooks
|
|
159
|
+
|
|
160
|
+
**Use For:**
|
|
161
|
+
|
|
162
|
+
- Constraining paragraph widths for readability
|
|
163
|
+
- Article or blog content containers
|
|
164
|
+
- Form field max-widths
|
|
165
|
+
|
|
166
|
+
```css
|
|
167
|
+
.article-content {
|
|
168
|
+
max-width: var(--slds-g-sizing-content-2); /* 45ch - optimal reading */
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.narrow-content {
|
|
172
|
+
max-width: var(--slds-g-sizing-content-1); /* 20ch - compact */
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.wide-content {
|
|
176
|
+
max-width: var(--slds-g-sizing-content-3); /* 60ch - generous */
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### Heading Width Hooks
|
|
181
|
+
|
|
182
|
+
**Use For:**
|
|
183
|
+
|
|
184
|
+
- Preventing headings from becoming too wide
|
|
185
|
+
- Maintaining visual hierarchy
|
|
186
|
+
- Short, punchy headings
|
|
187
|
+
|
|
188
|
+
```css
|
|
189
|
+
.page-title {
|
|
190
|
+
max-width: var(--slds-g-sizing-heading-2); /* 25ch */
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.section-heading {
|
|
194
|
+
max-width: var(--slds-g-sizing-heading-3); /* 30ch */
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Readability Guidelines
|
|
199
|
+
|
|
200
|
+
**Optimal Line Lengths:**
|
|
201
|
+
|
|
202
|
+
- **Body text:** 45-75 characters per line (use `sizing-content-2`)
|
|
203
|
+
- **Headings:** 20-30 characters (use `sizing-heading-*`)
|
|
204
|
+
- **Narrow columns:** 20-40 characters (use `sizing-content-1`)
|
|
205
|
+
|
|
206
|
+
```css
|
|
207
|
+
/* Optimal readability pattern */
|
|
208
|
+
.readable-content {
|
|
209
|
+
max-width: var(--slds-g-sizing-content-2); /* 45ch */
|
|
210
|
+
font-size: var(--slds-g-font-size-base);
|
|
211
|
+
line-height: var(--slds-g-font-lineheight-4); /* 1.5 */
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Border Sizing Hooks (`--slds-g-sizing-border-*`)
|
|
218
|
+
|
|
219
|
+
### Available Hooks
|
|
220
|
+
|
|
221
|
+
| Hook | Value | Description |
|
|
222
|
+
| -------------------------- | ----- | --------------------- |
|
|
223
|
+
| `--slds-g-sizing-border-1` | 1px | Thin border (default) |
|
|
224
|
+
| `--slds-g-sizing-border-2` | 2px | Medium border |
|
|
225
|
+
| `--slds-g-sizing-border-3` | 3px | Thick border |
|
|
226
|
+
| `--slds-g-sizing-border-4` | 4px | Extra thick border |
|
|
227
|
+
|
|
228
|
+
### Usage Guidance
|
|
229
|
+
|
|
230
|
+
#### Border-1: Standard Borders (1px)
|
|
231
|
+
|
|
232
|
+
**Most Common** - Default border thickness
|
|
233
|
+
|
|
234
|
+
```css
|
|
235
|
+
.card {
|
|
236
|
+
border: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.input {
|
|
240
|
+
border: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### Border-2: Emphasis Borders (2px)
|
|
245
|
+
|
|
246
|
+
**Increased visibility**
|
|
247
|
+
|
|
248
|
+
```css
|
|
249
|
+
.card-emphasized {
|
|
250
|
+
border: var(--slds-g-sizing-border-2) solid var(--slds-g-color-border-accent-1);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.input:focus {
|
|
254
|
+
border-width: var(--slds-g-sizing-border-2);
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### Border-3 & Border-4: Heavy Borders (3px, 4px)
|
|
259
|
+
|
|
260
|
+
**Strong visual weight**
|
|
261
|
+
|
|
262
|
+
```css
|
|
263
|
+
.alert-error {
|
|
264
|
+
border-left: var(--slds-g-sizing-border-4) solid var(--slds-g-color-error-1);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.sidebar-divider {
|
|
268
|
+
border-right: var(--slds-g-sizing-border-3) solid var(--slds-g-color-border-1);
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Best Practices
|
|
275
|
+
|
|
276
|
+
### ✅ DO:
|
|
277
|
+
|
|
278
|
+
1. **Use sizing hooks for element dimensions**
|
|
279
|
+
|
|
280
|
+
```css
|
|
281
|
+
.icon {
|
|
282
|
+
width: var(--slds-g-sizing-5);
|
|
283
|
+
height: var(--slds-g-sizing-5);
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
2. **Use border sizing for border widths**
|
|
288
|
+
|
|
289
|
+
```css
|
|
290
|
+
.card {
|
|
291
|
+
border: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
3. **Keep icons square (equal width/height)**
|
|
296
|
+
|
|
297
|
+
```css
|
|
298
|
+
.icon-button {
|
|
299
|
+
width: var(--slds-g-sizing-9);
|
|
300
|
+
height: var(--slds-g-sizing-9);
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
4. **Use max-width for containers, not fixed width**
|
|
305
|
+
|
|
306
|
+
```css
|
|
307
|
+
.modal {
|
|
308
|
+
max-width: var(--slds-g-sizing-15);
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
5. **Let padding define button dimensions**
|
|
313
|
+
|
|
314
|
+
```css
|
|
315
|
+
/* Good - padding determines height */
|
|
316
|
+
.button {
|
|
317
|
+
padding: var(--slds-g-spacing-2) var(--slds-g-spacing-4);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/* Avoid - fixed height */
|
|
321
|
+
.button {
|
|
322
|
+
height: 2.5rem; /* Less flexible */
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### ❌ DON'T:
|
|
327
|
+
|
|
328
|
+
1. **Don't use sizing hooks for spacing**
|
|
329
|
+
|
|
330
|
+
```css
|
|
331
|
+
/* Bad - use spacing hooks instead */
|
|
332
|
+
margin: var(--slds-g-sizing-5);
|
|
333
|
+
|
|
334
|
+
/* Good */
|
|
335
|
+
margin: var(--slds-g-spacing-4);
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
2. **Don't hard-code pixel values**
|
|
339
|
+
|
|
340
|
+
```css
|
|
341
|
+
/* Bad */
|
|
342
|
+
width: 24px;
|
|
343
|
+
border-width: 1px;
|
|
344
|
+
|
|
345
|
+
/* Good */
|
|
346
|
+
width: var(--slds-g-sizing-7);
|
|
347
|
+
border-width: var(--slds-g-sizing-border-1);
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
3. **Don't mix sizing scales**
|
|
351
|
+
|
|
352
|
+
```css
|
|
353
|
+
/* Bad - inconsistent sizing */
|
|
354
|
+
.icon-1 {
|
|
355
|
+
width: 18px;
|
|
356
|
+
}
|
|
357
|
+
.icon-2 {
|
|
358
|
+
width: 22px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* Good - consistent scale */
|
|
362
|
+
.icon-1 {
|
|
363
|
+
width: var(--slds-g-sizing-5);
|
|
364
|
+
}
|
|
365
|
+
.icon-2 {
|
|
366
|
+
width: var(--slds-g-sizing-6);
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
4. **Don't set fixed heights on text-based buttons**
|
|
371
|
+
|
|
372
|
+
```css
|
|
373
|
+
/* Bad - breaks with font scaling */
|
|
374
|
+
.button {
|
|
375
|
+
height: 2rem;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/* Good - padding allows flexibility */
|
|
379
|
+
.button {
|
|
380
|
+
padding: var(--slds-g-spacing-2) var(--slds-g-spacing-4);
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Common Patterns
|
|
387
|
+
|
|
388
|
+
### Pattern 1: Icon Sizing
|
|
389
|
+
|
|
390
|
+
```css
|
|
391
|
+
.icon-tiny {
|
|
392
|
+
width: var(--slds-g-sizing-3);
|
|
393
|
+
height: var(--slds-g-sizing-3);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.icon-small {
|
|
397
|
+
width: var(--slds-g-sizing-4);
|
|
398
|
+
height: var(--slds-g-sizing-4);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.icon-medium {
|
|
402
|
+
width: var(--slds-g-sizing-5);
|
|
403
|
+
height: var(--slds-g-sizing-5);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.icon-large {
|
|
407
|
+
width: var(--slds-g-sizing-7);
|
|
408
|
+
height: var(--slds-g-sizing-7);
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Pattern 2: Icon-Only Button
|
|
413
|
+
|
|
414
|
+
```css
|
|
415
|
+
.icon-button {
|
|
416
|
+
/* Fixed dimensions for circular button */
|
|
417
|
+
width: var(--slds-g-sizing-9);
|
|
418
|
+
height: var(--slds-g-sizing-9);
|
|
419
|
+
|
|
420
|
+
/* Center icon */
|
|
421
|
+
display: flex;
|
|
422
|
+
align-items: center;
|
|
423
|
+
justify-content: center;
|
|
424
|
+
|
|
425
|
+
/* Circle shape */
|
|
426
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
427
|
+
|
|
428
|
+
/* Visual style */
|
|
429
|
+
background: var(--slds-g-color-surface-container-1);
|
|
430
|
+
border: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.icon-button:hover {
|
|
434
|
+
background: var(--slds-g-color-surface-container-2);
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Pattern 3: Avatar Variations
|
|
439
|
+
|
|
440
|
+
```css
|
|
441
|
+
.avatar {
|
|
442
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
443
|
+
object-fit: cover;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.avatar-small {
|
|
447
|
+
width: var(--slds-g-sizing-7);
|
|
448
|
+
height: var(--slds-g-sizing-7);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.avatar-medium {
|
|
452
|
+
width: var(--slds-g-sizing-9);
|
|
453
|
+
height: var(--slds-g-sizing-9);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.avatar-large {
|
|
457
|
+
width: var(--slds-g-sizing-10);
|
|
458
|
+
height: var(--slds-g-sizing-10);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.avatar-hero {
|
|
462
|
+
width: var(--slds-g-sizing-12);
|
|
463
|
+
height: var(--slds-g-sizing-12);
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Pattern 4: Card with Border
|
|
468
|
+
|
|
469
|
+
```css
|
|
470
|
+
.card {
|
|
471
|
+
background: var(--slds-g-color-surface-container-1);
|
|
472
|
+
border: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
473
|
+
border-radius: var(--slds-g-radius-border-2);
|
|
474
|
+
padding: var(--slds-g-spacing-4);
|
|
475
|
+
box-shadow: var(--slds-g-shadow-2);
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Pattern 5: Status Indicator
|
|
480
|
+
|
|
481
|
+
```css
|
|
482
|
+
.status-indicator {
|
|
483
|
+
width: var(--slds-g-sizing-3);
|
|
484
|
+
height: var(--slds-g-sizing-3);
|
|
485
|
+
border-radius: var(--slds-g-radius-border-circle);
|
|
486
|
+
background: var(--slds-g-color-success-1);
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Pattern 6: Modal Dialog
|
|
491
|
+
|
|
492
|
+
```css
|
|
493
|
+
.modal {
|
|
494
|
+
background: var(--slds-g-color-surface-1);
|
|
495
|
+
border-radius: var(--slds-g-radius-border-2);
|
|
496
|
+
box-shadow: var(--slds-g-shadow-4);
|
|
497
|
+
padding: var(--slds-g-spacing-6);
|
|
498
|
+
|
|
499
|
+
/* Responsive width with max */
|
|
500
|
+
width: 90%;
|
|
501
|
+
max-width: var(--slds-g-sizing-15);
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Pattern 7: Alert with Accent Border
|
|
506
|
+
|
|
507
|
+
```css
|
|
508
|
+
.alert-error {
|
|
509
|
+
background: var(--slds-g-color-error-container-1);
|
|
510
|
+
color: var(--slds-g-color-on-error-1);
|
|
511
|
+
padding: var(--slds-g-spacing-3) var(--slds-g-spacing-4);
|
|
512
|
+
border-radius: var(--slds-g-radius-border-1);
|
|
513
|
+
border-left: var(--slds-g-sizing-border-4) solid var(--slds-g-color-error-1);
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### Pattern 8: Sidebar Panel
|
|
518
|
+
|
|
519
|
+
```css
|
|
520
|
+
.sidebar {
|
|
521
|
+
width: var(--slds-g-sizing-14);
|
|
522
|
+
background: var(--slds-g-color-surface-2);
|
|
523
|
+
border-right: var(--slds-g-sizing-border-1) solid var(--slds-g-color-border-1);
|
|
524
|
+
padding: var(--slds-g-spacing-4);
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Important: Target Sizing vs Fixed Sizing
|
|
531
|
+
|
|
532
|
+
### Interactive Elements: Use Padding (Recommended)
|
|
533
|
+
|
|
534
|
+
Most interactive elements should achieve target sizing through padding, **not** fixed dimensions:
|
|
535
|
+
|
|
536
|
+
```css
|
|
537
|
+
/* ✅ RECOMMENDED - Flexible button using padding */
|
|
538
|
+
.button {
|
|
539
|
+
padding: var(--slds-g-spacing-2) var(--slds-g-spacing-4);
|
|
540
|
+
/* Height automatically determined by padding + content */
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/* ❌ AVOID - Fixed height is less flexible */
|
|
544
|
+
.button {
|
|
545
|
+
height: 2.5rem; /* Breaks with font size changes */
|
|
546
|
+
}
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### When to Use Fixed Sizing
|
|
550
|
+
|
|
551
|
+
**DO use fixed sizing for:**
|
|
552
|
+
|
|
553
|
+
1. **Icon-only buttons** (square, circular)
|
|
554
|
+
2. **Avatars** (always square/circular)
|
|
555
|
+
3. **Status indicators** (fixed dots, badges)
|
|
556
|
+
4. **Icons** (consistent sizing)
|
|
557
|
+
5. **Container max-widths** (responsive constraints)
|
|
558
|
+
|
|
559
|
+
```css
|
|
560
|
+
/* ✅ Fixed sizing appropriate here */
|
|
561
|
+
.icon-button {
|
|
562
|
+
width: var(--slds-g-sizing-9);
|
|
563
|
+
height: var(--slds-g-sizing-9);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.avatar {
|
|
567
|
+
width: var(--slds-g-sizing-10);
|
|
568
|
+
height: var(--slds-g-sizing-10);
|
|
569
|
+
}
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## Accessibility Considerations
|
|
575
|
+
|
|
576
|
+
### Target Sizing
|
|
577
|
+
|
|
578
|
+
Ensure interactive elements meet minimum target sizes:
|
|
579
|
+
|
|
580
|
+
**WCAG 2.2 Requirements:**
|
|
581
|
+
|
|
582
|
+
- Desktop/Pointer: 24×24px minimum (AA), 44×44px recommended (AAA)
|
|
583
|
+
- Mobile/Touch: 44×44px minimum
|
|
584
|
+
- Salesforce default: 44×44px for consistency
|
|
585
|
+
|
|
586
|
+
```css
|
|
587
|
+
/* Icon button meets minimum target size */
|
|
588
|
+
.icon-button {
|
|
589
|
+
width: var(--slds-g-sizing-9); /* 32px */
|
|
590
|
+
height: var(--slds-g-sizing-9);
|
|
591
|
+
/* Still needs adequate spacing to meet 44px in context */
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/* Text button meets target through padding */
|
|
595
|
+
.button {
|
|
596
|
+
padding: var(--slds-g-spacing-3) var(--slds-g-spacing-4);
|
|
597
|
+
/* Results in 44px+ height */
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### Responsive Sizing
|
|
602
|
+
|
|
603
|
+
Sizing hooks scale with root font-size:
|
|
604
|
+
|
|
605
|
+
```css
|
|
606
|
+
/* Automatically scales with user font size preferences */
|
|
607
|
+
.icon {
|
|
608
|
+
width: var(--slds-g-sizing-5); /* 1rem = 16px at default */
|
|
609
|
+
height: var(--slds-g-sizing-5);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/* If user increases font to 20px, icon becomes 20px */
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## Quick Decision Guide
|
|
618
|
+
|
|
619
|
+
**Choose sizing hook based on element type:**
|
|
620
|
+
|
|
621
|
+
| Element Type | Recommended Hook | Why |
|
|
622
|
+
| --------------- | -------------------------- | ------------------------------ |
|
|
623
|
+
| Tiny status dot | `sizing-2` or `sizing-3` | Minimal visual indicator |
|
|
624
|
+
| Small icon | `sizing-4` | Compact icon |
|
|
625
|
+
| Standard icon | `sizing-5` | Default icon size |
|
|
626
|
+
| Large icon | `sizing-7` | Prominent icon |
|
|
627
|
+
| Icon button | `sizing-9` | Touch-friendly circular button |
|
|
628
|
+
| Small avatar | `sizing-7` | Compact profile image |
|
|
629
|
+
| Standard avatar | `sizing-9` or `sizing-10` | Default profile size |
|
|
630
|
+
| Large avatar | `sizing-11` or `sizing-12` | Hero profile image |
|
|
631
|
+
| Modal width | `sizing-15` or `sizing-16` | Content container |
|
|
632
|
+
| Sidebar width | `sizing-13` or `sizing-14` | Side panel |
|
|
633
|
+
|
|
634
|
+
**Choose border sizing based on emphasis:**
|
|
635
|
+
|
|
636
|
+
| Border Context | Hook | Why |
|
|
637
|
+
| ------------------ | -------------------------------------- | -------------------- |
|
|
638
|
+
| Standard borders | `sizing-border-1` | Default, subtle |
|
|
639
|
+
| Emphasized borders | `sizing-border-2` | Noticeable |
|
|
640
|
+
| Accent borders | `sizing-border-3` or `sizing-border-4` | Strong visual weight |
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## Complete Hook Reference
|
|
645
|
+
|
|
646
|
+
**General Sizing (16 hooks):**
|
|
647
|
+
|
|
648
|
+
- `--slds-g-sizing-1` through `--slds-g-sizing-16`
|
|
649
|
+
|
|
650
|
+
**Border Sizing (4 hooks):**
|
|
651
|
+
|
|
652
|
+
- `--slds-g-sizing-border-1` through `--slds-g-sizing-border-4`
|
|
653
|
+
|
|
654
|
+
**Typography Width (6 hooks):**
|
|
655
|
+
|
|
656
|
+
- `--slds-g-sizing-content-1/2/3` (content width)
|
|
657
|
+
- `--slds-g-sizing-heading-1/2/3` (heading width)
|
|
658
|
+
|
|
659
|
+
**Total: 26 sizing hooks**
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
**References:**
|
|
664
|
+
|
|
665
|
+
- Source: `/source-data/sds-metadata/styling-hooks/globalstylinghooks.metadata.json`
|
|
666
|
+
- Source: `/source-data/final-ux-guidance/styling-hooks/spacing-and-sizing/spacing-and-sizing-hooks.md`
|
|
667
|
+
- SLDS Documentation: [Spacing & Sizing](https://www.lightningdesignsystem.com/2e1ef8501/p/03d6b0-spacing-and-sizing)
|