@adia-ai/web-components 0.4.5 → 0.4.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/README.md +63 -24
- package/USAGE.md +604 -0
- package/components/accordion/accordion.d.ts +17 -0
- package/components/accordion/accordion.js +10 -117
- package/components/accordion/class.js +132 -0
- package/components/action-list/action-list.d.ts +15 -0
- package/components/action-list/action-list.js +9 -140
- package/components/action-list/class.js +156 -0
- package/components/agent-artifact/agent-artifact.d.ts +25 -0
- package/components/agent-artifact/agent-artifact.js +8 -181
- package/components/agent-artifact/class.js +200 -0
- package/components/agent-feedback-bar/agent-feedback-bar.d.ts +21 -0
- package/components/agent-feedback-bar/agent-feedback-bar.js +8 -143
- package/components/agent-feedback-bar/class.js +162 -0
- package/components/agent-questions/agent-questions.d.ts +23 -0
- package/components/agent-questions/agent-questions.js +8 -180
- package/components/agent-questions/class.js +199 -0
- package/components/agent-reasoning/agent-reasoning.d.ts +23 -0
- package/components/agent-reasoning/agent-reasoning.js +8 -494
- package/components/agent-reasoning/class.js +513 -0
- package/components/agent-suggestions/agent-suggestions.d.ts +21 -0
- package/components/agent-suggestions/agent-suggestions.js +8 -78
- package/components/agent-suggestions/class.js +97 -0
- package/components/agent-trace/agent-trace.d.ts +19 -0
- package/components/alert/alert.d.ts +29 -0
- package/components/alert/alert.js +8 -175
- package/components/alert/class.js +194 -0
- package/components/avatar/avatar.d.ts +27 -0
- package/components/avatar/avatar.js +9 -159
- package/components/avatar/class.js +173 -0
- package/components/badge/badge.d.ts +27 -0
- package/components/badge/badge.js +9 -75
- package/components/badge/class.js +93 -0
- package/components/block/block.d.ts +19 -0
- package/components/block/block.js +9 -15
- package/components/block/class.js +33 -0
- package/components/breadcrumb/breadcrumb.d.ts +23 -0
- package/components/breadcrumb/breadcrumb.js +8 -113
- package/components/breadcrumb/class.js +132 -0
- package/components/button/button.d.ts +34 -0
- package/components/button/button.js +15 -66
- package/components/button/class.js +80 -0
- package/components/calendar-picker/calendar-picker.a2ui.json +6 -1
- package/components/calendar-picker/calendar-picker.d.ts +27 -0
- package/components/calendar-picker/calendar-picker.js +8 -332
- package/components/calendar-picker/calendar-picker.yaml +51 -177
- package/components/calendar-picker/class.js +351 -0
- package/components/canvas/canvas.a2ui.json +6 -1
- package/components/canvas/canvas.d.ts +17 -0
- package/components/canvas/canvas.yaml +19 -36
- package/components/card/card.a2ui.json +3 -0
- package/components/card/card.d.ts +27 -0
- package/components/card/card.js +9 -50
- package/components/card/card.yaml +171 -433
- package/components/card/class.js +68 -0
- package/components/chart/chart.d.ts +41 -0
- package/components/chart/chart.js +8 -2131
- package/components/chart/class.js +2150 -0
- package/components/chart-legend/chart-legend.d.ts +27 -0
- package/components/chart-legend/chart-legend.js +8 -197
- package/components/chart-legend/class.js +215 -0
- package/components/chat-thread/chat-thread.d.ts +17 -0
- package/components/chat-thread/chat-thread.js +8 -157
- package/components/chat-thread/class.js +176 -0
- package/components/check/check.d.ts +30 -0
- package/components/check/check.js +11 -52
- package/components/check/class.js +68 -0
- package/components/code/class.js +501 -0
- package/components/code/code.d.ts +39 -0
- package/components/code/code.js +8 -482
- package/components/col/class.js +30 -0
- package/components/col/col.d.ts +23 -0
- package/components/col/col.js +10 -13
- package/components/color-picker/class.js +550 -0
- package/components/color-picker/color-picker.d.ts +37 -0
- package/components/color-picker/color-picker.js +8 -531
- package/components/command/class.js +364 -0
- package/components/command/command.a2ui.json +3 -0
- package/components/command/command.d.ts +19 -0
- package/components/command/command.js +8 -345
- package/components/command/command.yaml +105 -124
- package/components/demo-toggle/class.js +153 -0
- package/components/demo-toggle/demo-toggle.d.ts +23 -0
- package/components/demo-toggle/demo-toggle.js +8 -135
- package/components/description-list/class.js +86 -0
- package/components/description-list/description-list.d.ts +21 -0
- package/components/description-list/description-list.js +8 -67
- package/components/divider/class.js +57 -0
- package/components/divider/divider.d.ts +19 -0
- package/components/divider/divider.js +10 -40
- package/components/drawer/class.js +306 -0
- package/components/drawer/drawer.d.ts +25 -0
- package/components/drawer/drawer.js +8 -287
- package/components/embed/class.js +73 -0
- package/components/embed/embed.d.ts +23 -0
- package/components/embed/embed.js +9 -55
- package/components/empty-state/class.js +108 -0
- package/components/empty-state/empty-state.d.ts +21 -0
- package/components/empty-state/empty-state.js +9 -90
- package/components/feed/class.js +381 -0
- package/components/feed/feed.d.ts +19 -0
- package/components/feed/feed.js +9 -367
- package/components/field/class.js +266 -0
- package/components/field/field.d.ts +23 -0
- package/components/field/field.js +8 -247
- package/components/fields/class.js +106 -0
- package/components/fields/fields.d.ts +19 -0
- package/components/fields/fields.js +8 -87
- package/components/grid/class.js +31 -0
- package/components/grid/grid.d.ts +23 -0
- package/components/grid/grid.js +10 -14
- package/components/heatmap/class.js +305 -0
- package/components/heatmap/heatmap.d.ts +31 -0
- package/components/heatmap/heatmap.js +8 -286
- package/components/icon/class.js +54 -0
- package/components/icon/icon.d.ts +23 -0
- package/components/icon/icon.js +13 -40
- package/components/image/class.js +112 -0
- package/components/image/image.d.ts +33 -0
- package/components/image/image.js +9 -94
- package/components/index.js +1 -0
- package/components/input/class.js +773 -0
- package/components/input/input.a2ui.json +3 -0
- package/components/input/input.d.ts +61 -0
- package/components/input/input.js +8 -755
- package/components/input/input.yaml +171 -442
- package/components/inspector/class.js +142 -0
- package/components/inspector/inspector.a2ui.json +8 -1
- package/components/inspector/inspector.d.ts +17 -0
- package/components/inspector/inspector.js +8 -124
- package/components/inspector/inspector.yaml +15 -30
- package/components/kbd/class.js +34 -0
- package/components/kbd/kbd.a2ui.json +3 -0
- package/components/kbd/kbd.d.ts +17 -0
- package/components/kbd/kbd.js +10 -17
- package/components/kbd/kbd.yaml +54 -185
- package/components/link/class.js +187 -0
- package/components/link/link.d.ts +55 -0
- package/components/link/link.js +8 -168
- package/components/list/class.js +249 -0
- package/components/list/list.d.ts +23 -0
- package/components/list/list.js +9 -231
- package/components/menu/class.js +332 -0
- package/components/menu/menu.d.ts +21 -0
- package/components/menu/menu.js +11 -316
- package/components/modal/class.js +231 -0
- package/components/modal/modal.a2ui.json +5 -1
- package/components/modal/modal.d.ts +23 -0
- package/components/modal/modal.js +8 -212
- package/components/modal/modal.yaml +19 -39
- package/components/nav/class.js +150 -0
- package/components/nav/nav.d.ts +31 -0
- package/components/nav/nav.js +8 -131
- package/components/nav-group/class.js +152 -0
- package/components/nav-group/nav-group.d.ts +35 -0
- package/components/nav-group/nav-group.js +9 -134
- package/components/nav-item/class.js +86 -0
- package/components/nav-item/nav-item.d.ts +37 -0
- package/components/nav-item/nav-item.js +10 -69
- package/components/noodles/class.js +510 -0
- package/components/noodles/noodles.d.ts +33 -0
- package/components/noodles/noodles.js +9 -493
- package/components/option-card/class.js +167 -0
- package/components/option-card/option-card.d.ts +30 -0
- package/components/option-card/option-card.js +8 -149
- package/components/otp-input/class.js +180 -0
- package/components/otp-input/otp-input.a2ui.json +5 -1
- package/components/otp-input/otp-input.d.ts +25 -0
- package/components/otp-input/otp-input.js +9 -162
- package/components/otp-input/otp-input.yaml +45 -174
- package/components/page/class.js +97 -0
- package/components/page/page.d.ts +46 -0
- package/components/page/page.js +8 -79
- package/components/pagination/class.js +195 -0
- package/components/pagination/pagination.d.ts +23 -0
- package/components/pagination/pagination.js +9 -177
- package/components/pane/class.js +186 -0
- package/components/pane/pane.a2ui.json +12 -1
- package/components/pane/pane.css +10 -0
- package/components/pane/pane.d.ts +31 -0
- package/components/pane/pane.js +8 -143
- package/components/pane/pane.yaml +57 -157
- package/components/pipeline-status/class.js +189 -0
- package/components/pipeline-status/pipeline-status.a2ui.json +7 -1
- package/components/pipeline-status/pipeline-status.d.ts +21 -0
- package/components/pipeline-status/pipeline-status.js +9 -172
- package/components/pipeline-status/pipeline-status.yaml +34 -72
- package/components/popover/class.js +194 -0
- package/components/popover/popover.d.ts +23 -0
- package/components/popover/popover.js +9 -176
- package/components/progress/class.js +74 -0
- package/components/progress/progress.a2ui.json +3 -0
- package/components/progress/progress.d.ts +19 -0
- package/components/progress/progress.js +10 -57
- package/components/progress/progress.yaml +124 -287
- package/components/progress-row/class.js +110 -0
- package/components/progress-row/progress-row.d.ts +23 -0
- package/components/progress-row/progress-row.js +8 -92
- package/components/radio/class.js +83 -0
- package/components/radio/radio.d.ts +28 -0
- package/components/radio/radio.js +11 -67
- package/components/range/class.js +194 -0
- package/components/range/range.d.ts +31 -0
- package/components/range/range.js +9 -176
- package/components/rating/class.js +148 -0
- package/components/rating/rating.d.ts +33 -0
- package/components/rating/rating.js +9 -130
- package/components/richtext/class.js +87 -0
- package/components/richtext/richtext.a2ui.json +7 -1
- package/components/richtext/richtext.d.ts +19 -0
- package/components/richtext/richtext.js +8 -68
- package/components/richtext/richtext.yaml +30 -65
- package/components/row/class.js +50 -0
- package/components/row/row.d.ts +27 -0
- package/components/row/row.js +10 -33
- package/components/search/class.js +134 -0
- package/components/search/search.d.ts +35 -0
- package/components/search/search.js +10 -117
- package/components/segment/class.js +62 -0
- package/components/segment/segment.d.ts +25 -0
- package/components/segment/segment.js +10 -45
- package/components/segmented/class.js +165 -0
- package/components/segmented/segmented.a2ui.json +4 -0
- package/components/segmented/segmented.d.ts +24 -0
- package/components/segmented/segmented.js +10 -148
- package/components/segmented/segmented.yaml +41 -59
- package/components/select/class.js +408 -0
- package/components/select/select.d.ts +57 -0
- package/components/select/select.js +15 -396
- package/components/skeleton/class.js +52 -0
- package/components/skeleton/skeleton.d.ts +23 -0
- package/components/skeleton/skeleton.js +8 -34
- package/components/slider/class.js +184 -0
- package/components/slider/slider.d.ts +31 -0
- package/components/slider/slider.js +9 -166
- package/components/stack/class.js +28 -0
- package/components/stack/stack.d.ts +17 -0
- package/components/stack/stack.js +10 -11
- package/components/step-progress/class.js +98 -0
- package/components/step-progress/step-progress.d.ts +27 -0
- package/components/step-progress/step-progress.js +8 -79
- package/components/stepper/class.js +126 -0
- package/components/stepper/stepper.d.ts +19 -0
- package/components/stepper/stepper.js +9 -112
- package/components/stream/class.js +109 -0
- package/components/stream/stream.d.ts +19 -0
- package/components/stream/stream.js +8 -90
- package/components/swatch/class.js +131 -0
- package/components/swatch/swatch.d.ts +28 -0
- package/components/swatch/swatch.js +8 -112
- package/components/swiper/class.js +373 -0
- package/components/swiper/swiper.a2ui.json +4 -0
- package/components/swiper/swiper.d.ts +31 -0
- package/components/swiper/swiper.js +8 -354
- package/components/swiper/swiper.yaml +68 -212
- package/components/switch/class.js +63 -0
- package/components/switch/switch.a2ui.json +6 -1
- package/components/switch/switch.d.ts +30 -0
- package/components/switch/switch.js +11 -47
- package/components/switch/switch.yaml +70 -265
- package/components/table/class.js +1453 -0
- package/components/table/table.d.ts +37 -0
- package/components/table/table.js +8 -1435
- package/components/table-toolbar/class.js +680 -0
- package/components/table-toolbar/table-toolbar.d.ts +33 -0
- package/components/table-toolbar/table-toolbar.js +8 -689
- package/components/tabs/class.js +242 -0
- package/components/tabs/tabs.d.ts +21 -0
- package/components/tabs/tabs.js +8 -223
- package/components/tag/class.js +99 -0
- package/components/tag/tag.d.ts +27 -0
- package/components/tag/tag.js +8 -80
- package/components/text/class.js +46 -0
- package/components/text/text.d.ts +25 -0
- package/components/text/text.js +9 -28
- package/components/textarea/class.js +134 -0
- package/components/textarea/textarea.d.ts +31 -0
- package/components/textarea/textarea.js +11 -118
- package/components/timeline/class.js +176 -0
- package/components/timeline/timeline.d.ts +19 -0
- package/components/timeline/timeline.js +9 -162
- package/components/toast/class.js +92 -0
- package/components/toast/toast.d.ts +23 -0
- package/components/toast/toast.js +9 -76
- package/components/toggle-group/class.js +154 -0
- package/components/toggle-group/toggle-group.d.ts +19 -0
- package/components/toggle-group/toggle-group.js +11 -140
- package/components/toggle-scheme/class.js +286 -0
- package/components/toggle-scheme/toggle-scheme.a2ui.json +197 -0
- package/components/toggle-scheme/toggle-scheme.css +20 -0
- package/components/toggle-scheme/toggle-scheme.d.ts +41 -0
- package/components/toggle-scheme/toggle-scheme.js +17 -0
- package/components/toggle-scheme/toggle-scheme.yaml +173 -0
- package/components/toolbar/class.js +388 -0
- package/components/toolbar/toolbar.d.ts +23 -0
- package/components/toolbar/toolbar.js +10 -376
- package/components/tooltip/class.js +299 -0
- package/components/tooltip/tooltip.d.ts +27 -0
- package/components/tooltip/tooltip.js +8 -280
- package/components/tree/class.js +245 -0
- package/components/tree/tree.d.ts +15 -0
- package/components/tree/tree.js +9 -244
- package/components/upload/class.js +199 -0
- package/components/upload/upload.d.ts +27 -0
- package/components/upload/upload.js +11 -183
- package/core/element.d.ts +174 -0
- package/core/form.d.ts +108 -0
- package/core/index.d.ts +11 -0
- package/core/index.js +1 -0
- package/core/register.d.ts +25 -0
- package/core/register.js +58 -0
- package/core/signals.d.ts +94 -0
- package/core/template.d.ts +70 -0
- package/index.d.ts +315 -0
- package/package.json +25 -6
- package/traits/CATEGORIES.md +1 -1
|
@@ -1,168 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `<avatar-ui>` — auto-registers the tag on import.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `name` is a deprecated alias for `text` (warns on use).
|
|
4
|
+
* For non-side-effect class import (test isolation, tag override), use
|
|
5
|
+
* the `class` subpath:
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
* <avatar-ui text="Alice"></avatar-ui>
|
|
10
|
-
* <avatar-ui text="Bob"></avatar-ui>
|
|
11
|
-
* ...
|
|
12
|
-
* </avatar-group-ui>
|
|
7
|
+
* import { UIAvatar, UIAvatarGroup } from '@adia-ai/web-components/components/avatar/class';
|
|
13
8
|
*
|
|
14
|
-
*
|
|
9
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
15
10
|
*/
|
|
16
11
|
|
|
17
|
-
import {
|
|
12
|
+
import { defineIfFree } from '../../core/register.js';
|
|
13
|
+
import { UIAvatar, UIAvatarGroup } from './class.js';
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class UIAvatar extends UIElement {
|
|
22
|
-
static properties = {
|
|
23
|
-
src: { type: String, default: '', reflect: true },
|
|
24
|
-
text: { type: String, default: '', reflect: true },
|
|
25
|
-
name: { type: String, default: '', reflect: true }, // backcompat alias for text
|
|
26
|
-
icon: { type: String, default: '', reflect: true },
|
|
27
|
-
size: { type: String, default: 'md', reflect: true },
|
|
28
|
-
shape: { type: String, default: 'circle', reflect: true },
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/** Display string — `text` takes priority, `name` is backcompat alias */
|
|
32
|
-
get displayName() { return this.text || this.name; }
|
|
33
|
-
|
|
34
|
-
static template = () => null;
|
|
35
|
-
|
|
36
|
-
static #nameWarned = false;
|
|
37
|
-
|
|
38
|
-
#imgEl = null;
|
|
39
|
-
#initialsEl = null;
|
|
40
|
-
#iconEl = null;
|
|
41
|
-
|
|
42
|
-
connected() {
|
|
43
|
-
this.setAttribute('role', 'img');
|
|
44
|
-
if (this.name && !this.text && !UIAvatar.#nameWarned) {
|
|
45
|
-
UIAvatar.#nameWarned = true;
|
|
46
|
-
// eslint-disable-next-line no-console
|
|
47
|
-
console.warn(
|
|
48
|
-
`[AdiaUI] <avatar-ui name="…"> is deprecated — use text="…" instead. ` +
|
|
49
|
-
`Docs: https://ui-kit.exe.xyz/site/components/avatar`
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
render() {
|
|
55
|
-
if (!this.src && !this.displayName && !this.icon) return;
|
|
56
|
-
|
|
57
|
-
if (this.src) {
|
|
58
|
-
if (!this.#imgEl) {
|
|
59
|
-
this.#imgEl = document.createElement('img');
|
|
60
|
-
this.#imgEl.setAttribute('slot', 'img');
|
|
61
|
-
this.#imgEl.onerror = () => {
|
|
62
|
-
this.#imgEl.remove();
|
|
63
|
-
this.#imgEl = null;
|
|
64
|
-
this.#showInitials();
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
this.#imgEl.src = this.src;
|
|
68
|
-
this.#imgEl.alt = this.name || '';
|
|
69
|
-
if (!this.#imgEl.parentElement) this.appendChild(this.#imgEl);
|
|
70
|
-
|
|
71
|
-
// Remove initials when image is showing
|
|
72
|
-
if (this.#initialsEl) {
|
|
73
|
-
this.#initialsEl.remove();
|
|
74
|
-
this.#initialsEl = null;
|
|
75
|
-
}
|
|
76
|
-
} else if (this.icon) {
|
|
77
|
-
// Icon avatar (system events, non-person rep)
|
|
78
|
-
if (this.#imgEl) { this.#imgEl.remove(); this.#imgEl = null; }
|
|
79
|
-
if (this.#initialsEl) { this.#initialsEl.remove(); this.#initialsEl = null; }
|
|
80
|
-
if (!this.#iconEl) {
|
|
81
|
-
this.#iconEl = document.createElement('icon-ui');
|
|
82
|
-
this.#iconEl.setAttribute('slot', 'icon');
|
|
83
|
-
this.appendChild(this.#iconEl);
|
|
84
|
-
}
|
|
85
|
-
this.#iconEl.setAttribute('name', this.icon);
|
|
86
|
-
} else {
|
|
87
|
-
// No src / no icon — show initials
|
|
88
|
-
if (this.#imgEl) { this.#imgEl.remove(); this.#imgEl = null; }
|
|
89
|
-
if (this.#iconEl) { this.#iconEl.remove(); this.#iconEl = null; }
|
|
90
|
-
this.#showInitials();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
this.setAttribute('aria-label', this.displayName || this.icon || '');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
#showInitials() {
|
|
97
|
-
if (!this.displayName) return;
|
|
98
|
-
const initials = this.displayName
|
|
99
|
-
.split(/\s+/)
|
|
100
|
-
.map(w => w[0])
|
|
101
|
-
.join('')
|
|
102
|
-
.slice(0, 2)
|
|
103
|
-
.toUpperCase();
|
|
104
|
-
|
|
105
|
-
if (!this.#initialsEl) {
|
|
106
|
-
this.#initialsEl = document.createElement('span');
|
|
107
|
-
this.#initialsEl.setAttribute('slot', 'initials');
|
|
108
|
-
this.appendChild(this.#initialsEl);
|
|
109
|
-
}
|
|
110
|
-
this.#initialsEl.textContent = initials;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
customElements.define('avatar-ui', UIAvatar);
|
|
115
|
-
|
|
116
|
-
// ── Avatar Group ────────────────────────────────────────────
|
|
117
|
-
|
|
118
|
-
class UIAvatarGroup extends UIElement {
|
|
119
|
-
static properties = {
|
|
120
|
-
max: { type: Number, default: 5, reflect: true },
|
|
121
|
-
size: { type: String, default: '', reflect: true },
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
static template = () => null;
|
|
125
|
-
|
|
126
|
-
connected() {
|
|
127
|
-
this.setAttribute('role', 'group');
|
|
128
|
-
if (!this.hasAttribute('aria-label')) {
|
|
129
|
-
this.setAttribute('aria-label', 'Avatar group');
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
render() {
|
|
134
|
-
const avatars = [...this.querySelectorAll('avatar-ui')];
|
|
135
|
-
const max = this.max;
|
|
136
|
-
const overflow = avatars.length - max;
|
|
137
|
-
|
|
138
|
-
// Propagate size
|
|
139
|
-
if (this.size) {
|
|
140
|
-
for (const av of avatars) av.setAttribute('size', this.size);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Show/hide based on max
|
|
144
|
-
avatars.forEach((av, i) => {
|
|
145
|
-
av.style.display = i < max ? '' : 'none';
|
|
146
|
-
av.style.zIndex = String(avatars.length - i);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
// Overflow counter
|
|
150
|
-
let counter = this.querySelector('[slot="overflow"]');
|
|
151
|
-
if (overflow > 0) {
|
|
152
|
-
if (!counter) {
|
|
153
|
-
counter = document.createElement('span');
|
|
154
|
-
counter.setAttribute('slot', 'overflow');
|
|
155
|
-
this.appendChild(counter);
|
|
156
|
-
}
|
|
157
|
-
counter.textContent = `+${overflow}`;
|
|
158
|
-
counter.setAttribute('aria-label', `${overflow} more`);
|
|
159
|
-
counter.style.zIndex = '0';
|
|
160
|
-
} else if (counter) {
|
|
161
|
-
counter.remove();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
customElements.define('avatar-group-ui', UIAvatarGroup);
|
|
15
|
+
defineIfFree('avatar-ui', UIAvatar);
|
|
16
|
+
defineIfFree('avatar-group-ui', UIAvatarGroup);
|
|
167
17
|
|
|
168
18
|
export { UIAvatar, UIAvatarGroup };
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-side-effect class export for `<avatar-ui>` (+ co-located primitives).
|
|
3
|
+
*
|
|
4
|
+
* Importing this file gives you the class(es) without auto-registering the tag.
|
|
5
|
+
* Useful for test isolation, subclassing with tag-name override, or selective
|
|
6
|
+
* composition.
|
|
7
|
+
*
|
|
8
|
+
* The auto-register path stays at `@adia-ai/web-components/components/avatar`
|
|
9
|
+
* (which imports this file + calls `defineIfFree()`).
|
|
10
|
+
*
|
|
11
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* <avatar-ui src="photo.jpg" text="Alice Smith" size="md" shape="circle"></avatar-ui>
|
|
16
|
+
*
|
|
17
|
+
* Fallback chain: image → initials → empty.
|
|
18
|
+
* If src fails to load, falls back to initials derived from text.
|
|
19
|
+
* `name` is a deprecated alias for `text` (warns on use).
|
|
20
|
+
*
|
|
21
|
+
* <avatar-group-ui max="4" size="md">
|
|
22
|
+
* <avatar-ui text="Alice"></avatar-ui>
|
|
23
|
+
* <avatar-ui text="Bob"></avatar-ui>
|
|
24
|
+
* ...
|
|
25
|
+
* </avatar-group-ui>
|
|
26
|
+
*
|
|
27
|
+
* Overlapping avatar stack with +N overflow counter.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { UIElement } from '../../core/element.js';
|
|
31
|
+
|
|
32
|
+
// ── Avatar ──────────────────────────────────────────────────
|
|
33
|
+
|
|
34
|
+
export class UIAvatar extends UIElement {
|
|
35
|
+
static properties = {
|
|
36
|
+
src: { type: String, default: '', reflect: true },
|
|
37
|
+
text: { type: String, default: '', reflect: true },
|
|
38
|
+
name: { type: String, default: '', reflect: true }, // backcompat alias for text
|
|
39
|
+
icon: { type: String, default: '', reflect: true },
|
|
40
|
+
size: { type: String, default: 'md', reflect: true },
|
|
41
|
+
shape: { type: String, default: 'circle', reflect: true },
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/** Display string — `text` takes priority, `name` is backcompat alias */
|
|
45
|
+
get displayName() { return this.text || this.name; }
|
|
46
|
+
|
|
47
|
+
static template = () => null;
|
|
48
|
+
|
|
49
|
+
static #nameWarned = false;
|
|
50
|
+
|
|
51
|
+
#imgEl = null;
|
|
52
|
+
#initialsEl = null;
|
|
53
|
+
#iconEl = null;
|
|
54
|
+
|
|
55
|
+
connected() {
|
|
56
|
+
this.setAttribute('role', 'img');
|
|
57
|
+
if (this.name && !this.text && !UIAvatar.#nameWarned) {
|
|
58
|
+
UIAvatar.#nameWarned = true;
|
|
59
|
+
// eslint-disable-next-line no-console
|
|
60
|
+
console.warn(
|
|
61
|
+
`[AdiaUI] <avatar-ui name="…"> is deprecated — use text="…" instead. ` +
|
|
62
|
+
`Docs: https://ui-kit.exe.xyz/site/components/avatar`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
render() {
|
|
68
|
+
if (!this.src && !this.displayName && !this.icon) return;
|
|
69
|
+
|
|
70
|
+
if (this.src) {
|
|
71
|
+
if (!this.#imgEl) {
|
|
72
|
+
this.#imgEl = document.createElement('img');
|
|
73
|
+
this.#imgEl.setAttribute('slot', 'img');
|
|
74
|
+
this.#imgEl.onerror = () => {
|
|
75
|
+
this.#imgEl.remove();
|
|
76
|
+
this.#imgEl = null;
|
|
77
|
+
this.#showInitials();
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
this.#imgEl.src = this.src;
|
|
81
|
+
this.#imgEl.alt = this.name || '';
|
|
82
|
+
if (!this.#imgEl.parentElement) this.appendChild(this.#imgEl);
|
|
83
|
+
|
|
84
|
+
// Remove initials when image is showing
|
|
85
|
+
if (this.#initialsEl) {
|
|
86
|
+
this.#initialsEl.remove();
|
|
87
|
+
this.#initialsEl = null;
|
|
88
|
+
}
|
|
89
|
+
} else if (this.icon) {
|
|
90
|
+
// Icon avatar (system events, non-person rep)
|
|
91
|
+
if (this.#imgEl) { this.#imgEl.remove(); this.#imgEl = null; }
|
|
92
|
+
if (this.#initialsEl) { this.#initialsEl.remove(); this.#initialsEl = null; }
|
|
93
|
+
if (!this.#iconEl) {
|
|
94
|
+
this.#iconEl = document.createElement('icon-ui');
|
|
95
|
+
this.#iconEl.setAttribute('slot', 'icon');
|
|
96
|
+
this.appendChild(this.#iconEl);
|
|
97
|
+
}
|
|
98
|
+
this.#iconEl.setAttribute('name', this.icon);
|
|
99
|
+
} else {
|
|
100
|
+
// No src / no icon — show initials
|
|
101
|
+
if (this.#imgEl) { this.#imgEl.remove(); this.#imgEl = null; }
|
|
102
|
+
if (this.#iconEl) { this.#iconEl.remove(); this.#iconEl = null; }
|
|
103
|
+
this.#showInitials();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
this.setAttribute('aria-label', this.displayName || this.icon || '');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
#showInitials() {
|
|
110
|
+
if (!this.displayName) return;
|
|
111
|
+
const initials = this.displayName
|
|
112
|
+
.split(/\s+/)
|
|
113
|
+
.map(w => w[0])
|
|
114
|
+
.join('')
|
|
115
|
+
.slice(0, 2)
|
|
116
|
+
.toUpperCase();
|
|
117
|
+
|
|
118
|
+
if (!this.#initialsEl) {
|
|
119
|
+
this.#initialsEl = document.createElement('span');
|
|
120
|
+
this.#initialsEl.setAttribute('slot', 'initials');
|
|
121
|
+
this.appendChild(this.#initialsEl);
|
|
122
|
+
}
|
|
123
|
+
this.#initialsEl.textContent = initials;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export class UIAvatarGroup extends UIElement {
|
|
128
|
+
static properties = {
|
|
129
|
+
max: { type: Number, default: 5, reflect: true },
|
|
130
|
+
size: { type: String, default: '', reflect: true },
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
static template = () => null;
|
|
134
|
+
|
|
135
|
+
connected() {
|
|
136
|
+
this.setAttribute('role', 'group');
|
|
137
|
+
if (!this.hasAttribute('aria-label')) {
|
|
138
|
+
this.setAttribute('aria-label', 'Avatar group');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
render() {
|
|
143
|
+
const avatars = [...this.querySelectorAll('avatar-ui')];
|
|
144
|
+
const max = this.max;
|
|
145
|
+
const overflow = avatars.length - max;
|
|
146
|
+
|
|
147
|
+
// Propagate size
|
|
148
|
+
if (this.size) {
|
|
149
|
+
for (const av of avatars) av.setAttribute('size', this.size);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Show/hide based on max
|
|
153
|
+
avatars.forEach((av, i) => {
|
|
154
|
+
av.style.display = i < max ? '' : 'none';
|
|
155
|
+
av.style.zIndex = String(avatars.length - i);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Overflow counter
|
|
159
|
+
let counter = this.querySelector('[slot="overflow"]');
|
|
160
|
+
if (overflow > 0) {
|
|
161
|
+
if (!counter) {
|
|
162
|
+
counter = document.createElement('span');
|
|
163
|
+
counter.setAttribute('slot', 'overflow');
|
|
164
|
+
this.appendChild(counter);
|
|
165
|
+
}
|
|
166
|
+
counter.textContent = `+${overflow}`;
|
|
167
|
+
counter.setAttribute('aria-label', `${overflow} more`);
|
|
168
|
+
counter.style.zIndex = '0';
|
|
169
|
+
} else if (counter) {
|
|
170
|
+
counter.remove();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<badge-ui>` — Inline pill-shaped badge/tag. Text rendered via CSS attr().
|
|
3
|
+
*
|
|
4
|
+
* @see https://ui-kit.exe.xyz/site/components/badge
|
|
5
|
+
*
|
|
6
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
7
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
8
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
9
|
+
* or hand-author this file fully if rich event types are needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { UIElement } from '../../core/element.js';
|
|
13
|
+
|
|
14
|
+
export class UIBadge extends UIElement {
|
|
15
|
+
/** Optional leading icon (any registered name). Use icon="dot" for chart-legend / status-pip chips. Inherits the variant's foreground color so the dot matches the label. */
|
|
16
|
+
icon: string;
|
|
17
|
+
/** Badge size */
|
|
18
|
+
size: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
19
|
+
/** Semantic status shorthand. Auto-maps to variant and sets text. `new` → success "New"; `updated` → info "Updated"; `deprecated` → warning "Deprecated"; `removed` → danger "Removed"; `beta` → accent "Beta". Use `variant` + `text` directly for custom chips. */
|
|
20
|
+
status: 'new' | 'updated' | 'deprecated' | 'removed' | 'beta';
|
|
21
|
+
/** Badge text content. Falls back to existing textContent. */
|
|
22
|
+
text: string;
|
|
23
|
+
/** Badge display text. Renderer routes this to the `text` attribute via CSS attr(text) on ::after. */
|
|
24
|
+
textContent: string;
|
|
25
|
+
/** Semantic color variant. */
|
|
26
|
+
variant: 'default' | 'accent' | 'info' | 'success' | 'warning' | 'danger' | 'primary' | 'muted' | 'neutral';
|
|
27
|
+
}
|
|
@@ -1,83 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* <badge-ui text="3" variant="danger" size="sm"></badge-ui>
|
|
4
|
-
* <badge-ui text="Organic" variant="accent" icon="dot"></badge-ui> ← chart legend chip
|
|
5
|
-
* <badge-ui status="beta"></badge-ui> ← status shorthand
|
|
2
|
+
* `<badge-ui>` — auto-registers the tag on import.
|
|
6
3
|
*
|
|
7
|
-
*
|
|
4
|
+
* For non-side-effect class import (test isolation, tag override), use
|
|
5
|
+
* the `class` subpath:
|
|
8
6
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* markers). Inherits the variant's foreground color so legend chips
|
|
13
|
-
* read as a single visual unit instead of icon + label collage.
|
|
14
|
-
* Status: semantic shorthand that auto-maps variant + text.
|
|
7
|
+
* import { UIBadge } from '@adia-ai/web-components/components/badge/class';
|
|
8
|
+
*
|
|
9
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
15
10
|
*/
|
|
16
11
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
const STATUS_MAP = {
|
|
20
|
-
new: { variant: 'success', text: 'New' },
|
|
21
|
-
updated: { variant: 'info', text: 'Updated' },
|
|
22
|
-
deprecated: { variant: 'warning', text: 'Deprecated' },
|
|
23
|
-
removed: { variant: 'danger', text: 'Removed' },
|
|
24
|
-
beta: { variant: 'accent', text: 'Beta' },
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
class UIBadge extends UIElement {
|
|
28
|
-
static properties = {
|
|
29
|
-
text: { type: String, default: '', reflect: true },
|
|
30
|
-
textContent: { type: String, default: '' },
|
|
31
|
-
variant: { type: String, default: 'default', reflect: true },
|
|
32
|
-
size: { type: String, default: 'md', reflect: true },
|
|
33
|
-
icon: { type: String, default: '', reflect: true },
|
|
34
|
-
status: { type: String, default: '', reflect: true },
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
static template = () => null;
|
|
38
|
-
|
|
39
|
-
connected() {
|
|
40
|
-
/* Default role is `status` (matches badge's "passive callout" semantic
|
|
41
|
-
— a screen reader announces the badge text as a state without
|
|
42
|
-
interrupting). Consumers that wire interactivity (e.g.
|
|
43
|
-
`<chart-legend-ui>` toggling series) are free to set
|
|
44
|
-
`role="button"` (or any other role) before connection — we don't
|
|
45
|
-
overwrite an explicit consumer choice. */
|
|
46
|
-
if (!this.hasAttribute('role')) {
|
|
47
|
-
this.setAttribute('role', 'status');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
render() {
|
|
52
|
-
// Status shorthand wins over explicit variant/text while it's set —
|
|
53
|
-
// mixing is unsupported. Converges in one extra render pass.
|
|
54
|
-
if (this.status) {
|
|
55
|
-
const entry = STATUS_MAP[this.status];
|
|
56
|
-
if (entry) {
|
|
57
|
-
if (this.variant !== entry.variant) this.variant = entry.variant;
|
|
58
|
-
if (this.text !== entry.text) this.text = entry.text;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (this.text) this.setAttribute('aria-label', this.text);
|
|
12
|
+
import { defineIfFree } from '../../core/register.js';
|
|
13
|
+
import { UIBadge } from './class.js';
|
|
63
14
|
|
|
64
|
-
|
|
65
|
-
// icon-ui element handles loading + cleanup; we just `prepend` so the icon
|
|
66
|
-
// sits before the CSS-rendered text (text is `:scope::after { content }`).
|
|
67
|
-
if (this.icon) {
|
|
68
|
-
const existing = this.querySelector(':scope > icon-ui');
|
|
69
|
-
if (!existing || existing.getAttribute('name') !== this.icon) {
|
|
70
|
-
if (existing) existing.remove();
|
|
71
|
-
const iconEl = document.createElement('icon-ui');
|
|
72
|
-
iconEl.setAttribute('name', this.icon);
|
|
73
|
-
iconEl.setAttribute('size', 'sm');
|
|
74
|
-
this.prepend(iconEl);
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
this.querySelector(':scope > icon-ui')?.remove();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
customElements.define('badge-ui', UIBadge);
|
|
15
|
+
defineIfFree('badge-ui', UIBadge);
|
|
82
16
|
|
|
83
17
|
export { UIBadge };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-side-effect class export for `<badge-ui>`.
|
|
3
|
+
*
|
|
4
|
+
* Importing this file gives you the class(es) without auto-registering the tag.
|
|
5
|
+
* Useful for test isolation, subclassing with tag-name override, or selective
|
|
6
|
+
* composition.
|
|
7
|
+
*
|
|
8
|
+
* The auto-register path stays at `@adia-ai/web-components/components/badge`
|
|
9
|
+
* (which imports this file + calls `defineIfFree()`).
|
|
10
|
+
*
|
|
11
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* <badge-ui text="New" variant="accent"></badge-ui>
|
|
16
|
+
* <badge-ui text="3" variant="danger" size="sm"></badge-ui>
|
|
17
|
+
* <badge-ui text="Organic" variant="accent" icon="dot"></badge-ui> ← chart legend chip
|
|
18
|
+
* <badge-ui status="beta"></badge-ui> ← status shorthand
|
|
19
|
+
*
|
|
20
|
+
* Inline badge / tag. Pill-shaped, text rendered via CSS attr().
|
|
21
|
+
*
|
|
22
|
+
* Variants: default, accent, info, success, warning, danger, primary, muted, neutral
|
|
23
|
+
* Sizes: sm, md (default)
|
|
24
|
+
* Icon: optional leading icon (any registered icon name; "dot" for legend
|
|
25
|
+
* markers). Inherits the variant's foreground color so legend chips
|
|
26
|
+
* read as a single visual unit instead of icon + label collage.
|
|
27
|
+
* Status: semantic shorthand that auto-maps variant + text.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { UIElement } from '../../core/element.js';
|
|
31
|
+
|
|
32
|
+
const STATUS_MAP = {
|
|
33
|
+
new: { variant: 'success', text: 'New' },
|
|
34
|
+
updated: { variant: 'info', text: 'Updated' },
|
|
35
|
+
deprecated: { variant: 'warning', text: 'Deprecated' },
|
|
36
|
+
removed: { variant: 'danger', text: 'Removed' },
|
|
37
|
+
beta: { variant: 'accent', text: 'Beta' },
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export class UIBadge extends UIElement {
|
|
41
|
+
static properties = {
|
|
42
|
+
text: { type: String, default: '', reflect: true },
|
|
43
|
+
textContent: { type: String, default: '' },
|
|
44
|
+
variant: { type: String, default: 'default', reflect: true },
|
|
45
|
+
size: { type: String, default: 'md', reflect: true },
|
|
46
|
+
icon: { type: String, default: '', reflect: true },
|
|
47
|
+
status: { type: String, default: '', reflect: true },
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
static template = () => null;
|
|
51
|
+
|
|
52
|
+
connected() {
|
|
53
|
+
/* Default role is `status` (matches badge's "passive callout" semantic
|
|
54
|
+
— a screen reader announces the badge text as a state without
|
|
55
|
+
interrupting). Consumers that wire interactivity (e.g.
|
|
56
|
+
`<chart-legend-ui>` toggling series) are free to set
|
|
57
|
+
`role="button"` (or any other role) before connection — we don't
|
|
58
|
+
overwrite an explicit consumer choice. */
|
|
59
|
+
if (!this.hasAttribute('role')) {
|
|
60
|
+
this.setAttribute('role', 'status');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
render() {
|
|
65
|
+
// Status shorthand wins over explicit variant/text while it's set —
|
|
66
|
+
// mixing is unsupported. Converges in one extra render pass.
|
|
67
|
+
if (this.status) {
|
|
68
|
+
const entry = STATUS_MAP[this.status];
|
|
69
|
+
if (entry) {
|
|
70
|
+
if (this.variant !== entry.variant) this.variant = entry.variant;
|
|
71
|
+
if (this.text !== entry.text) this.text = entry.text;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (this.text) this.setAttribute('aria-label', this.text);
|
|
76
|
+
|
|
77
|
+
// Stamp / update the leading icon. Pattern mirrors button-ui so the same
|
|
78
|
+
// icon-ui element handles loading + cleanup; we just `prepend` so the icon
|
|
79
|
+
// sits before the CSS-rendered text (text is `:scope::after { content }`).
|
|
80
|
+
if (this.icon) {
|
|
81
|
+
const existing = this.querySelector(':scope > icon-ui');
|
|
82
|
+
if (!existing || existing.getAttribute('name') !== this.icon) {
|
|
83
|
+
if (existing) existing.remove();
|
|
84
|
+
const iconEl = document.createElement('icon-ui');
|
|
85
|
+
iconEl.setAttribute('name', this.icon);
|
|
86
|
+
iconEl.setAttribute('size', 'sm');
|
|
87
|
+
this.prepend(iconEl);
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
this.querySelector(':scope > icon-ui')?.remove();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<block-ui>` — Generic padded/margined content wrapper.
|
|
3
|
+
*
|
|
4
|
+
* @see https://ui-kit.exe.xyz/site/components/block
|
|
5
|
+
*
|
|
6
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
7
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
8
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
9
|
+
* or hand-author this file fully if rich event types are needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { UIElement } from '../../core/element.js';
|
|
13
|
+
|
|
14
|
+
export class UIBlock extends UIElement {
|
|
15
|
+
/** Margin size */
|
|
16
|
+
margin: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
17
|
+
/** Padding amount, maps to spacing tokens */
|
|
18
|
+
padding: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
19
|
+
}
|
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `<block-ui>` — auto-registers the tag on import.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* For non-side-effect class import (test isolation, tag override), use
|
|
5
|
+
* the `class` subpath:
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* import { UIBlock } from '@adia-ai/web-components/components/block/class';
|
|
8
|
+
*
|
|
9
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
class UIBlock extends UIElement {
|
|
14
|
-
static properties = {
|
|
15
|
-
padding: { type: String, default: 'md', reflect: true },
|
|
16
|
-
margin: { type: String, default: 'none', reflect: true },
|
|
17
|
-
};
|
|
12
|
+
import { defineIfFree } from '../../core/register.js';
|
|
13
|
+
import { UIBlock } from './class.js';
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
customElements.define('block-ui', UIBlock);
|
|
15
|
+
defineIfFree('block-ui', UIBlock);
|
|
22
16
|
|
|
23
17
|
export { UIBlock };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-side-effect class export for `<block-ui>`.
|
|
3
|
+
*
|
|
4
|
+
* Importing this file gives you the class(es) without auto-registering the tag.
|
|
5
|
+
* Useful for test isolation, subclassing with tag-name override, or selective
|
|
6
|
+
* composition.
|
|
7
|
+
*
|
|
8
|
+
* The auto-register path stays at `@adia-ai/web-components/components/block`
|
|
9
|
+
* (which imports this file + calls `defineIfFree()`).
|
|
10
|
+
*
|
|
11
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* <block-ui padding="md" margin="lg">Content here</block-ui>
|
|
16
|
+
*
|
|
17
|
+
* Generic padded/margined content wrapper. Pure CSS component.
|
|
18
|
+
*
|
|
19
|
+
* Properties:
|
|
20
|
+
* padding — none | xs | sm | md | lg | xl (default 'md')
|
|
21
|
+
* margin — none | xs | sm | md | lg | xl (default 'none')
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { UIElement } from '../../core/element.js';
|
|
25
|
+
|
|
26
|
+
export class UIBlock extends UIElement {
|
|
27
|
+
static properties = {
|
|
28
|
+
padding: { type: String, default: 'md', reflect: true },
|
|
29
|
+
margin: { type: String, default: 'none', reflect: true },
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
static template = () => null;
|
|
33
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<breadcrumb-ui>` — Breadcrumb trail with auto-inserted separators. Supports a leading icon (first child) and an overflow popover that collapses middle crumbs into a `…` menu.
|
|
3
|
+
*
|
|
4
|
+
* @see https://ui-kit.exe.xyz/site/components/breadcrumb
|
|
5
|
+
*
|
|
6
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
7
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
8
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
9
|
+
* or hand-author this file fully if rich event types are needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { UIElement } from '../../core/element.js';
|
|
13
|
+
|
|
14
|
+
export class UIBreadcrumb extends UIElement {
|
|
15
|
+
/** Collapse middle crumbs into a `…` overflow popover when there are 4+ items. */
|
|
16
|
+
collapse: boolean;
|
|
17
|
+
/** Number of leading items to keep visible when [collapse] is active. The first item (often a home/icon link) sits before the overflow popover. */
|
|
18
|
+
collapseKeepLeading: number;
|
|
19
|
+
/** Number of trailing items to keep visible when [collapse] is active. The last item is always the current page. */
|
|
20
|
+
collapseKeepTrailing: number;
|
|
21
|
+
/** Character or string rendered between breadcrumb items via CSS ::before. */
|
|
22
|
+
separator: string;
|
|
23
|
+
}
|