@amedia/brick-mcp 1.0.3 → 1.0.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/data/components/brick-helloworld.md +112 -143
- package/data/components/brick-icon.md +92 -139
- package/data/components/brick-icons.md +114 -318
- package/data/components/brick-mcp.md +104 -161
- package/data/components/brick-template.md +145 -146
- package/data/components-metadata.json +31 -31
- package/data/tokens.json +232 -227
- package/dist/data/components/brick-helloworld.md +112 -143
- package/dist/data/components/brick-icon.md +92 -139
- package/dist/data/components/brick-icons.md +114 -318
- package/dist/data/components/brick-mcp.md +104 -161
- package/dist/data/components/brick-template.md +145 -146
- package/dist/data/components-metadata.json +31 -31
- package/dist/data/tokens.json +232 -227
- package/dist/http.js +4 -2
- package/dist/http.js.map +3 -3
- package/dist/index.js +4 -2
- package/dist/index.js.map +3 -3
- package/package.json +34 -34
- package/scripts/check-docs-versions.js +10 -3
- package/scripts/generate-data.js +2 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brick-icon
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.4.1
|
|
4
4
|
selector: brick-icon-v2
|
|
5
5
|
category: Media
|
|
6
|
-
tags: [icon, svg, graphics, accessibility, sprite, visual]
|
|
6
|
+
tags: [icon, svg, graphics, accessibility, sprite, visual, aria, breaking-news, pulse-animation]
|
|
7
7
|
use_cases:
|
|
8
8
|
[
|
|
9
9
|
all-ui,
|
|
@@ -18,60 +18,65 @@ related: [brick-button, brick-pill, brick-avatar]
|
|
|
18
18
|
|
|
19
19
|
# Brick Icon
|
|
20
20
|
|
|
21
|
-
A lightweight Web Component for rendering SVG icons from an embedded SVG sprite with built-in accessibility
|
|
21
|
+
A lightweight Web Component for rendering SVG icons from an embedded SVG sprite with built-in accessibility handling.
|
|
22
22
|
|
|
23
23
|
## Key Capabilities
|
|
24
24
|
|
|
25
|
-
- Renders icons from an inline SVG sprite using
|
|
26
|
-
- Automatic accessibility
|
|
27
|
-
- Dynamic icon switching via attribute changes
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- Framework-agnostic Web Component
|
|
25
|
+
- Renders icons from an inline SVG sprite sheet using symbol IDs
|
|
26
|
+
- Automatic accessibility: hides decorative icons from screen readers, exposes meaningful icons with configurable text
|
|
27
|
+
- Dynamic icon and text switching via observed attribute changes at runtime
|
|
28
|
+
- Predefined size control (`small`/`medium`) through data attributes, with full CSS custom property override support
|
|
29
|
+
- Customizable color via CSS custom properties (inherits `currentColor` by default)
|
|
30
|
+
- Built-in pulse animation for breaking news icon (`pill-breaking`), with `color-mix()` for modern browsers and legacy fallback
|
|
32
31
|
|
|
33
32
|
## Props/Attributes
|
|
34
33
|
|
|
35
|
-
| Attribute | Type | Default
|
|
36
|
-
| ---------------- | ----------------------------- |
|
|
37
|
-
| `data-icon-id` | string |
|
|
38
|
-
| `data-icon-text` | string |
|
|
39
|
-
| `data-icon-size` | 'small' \| 'medium' \| string |
|
|
34
|
+
| Attribute | Type | Default | Required | Description |
|
|
35
|
+
| ---------------- | ----------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
36
|
+
| `data-icon-id` | string | `""` | yes | The ID of the `<symbol>` element inside the embedded SVG sprite. Determines which icon is rendered via `<use href="#id">`. |
|
|
37
|
+
| `data-icon-text` | string | `""` | no | Screen reader announcement text. When provided, the SVG gets `role="graphics-symbol"` and a `<title>` element linked via `aria-labelledby`. When omitted, the SVG is hidden from assistive technology with `aria-hidden="true"`. |
|
|
38
|
+
| `data-icon-size` | `'small'` \| `'medium'` \| string | `""` | no | Predefined size for the icon. `'small'` maps to the `--brick-sizes-iconS` token (typically 12px). `'medium'` maps to `--brick-sizes-iconM` token (typically 24px). Custom string values are accepted but require corresponding CSS variable overrides to take effect. |
|
|
40
39
|
|
|
41
|
-
##
|
|
40
|
+
## Usage
|
|
42
41
|
|
|
43
|
-
###
|
|
42
|
+
### Server-side rendering (preferred)
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
Import the render function from the `/template` submodule and call it to produce an HTML string:
|
|
46
45
|
|
|
47
|
-
```
|
|
48
|
-
|
|
46
|
+
```ts
|
|
47
|
+
import { renderBrickIcon } from '@amedia/brick-icon/template';
|
|
48
|
+
|
|
49
|
+
const html = renderBrickIcon({
|
|
50
|
+
dataIconId: 'play',
|
|
51
|
+
dataIconText: 'Play video',
|
|
52
|
+
dataIconSize: 'medium',
|
|
53
|
+
});
|
|
49
54
|
```
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
The returned HTML is a fully formed `<brick-icon-v2>` custom element with `is-rendered` and `brick-component="brick-icon"` attributes, ready for hydration on the client.
|
|
52
57
|
|
|
53
|
-
|
|
58
|
+
Decorative icon (hidden from screen readers):
|
|
54
59
|
|
|
55
|
-
```
|
|
56
|
-
|
|
60
|
+
```ts
|
|
61
|
+
import { renderBrickIcon } from '@amedia/brick-icon/template';
|
|
62
|
+
|
|
63
|
+
const html = renderBrickIcon({
|
|
64
|
+
dataIconId: 'chevron-right',
|
|
65
|
+
dataIconSize: 'small',
|
|
66
|
+
});
|
|
57
67
|
```
|
|
58
68
|
|
|
59
|
-
###
|
|
69
|
+
### Client-side (declarative HTML)
|
|
60
70
|
|
|
61
|
-
|
|
71
|
+
Use the custom element directly in HTML after registering the component:
|
|
62
72
|
|
|
63
73
|
```html
|
|
64
|
-
<brick-icon-
|
|
65
|
-
data-icon-id="search"
|
|
66
|
-
data-icon-text="Search"
|
|
67
|
-
data-icon-size="small"
|
|
68
|
-
>
|
|
69
|
-
</brick-icon-v2>
|
|
70
|
-
```
|
|
74
|
+
<script type="module" src="https://assets.acdn.no/pkg/@amedia/brick-icon/v2/brick-icon.js"></script>
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
<brick-icon-v2 data-icon-id="play" data-icon-text="Play video"></brick-icon-v2>
|
|
77
|
+
```
|
|
73
78
|
|
|
74
|
-
Decorative icon alongside text (
|
|
79
|
+
Decorative icon alongside visible text (no `data-icon-text` needed):
|
|
75
80
|
|
|
76
81
|
```html
|
|
77
82
|
<button>
|
|
@@ -80,52 +85,23 @@ Decorative icon alongside text (hidden from screen readers):
|
|
|
80
85
|
</button>
|
|
81
86
|
```
|
|
82
87
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
Special icon with pulse animation:
|
|
88
|
+
Sized icon:
|
|
86
89
|
|
|
87
90
|
```html
|
|
88
|
-
<brick-icon-v2
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
### Client-Side Rendering
|
|
95
|
-
|
|
96
|
-
```javascript
|
|
97
|
-
import '@amedia/brick-icon';
|
|
98
|
-
|
|
99
|
-
// The custom element defines itself automatically
|
|
100
|
-
const icon = document.createElement('brick-icon-v2');
|
|
101
|
-
icon.setAttribute('data-icon-id', 'chevron-right');
|
|
102
|
-
icon.setAttribute('data-icon-text', 'Navigate right');
|
|
103
|
-
document.body.appendChild(icon);
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Server-Side Rendering
|
|
107
|
-
|
|
108
|
-
```javascript
|
|
109
|
-
import { renderBrickIcon } from '@amedia/brick-icon/template';
|
|
110
|
-
|
|
111
|
-
const html = renderBrickIcon({
|
|
112
|
-
dataIconId: 'play',
|
|
113
|
-
dataIconText: 'Play video',
|
|
114
|
-
dataIconSize: 'medium',
|
|
115
|
-
});
|
|
91
|
+
<brick-icon-v2
|
|
92
|
+
data-icon-id="search"
|
|
93
|
+
data-icon-text="Search"
|
|
94
|
+
data-icon-size="small"
|
|
95
|
+
></brick-icon-v2>
|
|
116
96
|
```
|
|
117
97
|
|
|
118
|
-
### Dynamic
|
|
98
|
+
### Dynamic attribute changes
|
|
119
99
|
|
|
120
|
-
|
|
100
|
+
Both `data-icon-id` and `data-icon-text` are observed attributes. Changing them at runtime updates the rendered SVG immediately without re-creating the element:
|
|
121
101
|
|
|
122
|
-
```
|
|
102
|
+
```js
|
|
123
103
|
const icon = document.querySelector('brick-icon-v2');
|
|
124
|
-
|
|
125
|
-
// Update icon ID
|
|
126
104
|
icon.setAttribute('data-icon-id', 'chevron-up');
|
|
127
|
-
|
|
128
|
-
// Update screen reader text
|
|
129
105
|
icon.setAttribute('data-icon-text', 'Collapse section');
|
|
130
106
|
```
|
|
131
107
|
|
|
@@ -133,7 +109,7 @@ icon.setAttribute('data-icon-text', 'Collapse section');
|
|
|
133
109
|
|
|
134
110
|
### SVG Sprite Requirement
|
|
135
111
|
|
|
136
|
-
brick-icon requires an SVG sprite to be embedded in the HTML page. The sprite must contain `<symbol>` elements
|
|
112
|
+
`brick-icon` requires an SVG sprite to be embedded in the HTML page. The sprite must contain `<symbol>` elements whose `id` attributes match the `data-icon-id` values used on the component.
|
|
137
113
|
|
|
138
114
|
```html
|
|
139
115
|
<svg style="display: none;">
|
|
@@ -146,32 +122,24 @@ brick-icon requires an SVG sprite to be embedded in the HTML page. The sprite mu
|
|
|
146
122
|
</svg>
|
|
147
123
|
```
|
|
148
124
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
### Why Inline SVG Sprite
|
|
152
|
-
|
|
153
|
-
- Eliminates additional network requests
|
|
154
|
-
- Simpler implementation without asynchronous loading
|
|
155
|
-
- Icons available immediately when HTML is parsed
|
|
156
|
-
- Better perceived performance
|
|
157
|
-
- Optimal for small to medium icon sets
|
|
125
|
+
The `@amedia/brick-icons` package provides theme-specific SVG sprites maintained in Figma.
|
|
158
126
|
|
|
159
127
|
## Accessibility
|
|
160
128
|
|
|
161
|
-
### Automatic ARIA
|
|
129
|
+
### Automatic ARIA handling
|
|
162
130
|
|
|
163
|
-
- **With `data-icon-text`**:
|
|
164
|
-
- **Without `data-icon-text`**:
|
|
131
|
+
- **With `data-icon-text`**: The inner `<svg>` receives `role="graphics-symbol"` and `aria-labelledby` pointing to a `<title>` element that contains the provided text. Screen readers announce the icon text.
|
|
132
|
+
- **Without `data-icon-text`**: The inner `<svg>` receives `aria-hidden="true"`, completely hiding the icon from the accessibility tree. Use this for decorative icons or when adjacent visible text already conveys the meaning.
|
|
165
133
|
|
|
166
|
-
###
|
|
134
|
+
### Reduced motion
|
|
167
135
|
|
|
168
|
-
|
|
136
|
+
The breaking news pulse animation respects `prefers-reduced-motion` and disables itself when the user preference is set.
|
|
169
137
|
|
|
170
|
-
### Best
|
|
138
|
+
### Best practices
|
|
171
139
|
|
|
172
|
-
- Omit `data-icon-text` for decorative icons or when
|
|
173
|
-
- Always provide `data-icon-text` for standalone
|
|
174
|
-
- Ensure color contrast meets WCAG 2.1 AA
|
|
140
|
+
- Omit `data-icon-text` for purely decorative icons or when surrounding text provides the same information.
|
|
141
|
+
- Always provide `data-icon-text` for standalone meaningful icons (e.g., an icon-only button must have icon text or an `aria-label` on the button).
|
|
142
|
+
- Ensure color contrast meets WCAG 2.1 AA when customizing icon colors.
|
|
175
143
|
|
|
176
144
|
## Styling
|
|
177
145
|
|
|
@@ -180,22 +148,22 @@ Icons include `aria-labelledby` attributes for proper announcement in Safari wit
|
|
|
180
148
|
| Property | Description | Default |
|
|
181
149
|
| ------------------------------------ | ----------------------------------------- | ------------------------------------------ |
|
|
182
150
|
| `--b-icon-color` | Icon fill color | `currentColor` |
|
|
183
|
-
| `--b-icon-size` | Container size (height)
|
|
184
|
-
| `--b-icon-svg-width` | SVG element width |
|
|
185
|
-
| `--b-icon-svg-height` | SVG element height |
|
|
151
|
+
| `--b-icon-size` | Container and default SVG size (height) | `var(--brick-sizes-iconM)` (24px) |
|
|
152
|
+
| `--b-icon-svg-width` | SVG element width | Inherits from `--b-icon-size` |
|
|
153
|
+
| `--b-icon-svg-height` | SVG element height | Inherits from `--b-icon-size` |
|
|
186
154
|
| `--b-icon-color-breaking-pulseStart` | Breaking icon pulse animation start color | `var(--brick-colors-pillNonePulseStartBg)` |
|
|
187
155
|
| `--b-icon-color-breaking-pulseEnd` | Breaking icon pulse animation end color | `var(--brick-colors-pillNonePulseEndBg)` |
|
|
188
156
|
|
|
189
|
-
### Custom
|
|
157
|
+
### Custom sizing example
|
|
190
158
|
|
|
191
159
|
```css
|
|
192
|
-
brick-icon-v2[data-icon-id=
|
|
160
|
+
brick-icon-v2[data-icon-id="custom-large"] {
|
|
193
161
|
--b-icon-svg-width: 48px;
|
|
194
162
|
--b-icon-svg-height: 48px;
|
|
195
163
|
}
|
|
196
164
|
```
|
|
197
165
|
|
|
198
|
-
### Color
|
|
166
|
+
### Color customization
|
|
199
167
|
|
|
200
168
|
```css
|
|
201
169
|
brick-icon-v2 {
|
|
@@ -203,26 +171,7 @@ brick-icon-v2 {
|
|
|
203
171
|
}
|
|
204
172
|
```
|
|
205
173
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
### Icon with Adjacent Text
|
|
209
|
-
|
|
210
|
-
```html
|
|
211
|
-
<a href="/search">
|
|
212
|
-
<brick-icon-v2 data-icon-id="search"></brick-icon-v2>
|
|
213
|
-
Search
|
|
214
|
-
</a>
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### Icon-Only Button
|
|
218
|
-
|
|
219
|
-
```html
|
|
220
|
-
<button aria-label="Close dialog">
|
|
221
|
-
<brick-icon-v2 data-icon-id="close" data-icon-text="Close"> </brick-icon-v2>
|
|
222
|
-
</button>
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### Responsive Icon Sizing
|
|
174
|
+
### Responsive sizing
|
|
226
175
|
|
|
227
176
|
```css
|
|
228
177
|
brick-icon-v2 {
|
|
@@ -238,37 +187,41 @@ brick-icon-v2 {
|
|
|
238
187
|
|
|
239
188
|
## Technical Details
|
|
240
189
|
|
|
241
|
-
- **
|
|
242
|
-
- **
|
|
243
|
-
- **
|
|
244
|
-
- **
|
|
245
|
-
- **Observed
|
|
246
|
-
- **Mirrored
|
|
190
|
+
- **Package version**: `2.4.1`
|
|
191
|
+
- **Custom Element tag**: `brick-icon-v2` -- must match the `selector` in frontmatter; the tag uses only the **major** version, not the full semver
|
|
192
|
+
- **Base class**: `BrickElement` (from `@amedia/brick-template`)
|
|
193
|
+
- **Dependencies**: `@amedia/brick-tokens@6.2.2`, `@amedia/brick-template@2.1.0`
|
|
194
|
+
- **Observed attributes** (trigger `attributeChangedCallback`): `data-icon-id`, `data-icon-text`
|
|
195
|
+
- **Mirrored props**: `data-icon-id`, `data-icon-text`, `data-icon-size`
|
|
196
|
+
- **SSR submodule**: `@amedia/brick-icon/template` exports `renderBrickIcon`, `iconStyle`, `iconContainerStyle`
|
|
197
|
+
- **Build target**: ES2020 + Safari 15
|
|
247
198
|
|
|
248
199
|
## Important Notes
|
|
249
200
|
|
|
250
|
-
###
|
|
201
|
+
### SVG sprite must be present in the DOM
|
|
202
|
+
|
|
203
|
+
The component references icons via `<use href="#iconId">`. If the SVG sprite containing the corresponding `<symbol>` is not embedded in the page, no icon will be visible. There is no external sprite loading or error indication.
|
|
251
204
|
|
|
252
|
-
Version 2
|
|
205
|
+
### Version 2 breaking changes (from v1)
|
|
253
206
|
|
|
254
|
-
-
|
|
255
|
-
- Requires embedded SVG sprite in HTML (
|
|
256
|
-
-
|
|
257
|
-
-
|
|
207
|
+
- Tag name changed to `brick-icon-v2` (previously `brick-icon`)
|
|
208
|
+
- Requires embedded SVG sprite in HTML (external sprite loading was removed)
|
|
209
|
+
- The `theme` property was removed
|
|
210
|
+
- CommonJS build was removed; ESM only
|
|
258
211
|
|
|
259
|
-
### Size
|
|
212
|
+
### Size control
|
|
260
213
|
|
|
261
|
-
The `data-icon-size` attribute
|
|
214
|
+
The `data-icon-size` attribute triggers predefined CSS overrides:
|
|
262
215
|
|
|
263
|
-
- `small`: Uses `--brick-sizes-iconS` token (
|
|
264
|
-
- `medium`: Uses `--brick-sizes-iconM` token (
|
|
216
|
+
- `small`: Uses `--brick-sizes-iconS` token (fallback 12px)
|
|
217
|
+
- `medium`: Uses `--brick-sizes-iconM` token (fallback 24px)
|
|
265
218
|
|
|
266
|
-
For
|
|
219
|
+
For sizes outside these presets, use CSS custom properties directly.
|
|
267
220
|
|
|
268
|
-
### Breaking
|
|
221
|
+
### Breaking news animation
|
|
269
222
|
|
|
270
|
-
The icon with `data-icon-id="pill-breaking"`
|
|
223
|
+
The icon with `data-icon-id="pill-breaking"` has a pulse animation. Since version 2.4.0, the animation uses CSS `color-mix()` on browsers that support it, with an automatic fallback to dedicated pulse color variables (`--b-icon-color-breaking-pulseStart`, `--b-icon-color-breaking-pulseEnd`) for older browsers. The animation is disabled when the user has `prefers-reduced-motion` enabled.
|
|
271
224
|
|
|
272
|
-
|
|
225
|
+
### `data-icon-size` is not an observed attribute
|
|
273
226
|
|
|
274
|
-
|
|
227
|
+
Only `data-icon-id` and `data-icon-text` are in the `observedAttributes` list. Changing `data-icon-size` after the element has connected does not trigger an automatic re-render of size styles. Set it before the element connects, or update the CSS custom properties directly.
|