@symbo.ls/mcp 1.0.10 → 1.0.13
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/README.md +1 -0
- package/package.json +5 -2
- package/symbols_mcp/skills/AUDIT.md +148 -174
- package/symbols_mcp/skills/BRAND_IDENTITY.md +75 -0
- package/symbols_mcp/skills/COMPONENTS.md +266 -0
- package/symbols_mcp/skills/COOKBOOK.md +850 -0
- package/symbols_mcp/skills/DEFAULT_COMPONENTS.md +3491 -1637
- package/symbols_mcp/skills/DEFAULT_LIBRARY.md +301 -0
- package/symbols_mcp/skills/DESIGN_CRITIQUE.md +70 -59
- package/symbols_mcp/skills/DESIGN_DIRECTION.md +109 -175
- package/symbols_mcp/skills/DESIGN_SYSTEM.md +722 -0
- package/symbols_mcp/skills/DESIGN_SYSTEM_ARCHITECT.md +65 -57
- package/symbols_mcp/skills/DESIGN_TO_CODE.md +83 -64
- package/symbols_mcp/skills/DESIGN_TREND.md +62 -50
- package/symbols_mcp/skills/FIGMA_MATCHING.md +69 -58
- package/symbols_mcp/skills/LEARNINGS.md +374 -0
- package/symbols_mcp/skills/MARKETING_ASSETS.md +71 -59
- package/symbols_mcp/skills/MIGRATION.md +561 -0
- package/symbols_mcp/skills/PATTERNS.md +536 -0
- package/symbols_mcp/skills/PRESENTATION.md +78 -0
- package/symbols_mcp/skills/PROJECT_STRUCTURE.md +398 -0
- package/symbols_mcp/skills/RULES.md +519 -0
- package/symbols_mcp/skills/RUNNING_APPS.md +476 -0
- package/symbols_mcp/skills/SEO-METADATA.md +64 -9
- package/symbols_mcp/skills/SNIPPETS.md +598 -0
- package/symbols_mcp/skills/SSR-BRENDER.md +99 -0
- package/symbols_mcp/skills/SYNTAX.md +835 -0
- package/symbols_mcp/skills/ACCESSIBILITY.md +0 -471
- package/symbols_mcp/skills/ACCESSIBILITY_AUDITORY.md +0 -70
- package/symbols_mcp/skills/AGENT_INSTRUCTIONS.md +0 -265
- package/symbols_mcp/skills/BRAND_INDENTITY.md +0 -69
- package/symbols_mcp/skills/BUILT_IN_COMPONENTS.md +0 -304
- package/symbols_mcp/skills/CLAUDE.md +0 -2158
- package/symbols_mcp/skills/CLI_QUICK_START.md +0 -205
- package/symbols_mcp/skills/DEFAULT_DESIGN_SYSTEM.md +0 -496
- package/symbols_mcp/skills/DESIGN_SYSTEM_CONFIG.md +0 -487
- package/symbols_mcp/skills/DESIGN_SYSTEM_IN_PROPS.md +0 -136
- package/symbols_mcp/skills/DOMQL_v2-v3_MIGRATION.md +0 -236
- package/symbols_mcp/skills/MIGRATE_TO_SYMBOLS.md +0 -634
- package/symbols_mcp/skills/OPTIMIZATIONS_FOR_AGENT.md +0 -253
- package/symbols_mcp/skills/PROJECT_SETUP.md +0 -217
- package/symbols_mcp/skills/QUICKSTART.md +0 -79
- package/symbols_mcp/skills/REMOTE_PREVIEW.md +0 -144
- package/symbols_mcp/skills/SYMBOLS_LOCAL_INSTRUCTIONS.md +0 -1405
- package/symbols_mcp/skills/THE_PRESENTATION.md +0 -69
- package/symbols_mcp/skills/UI_UX_PATTERNS.md +0 -68
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Component API Reference
|
|
2
|
+
|
|
3
|
+
Use flattened props (no `props` wrapper). CSS props go at the top level. Events use `onX` syntax.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Built-in Atoms
|
|
8
|
+
|
|
9
|
+
| Atom | HTML Tag | Props | Example |
|
|
10
|
+
|------|----------|-------|---------|
|
|
11
|
+
| `Text` | `<span>` | `text`, `color`, `fontSize`, `fontWeight`, `lineHeight`, `letterSpacing`, `textTransform`, `textDecoration`, `textAlign`, `maxWidth`, `overflow`, `whiteSpace` | `Text: { text: 'Hello', fontSize: 'B', color: 'title' }` |
|
|
12
|
+
| `Box` | `<div>` | `padding`, `margin`, `border`, `borderRadius`, `background`, `shadow`, `width`, `height`, `minWidth`, `maxWidth`, `minHeight`, `maxHeight`, `position`, `inset`, `top`, `right`, `bottom`, `left`, `overflow`, `zIndex` | `Box: { padding: 'A B', background: 'surface', borderRadius: 'B' }` |
|
|
13
|
+
| `Flex` | `<div>` | `flow`/`flexFlow`, `align`, `alignItems`, `justifyContent`, `gap`, `flex`, `flexGrow`, `flexShrink`, `flexBasis`, `wrap` | `Flex: { flow: 'y', align: 'center space-between', gap: 'B' }` |
|
|
14
|
+
| `Grid` | `<div>` | `columns`/`gridTemplateColumns`, `rows`/`gridTemplateRows`, `gap`, `columnGap`, `rowGap`, `gridAutoFlow`, `gridAutoColumns`, `gridAutoRows` | `Grid: { columns: 'repeat(3, 1fr)', gap: 'A' }` |
|
|
15
|
+
| `Link` | `<a>` | `href`, `target`, `rel`, `text`, `color`, `textDecoration`, `onClick` | `Link: { text: 'Docs', href: '/docs' }` |
|
|
16
|
+
| `Input` | `<input>` | `type`, `name`, `value`, `placeholder`, `required`, `disabled`, `onInput`, `onChange`, `onKeydown`, `padding`, `background`, `border`, `round` | `Input: { type: 'text', name: 'title', placeholder: 'Enter title' }` |
|
|
17
|
+
| `Radio` | `<input>` | `name`, `value`, `checked`, `disabled`, `onChange` | `Radio: { name: 'opt', value: 'a' }` |
|
|
18
|
+
| `Checkbox` | `<input>` | `name`, `value`, `checked`, `disabled`, `onChange` | `Checkbox: { name: 'agree', checked: true }` |
|
|
19
|
+
| `Svg` | `<svg>` | `html` (inline SVG markup), `width`, `height`, `viewBox`, `fill`, `stroke`. For non-icon SVGs only (decorative/structural). Use `Icon` for icons. | `Svg: { html: '<path d="..." />', viewBox: '0 0 24 24', width: '22', height: '22' }` |
|
|
20
|
+
| `Icon` | `<svg>` | `name` (sprite symbol id), `size`/`boxSize`, `color` | `Icon: { name: 'chevronRight', boxSize: 'A' }` |
|
|
21
|
+
| `IconText` | `<div>` | `icon`, `text`, `gap`, `align`, `color` | `IconText: { icon: 'search', text: 'Search', gap: 'Z' }` |
|
|
22
|
+
| `Button` | `<button>` | `text`, `icon`, `type`, `disabled`, `theme`, `padding`, `round`, `onClick`, `onSubmit` | `Button: { text: 'Save', theme: 'primary', type: 'submit' }` |
|
|
23
|
+
| `Img` | `<img>` | `src`, `alt`, `loading`, `width`, `height`, `boxSize`, `objectFit` | `Img: { src: '/logo.png', alt: 'Logo', boxSize: 'B' }` |
|
|
24
|
+
| `Iframe` | `<iframe>` | `src`, `width`, `height` | `Iframe: { src: 'https://example.com', width: '100%', height: '300px' }` |
|
|
25
|
+
| `Video` | `<video>` | `src`, `controls`, `width`, `height` | `Video: { src: '/demo.mp4', controls: true, width: '100%' }` |
|
|
26
|
+
|
|
27
|
+
### Img — file resolution
|
|
28
|
+
|
|
29
|
+
If `src` is not a valid URL, it resolves via `context.files[filename]`. Paths starting with `/files/` have the prefix stripped automatically (`/files/logo.png` looks up `"logo.png"` in context.files).
|
|
30
|
+
|
|
31
|
+
### Svg rule
|
|
32
|
+
|
|
33
|
+
Use `Icon` (not `Svg`) for icons. `Icon: { name: 'iconName' }` references `designSystem.icons`. Use `Svg` only for decorative/structural SVGs that are not icons.
|
|
34
|
+
|
|
35
|
+
### Picture
|
|
36
|
+
|
|
37
|
+
**CRITICAL**: `<picture>` does NOT support `src`. Never put `src` on Picture — it is silently ignored. Always put `src` on the `Img` child.
|
|
38
|
+
|
|
39
|
+
The Picture `Img` child can also read `src` from `element.parent.props.src` or `state.src`.
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
// Basic
|
|
43
|
+
Picture: {
|
|
44
|
+
Img: { src: '/files/photo.jpg' },
|
|
45
|
+
width: '100%',
|
|
46
|
+
aspectRatio: '16/9'
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Theme-aware sources
|
|
50
|
+
Picture: {
|
|
51
|
+
extends: 'Picture',
|
|
52
|
+
Img: { src: '/files/map-dark.svg' },
|
|
53
|
+
'@dark': { srcset: '/files/map-dark.svg' },
|
|
54
|
+
'@light': { srcset: '/files/map-light.svg' }
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Cross-cutting Props (all atoms)
|
|
61
|
+
|
|
62
|
+
All atoms support these additional features:
|
|
63
|
+
|
|
64
|
+
| Feature | Syntax |
|
|
65
|
+
|---------|--------|
|
|
66
|
+
| Media queries | `@mobile`, `@tablet`, `@tabletSm`, `@dark`, `@light` |
|
|
67
|
+
| Pseudo selectors | `:hover`, `:active`, `:focus-visible` |
|
|
68
|
+
| Conditional cases | `.isActive`, `.disabled`, `.hidden`, `!isActive` |
|
|
69
|
+
| Child overrides | `childProps` — one-level child overrides |
|
|
70
|
+
| Children | `children` — arrays or nested object trees |
|
|
71
|
+
| Lifecycle events | `onInit`, `onRender`, `onUpdate`, `onStateUpdate` |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Typography
|
|
76
|
+
|
|
77
|
+
All accept a `text` prop.
|
|
78
|
+
|
|
79
|
+
| Component | Tag | Use |
|
|
80
|
+
|-----------|-----|-----|
|
|
81
|
+
| `H1`–`H6` | `<h1>`–`<h6>` | Semantic section headings |
|
|
82
|
+
| `P` | `<p>` | Body paragraph text |
|
|
83
|
+
| `Caption` | `<span>` | Small labels, hints |
|
|
84
|
+
| `Headline` | `<span>` | Display-size heading |
|
|
85
|
+
| `Subhead` | `<span>` | Sub-section text |
|
|
86
|
+
| `Footnote` | `<span>` | Footer reference text |
|
|
87
|
+
| `Strong` | `<strong>` | Bold inline emphasis |
|
|
88
|
+
| `Italic` | `<em>` | Italic inline emphasis |
|
|
89
|
+
| `U` | `<u>` | Underline inline emphasis |
|
|
90
|
+
|
|
91
|
+
```js
|
|
92
|
+
H2: { text: 'Section title' }
|
|
93
|
+
P: { text: 'Body copy goes here.' }
|
|
94
|
+
Caption: { text: 'Updated 3 days ago', color: 'caption' }
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Dividers
|
|
100
|
+
|
|
101
|
+
| Component | Use | Example |
|
|
102
|
+
|-----------|-----|---------|
|
|
103
|
+
| `Hr` | Horizontal rule | `Hr: { minWidth: 'F' }` |
|
|
104
|
+
| `HrLegend` | Divider with centered label | `HrLegend: { text: 'Or' }` |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Buttons
|
|
109
|
+
|
|
110
|
+
| Component | Use | Example |
|
|
111
|
+
|-----------|-----|---------|
|
|
112
|
+
| `IconButton` | Icon-only circular button | `IconButton: { Icon: { name: 'plus' }, theme: 'dialog' }` |
|
|
113
|
+
| `IconButtonSet` | Group of icon buttons | — |
|
|
114
|
+
| `CounterButton` | Button with notification badge | — |
|
|
115
|
+
| `CounterIconButton` | Icon button with positioned badge | — |
|
|
116
|
+
| `IconCounterButton` | Button with icon, label, and counter | — |
|
|
117
|
+
| `UploadButton` | Text button that opens file picker | — |
|
|
118
|
+
| `UploadIconButton` | Icon button that opens file picker | — |
|
|
119
|
+
| `SubmitButton` | Form submit button | `SubmitButton: { value: 'Create account' }` |
|
|
120
|
+
| `ButtonSet` | Group of buttons | `ButtonSet: { children: [{ text: 'Cancel' }, { text: 'Save', theme: 'primary' }] }` |
|
|
121
|
+
| `ConfirmationButtons` | Yes/No pair | `ConfirmationButtons: { children: [{ text: 'Cancel' }, { text: 'Delete', theme: 'warning' }] }` |
|
|
122
|
+
| `InputButton` | Input with inline submit button | `InputButton: { Input: { placeholder: 'Enter email' }, Button: { text: 'Sign up' } }` |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Avatar
|
|
127
|
+
|
|
128
|
+
| Component | Use | Example |
|
|
129
|
+
|-----------|-----|---------|
|
|
130
|
+
| `Avatar` | Single avatar image | `Avatar: { boxSize: 'C2' }` |
|
|
131
|
+
| `AvatarSet` | Overlapping group of avatars | — |
|
|
132
|
+
| `AvatarStatus` | Avatar with online/offline dot | `AvatarStatus: { Avatar: { boxSize: 'C' }, StatusDot: { theme: 'success' } }` |
|
|
133
|
+
| `AvatarHgroup` | Avatar + name + subtitle | `AvatarHgroup: { H: { text: 'Nika Tomadze' }, P: { text: 'Product Designer' } }` |
|
|
134
|
+
| `AvatarBadgeHgroup` | Avatar + heading + badge | — |
|
|
135
|
+
| `AvatarChatPreview` | Avatar + message preview row | `AvatarChatPreview: { H: { text: 'Design Team' }, P: { text: 'Can you join us today?' }, Value: { text: '2:20' } }` |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Badge & Notification
|
|
140
|
+
|
|
141
|
+
Themes: `primary`, `warning`, `success`, `transparent`, `bordered`, `dialog`, `field`
|
|
142
|
+
|
|
143
|
+
| Component | Use | Example |
|
|
144
|
+
|-----------|-----|---------|
|
|
145
|
+
| `Badge` | Colored label (status, category) | `Badge: { text: 'New', theme: 'primary' }` |
|
|
146
|
+
| `BadgeCaption` | Caption paired with badge | `BadgeCaption: { Caption: { text: 'Status' }, Badge: { text: 'Active', theme: 'success' } }` |
|
|
147
|
+
| `NotificationCounter` | Circular number badge | `NotificationCounter: { text: '5' }` |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Form & Input
|
|
152
|
+
|
|
153
|
+
| Component | Use | Example |
|
|
154
|
+
|-----------|-----|---------|
|
|
155
|
+
| `Field` | Styled input, optionally with trailing icon | `Field: { Input: { placeholder: 'Enter name' }, Icon: { icon: 'user' } }` |
|
|
156
|
+
| `FieldCaption` | Field with label above | `FieldCaption: { Caption: { text: 'Email' }, Field: { Input: { placeholder: 'you@example.com' } } }` |
|
|
157
|
+
| `IconInput` | Input with overlaid icon | — |
|
|
158
|
+
| `Select` | Native select | — |
|
|
159
|
+
| `SelectPicker` | Styled select with chevron | `SelectPicker: { Select: { children: [{ text: 'A', value: 'a' }, { text: 'B', value: 'b' }] } }` |
|
|
160
|
+
| `NumberPicker` | Increment/decrement control | — |
|
|
161
|
+
| `Search` | Search input with icon | `Search: { Input: { placeholder: 'Search…' } }` |
|
|
162
|
+
| `SearchDropdown` | Filterable dropdown with search | `SearchDropdown: { state: { data: ['New York', 'Los Angeles'] } }` |
|
|
163
|
+
| `TextareaIconButton` | Textarea with send button | `TextareaIconButton: { Textarea: { placeholder: 'Write a message…' } }` |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Composition
|
|
168
|
+
|
|
169
|
+
Pair a primary element (heading, icon, image) with text content or controls.
|
|
170
|
+
|
|
171
|
+
| Component | Use | Example |
|
|
172
|
+
|-----------|-----|---------|
|
|
173
|
+
| `ButtonHgroup` | Heading group + button | `ButtonHgroup: { H: { text: 'Upgrade plan' }, P: { text: 'Get all features' }, Button: { text: 'Upgrade' } }` |
|
|
174
|
+
| `IconHeading` | Icon + heading | — |
|
|
175
|
+
| `IconHgroup` | Large icon + heading group | — |
|
|
176
|
+
| `ImgHgroup` | Image + heading group | `ImgHgroup: { Img: { src: '/icon.png', boxSize: 'C' }, H: { text: 'Product' }, P: { text: 'Tagline' } }` |
|
|
177
|
+
| `SectionHeader` | Section header with icon buttons | `SectionHeader: { Hgroup: { H: { text: 'Activity' } }, IconButtonSet: { children: [{ Icon: { name: 'filter' } }] } }` |
|
|
178
|
+
| `ValueHeading` | Heading with trailing value/unit | `ValueHeading: { H: { tag: 'h6', text: 'Revenue' }, UnitValue: { Unit: { text: '$' }, Value: { text: '1,200' } } }` |
|
|
179
|
+
| `IconTextSet` | List of icon + text pairs | — |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Selection
|
|
184
|
+
|
|
185
|
+
Three flavors: **Check**, **Radio**, **Toggle** — each in caption, hgroup, and list variants.
|
|
186
|
+
|
|
187
|
+
| Component | Use | Example |
|
|
188
|
+
|-----------|-----|---------|
|
|
189
|
+
| `CheckCaption` | Checkbox + short label | `CheckCaption: { Caption: { text: 'Accept terms' } }` |
|
|
190
|
+
| `CheckHgroup` | Checkbox + title + description | — |
|
|
191
|
+
| `CheckCaptionList` | Stacked list of CheckCaption | — |
|
|
192
|
+
| `RadioCaption` | Radio + short label | — |
|
|
193
|
+
| `RadioHgroup` | Radio + title + description | — |
|
|
194
|
+
| `ToggleCaption` | Toggle switch + short label | — |
|
|
195
|
+
| `ToggleHgroup` | Toggle switch + title + desc | `ToggleHgroup: { H: { text: 'Email alerts' }, P: { text: 'Sent daily' } }` |
|
|
196
|
+
| `CheckStep` | Step with completion state | `CheckStep: { H6: { text: 'Verify email' }, Progress: { value: 1 } }` |
|
|
197
|
+
| `RadioStep` | Step with completion state | — |
|
|
198
|
+
|
|
199
|
+
```js
|
|
200
|
+
// ToggleHgroupList example
|
|
201
|
+
ToggleHgroupList: {
|
|
202
|
+
children: [
|
|
203
|
+
{ H: { text: 'Email alerts' }, P: { text: 'Sent daily' } },
|
|
204
|
+
{ H: { text: 'Push notifications' }, P: { text: 'Instant' } }
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Progress & Status
|
|
212
|
+
|
|
213
|
+
| Component | Use | Example |
|
|
214
|
+
|-----------|-----|---------|
|
|
215
|
+
| `Progress` | Linear progress bar (value 0–1) | `Progress: { value: 0.6, height: 'X', round: 'Y' }` |
|
|
216
|
+
| `CircleProgress` | Circular progress ring | `CircleProgress: { value: 0.73, boxSize: 'D' }` |
|
|
217
|
+
| `ValueProgress` | Progress bar + readable label | `ValueProgress: { Progress: { value: 0.73 }, UnitValue: { Value: { text: '73' }, Unit: { text: '%' } } }` |
|
|
218
|
+
| `ProgressStepSet` | Row of progress bars for steps | — |
|
|
219
|
+
| `StatusDot` | Small colored indicator dot | `StatusDot: { theme: 'success' }` |
|
|
220
|
+
| `Stars` | 5-star rating display | — |
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Navigation & Links
|
|
225
|
+
|
|
226
|
+
| Component | Use | Example |
|
|
227
|
+
|-----------|-----|---------|
|
|
228
|
+
| `Link` | Hyperlink | `Link: { text: 'Docs', href: '/docs' }` |
|
|
229
|
+
| `LinkSet` | Navigation list of links | `LinkSet: { tag: 'nav', children: [{ text: 'Home', href: '/' }, { text: 'Docs', href: '/docs' }] }` |
|
|
230
|
+
| `Breadcrumb` | Breadcrumb path navigation | `Breadcrumb: { tag: 'nav' }` |
|
|
231
|
+
| `TabSet` | Horizontal tab bar | `TabSet: { children: [{ text: 'Overview', isActive: true }, { text: 'Details' }] }` |
|
|
232
|
+
| `Pagination` | Numbered page controls | `Pagination: { Flex: { children: [{ text: '1', isActive: true }, { text: '2' }, { text: '3' }] } }` |
|
|
233
|
+
| `NavigationDots` | Dot indicators for carousels | — |
|
|
234
|
+
| `NavigationArrows` | Previous/next arrow buttons | — |
|
|
235
|
+
| `ScrollableList` | Vertically scrollable menu list | — |
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Overlay & Disclosure
|
|
240
|
+
|
|
241
|
+
| Component | Use | Example |
|
|
242
|
+
|-----------|-----|---------|
|
|
243
|
+
| `Modal` | Dialog overlay container | `Modal: { Hgroup: { H: { text: 'Confirm action' } }, IconButton: { Icon: { name: 'x' } } }` |
|
|
244
|
+
| `MessageModal` | Informational modal | — |
|
|
245
|
+
| `Accordion` | Expandable/collapsible section | `Accordion: { ButtonParagraph: { P: { text: 'How does billing work?' } }, P: { text: 'You are billed monthly…' } }` |
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Data Display
|
|
250
|
+
|
|
251
|
+
| Component | Use | Example |
|
|
252
|
+
|-----------|-----|---------|
|
|
253
|
+
| `UnitValue` | Unit + value pair (price, stat) | `UnitValue: { Unit: { text: '$' }, Value: { text: '99' } }` |
|
|
254
|
+
| `BulletCaption` | Caption with colored bullet dot | `BulletCaption: { text: 'Orders', ':before': { background: 'blue' } }` |
|
|
255
|
+
| `StoryCard` | Full-bleed image card with overlay | — |
|
|
256
|
+
| `ListingItem` | Post/listing row item | — |
|
|
257
|
+
| `UserNavbar` | User profile row in navbar | `UserNavbar: { H: { text: 'Nika Tomadze' }, P: { text: 'Product Designer' } }` |
|
|
258
|
+
| `LoadingGif` | Animated loading spinner | `LoadingGif: { opacity: '.5', boxSize: 'B' }` |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Misc
|
|
263
|
+
|
|
264
|
+
| Component | Use | Example |
|
|
265
|
+
|-----------|-----|---------|
|
|
266
|
+
| `Scrollbar` | Custom scrollbar with arrow navigation | `Scrollbar: { NavigationArrows: {} }` |
|