@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
package/components/kbd/kbd.yaml
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# Generated by scripts/migrate-yamls-to-v1.mjs — migrated to v1 contract.
|
|
2
|
-
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
3
1
|
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
4
2
|
name: UIKbd
|
|
5
3
|
tag: kbd-ui
|
|
@@ -11,207 +9,78 @@ props:
|
|
|
11
9
|
size:
|
|
12
10
|
description: Sizing scale (compact tier — sm / md only).
|
|
13
11
|
type: string
|
|
14
|
-
default:
|
|
12
|
+
default: ''
|
|
15
13
|
enum:
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
- sm
|
|
15
|
+
- md
|
|
18
16
|
reflect: true
|
|
19
17
|
events: {}
|
|
20
18
|
slots:
|
|
21
19
|
default:
|
|
22
20
|
description: Key label text
|
|
23
21
|
states:
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
- name: idle
|
|
23
|
+
description: Default, ready for interaction.
|
|
26
24
|
traits: []
|
|
27
25
|
tokens: {}
|
|
28
26
|
a2ui:
|
|
29
27
|
rules: []
|
|
30
28
|
anti_patterns: []
|
|
31
29
|
examples:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"id": "sec",
|
|
59
|
-
"component": "Section",
|
|
60
|
-
"children": [
|
|
61
|
-
"grid"
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"id": "grid",
|
|
66
|
-
"component": "Grid",
|
|
67
|
-
"columns": 1,
|
|
68
|
-
"gap": "2",
|
|
69
|
-
"children": [
|
|
70
|
-
"r1",
|
|
71
|
-
"r2",
|
|
72
|
-
"r3",
|
|
73
|
-
"r4",
|
|
74
|
-
"r5",
|
|
75
|
-
"r6"
|
|
76
|
-
]
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"id": "r1",
|
|
80
|
-
"component": "Row",
|
|
81
|
-
"children": [
|
|
82
|
-
"k1",
|
|
83
|
-
"d1"
|
|
84
|
-
]
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"id": "k1",
|
|
88
|
-
"component": "Kbd",
|
|
89
|
-
"text": "Ctrl+K"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"id": "d1",
|
|
93
|
-
"component": "Text",
|
|
94
|
-
"textContent": "Open command palette"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"id": "r2",
|
|
98
|
-
"component": "Row",
|
|
99
|
-
"children": [
|
|
100
|
-
"k2",
|
|
101
|
-
"d2"
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"id": "k2",
|
|
106
|
-
"component": "Kbd",
|
|
107
|
-
"text": "Ctrl+S"
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
"id": "d2",
|
|
111
|
-
"component": "Text",
|
|
112
|
-
"textContent": "Save current file"
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
"id": "r3",
|
|
116
|
-
"component": "Row",
|
|
117
|
-
"children": [
|
|
118
|
-
"k3",
|
|
119
|
-
"d3"
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"id": "k3",
|
|
124
|
-
"component": "Kbd",
|
|
125
|
-
"text": "Ctrl+Z"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"id": "d3",
|
|
129
|
-
"component": "Text",
|
|
130
|
-
"textContent": "Undo last action"
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
"id": "r4",
|
|
134
|
-
"component": "Row",
|
|
135
|
-
"children": [
|
|
136
|
-
"k4",
|
|
137
|
-
"d4"
|
|
138
|
-
]
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"id": "k4",
|
|
142
|
-
"component": "Kbd",
|
|
143
|
-
"text": "Ctrl+Shift+P"
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
"id": "d4",
|
|
147
|
-
"component": "Text",
|
|
148
|
-
"textContent": "Toggle preview"
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"id": "r5",
|
|
152
|
-
"component": "Row",
|
|
153
|
-
"children": [
|
|
154
|
-
"k5",
|
|
155
|
-
"d5"
|
|
156
|
-
]
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
"id": "k5",
|
|
160
|
-
"component": "Kbd",
|
|
161
|
-
"text": "Ctrl+N"
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
"id": "d5",
|
|
165
|
-
"component": "Text",
|
|
166
|
-
"textContent": "Create new document"
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
"id": "r6",
|
|
170
|
-
"component": "Row",
|
|
171
|
-
"children": [
|
|
172
|
-
"k6",
|
|
173
|
-
"d6"
|
|
174
|
-
]
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"id": "k6",
|
|
178
|
-
"component": "Kbd",
|
|
179
|
-
"text": "Esc"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"id": "d6",
|
|
183
|
-
"component": "Text",
|
|
184
|
-
"textContent": "Close dialog"
|
|
185
|
-
}
|
|
186
|
-
]
|
|
30
|
+
- name: kbd-shortcuts
|
|
31
|
+
description: Card displaying a grid of keyboard shortcut rows with key badges and descriptions.
|
|
32
|
+
a2ui: "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"hdr\",\n \"sec\"\n\
|
|
33
|
+
\ ]\n },\n {\n \"id\": \"hdr\",\n \"component\": \"Header\",\n \"children\": [\n \"title\"\n ]\n\
|
|
34
|
+
\ },\n {\n \"id\": \"title\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"\
|
|
35
|
+
Keyboard Shortcuts\"\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"\
|
|
36
|
+
grid\"\n ]\n },\n {\n \"id\": \"grid\",\n \"component\": \"Grid\",\n \"columns\": 1,\n \"gap\": \"2\"\
|
|
37
|
+
,\n \"children\": [\n \"r1\",\n \"r2\",\n \"r3\",\n \"r4\",\n \"r5\",\n \"r6\"\n ]\n\
|
|
38
|
+
\ },\n {\n \"id\": \"r1\",\n \"component\": \"Row\",\n \"children\": [\n \"k1\",\n \"d1\"\n ]\n\
|
|
39
|
+
\ },\n {\n \"id\": \"k1\",\n \"component\": \"Kbd\",\n \"text\": \"Ctrl+K\"\n },\n {\n \"id\": \"d1\"\
|
|
40
|
+
,\n \"component\": \"Text\",\n \"textContent\": \"Open command palette\"\n },\n {\n \"id\": \"r2\",\n \"\
|
|
41
|
+
component\": \"Row\",\n \"children\": [\n \"k2\",\n \"d2\"\n ]\n },\n {\n \"id\": \"k2\",\n \"\
|
|
42
|
+
component\": \"Kbd\",\n \"text\": \"Ctrl+S\"\n },\n {\n \"id\": \"d2\",\n \"component\": \"Text\",\n \"\
|
|
43
|
+
textContent\": \"Save current file\"\n },\n {\n \"id\": \"r3\",\n \"component\": \"Row\",\n \"children\": [\n\
|
|
44
|
+
\ \"k3\",\n \"d3\"\n ]\n },\n {\n \"id\": \"k3\",\n \"component\": \"Kbd\",\n \"text\": \"Ctrl+Z\"\
|
|
45
|
+
\n },\n {\n \"id\": \"d3\",\n \"component\": \"Text\",\n \"textContent\": \"Undo last action\"\n },\n {\n\
|
|
46
|
+
\ \"id\": \"r4\",\n \"component\": \"Row\",\n \"children\": [\n \"k4\",\n \"d4\"\n ]\n },\n {\n\
|
|
47
|
+
\ \"id\": \"k4\",\n \"component\": \"Kbd\",\n \"text\": \"Ctrl+Shift+P\"\n },\n {\n \"id\": \"d4\",\n \
|
|
48
|
+
\ \"component\": \"Text\",\n \"textContent\": \"Toggle preview\"\n },\n {\n \"id\": \"r5\",\n \"component\"\
|
|
49
|
+
: \"Row\",\n \"children\": [\n \"k5\",\n \"d5\"\n ]\n },\n {\n \"id\": \"k5\",\n \"component\"\
|
|
50
|
+
: \"Kbd\",\n \"text\": \"Ctrl+N\"\n },\n {\n \"id\": \"d5\",\n \"component\": \"Text\",\n \"textContent\"\
|
|
51
|
+
: \"Create new document\"\n },\n {\n \"id\": \"r6\",\n \"component\": \"Row\",\n \"children\": [\n \"\
|
|
52
|
+
k6\",\n \"d6\"\n ]\n },\n {\n \"id\": \"k6\",\n \"component\": \"Kbd\",\n \"text\": \"Esc\"\n },\n\
|
|
53
|
+
\ {\n \"id\": \"d6\",\n \"component\": \"Text\",\n \"textContent\": \"Close dialog\"\n }\n]"
|
|
187
54
|
keywords:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
55
|
+
- kbd
|
|
56
|
+
- command
|
|
57
|
+
- shortcut
|
|
58
|
+
- hotkey
|
|
59
|
+
- keyboard
|
|
60
|
+
- keybinding
|
|
194
61
|
synonyms:
|
|
195
62
|
command:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
63
|
+
- command
|
|
64
|
+
- palette
|
|
65
|
+
- kbd
|
|
66
|
+
- shortcut
|
|
200
67
|
hotkey:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
68
|
+
- kbd
|
|
69
|
+
- shortcut
|
|
70
|
+
- command
|
|
204
71
|
keybinding:
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
72
|
+
- kbd
|
|
73
|
+
- shortcut
|
|
74
|
+
- command
|
|
208
75
|
keyboard:
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
76
|
+
- kbd
|
|
77
|
+
- shortcut
|
|
78
|
+
- command
|
|
212
79
|
shortcut:
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
80
|
+
- kbd
|
|
81
|
+
- shortcut
|
|
82
|
+
- command
|
|
83
|
+
tags:
|
|
84
|
+
- Keyboard
|
|
216
85
|
related:
|
|
217
|
-
|
|
86
|
+
- grid
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-side-effect class export for `<link-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/link`
|
|
9
|
+
* (which imports this file + calls `defineIfFree()`).
|
|
10
|
+
*
|
|
11
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* <link-ui> — Inline navigation primitive.
|
|
16
|
+
*
|
|
17
|
+
* <link-ui text="Terms of Service" href="/terms"></link-ui>
|
|
18
|
+
* <link-ui href="https://example.com" target="_blank">Read more</link-ui>
|
|
19
|
+
* <link-ui text="Sign in" variant="quiet" href="/signin"></link-ui>
|
|
20
|
+
*
|
|
21
|
+
* Semantic <a href> wrapper for cross-page navigation. Sibling of
|
|
22
|
+
* <button-ui> — the two are NOT interchangeable:
|
|
23
|
+
* - <button-ui>: triggers an action (submit, open modal, copy, run handler)
|
|
24
|
+
* - <link-ui>: navigates to a URL (real <a href> under the hood)
|
|
25
|
+
*
|
|
26
|
+
* The previous design conflated these via `<button-ui variant="link">`,
|
|
27
|
+
* which produced a button DOM with link-look styling — accessibility
|
|
28
|
+
* trees announced "button" for things screen-reader users expected to
|
|
29
|
+
* be links, middle-click did nothing instead of opening new tabs,
|
|
30
|
+
* search engines didn't see the link targets.
|
|
31
|
+
*
|
|
32
|
+
* Implementation: stamps an internal <a> element on connected() unless
|
|
33
|
+
* a child <a> is already present (slot-passthrough mode for advanced
|
|
34
|
+
* authoring). Renders the `text` prop into a <span> inside the <a>.
|
|
35
|
+
* For target="_blank", auto-adds rel="noopener noreferrer" unless an
|
|
36
|
+
* explicit rel is set.
|
|
37
|
+
*
|
|
38
|
+
* Properties:
|
|
39
|
+
* text — visible label
|
|
40
|
+
* href — destination URL (required for native nav semantics)
|
|
41
|
+
* target — _self | _blank | _parent | _top
|
|
42
|
+
* rel — explicit rel (defaults to noopener noreferrer for _blank)
|
|
43
|
+
* variant — default | subtle | quiet
|
|
44
|
+
* block — full-width row
|
|
45
|
+
* disabled — suppress activation
|
|
46
|
+
* icon — optional leading Phosphor icon
|
|
47
|
+
*
|
|
48
|
+
* Events:
|
|
49
|
+
* press — bubbles on click/Enter with detail { href, target }. Fires
|
|
50
|
+
* BEFORE native navigation. preventDefault() the underlying
|
|
51
|
+
* click event to suppress native nav and route through the
|
|
52
|
+
* A2UI action-handler system.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
import { UIElement } from '../../core/element.js';
|
|
56
|
+
|
|
57
|
+
export class UILink extends UIElement {
|
|
58
|
+
static properties = {
|
|
59
|
+
text: { type: String, default: '', reflect: true },
|
|
60
|
+
href: { type: String, default: '', reflect: true },
|
|
61
|
+
target: { type: String, default: '', reflect: true },
|
|
62
|
+
rel: { type: String, default: '', reflect: true },
|
|
63
|
+
variant: { type: String, default: 'default', reflect: true },
|
|
64
|
+
block: { type: Boolean, default: false, reflect: true },
|
|
65
|
+
disabled: { type: Boolean, default: false, reflect: true },
|
|
66
|
+
icon: { type: String, default: '', reflect: true },
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
static template = () => null;
|
|
70
|
+
|
|
71
|
+
#onClick = (e) => {
|
|
72
|
+
if (this.disabled) {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Dispatch press BEFORE native navigation so handlers can intercept.
|
|
77
|
+
const detail = { href: this.href, target: this.target };
|
|
78
|
+
const press = new CustomEvent('press', {
|
|
79
|
+
bubbles: true,
|
|
80
|
+
cancelable: true,
|
|
81
|
+
detail,
|
|
82
|
+
});
|
|
83
|
+
const allowed = this.dispatchEvent(press);
|
|
84
|
+
// If a handler called preventDefault on the press event, suppress
|
|
85
|
+
// the underlying anchor's native navigation too.
|
|
86
|
+
if (!allowed) e.preventDefault();
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
#onKey = (e) => {
|
|
90
|
+
// Links are activated by Enter only (NOT Space — that's button
|
|
91
|
+
// semantics). The native <a> handles this already, but we wire it
|
|
92
|
+
// explicitly for the disabled-suppression case.
|
|
93
|
+
if (this.disabled && e.key === 'Enter') {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
#ensureAnchor() {
|
|
99
|
+
// If author provided their own <a> child, leave it alone. Otherwise
|
|
100
|
+
// stamp one with the configured href/target/rel and mark it as
|
|
101
|
+
// autostamped so render() knows it owns the anchor's attrs +
|
|
102
|
+
// content. Slot-passthrough mode (author <a> child) preserves all
|
|
103
|
+
// author-set attrs across re-renders.
|
|
104
|
+
let a = this.querySelector(':scope > a');
|
|
105
|
+
if (!a) {
|
|
106
|
+
a = document.createElement('a');
|
|
107
|
+
a.dataset.autostamped = 'true';
|
|
108
|
+
this.appendChild(a);
|
|
109
|
+
}
|
|
110
|
+
// Move any direct text/icon children into the anchor so they inherit
|
|
111
|
+
// its semantics. Skip nodes already inside the anchor.
|
|
112
|
+
const toMove = [];
|
|
113
|
+
for (const node of this.childNodes) {
|
|
114
|
+
if (node === a) continue;
|
|
115
|
+
if (node.parentNode === this) toMove.push(node);
|
|
116
|
+
}
|
|
117
|
+
for (const node of toMove) a.appendChild(node);
|
|
118
|
+
return a;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
connected() {
|
|
122
|
+
const a = this.#ensureAnchor();
|
|
123
|
+
this.addEventListener('click', this.#onClick);
|
|
124
|
+
this.addEventListener('keydown', this.#onKey);
|
|
125
|
+
// Disabled handling — aria-disabled rather than removing href, so
|
|
126
|
+
// the disabled state is announced to screen readers.
|
|
127
|
+
if (this.disabled) this.setAttribute('aria-disabled', 'true');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
render() {
|
|
131
|
+
const a = this.querySelector(':scope > a');
|
|
132
|
+
if (!a) return;
|
|
133
|
+
|
|
134
|
+
// Slot-passthrough detection: if the author provided their own <a>
|
|
135
|
+
// child, leave its href/target/rel alone — they intentionally
|
|
136
|
+
// configured the anchor directly. We only manage anchors we
|
|
137
|
+
// auto-stamped (marked via data-autostamped).
|
|
138
|
+
const isAutostamped = a.dataset.autostamped === 'true';
|
|
139
|
+
|
|
140
|
+
if (isAutostamped) {
|
|
141
|
+
// href: empty string = no native nav, but element is still
|
|
142
|
+
// activatable via press event (handler-driven navigation).
|
|
143
|
+
if (this.href) a.setAttribute('href', this.href);
|
|
144
|
+
else a.removeAttribute('href');
|
|
145
|
+
|
|
146
|
+
// target: passed through verbatim.
|
|
147
|
+
if (this.target) a.setAttribute('target', this.target);
|
|
148
|
+
else a.removeAttribute('target');
|
|
149
|
+
|
|
150
|
+
// rel: explicit rel wins; otherwise auto-add noopener noreferrer
|
|
151
|
+
// for _blank to prevent tab-napping / referrer leakage.
|
|
152
|
+
if (this.rel) {
|
|
153
|
+
a.setAttribute('rel', this.rel);
|
|
154
|
+
} else if (this.target === '_blank') {
|
|
155
|
+
a.setAttribute('rel', 'noopener noreferrer');
|
|
156
|
+
} else {
|
|
157
|
+
a.removeAttribute('rel');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Disabled — keep the anchor in the tree (so SR announcement works)
|
|
162
|
+
// but communicate state via aria-disabled. Click handler short-
|
|
163
|
+
// circuits when disabled is set. This applies to both autostamped
|
|
164
|
+
// and slot-passthrough modes.
|
|
165
|
+
if (this.disabled) {
|
|
166
|
+
this.setAttribute('aria-disabled', 'true');
|
|
167
|
+
a.setAttribute('tabindex', '-1');
|
|
168
|
+
} else {
|
|
169
|
+
this.removeAttribute('aria-disabled');
|
|
170
|
+
a.removeAttribute('tabindex');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// text + icon — stamp into the anchor when the props are set and
|
|
174
|
+
// this is an autostamped anchor. Don't touch author-provided
|
|
175
|
+
// anchors' content.
|
|
176
|
+
if (isAutostamped) {
|
|
177
|
+
const iconHTML = this.icon ? `<icon-ui name="${this.icon}"></icon-ui>` : '';
|
|
178
|
+
const textHTML = this.text ? `<span>${this.text}</span>` : '';
|
|
179
|
+
a.innerHTML = `${iconHTML}${textHTML}`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
disconnected() {
|
|
184
|
+
this.removeEventListener('click', this.#onClick);
|
|
185
|
+
this.removeEventListener('keydown', this.#onKey);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<link-ui>` — Inline navigation primitive — semantic `<a href>` wrapper. Use for
|
|
3
|
+
cross-page navigation, footer / Terms-of-Service / Privacy-Policy
|
|
4
|
+
inline references, "Sign in" / "Sign up" cross-page links, and any
|
|
5
|
+
affordance whose purpose is to take the user somewhere (not to
|
|
6
|
+
perform an action).
|
|
7
|
+
|
|
8
|
+
Sibling of `<button-ui>` — they have separate semantics and must
|
|
9
|
+
not be substituted for each other:
|
|
10
|
+
|
|
11
|
+
| Affordance | Use |
|
|
12
|
+
|---------------------------|----------------|
|
|
13
|
+
| Submit form | `<button-ui>` |
|
|
14
|
+
| Trigger action / modal | `<button-ui>` |
|
|
15
|
+
| Copy to clipboard | `<button-ui>` |
|
|
16
|
+
| Open modal / drawer | `<button-ui>` |
|
|
17
|
+
| Navigate to another page | `<link-ui>` |
|
|
18
|
+
| Open external URL | `<link-ui>` |
|
|
19
|
+
| Anchor jump (#section) | `<link-ui>` |
|
|
20
|
+
| Inline reference in prose | `<link-ui>` |
|
|
21
|
+
|
|
22
|
+
Renders `<a href="…">` internally so middle-click open-in-new-tab,
|
|
23
|
+
right-click context menu, hover URL preview, search-engine
|
|
24
|
+
crawlability, and bookmark-ability all work without any custom
|
|
25
|
+
wiring. ARIA role is "link" (set automatically by `<a>` element).
|
|
26
|
+
|
|
27
|
+
*
|
|
28
|
+
* @see https://ui-kit.exe.xyz/site/components/link
|
|
29
|
+
*
|
|
30
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
31
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
32
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
33
|
+
* or hand-author this file fully if rich event types are needed.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { UIElement } from '../../core/element.js';
|
|
37
|
+
|
|
38
|
+
export class UILink extends UIElement {
|
|
39
|
+
/** Stretches the link to fill its container; useful for standalone link rows. */
|
|
40
|
+
block: boolean;
|
|
41
|
+
/** Suppresses navigation + applies muted styling. Sets aria-disabled. */
|
|
42
|
+
disabled: boolean;
|
|
43
|
+
/** Destination URL or anchor. Required for SEO / middle-click / hover preview semantics. If omitted, the link still dispatches the `press` event (so it can be wired through the A2UI action handler system via `handler: "navigate"`), but loses native link behaviors. */
|
|
44
|
+
href: string;
|
|
45
|
+
/** Optional leading icon (Phosphor name). Use sparingly — most inline links don't need an icon. For "open in new tab" affordance, the `target="_blank"` attribute auto-renders a trailing arrow-up-right glyph; the `icon` prop is for leading semantic icons. */
|
|
46
|
+
icon: string;
|
|
47
|
+
/** Explicit `rel` attribute. Defaults to `noopener noreferrer` when `target="_blank"` is set without an explicit rel. */
|
|
48
|
+
rel: string;
|
|
49
|
+
/** Anchor target — same semantics as HTML `<a target>`. Use `_blank` to open in new tab; the implementation automatically adds `rel="noopener noreferrer"` for `_blank` to prevent tab-napping / privacy leaks. */
|
|
50
|
+
target: '' | '_self' | '_blank' | '_parent' | '_top';
|
|
51
|
+
/** Visible link text. Falls back to default-slot content if unset. */
|
|
52
|
+
text: string;
|
|
53
|
+
/** Visual treatment. `default` underlines on rest + hover (standard link affordance). `subtle` underlines only on hover (for tighter designs where always-underlined would be noisy). `quiet` drops the link color and matches surrounding text color (used for footer-link rows where the link affordance is implied by context, not by color). */
|
|
54
|
+
variant: 'default' | 'subtle' | 'quiet';
|
|
55
|
+
}
|