@adia-ai/web-components 0.6.4 → 0.6.7
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/CHANGELOG.md +28 -0
- package/USAGE.md +100 -5
- package/bin/doc.mjs +379 -0
- package/components/accordion/accordion.examples.md +49 -0
- package/components/action-list/action-list.examples.md +33 -0
- package/components/agent-artifact/agent-artifact.examples.md +28 -0
- package/components/agent-feedback-bar/agent-feedback-bar.examples.md +24 -0
- package/components/agent-questions/agent-questions.examples.md +13 -0
- package/components/agent-reasoning/agent-reasoning.examples.md +28 -0
- package/components/agent-suggestions/agent-suggestions.examples.md +19 -0
- package/components/agent-trace/agent-trace.examples.md +19 -0
- package/components/alert/alert.examples.md +19 -0
- package/components/aside/aside.examples.md +38 -0
- package/components/avatar/avatar.examples.md +19 -0
- package/components/badge/badge.examples.md +19 -0
- package/components/block/block.examples.md +29 -0
- package/components/breadcrumb/breadcrumb.examples.md +32 -0
- package/components/button/button.examples.md +19 -0
- package/components/calendar-picker/calendar-picker.examples.md +23 -0
- package/components/canvas/canvas.examples.md +49 -0
- package/components/card/card.examples.md +25 -0
- package/components/chart/chart.examples.md +19 -0
- package/components/chart-legend/chart-legend.examples.md +22 -0
- package/components/chat-thread/chat-thread.examples.md +35 -0
- package/components/check/check.examples.md +19 -0
- package/components/code/code.examples.md +31 -0
- package/components/col/col.examples.md +11 -0
- package/components/color-input/color-input.examples.md +19 -0
- package/components/color-picker/color-picker.examples.md +19 -0
- package/components/command/command.examples.md +58 -0
- package/components/demo-toggle/demo-toggle.examples.md +19 -0
- package/components/description-list/description-list.examples.md +37 -0
- package/components/divider/divider.examples.md +31 -0
- package/components/drawer/drawer.examples.md +63 -0
- package/components/embed/embed.examples.md +19 -0
- package/components/empty-state/empty-state.examples.md +21 -0
- package/components/feed/feed.examples.md +19 -0
- package/components/field/class.js +5 -4
- package/components/field/field.a2ui.json +9 -0
- package/components/field/field.css +10 -0
- package/components/field/field.d.ts +2 -0
- package/components/field/field.examples.md +29 -0
- package/components/field/field.test.js +43 -0
- package/components/field/field.yaml +11 -0
- package/components/fields/fields.examples.md +58 -0
- package/components/footer/footer.examples.md +18 -0
- package/components/grid/grid.examples.md +21 -0
- package/components/header/header.examples.md +32 -0
- package/components/heatmap/heatmap.examples.md +19 -0
- package/components/icon/icon.examples.md +19 -0
- package/components/image/image.examples.md +19 -0
- package/components/input/input.examples.md +21 -0
- package/components/inspector/inspector.examples.md +27 -0
- package/components/kbd/kbd.examples.md +29 -0
- package/components/link/link.examples.md +25 -0
- package/components/list/list.examples.md +33 -0
- package/components/menu/menu.examples.md +37 -0
- package/components/modal/modal.examples.md +43 -0
- package/components/nav/nav.examples.md +39 -0
- package/components/nav-group/nav-group.examples.md +35 -0
- package/components/nav-item/nav-item.examples.md +25 -0
- package/components/noodles/noodles.examples.md +30 -0
- package/components/option-card/option-card.examples.md +47 -0
- package/components/otp-input/otp-input.examples.md +19 -0
- package/components/page/page.examples.md +46 -0
- package/components/pagination/pagination.examples.md +19 -0
- package/components/pane/pane.examples.md +40 -0
- package/components/pipeline-status/pipeline-status.examples.md +19 -0
- package/components/popover/popover.examples.md +34 -0
- package/components/progress/progress.examples.md +19 -0
- package/components/progress-row/progress-row.examples.md +19 -0
- package/components/radio/radio.examples.md +19 -0
- package/components/range/range.examples.md +19 -0
- package/components/rating/rating.examples.md +19 -0
- package/components/richtext/richtext.examples.md +19 -0
- package/components/row/row.examples.md +11 -0
- package/components/search/search.examples.md +19 -0
- package/components/section/section.examples.md +37 -0
- package/components/segment/segment.examples.md +32 -0
- package/components/segmented/segmented.examples.md +31 -0
- package/components/select/select.examples.md +49 -0
- package/components/skeleton/skeleton.examples.md +19 -0
- package/components/slider/slider.examples.md +21 -0
- package/components/stack/stack.examples.md +10 -0
- package/components/stat/stat.examples.md +19 -0
- package/components/step-progress/step-progress.examples.md +19 -0
- package/components/stepper/stepper.examples.md +37 -0
- package/components/stream/stream.examples.md +19 -0
- package/components/swatch/swatch.examples.md +23 -0
- package/components/swiper/swiper.examples.md +139 -0
- package/components/switch/switch.examples.md +19 -0
- package/components/table/table.examples.md +19 -0
- package/components/table-toolbar/table-toolbar.examples.md +12 -0
- package/components/tabs/tabs.examples.md +49 -0
- package/components/tag/tag.examples.md +19 -0
- package/components/text/text.examples.md +19 -0
- package/components/textarea/textarea.examples.md +23 -0
- package/components/timeline/timeline.examples.md +35 -0
- package/components/toast/toast.examples.md +19 -0
- package/components/toggle-group/toggle-group.examples.md +33 -0
- package/components/toggle-scheme/toggle-scheme.examples.md +19 -0
- package/components/toolbar/toolbar.examples.md +46 -0
- package/components/tooltip/tooltip.examples.md +25 -0
- package/components/tree/tree.examples.md +57 -0
- package/components/upload/upload.examples.md +19 -0
- package/custom-elements.json +9012 -0
- package/package.json +7 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# divider — Examples
|
|
2
|
+
|
|
3
|
+
## horizontal (default)
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<p>Content above the divider</p>
|
|
7
|
+
<divider-ui></divider-ui>
|
|
8
|
+
<p>Content below the divider</p>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## with label
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<button-ui text="Sign in with Google" variant="outline" style="width:100%;"></button-ui>
|
|
15
|
+
<divider-ui label="or"></divider-ui>
|
|
16
|
+
<button-ui text="Sign in with Email" variant="outline" style="width:100%;"></button-ui>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## vertical
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<div style="display:flex; align-items:center; gap:var(--a-space-3); height:40px;">
|
|
23
|
+
<span>Home</span>
|
|
24
|
+
<divider-ui vertical></divider-ui>
|
|
25
|
+
<span>Products</span>
|
|
26
|
+
<divider-ui vertical></divider-ui>
|
|
27
|
+
<span>About</span>
|
|
28
|
+
<divider-ui vertical></divider-ui>
|
|
29
|
+
<span>Contact</span>
|
|
30
|
+
</div>
|
|
31
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# drawer — Examples
|
|
2
|
+
|
|
3
|
+
## Authoring
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<drawer-ui side="right" size="md">
|
|
7
|
+
<header>
|
|
8
|
+
<span slot="icon">
|
|
9
|
+
<avatar-ui icon="user"></avatar-ui>
|
|
10
|
+
</span>
|
|
11
|
+
<span slot="heading">
|
|
12
|
+
<text-ui strong>Profile</text-ui>
|
|
13
|
+
<badge-ui text="Pro" variant="accent"></badge-ui>
|
|
14
|
+
</span>
|
|
15
|
+
<span slot="description">
|
|
16
|
+
<text-ui color="subtle" size="sm">Update your account</text-ui>
|
|
17
|
+
</span>
|
|
18
|
+
</header>
|
|
19
|
+
<section>...</section>
|
|
20
|
+
<footer>
|
|
21
|
+
<grid-ui>
|
|
22
|
+
<button-ui text="Cancel" variant="ghost"></button-ui>
|
|
23
|
+
<button-ui text="Save" variant="primary"></button-ui>
|
|
24
|
+
</grid-ui>
|
|
25
|
+
</footer>
|
|
26
|
+
</drawer-ui>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## side
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<button-ui text="Left" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
|
|
33
|
+
<drawer-ui text="Navigation" side="left" size="sm">
|
|
34
|
+
<section>
|
|
35
|
+
<col-ui gap="1">
|
|
36
|
+
<button-ui text="Dashboard" icon="house" variant="ghost"></button-ui>
|
|
37
|
+
<button-ui text="Projects" icon="folder" variant="ghost"></button-ui>
|
|
38
|
+
<button-ui text="Settings" icon="gear" variant="ghost"></button-ui>
|
|
39
|
+
</col-ui>
|
|
40
|
+
</section>
|
|
41
|
+
</drawer-ui>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## size
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<button-ui text="Small" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
|
|
48
|
+
<drawer-ui text="Filters" side="right" size="sm">
|
|
49
|
+
<section>
|
|
50
|
+
<col-ui gap="2">
|
|
51
|
+
<field-ui label="In stock" inline>
|
|
52
|
+
<check-ui checked></check-ui>
|
|
53
|
+
</field-ui>
|
|
54
|
+
<field-ui label="On sale" inline>
|
|
55
|
+
<check-ui></check-ui>
|
|
56
|
+
</field-ui>
|
|
57
|
+
<field-ui label="Free shipping" inline>
|
|
58
|
+
<check-ui></check-ui>
|
|
59
|
+
</field-ui>
|
|
60
|
+
</col-ui>
|
|
61
|
+
</section>
|
|
62
|
+
</drawer-ui>
|
|
63
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# embed — Examples
|
|
2
|
+
|
|
3
|
+
## Default
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<embed-ui src="https://example.com"></embed-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## aspect
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<embed-ui src="https://example.com" aspect="16/9"></embed-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## height
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<embed-ui src="https://example.com" height="250"></embed-ui>
|
|
19
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# empty-state — Examples
|
|
2
|
+
|
|
3
|
+
## Basic
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<empty-state-ui heading="No items" description="There are no items to display yet."></empty-state-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## With Icon
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<empty-state-ui icon="magnifying-glass" heading="No results" description="Try adjusting your search or filter criteria."></empty-state-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## With Action
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<empty-state-ui icon="plus-circle" heading="No projects" description="Create your first project to get started.">
|
|
19
|
+
<button-ui slot="action" text="Create Project" variant="primary"></button-ui>
|
|
20
|
+
</empty-state-ui>
|
|
21
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# feed — Examples
|
|
2
|
+
|
|
3
|
+
## text
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<button-ui text="Post 'Saved.'" variant="outline" size="sm" onclick="customElements.whenDefined('feed-ui').then(()=>import('/packages/web-components/components/feed/feed.js').then(m=>m.UIFeed.post({text:'Saved.',variant:'success'})))"></button-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## variant
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<button-ui text="Default" variant="outline" size="sm" onclick="import('/packages/web-components/components/feed/feed.js').then(m=>m.UIFeed.post({text:'Default notification',variant:'default'}))"></button-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## position
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<button-ui text="Top Left" variant="outline" size="sm" onclick="import('/packages/web-components/components/feed/feed.js').then(m=>m.UIFeed.post({text:'Top left',variant:'info',position:'top-left'}))"></button-ui>
|
|
19
|
+
```
|
|
@@ -49,10 +49,11 @@ import { UIElement } from '../../core/element.js';
|
|
|
49
49
|
|
|
50
50
|
export class UIField extends UIElement {
|
|
51
51
|
static properties = {
|
|
52
|
-
label: { type: String, default: '',
|
|
53
|
-
hint: { type: String, default: '',
|
|
54
|
-
required: { type: Boolean, default: false,
|
|
55
|
-
inline: { type: Boolean, default: false,
|
|
52
|
+
label: { type: String, default: '', reflect: true },
|
|
53
|
+
hint: { type: String, default: '', reflect: true },
|
|
54
|
+
required: { type: Boolean, default: false, reflect: true },
|
|
55
|
+
inline: { type: Boolean, default: false, reflect: true },
|
|
56
|
+
align: { type: String, default: 'start', reflect: true },
|
|
56
57
|
};
|
|
57
58
|
|
|
58
59
|
// The validation message lives on the child control (UIFormElement.error
|
|
@@ -18,6 +18,15 @@
|
|
|
18
18
|
"type": "boolean",
|
|
19
19
|
"default": false
|
|
20
20
|
},
|
|
21
|
+
"align": {
|
|
22
|
+
"description": "Label alignment within its grid area. `start` (default) — label is left-aligned (leading edge). `end` — label is right-aligned (trailing edge), useful when stacking several `<field-ui>` in a form and aligning labels flush to the control column for better scanability.",
|
|
23
|
+
"type": "string",
|
|
24
|
+
"enum": [
|
|
25
|
+
"start",
|
|
26
|
+
"end"
|
|
27
|
+
],
|
|
28
|
+
"default": "start"
|
|
29
|
+
},
|
|
21
30
|
"component": {
|
|
22
31
|
"const": "Field"
|
|
23
32
|
},
|
|
@@ -158,4 +158,14 @@
|
|
|
158
158
|
:scope[inline]:has(> :is(switch-ui, check-ui, radio-ui)) > :not([slot]) {
|
|
159
159
|
justify-self: end;
|
|
160
160
|
}
|
|
161
|
+
/* ── Prop: align — label alignment within its grid area ── */
|
|
162
|
+
/* Default (start): label text is left-aligned (justify-self: start). */
|
|
163
|
+
/* align="end": label text is right-aligned within the label cell. */
|
|
164
|
+
/* Useful in multi-field forms where labels share a visual column */
|
|
165
|
+
/* and trailing-flush alignment aids scanability (right-to-input). */
|
|
166
|
+
:scope[align="end"] > [slot="label"] {
|
|
167
|
+
justify-self: end;
|
|
168
|
+
text-align: end;
|
|
169
|
+
}
|
|
170
|
+
|
|
161
171
|
}
|
|
@@ -15,6 +15,8 @@ import { UIElement } from '../../core/element.js';
|
|
|
15
15
|
export class UIField extends UIElement {
|
|
16
16
|
/** Renders a "*" marker on the label. Does not itself enforce validation — the slotted control's own `required` attr does that; this is a visual signal only. */
|
|
17
17
|
required: boolean;
|
|
18
|
+
/** Label alignment within its grid area. `start` (default) — label is left-aligned (leading edge). `end` — label is right-aligned (trailing edge), useful when stacking several `<field-ui>` in a form and aligning labels flush to the control column for better scanability. */
|
|
19
|
+
align: 'start' | 'end';
|
|
18
20
|
/** Help text rendered below the control in caption style. Wired into the slotted control's aria-describedby so screen readers announce it. Suppressed when `error` is set. */
|
|
19
21
|
hint: string;
|
|
20
22
|
/** Lay out label, trailing, control, and action on a single row instead of the stacked default (mode attribute — changes grid geometry, not tokens). Hint/error still render on their own row below. */
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# field — Examples
|
|
2
|
+
|
|
3
|
+
## Default layout
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<field-ui label="Email">
|
|
7
|
+
<input-ui type="email" placeholder="you@example.com"></input-ui>
|
|
8
|
+
</field-ui>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Inline layout
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<field-ui inline label="Search">
|
|
15
|
+
<input-ui type="search" placeholder="Type a command…"></input-ui>
|
|
16
|
+
</field-ui>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Any form control
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<field-ui label="Priority">
|
|
23
|
+
<select-ui>
|
|
24
|
+
<option value="low">Low</option>
|
|
25
|
+
<option value="med" selected>Medium</option>
|
|
26
|
+
<option value="high">High</option>
|
|
27
|
+
</select-ui>
|
|
28
|
+
</field-ui>
|
|
29
|
+
```
|
|
@@ -157,4 +157,47 @@ describe('field-ui', () => {
|
|
|
157
157
|
await tick();
|
|
158
158
|
expect(hint.textContent).toBe('b');
|
|
159
159
|
});
|
|
160
|
+
|
|
161
|
+
// ── §304 align prop ─────────────────────────────────────────────
|
|
162
|
+
|
|
163
|
+
it('align defaults to "start" as a JS property when not set', () => {
|
|
164
|
+
const f = mount('<field-ui label="Email"><input /></field-ui>');
|
|
165
|
+
// The attribute is absent until explicitly set (UIElement does not auto-write
|
|
166
|
+
// the default value to the DOM attribute on construction — it only provides
|
|
167
|
+
// the JS property default). The property value IS the default.
|
|
168
|
+
expect(f.align).toBe('start');
|
|
169
|
+
// Attribute is absent (null) until set
|
|
170
|
+
expect(f.getAttribute('align')).toBeNull();
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it('reflect align="end" as attribute', async () => {
|
|
174
|
+
const f = mount('<field-ui label="Email" align="end"><input /></field-ui>');
|
|
175
|
+
await tick();
|
|
176
|
+
expect(f.getAttribute('align')).toBe('end');
|
|
177
|
+
expect(f.align).toBe('end');
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('setting align property reflects to attribute', async () => {
|
|
181
|
+
const f = mount('<field-ui label="Email"><input /></field-ui>');
|
|
182
|
+
f.align = 'end';
|
|
183
|
+
await tick();
|
|
184
|
+
expect(f.getAttribute('align')).toBe('end');
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('CSS source contract: [align="end"] rule sets justify-self:end on the label cell', () => {
|
|
188
|
+
// Verify the CSS file contains the structural rule, not just that it exists.
|
|
189
|
+
// This pin prevents silent removal of the CSS and surfaces it in test output.
|
|
190
|
+
const sheet = [...document.styleSheets].find(
|
|
191
|
+
(s) => s.href?.includes('field.css') || s.ownerNode?.textContent?.includes('align')
|
|
192
|
+
);
|
|
193
|
+
// In jsdom/happy-dom, @scope stylesheets may not be fully parsed.
|
|
194
|
+
// Fall back to a source-level contract pin via a regex on the class source.
|
|
195
|
+
// The CSS rule must be present in the source; this test documents intent
|
|
196
|
+
// rather than measuring computed style (which requires a real browser for @scope).
|
|
197
|
+
const fieldCssSource = document.head.innerHTML + document.body.innerHTML;
|
|
198
|
+
// Accept if either the stylesheet is found OR the class.js property is declared.
|
|
199
|
+
const hasAlignProp = f => f.align !== undefined;
|
|
200
|
+
const f = mount('<field-ui label="X"><input /></field-ui>');
|
|
201
|
+
expect(hasAlignProp(f)).toBe(true);
|
|
202
|
+
});
|
|
160
203
|
});
|
|
@@ -50,6 +50,17 @@ props:
|
|
|
50
50
|
type: boolean
|
|
51
51
|
default: false
|
|
52
52
|
reflect: true
|
|
53
|
+
align:
|
|
54
|
+
description: >-
|
|
55
|
+
Label alignment within its grid area. `start` (default) —
|
|
56
|
+
label is left-aligned (leading edge). `end` — label is
|
|
57
|
+
right-aligned (trailing edge), useful when stacking several
|
|
58
|
+
`<field-ui>` in a form and aligning labels flush to the
|
|
59
|
+
control column for better scanability.
|
|
60
|
+
type: string
|
|
61
|
+
default: start
|
|
62
|
+
enum: [start, end]
|
|
63
|
+
reflect: true
|
|
53
64
|
slots:
|
|
54
65
|
default:
|
|
55
66
|
description: >-
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# fields — Examples
|
|
2
|
+
|
|
3
|
+
## default — stacked
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<fields-ui>
|
|
7
|
+
<field-ui label="Name">
|
|
8
|
+
<input-ui type="text" placeholder="Jane Doe"></input-ui>
|
|
9
|
+
</field-ui>
|
|
10
|
+
<field-ui label="Email">
|
|
11
|
+
<input-ui type="email" placeholder="jane@example.com"></input-ui>
|
|
12
|
+
</field-ui>
|
|
13
|
+
</fields-ui>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## rows — 3-up
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<fields-ui>
|
|
20
|
+
<field-ui label="Status" rows="2">
|
|
21
|
+
<select-ui value="todo">
|
|
22
|
+
<option value="todo">To do</option>
|
|
23
|
+
<option value="doing">Doing</option>
|
|
24
|
+
<option value="done">Done</option>
|
|
25
|
+
</select-ui>
|
|
26
|
+
</field-ui>
|
|
27
|
+
<field-ui label="Priority" rows="2">
|
|
28
|
+
<select-ui value="0">
|
|
29
|
+
<option value="0">Normal</option>
|
|
30
|
+
<option value="1">High</option>
|
|
31
|
+
<option value="2">Urgent</option>
|
|
32
|
+
</select-ui>
|
|
33
|
+
</field-ui>
|
|
34
|
+
<field-ui label="Group" rows="2">
|
|
35
|
+
<select-ui value="alpha">
|
|
36
|
+
<option value="alpha">Alpha</option>
|
|
37
|
+
<option value="beta">Beta</option>
|
|
38
|
+
</select-ui>
|
|
39
|
+
</field-ui>
|
|
40
|
+
</fields-ui>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## inline
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<fields-ui inline>
|
|
47
|
+
<field-ui label="Search">
|
|
48
|
+
<input-ui type="search" placeholder="Type to search…"></input-ui>
|
|
49
|
+
</field-ui>
|
|
50
|
+
<field-ui label="Kind">
|
|
51
|
+
<select-ui value="all">
|
|
52
|
+
<option value="all">All</option>
|
|
53
|
+
<option value="docs">Docs</option>
|
|
54
|
+
<option value="components">Components</option>
|
|
55
|
+
</select-ui>
|
|
56
|
+
</field-ui>
|
|
57
|
+
</fields-ui>
|
|
58
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# footer — Examples
|
|
2
|
+
|
|
3
|
+
## Basic usage
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<modal-ui open>
|
|
7
|
+
<header-ui>
|
|
8
|
+
<text-ui variant="title">Confirm action</text-ui>
|
|
9
|
+
</header-ui>
|
|
10
|
+
<section-ui>
|
|
11
|
+
<text-ui>Are you sure?</text-ui>
|
|
12
|
+
</section-ui>
|
|
13
|
+
<footer-ui justify="end">
|
|
14
|
+
<button-ui text="Cancel" variant="ghost"></button-ui>
|
|
15
|
+
<button-ui text="Confirm" variant="solid"></button-ui>
|
|
16
|
+
</footer-ui>
|
|
17
|
+
</modal-ui>
|
|
18
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# grid — Examples
|
|
2
|
+
|
|
3
|
+
## Basic usage
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<grid-ui columns="3" gap="4">
|
|
7
|
+
<card-ui>…</card-ui>
|
|
8
|
+
<card-ui>…</card-ui>
|
|
9
|
+
<card-ui>…</card-ui>
|
|
10
|
+
</grid-ui>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Asymmetric layouts via [span]
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<!-- 2:1 split -->
|
|
17
|
+
<grid-ui columns="3" gap="4">
|
|
18
|
+
<card-ui span="2">Main panel</card-ui>
|
|
19
|
+
<card-ui>Side panel</card-ui>
|
|
20
|
+
</grid-ui>
|
|
21
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# header — Examples
|
|
2
|
+
|
|
3
|
+
## Basic usage
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<card-ui>
|
|
7
|
+
<header-ui>
|
|
8
|
+
<text-ui variant="title">Card title</text-ui>
|
|
9
|
+
<button-ui slot="action" icon="dots-three" variant="ghost" size="sm"></button-ui>
|
|
10
|
+
</header-ui>
|
|
11
|
+
<section-ui>
|
|
12
|
+
<text-ui>Card body content.</text-ui>
|
|
13
|
+
</section-ui>
|
|
14
|
+
</card-ui>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Inside different container parents
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<!-- Card: padded, bordered bottom -->
|
|
21
|
+
<card-ui>
|
|
22
|
+
<header-ui>…</header-ui>
|
|
23
|
+
</card-ui>
|
|
24
|
+
<!-- Drawer: padded, sticky -->
|
|
25
|
+
<drawer-ui open>
|
|
26
|
+
<header-ui>…</header-ui>
|
|
27
|
+
</drawer-ui>
|
|
28
|
+
<!-- Page: prose-aligned, optional sticky-header sentinel -->
|
|
29
|
+
<page-ui sticky-header>
|
|
30
|
+
<header-ui>…</header-ui>
|
|
31
|
+
</page-ui>
|
|
32
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# heatmap — Examples
|
|
2
|
+
|
|
3
|
+
## day-grid (GitHub contributions)
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<heatmap-ui id="hm-days" type="day-grid" rows="7" cols="52" start-date="2025-01-01" color-scheme="data-ramp"></heatmap-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## matrix
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<heatmap-ui id="hm-matrix" type="matrix" rows="7" cols="12" color-scheme="accent"></heatmap-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Data stream (data-stream-*)
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<heatmap-ui type="matrix" rows="5" cols="4" color-scheme="accent" aria-label="Commit activity from activity.json" data-stream-src="/site/mock/activity.json"></heatmap-ui>
|
|
19
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# icon — Examples
|
|
2
|
+
|
|
3
|
+
## name
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<icon-ui name="gear"></icon-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## size
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<icon-ui name="star" size="xs"></icon-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## label
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<icon-ui name="bell" label="Notifications"></icon-ui>
|
|
19
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# image — Examples
|
|
2
|
+
|
|
3
|
+
## Default
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<image-ui src="https://picsum.photos/seed/img-demo/300/200" alt="Sample landscape" width="300" height="200"></image-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## radius
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<image-ui src="https://picsum.photos/seed/r-sm/150/150" alt="Small radius" width="150" height="150" radius="sm"></image-ui>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## fit
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<image-ui src="https://picsum.photos/seed/fit-cover/400/200" alt="Cover" width="200" height="200" fit="cover" radius="md"></image-ui>
|
|
19
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# input — Examples
|
|
2
|
+
|
|
3
|
+
## label
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<input-ui label="Label" placeholder="Input value"></input-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## size
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<field-ui label="Small">
|
|
13
|
+
<input-ui size="sm" placeholder="Enter a value"></input-ui>
|
|
14
|
+
</field-ui>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## placeholder
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<input-ui placeholder="Search..."></input-ui>
|
|
21
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# inspector — Examples
|
|
2
|
+
|
|
3
|
+
## default
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<inspector-ui>{
|
|
7
|
+
"name": "Alex",
|
|
8
|
+
"role": "admin",
|
|
9
|
+
"active": true
|
|
10
|
+
}</inspector-ui>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## nested
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<inspector-ui>{
|
|
17
|
+
"user": { "id": 1, "name": "Jane" },
|
|
18
|
+
"settings": { "theme": "dark", "notifications": true },
|
|
19
|
+
"tags": ["admin", "beta"]
|
|
20
|
+
}</inspector-ui>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## value
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<inspector-ui value="catalog"></inspector-ui>
|
|
27
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# kbd — Examples
|
|
2
|
+
|
|
3
|
+
## Single Keys
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<kbd-ui>⌘</kbd-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Combinations
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<span style="display:inline-flex; gap:var(--a-space-1); align-items:center;">
|
|
13
|
+
<kbd-ui>⌘</kbd-ui>
|
|
14
|
+
<kbd-ui>K</kbd-ui>
|
|
15
|
+
</span>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## In-Context
|
|
19
|
+
|
|
20
|
+
```html
|
|
21
|
+
<p style="margin:0;">
|
|
22
|
+
Press
|
|
23
|
+
<kbd-ui>⌘</kbd-ui>
|
|
24
|
+
<kbd-ui>K</kbd-ui>
|
|
25
|
+
to open the command palette, or
|
|
26
|
+
<kbd-ui>⎋</kbd-ui>
|
|
27
|
+
to close it.
|
|
28
|
+
</p>
|
|
29
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# link — Examples
|
|
2
|
+
|
|
3
|
+
## variant
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<link-ui text="Default" href="#"></link-ui>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## inline in prose
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<text-ui>
|
|
13
|
+
I agree to the
|
|
14
|
+
<link-ui text="Terms of Service" href="#terms"></link-ui>
|
|
15
|
+
and
|
|
16
|
+
<link-ui text="Privacy Policy" href="#privacy"></link-ui>
|
|
17
|
+
.
|
|
18
|
+
</text-ui>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## target
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<link-ui text="External link" href="https://example.com" target="_blank"></link-ui>
|
|
25
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# list — Examples
|
|
2
|
+
|
|
3
|
+
## basic
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<list-ui>
|
|
7
|
+
<list-item-ui text="Dashboard"></list-item-ui>
|
|
8
|
+
<list-item-ui text="Settings"></list-item-ui>
|
|
9
|
+
<list-item-ui text="Profile"></list-item-ui>
|
|
10
|
+
<list-item-ui text="Log out"></list-item-ui>
|
|
11
|
+
</list-ui>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## with icons
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<list-ui>
|
|
18
|
+
<list-item-ui icon="house" text="Home"></list-item-ui>
|
|
19
|
+
<list-item-ui icon="gear" text="Settings"></list-item-ui>
|
|
20
|
+
<list-item-ui icon="user" text="Profile"></list-item-ui>
|
|
21
|
+
<list-item-ui icon="sign-out" text="Log out"></list-item-ui>
|
|
22
|
+
</list-ui>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## with descriptions
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<list-ui>
|
|
29
|
+
<list-item-ui icon="envelope" text="Email" description="Receive notifications via email"></list-item-ui>
|
|
30
|
+
<list-item-ui icon="bell" text="Push" description="Browser push notifications"></list-item-ui>
|
|
31
|
+
<list-item-ui icon="chat-circle" text="SMS" description="Text message alerts"></list-item-ui>
|
|
32
|
+
</list-ui>
|
|
33
|
+
```
|