@adia-ai/web-components 0.6.34 → 0.6.35
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 +42 -0
- package/color/index.js +1 -1
- package/components/accordion/accordion-item.yaml +2 -2
- package/components/accordion/accordion.js +1 -1
- package/components/action-list/action-item.yaml +2 -2
- package/components/action-list/action-list.js +1 -1
- package/components/agent-artifact/{class.js → agent-artifact.class.js} +1 -1
- package/components/agent-artifact/agent-artifact.js +1 -1
- package/components/agent-feedback-bar/agent-feedback-bar.js +1 -1
- package/components/agent-questions/agent-questions.js +1 -1
- package/components/agent-reasoning/agent-reasoning.js +1 -1
- package/components/agent-suggestions/agent-suggestions.js +1 -1
- package/components/alert/alert.a2ui.json +64 -1
- package/components/alert/{class.js → alert.class.js} +189 -2
- package/components/alert/alert.css +78 -0
- package/components/alert/alert.d.ts +14 -0
- package/components/alert/alert.js +1 -1
- package/components/alert/alert.test.js +184 -0
- package/components/alert/alert.yaml +114 -1
- package/components/avatar/avatar-group.yaml +2 -2
- package/components/avatar/avatar.js +1 -1
- package/components/badge/badge.js +1 -1
- package/components/block/block.js +1 -1
- package/components/breadcrumb/breadcrumb.js +1 -1
- package/components/button/button.js +1 -1
- package/components/calendar-grid/calendar-grid.a2ui.json +10 -0
- package/components/calendar-grid/{class.js → calendar-grid.class.js} +30 -4
- package/components/calendar-grid/calendar-grid.css +20 -0
- package/components/calendar-grid/calendar-grid.d.ts +4 -0
- package/components/calendar-grid/calendar-grid.js +1 -1
- package/components/calendar-grid/calendar-grid.yaml +20 -0
- package/components/calendar-picker/calendar-picker.js +1 -1
- package/components/card/card.js +1 -1
- package/components/chart/chart.js +1 -1
- package/components/chart-legend/chart-legend.js +1 -1
- package/components/chat-thread/chat-input.a2ui.json +1 -1
- package/components/chat-thread/chat-input.js +6 -1
- package/components/chat-thread/chat-input.yaml +4 -1
- package/components/chat-thread/chat-thread.js +1 -1
- package/components/check/check.js +1 -1
- package/components/code/code.js +1 -1
- package/components/col/col.js +1 -1
- package/components/color-input/color-input.js +1 -1
- package/components/color-picker/color-picker.js +1 -1
- package/components/combobox/combobox.js +1 -1
- package/components/command/command.js +1 -1
- package/components/date-range-picker/{class.js → date-range-picker.class.js} +18 -2
- package/components/date-range-picker/date-range-picker.css +51 -5
- package/components/date-range-picker/date-range-picker.js +1 -1
- package/components/datetime-picker/{class.js → datetime-picker.class.js} +1 -1
- package/components/datetime-picker/datetime-picker.js +1 -1
- package/components/demo-toggle/demo-toggle.js +1 -1
- package/components/description-list/description-list.js +1 -1
- package/components/divider/divider.js +1 -1
- package/components/drawer/drawer.js +1 -1
- package/components/embed/embed.js +1 -1
- package/components/empty-state/empty-state.js +1 -1
- package/components/feed/feed.js +1 -1
- package/components/field/field.js +1 -1
- package/components/field/field.test.js +1 -1
- package/components/fields/fields.js +1 -1
- package/components/grid/grid.js +1 -1
- package/components/heatmap/heatmap.js +1 -1
- package/components/icon/icon.js +1 -1
- package/components/image/image.js +1 -1
- package/components/index.js +3 -0
- package/components/inline-message/inline-message.a2ui.json +143 -0
- package/components/inline-message/inline-message.class.js +169 -0
- package/components/inline-message/inline-message.css +75 -0
- package/components/inline-message/inline-message.d.ts +31 -0
- package/components/inline-message/inline-message.examples.md +19 -0
- package/components/inline-message/inline-message.js +17 -0
- package/components/inline-message/inline-message.test.js +203 -0
- package/components/inline-message/inline-message.yaml +205 -0
- package/components/input/input.css +1 -1
- package/components/input/input.js +1 -1
- package/components/input/input.yaml +5 -4
- package/components/inspector/inspector.js +1 -1
- package/components/integration-card/integration-card.js +1 -1
- package/components/kbd/kbd.js +1 -1
- package/components/link/link.js +1 -1
- package/components/list/list-item.yaml +2 -2
- package/components/list/list.js +1 -1
- package/components/list-window/list-window.js +1 -1
- package/components/loading-overlay/loading-overlay.a2ui.json +176 -0
- package/components/loading-overlay/loading-overlay.class.js +203 -0
- package/components/loading-overlay/loading-overlay.css +81 -0
- package/components/loading-overlay/loading-overlay.d.ts +24 -0
- package/components/loading-overlay/loading-overlay.examples.md +50 -0
- package/components/loading-overlay/loading-overlay.js +17 -0
- package/components/loading-overlay/loading-overlay.test.js +257 -0
- package/components/loading-overlay/loading-overlay.yaml +260 -0
- package/components/menu/menu-divider.yaml +1 -1
- package/components/menu/menu-item.yaml +1 -1
- package/components/menu/menu.a2ui.json +3 -0
- package/components/menu/menu.js +1 -1
- package/components/menu/menu.yaml +7 -0
- package/components/modal/{class.js → modal.class.js} +12 -1
- package/components/modal/modal.css +11 -1
- package/components/modal/modal.js +1 -1
- package/components/nav/nav.js +1 -1
- package/components/nav-group/nav-group.js +1 -1
- package/components/nav-item/nav-item.js +1 -1
- package/components/noodles/noodles.js +1 -1
- package/components/option-card/option-card.js +1 -1
- package/components/otp-input/otp-input.js +1 -1
- package/components/page/page.js +1 -1
- package/components/pagination/pagination.js +1 -1
- package/components/pane/pane.js +1 -1
- package/components/pipeline-status/pipeline-status.js +1 -1
- package/components/popover/popover.a2ui.json +8 -1
- package/components/popover/popover.js +1 -1
- package/components/popover/popover.yaml +14 -1
- package/components/progress/progress.js +1 -1
- package/components/progress-row/progress-row.js +1 -1
- package/components/radio/radio.js +1 -1
- package/components/range/range.js +1 -1
- package/components/rating/rating.js +1 -1
- package/components/richtext/richtext.js +1 -1
- package/components/row/row.js +1 -1
- package/components/search/search.js +1 -1
- package/components/segment/segment.js +1 -1
- package/components/segmented/segmented.js +1 -1
- package/components/select/select.a2ui.json +58 -4
- package/components/select/{class.js → select.class.js} +415 -6
- package/components/select/select.css +158 -0
- package/components/select/select.d.ts +31 -1
- package/components/select/select.js +1 -1
- package/components/select/select.test.js +202 -0
- package/components/select/select.yaml +126 -5
- package/components/skeleton/skeleton.js +1 -1
- package/components/slider/slider.js +1 -1
- package/components/spinner/spinner.a2ui.json +3 -2
- package/components/spinner/{class.js → spinner.class.js} +33 -3
- package/components/spinner/spinner.css +91 -35
- package/components/spinner/spinner.d.ts +2 -2
- package/components/spinner/spinner.js +1 -1
- package/components/spinner/spinner.test.js +49 -11
- package/components/spinner/spinner.yaml +9 -1
- package/components/stack/stack.js +1 -1
- package/components/step-progress/step-progress.js +1 -1
- package/components/stepper/stepper-item.yaml +1 -1
- package/components/stepper/stepper.js +1 -1
- package/components/stream/stream.js +1 -1
- package/components/swatch/swatch.js +1 -1
- package/components/swiper/swiper.js +1 -1
- package/components/switch/switch.js +1 -1
- package/components/table/table.css +1 -1
- package/components/table/table.js +1 -1
- package/components/table-toolbar/{class.js → table-toolbar.class.js} +1 -1
- package/components/table-toolbar/table-toolbar.js +1 -1
- package/components/tabs/tab.yaml +2 -2
- package/components/tabs/tabs.js +1 -1
- package/components/tag/tag.js +1 -1
- package/components/tags-input/tags-input.a2ui.json +337 -0
- package/components/tags-input/tags-input.class.js +776 -0
- package/components/tags-input/tags-input.css +201 -0
- package/components/tags-input/tags-input.d.ts +120 -0
- package/components/tags-input/tags-input.examples.md +92 -0
- package/components/tags-input/tags-input.js +17 -0
- package/components/tags-input/tags-input.test.js +368 -0
- package/components/tags-input/tags-input.yaml +367 -0
- package/components/text/text.js +1 -1
- package/components/textarea/textarea.a2ui.json +1 -1
- package/components/textarea/textarea.js +1 -1
- package/components/textarea/textarea.yaml +11 -8
- package/components/time-picker/time-picker.js +1 -1
- package/components/timeline/timeline-item.yaml +2 -2
- package/components/timeline/{class.js → timeline.class.js} +1 -1
- package/components/timeline/timeline.js +1 -1
- package/components/toast/toast.js +1 -1
- package/components/toggle-group/toggle-group.js +1 -1
- package/components/toggle-group/toggle-option.yaml +1 -1
- package/components/toggle-scheme/toggle-scheme.js +1 -1
- package/components/toolbar/toolbar-group.yaml +1 -1
- package/components/toolbar/toolbar.js +1 -1
- package/components/tooltip/tooltip.js +1 -1
- package/components/tree/tree-item.yaml +1 -1
- package/components/tree/tree.js +1 -1
- package/components/upload/upload.js +1 -1
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +111 -90
- package/package.json +3 -3
- package/styles/components.css +3 -0
- /package/components/accordion/{class.js → accordion.class.js} +0 -0
- /package/components/action-list/{class.js → action-list.class.js} +0 -0
- /package/components/agent-feedback-bar/{class.js → agent-feedback-bar.class.js} +0 -0
- /package/components/agent-questions/{class.js → agent-questions.class.js} +0 -0
- /package/components/agent-reasoning/{class.js → agent-reasoning.class.js} +0 -0
- /package/components/agent-suggestions/{class.js → agent-suggestions.class.js} +0 -0
- /package/components/avatar/{class.js → avatar.class.js} +0 -0
- /package/components/badge/{class.js → badge.class.js} +0 -0
- /package/components/block/{class.js → block.class.js} +0 -0
- /package/components/breadcrumb/{class.js → breadcrumb.class.js} +0 -0
- /package/components/button/{class.js → button.class.js} +0 -0
- /package/components/calendar-picker/{class.js → calendar-picker.class.js} +0 -0
- /package/components/card/{class.js → card.class.js} +0 -0
- /package/components/chart/{class.js → chart.class.js} +0 -0
- /package/components/chart-legend/{class.js → chart-legend.class.js} +0 -0
- /package/components/chat-thread/{class.js → chat-thread.class.js} +0 -0
- /package/components/check/{class.js → check.class.js} +0 -0
- /package/components/code/{class.js → code.class.js} +0 -0
- /package/components/col/{class.js → col.class.js} +0 -0
- /package/components/color-input/{class.js → color-input.class.js} +0 -0
- /package/components/color-picker/{class.js → color-picker.class.js} +0 -0
- /package/components/combobox/{class.js → combobox.class.js} +0 -0
- /package/components/command/{class.js → command.class.js} +0 -0
- /package/components/demo-toggle/{class.js → demo-toggle.class.js} +0 -0
- /package/components/description-list/{class.js → description-list.class.js} +0 -0
- /package/components/divider/{class.js → divider.class.js} +0 -0
- /package/components/drawer/{class.js → drawer.class.js} +0 -0
- /package/components/embed/{class.js → embed.class.js} +0 -0
- /package/components/empty-state/{class.js → empty-state.class.js} +0 -0
- /package/components/feed/{class.js → feed.class.js} +0 -0
- /package/components/field/{class.js → field.class.js} +0 -0
- /package/components/fields/{class.js → fields.class.js} +0 -0
- /package/components/grid/{class.js → grid.class.js} +0 -0
- /package/components/heatmap/{class.js → heatmap.class.js} +0 -0
- /package/components/icon/{class.js → icon.class.js} +0 -0
- /package/components/image/{class.js → image.class.js} +0 -0
- /package/components/input/{class.js → input.class.js} +0 -0
- /package/components/inspector/{class.js → inspector.class.js} +0 -0
- /package/components/integration-card/{class.js → integration-card.class.js} +0 -0
- /package/components/kbd/{class.js → kbd.class.js} +0 -0
- /package/components/link/{class.js → link.class.js} +0 -0
- /package/components/list/{class.js → list.class.js} +0 -0
- /package/components/list-window/{class.js → list-window.class.js} +0 -0
- /package/components/menu/{class.js → menu.class.js} +0 -0
- /package/components/nav/{class.js → nav.class.js} +0 -0
- /package/components/nav-group/{class.js → nav-group.class.js} +0 -0
- /package/components/nav-item/{class.js → nav-item.class.js} +0 -0
- /package/components/noodles/{class.js → noodles.class.js} +0 -0
- /package/components/option-card/{class.js → option-card.class.js} +0 -0
- /package/components/otp-input/{class.js → otp-input.class.js} +0 -0
- /package/components/page/{class.js → page.class.js} +0 -0
- /package/components/pagination/{class.js → pagination.class.js} +0 -0
- /package/components/pane/{class.js → pane.class.js} +0 -0
- /package/components/pipeline-status/{class.js → pipeline-status.class.js} +0 -0
- /package/components/popover/{class.js → popover.class.js} +0 -0
- /package/components/progress/{class.js → progress.class.js} +0 -0
- /package/components/progress-row/{class.js → progress-row.class.js} +0 -0
- /package/components/radio/{class.js → radio.class.js} +0 -0
- /package/components/range/{class.js → range.class.js} +0 -0
- /package/components/rating/{class.js → rating.class.js} +0 -0
- /package/components/richtext/{class.js → richtext.class.js} +0 -0
- /package/components/row/{class.js → row.class.js} +0 -0
- /package/components/search/{class.js → search.class.js} +0 -0
- /package/components/segment/{class.js → segment.class.js} +0 -0
- /package/components/segmented/{class.js → segmented.class.js} +0 -0
- /package/components/skeleton/{class.js → skeleton.class.js} +0 -0
- /package/components/slider/{class.js → slider.class.js} +0 -0
- /package/components/stack/{class.js → stack.class.js} +0 -0
- /package/components/step-progress/{class.js → step-progress.class.js} +0 -0
- /package/components/stepper/{class.js → stepper.class.js} +0 -0
- /package/components/stream/{class.js → stream.class.js} +0 -0
- /package/components/swatch/{class.js → swatch.class.js} +0 -0
- /package/components/swiper/{class.js → swiper.class.js} +0 -0
- /package/components/switch/{class.js → switch.class.js} +0 -0
- /package/components/table/{class.js → table.class.js} +0 -0
- /package/components/tabs/{class.js → tabs.class.js} +0 -0
- /package/components/tag/{class.js → tag.class.js} +0 -0
- /package/components/text/{class.js → text.class.js} +0 -0
- /package/components/textarea/{class.js → textarea.class.js} +0 -0
- /package/components/time-picker/{class.js → time-picker.class.js} +0 -0
- /package/components/toast/{class.js → toast.class.js} +0 -0
- /package/components/toggle-group/{class.js → toggle-group.class.js} +0 -0
- /package/components/toggle-scheme/{class.js → toggle-scheme.class.js} +0 -0
- /package/components/toolbar/{class.js → toolbar.class.js} +0 -0
- /package/components/tooltip/{class.js → tooltip.class.js} +0 -0
- /package/components/tree/{class.js → tree.class.js} +0 -0
- /package/components/upload/{class.js → upload.class.js} +0 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# Hand-authored — SPEC-042 (2026-05-24).
|
|
2
|
+
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
3
|
+
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
4
|
+
name: UITagsInput
|
|
5
|
+
tag: tags-input-ui
|
|
6
|
+
status: experimental
|
|
7
|
+
component: TagsInput
|
|
8
|
+
category: input
|
|
9
|
+
version: 1
|
|
10
|
+
description: |
|
|
11
|
+
Free-form token input — type a value, press Enter (or the configured
|
|
12
|
+
delimiter) to commit it as a chip; Backspace from the empty inline
|
|
13
|
+
input removes the last chip. Distinct from <select-ui multiple>
|
|
14
|
+
(SPEC-040), which is constrained to a fixed option list — tags-input
|
|
15
|
+
is for OPEN sets (labels, email recipients, keyword inputs). Per
|
|
16
|
+
ADR-0025 the inline editor is a contenteditable surface (NO native
|
|
17
|
+
`<input>` wrap). Form-bearing via UIFormElement + ElementInternals:
|
|
18
|
+
the form value is a JSON-serialized string array under `[name]`.
|
|
19
|
+
Each rendered chip is a `<tag-ui removable>`; the `remove` event
|
|
20
|
+
delegates back to the host. Optional autocompletion: when
|
|
21
|
+
`.suggestions` is non-empty, a popover renders below the field and
|
|
22
|
+
the host announces as a combobox per WAI-APG.
|
|
23
|
+
# Per ADR-0027 — primitives that programmatically create other primitives
|
|
24
|
+
# do NOT auto-import them. Consumer (or demo shell) must explicitly import.
|
|
25
|
+
composes:
|
|
26
|
+
- tag-ui # rendered per committed token
|
|
27
|
+
- icon-ui # spinner glyph for async validators
|
|
28
|
+
props:
|
|
29
|
+
name:
|
|
30
|
+
description: Form field name. Serializes the token list as JSON under this key.
|
|
31
|
+
type: string
|
|
32
|
+
default: ""
|
|
33
|
+
reflect: true
|
|
34
|
+
value:
|
|
35
|
+
description: |-
|
|
36
|
+
Current token list (string array). Setting `.value = ['a','b']`
|
|
37
|
+
replaces the rendered chips. Reflection skipped — array values
|
|
38
|
+
do not round-trip through attribute strings.
|
|
39
|
+
type: array
|
|
40
|
+
default: []
|
|
41
|
+
dynamic: true
|
|
42
|
+
placeholder:
|
|
43
|
+
description: Placeholder text for the inline input when no chips are committed.
|
|
44
|
+
type: string
|
|
45
|
+
default: Add tag…
|
|
46
|
+
reflect: true
|
|
47
|
+
delimiter:
|
|
48
|
+
description: |-
|
|
49
|
+
Inline character that commits the typed value as a chip. The
|
|
50
|
+
sentinel `enter` disables in-line commit — only the Enter key
|
|
51
|
+
(or programmatic `addToken`) commits. Default is `,`.
|
|
52
|
+
type: string
|
|
53
|
+
default: ","
|
|
54
|
+
reflect: true
|
|
55
|
+
pasteSplit:
|
|
56
|
+
description: |-
|
|
57
|
+
Regex character-class fragment matched against pasted text to
|
|
58
|
+
split it into multiple tokens. Default `,\n` splits on commas
|
|
59
|
+
and newlines. Use `""` to disable paste-splitting entirely.
|
|
60
|
+
type: string
|
|
61
|
+
default: ",\n"
|
|
62
|
+
attribute: paste-split
|
|
63
|
+
reflect: true
|
|
64
|
+
max:
|
|
65
|
+
description: Maximum number of tokens. `0` (default) means unlimited.
|
|
66
|
+
type: number
|
|
67
|
+
default: 0
|
|
68
|
+
reflect: true
|
|
69
|
+
min:
|
|
70
|
+
description: Minimum required tokens for form validity.
|
|
71
|
+
type: number
|
|
72
|
+
default: 0
|
|
73
|
+
reflect: true
|
|
74
|
+
minLength:
|
|
75
|
+
description: Minimum per-token character count after `transform` is applied.
|
|
76
|
+
type: number
|
|
77
|
+
default: 1
|
|
78
|
+
attribute: min-length
|
|
79
|
+
reflect: true
|
|
80
|
+
maxLength:
|
|
81
|
+
description: Maximum per-token character count. `0` (default) means unlimited.
|
|
82
|
+
type: number
|
|
83
|
+
default: 0
|
|
84
|
+
attribute: max-length
|
|
85
|
+
reflect: true
|
|
86
|
+
unique:
|
|
87
|
+
description: Reject duplicate tokens silently (no `invalid` event for accidental dups).
|
|
88
|
+
type: boolean
|
|
89
|
+
default: true
|
|
90
|
+
reflect: true
|
|
91
|
+
transform:
|
|
92
|
+
description: |-
|
|
93
|
+
Normalize tokens on commit. `lowercase` lowercases, `trim` strips
|
|
94
|
+
leading + trailing whitespace, `strip-spaces` removes all
|
|
95
|
+
whitespace, `""` (default) preserves the typed value.
|
|
96
|
+
type: string
|
|
97
|
+
default: ""
|
|
98
|
+
enum:
|
|
99
|
+
- ""
|
|
100
|
+
- lowercase
|
|
101
|
+
- trim
|
|
102
|
+
- strip-spaces
|
|
103
|
+
reflect: true
|
|
104
|
+
suggestions:
|
|
105
|
+
description: |-
|
|
106
|
+
Optional autocomplete strings rendered in a popover below the
|
|
107
|
+
field. Suggestions are hints, not gates — the typed value still
|
|
108
|
+
wins on commit. JS property only (array reflection skipped).
|
|
109
|
+
type: array
|
|
110
|
+
default: []
|
|
111
|
+
dynamic: true
|
|
112
|
+
validateFn:
|
|
113
|
+
description: |-
|
|
114
|
+
Per-token validator. Sync `(value, index) => boolean` rejects
|
|
115
|
+
false synchronously; async `(value, index) => Promise<boolean>`
|
|
116
|
+
flips the host into `[validating]` while pending. JS property
|
|
117
|
+
only — not serializable in A2UI JSON; wire post-mount.
|
|
118
|
+
type: object
|
|
119
|
+
default: null
|
|
120
|
+
dynamic: true
|
|
121
|
+
disabled:
|
|
122
|
+
description: Block all interaction; dim the field.
|
|
123
|
+
type: boolean
|
|
124
|
+
default: false
|
|
125
|
+
reflect: true
|
|
126
|
+
readonly:
|
|
127
|
+
description: Block edits; allow inspection (chips render without remove buttons).
|
|
128
|
+
type: boolean
|
|
129
|
+
default: false
|
|
130
|
+
reflect: true
|
|
131
|
+
required:
|
|
132
|
+
description: Required for form validation. Empty array fails `:invalid`.
|
|
133
|
+
type: boolean
|
|
134
|
+
default: false
|
|
135
|
+
reflect: true
|
|
136
|
+
size:
|
|
137
|
+
description: |-
|
|
138
|
+
Sizing scale via universal `[size]` attribute system. Matches
|
|
139
|
+
Input + Combobox sizing tokens so a TagsInput rendered alongside
|
|
140
|
+
either feels coherent in a form row.
|
|
141
|
+
type: string
|
|
142
|
+
default: md
|
|
143
|
+
enum: [sm, md, lg]
|
|
144
|
+
reflect: true
|
|
145
|
+
events:
|
|
146
|
+
change:
|
|
147
|
+
description: Fired after `value` changes (token added or removed).
|
|
148
|
+
detail:
|
|
149
|
+
value:
|
|
150
|
+
type: array
|
|
151
|
+
description: Current token list (string array).
|
|
152
|
+
added:
|
|
153
|
+
type: array
|
|
154
|
+
description: Tokens added by this change (`[]` when only removals occurred).
|
|
155
|
+
removed:
|
|
156
|
+
type: array
|
|
157
|
+
description: Tokens removed by this change (`[]` when only additions occurred).
|
|
158
|
+
input:
|
|
159
|
+
description: Fired on each keystroke in the inline input (pre-commit).
|
|
160
|
+
detail:
|
|
161
|
+
query:
|
|
162
|
+
type: string
|
|
163
|
+
description: Current typed text in the inline input.
|
|
164
|
+
commit:
|
|
165
|
+
description: |-
|
|
166
|
+
Fired immediately before a token is committed. Call
|
|
167
|
+
`event.preventDefault()` to reject the candidate token.
|
|
168
|
+
detail:
|
|
169
|
+
value:
|
|
170
|
+
type: string
|
|
171
|
+
description: Candidate token text (post-transform).
|
|
172
|
+
accepted:
|
|
173
|
+
type: boolean
|
|
174
|
+
description: True unless the consumer calls `preventDefault()`.
|
|
175
|
+
invalid:
|
|
176
|
+
description: |-
|
|
177
|
+
Fired when a candidate token is rejected. Reasons cover all
|
|
178
|
+
built-in validators and the user-supplied `validateFn`.
|
|
179
|
+
detail:
|
|
180
|
+
value:
|
|
181
|
+
type: string
|
|
182
|
+
description: Rejected token text.
|
|
183
|
+
reason:
|
|
184
|
+
type: string
|
|
185
|
+
description: One of `duplicate` / `too-short` / `too-long` / `validator` / `max`.
|
|
186
|
+
slots:
|
|
187
|
+
chip:
|
|
188
|
+
description: |-
|
|
189
|
+
Custom chip template — receives `{value, index}` per token.
|
|
190
|
+
When absent, each token renders as a default
|
|
191
|
+
`<tag-ui removable text="<value>">`.
|
|
192
|
+
states:
|
|
193
|
+
- name: idle
|
|
194
|
+
description: No tokens; no typed text.
|
|
195
|
+
- name: populated
|
|
196
|
+
description: One or more tokens committed.
|
|
197
|
+
attribute: populated
|
|
198
|
+
- name: editing
|
|
199
|
+
description: User is typing into the inline input.
|
|
200
|
+
attribute: editing
|
|
201
|
+
- name: suggesting
|
|
202
|
+
description: Suggestion popover is open.
|
|
203
|
+
attribute: suggesting
|
|
204
|
+
- name: validating
|
|
205
|
+
description: Async `validateFn` is in flight.
|
|
206
|
+
attribute: validating
|
|
207
|
+
- name: disabled
|
|
208
|
+
description: Non-interactive; dimmed.
|
|
209
|
+
attribute: disabled
|
|
210
|
+
- name: readonly
|
|
211
|
+
description: Read-only; chips render without remove affordance.
|
|
212
|
+
attribute: readonly
|
|
213
|
+
traits: []
|
|
214
|
+
tokens:
|
|
215
|
+
--tags-input-bg:
|
|
216
|
+
description: Host background color.
|
|
217
|
+
--tags-input-fg:
|
|
218
|
+
description: Host foreground (typed-text color).
|
|
219
|
+
--tags-input-border:
|
|
220
|
+
description: Host border color (idle).
|
|
221
|
+
--tags-input-border-hover:
|
|
222
|
+
description: Host border color on hover.
|
|
223
|
+
--tags-input-radius:
|
|
224
|
+
description: Host border radius.
|
|
225
|
+
--tags-input-px:
|
|
226
|
+
description: Horizontal padding inside the chip-cluster wrapper.
|
|
227
|
+
--tags-input-py:
|
|
228
|
+
description: Vertical padding inside the chip-cluster wrapper.
|
|
229
|
+
--tags-input-gap:
|
|
230
|
+
description: Gap between chips and the inline input.
|
|
231
|
+
--tags-input-placeholder-fg:
|
|
232
|
+
description: Placeholder color for the empty inline input.
|
|
233
|
+
--tags-input-focus-ring:
|
|
234
|
+
description: Focus-ring box-shadow when the host is focus-within.
|
|
235
|
+
--tags-input-chip-bg-invalid:
|
|
236
|
+
description: Chip background color when a chip is marked invalid (validator rejection echo).
|
|
237
|
+
requiredIcons:
|
|
238
|
+
- circle-notch
|
|
239
|
+
a2ui:
|
|
240
|
+
rules:
|
|
241
|
+
- >-
|
|
242
|
+
Use <tags-input-ui> for OPEN-SET free-form token entry — labels,
|
|
243
|
+
keywords, email recipients, comma-separated lists. For CLOSED
|
|
244
|
+
option sets (pick N from a fixed list), use <select-ui multiple>
|
|
245
|
+
(SPEC-040) — that primitive gates the value against `options[]`.
|
|
246
|
+
- >-
|
|
247
|
+
`TagsInput.value` MUST be a string array. Pass `["a","b"]`, not
|
|
248
|
+
the comma-joined string `"a,b"`. The host parses string-form
|
|
249
|
+
`value` attributes as JSON; non-array shapes throw `invalid`.
|
|
250
|
+
- >-
|
|
251
|
+
`delimiter: "enter"` disables in-line character commits; only
|
|
252
|
+
the Enter key (or programmatic `addToken`) commits. Use this
|
|
253
|
+
when the token grammar legitimately includes the default `,`.
|
|
254
|
+
- >-
|
|
255
|
+
`unique: true` (default) silently coalesces accidental duplicate
|
|
256
|
+
adds. Do NOT emit `invalid` for those — the contract specifies
|
|
257
|
+
silent dedup for ergonomic typing.
|
|
258
|
+
- >-
|
|
259
|
+
`validateFn` is a JS property, NOT serializable in A2UI JSON.
|
|
260
|
+
Wire validators post-mount via DOM scripting; A2UI authors
|
|
261
|
+
should not expect to declare a validator in the JSON payload.
|
|
262
|
+
- >-
|
|
263
|
+
Chips are rendered automatically from `value`. Do NOT slot
|
|
264
|
+
individual <tag-ui> children manually — that decouples the
|
|
265
|
+
rendered DOM from the form value and breaks Backspace removal.
|
|
266
|
+
anti_patterns:
|
|
267
|
+
- wrong: |
|
|
268
|
+
{"component": "TagsInput", "options": [{"id": "a", "label": "A"}]}
|
|
269
|
+
why: |
|
|
270
|
+
TagsInput does NOT accept `options`. It is the OPEN-set primitive — any
|
|
271
|
+
typed string is valid. For closed option lists, use the multi-select
|
|
272
|
+
primitive with `multiple: true`.
|
|
273
|
+
fix: |
|
|
274
|
+
{"component": "Select", "multiple": true, "options": [{"id": "a", "label": "A"}]}
|
|
275
|
+
- wrong: |
|
|
276
|
+
{"component": "TagsInput", "value": "bug,high-priority"}
|
|
277
|
+
why: |
|
|
278
|
+
Comma-separated string is invalid for `value`. The contract requires
|
|
279
|
+
a string array.
|
|
280
|
+
fix: |
|
|
281
|
+
{"component": "TagsInput", "value": ["bug", "high-priority"]}
|
|
282
|
+
- wrong: |
|
|
283
|
+
{"component": "TagsInput", "children": [
|
|
284
|
+
{"component": "Tag", "text": "Tag 1"}
|
|
285
|
+
]}
|
|
286
|
+
why: |
|
|
287
|
+
Chips are rendered automatically from `value`. Slotting Tag children
|
|
288
|
+
decouples the rendered DOM from the form value and breaks Backspace
|
|
289
|
+
removal + the `change` event payload.
|
|
290
|
+
fix: |
|
|
291
|
+
{"component": "TagsInput", "value": ["Tag 1"]}
|
|
292
|
+
examples:
|
|
293
|
+
- name: canonical-labels
|
|
294
|
+
description: Label input with lowercase normalization + max 10 tags + 2 pre-committed values.
|
|
295
|
+
a2ui: >-
|
|
296
|
+
[
|
|
297
|
+
{"id": "root", "component": "Card", "children": ["sec"]},
|
|
298
|
+
{"id": "sec", "component": "Section", "children": ["field"]},
|
|
299
|
+
{
|
|
300
|
+
"id": "field",
|
|
301
|
+
"component": "Field",
|
|
302
|
+
"label": "Labels",
|
|
303
|
+
"children": ["tags"]
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"id": "tags",
|
|
307
|
+
"component": "TagsInput",
|
|
308
|
+
"name": "labels",
|
|
309
|
+
"placeholder": "Add a label, press Enter",
|
|
310
|
+
"transform": "lowercase",
|
|
311
|
+
"max": 10,
|
|
312
|
+
"value": ["bug", "high-priority"]
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
- name: email-recipients
|
|
316
|
+
description: Recipient picker with Enter-only commit (commas are legal in display names).
|
|
317
|
+
a2ui: >-
|
|
318
|
+
[
|
|
319
|
+
{
|
|
320
|
+
"id": "to",
|
|
321
|
+
"component": "TagsInput",
|
|
322
|
+
"name": "to",
|
|
323
|
+
"placeholder": "Email…",
|
|
324
|
+
"delimiter": "enter",
|
|
325
|
+
"transform": "trim"
|
|
326
|
+
}
|
|
327
|
+
]
|
|
328
|
+
keywords:
|
|
329
|
+
- tags-input
|
|
330
|
+
- tag-input
|
|
331
|
+
- token-input
|
|
332
|
+
- chips-input
|
|
333
|
+
- chip-input
|
|
334
|
+
- labels
|
|
335
|
+
- recipients
|
|
336
|
+
- keywords
|
|
337
|
+
- tags
|
|
338
|
+
- email-input
|
|
339
|
+
- multi-value-input
|
|
340
|
+
synonyms:
|
|
341
|
+
tags-input:
|
|
342
|
+
- tag-input
|
|
343
|
+
- chip-input
|
|
344
|
+
- token-input
|
|
345
|
+
- tokenizer
|
|
346
|
+
token-input:
|
|
347
|
+
- tags-input
|
|
348
|
+
- chip-input
|
|
349
|
+
- tokenizer
|
|
350
|
+
chips-input:
|
|
351
|
+
- tags-input
|
|
352
|
+
- chip-input
|
|
353
|
+
- token-input
|
|
354
|
+
labels:
|
|
355
|
+
- tags
|
|
356
|
+
- tag-input
|
|
357
|
+
- labels-input
|
|
358
|
+
recipients:
|
|
359
|
+
- email-input
|
|
360
|
+
- tags-input
|
|
361
|
+
- to-field
|
|
362
|
+
related:
|
|
363
|
+
- tag
|
|
364
|
+
- select
|
|
365
|
+
- combobox
|
|
366
|
+
- field
|
|
367
|
+
- input
|
package/components/text/text.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://adiaui.dev/a2ui/v0_9/components/Textarea.json",
|
|
4
4
|
"title": "Textarea",
|
|
5
|
-
"description": "Multi-line text input primitive — the host IS the contenteditable\nsurface (per ADR-0025, no native <textarea> wrapped underneath).\nForm-bearing via UIFormElement: [name], [value], [required],\n[disabled], [readonly], fires `change` on blur and `input` per\nkeystroke. Enter inserts a newline
|
|
5
|
+
"description": "Multi-line text input primitive — the host IS the contenteditable\nsurface (per ADR-0025, no native <textarea> wrapped underneath).\nForm-bearing via UIFormElement: [name], [value], [required],\n[disabled], [readonly], fires `change` on blur and `input` per\nkeystroke. Enter (without Shift) dispatches a bubbling `submit`\nevent — Shift+Enter inserts a newline. This is unconditional;\nthere is no opt-in/opt-out attribute. For Enter-to-send composers\nuse <chat-input-ui> inside <chat-composer>. Wrap in <field-ui\nlabel=\"…\"> for the canonical labeled stack.\n",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -12,10 +12,11 @@ description: |
|
|
|
12
12
|
surface (per ADR-0025, no native <textarea> wrapped underneath).
|
|
13
13
|
Form-bearing via UIFormElement: [name], [value], [required],
|
|
14
14
|
[disabled], [readonly], fires `change` on blur and `input` per
|
|
15
|
-
keystroke. Enter
|
|
16
|
-
Enter
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
keystroke. Enter (without Shift) dispatches a bubbling `submit`
|
|
16
|
+
event — Shift+Enter inserts a newline. This is unconditional;
|
|
17
|
+
there is no opt-in/opt-out attribute. For Enter-to-send composers
|
|
18
|
+
use <chat-input-ui> inside <chat-composer>. Wrap in <field-ui
|
|
19
|
+
label="…"> for the canonical labeled stack.
|
|
19
20
|
props:
|
|
20
21
|
disabled:
|
|
21
22
|
description: Disables interaction, removes contenteditable, and dims the control. Inherited from UIFormElement.
|
|
@@ -116,10 +117,12 @@ a2ui:
|
|
|
116
117
|
control user resize. Never substitute a native <textarea> just
|
|
117
118
|
to get rows / resize.
|
|
118
119
|
- >-
|
|
119
|
-
Enter
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
Enter (without Shift) dispatches a bubbling `submit` event;
|
|
121
|
+
Shift+Enter inserts a newline. This is unconditional — there
|
|
122
|
+
is no opt-in/opt-out attribute. For chat composer surfaces
|
|
123
|
+
wrap inside <chat-composer> + <chat-input-ui> (which adds the
|
|
124
|
+
send button + model picker + paste-to-attach plumbing on top
|
|
125
|
+
of the same Enter→submit semantics).
|
|
123
126
|
anti_patterns: []
|
|
124
127
|
examples:
|
|
125
128
|
- name: basic-textarea
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
2
|
#
|
|
3
3
|
# §176 (v0.5.5): authored to close the §175 baseline-orphan class. The
|
|
4
|
-
# component already existed as a sibling class in the parent's class.js
|
|
4
|
+
# component already existed as a sibling class in the parent's timeline.class.js
|
|
5
5
|
# + was registered alongside the parent (e.g. UIList + UIListItem both
|
|
6
|
-
# from list/class.js). The catalog just lacked its own entry. With the
|
|
6
|
+
# from list/list.class.js). The catalog just lacked its own entry. With the
|
|
7
7
|
# §172 sibling-yaml scanner, this file gets picked up next to the parent
|
|
8
8
|
# yaml.
|
|
9
9
|
|
|
@@ -88,7 +88,7 @@ export class UITimelineItem extends UIElement {
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
// §205 (v0.5.7): dynamic chevron icons stamped on expanded-state ternary
|
|
91
|
-
// (class.js:167). Per FEEDBACK-16 §1 + §209 slot-11 ternary-walker discovery.
|
|
91
|
+
// (timeline.class.js:167). Per FEEDBACK-16 §1 + §209 slot-11 ternary-walker discovery.
|
|
92
92
|
// Note: `this.icon` consumer-supplied — not declared here.
|
|
93
93
|
static requiredIcons = ['caret-down', 'caret-right'];
|
|
94
94
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { defineIfFree } from '../../core/register.js';
|
|
13
|
-
import { UITimeline, UITimelineItem } from './class.js';
|
|
13
|
+
import { UITimeline, UITimelineItem } from './timeline.class.js';
|
|
14
14
|
|
|
15
15
|
defineIfFree('timeline-ui', UITimeline);
|
|
16
16
|
defineIfFree('timeline-item-ui', UITimelineItem);
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { defineIfFree } from '../../core/register.js';
|
|
13
|
-
import { UIToggleOption, UIToggleGroup } from './class.js';
|
|
13
|
+
import { UIToggleOption, UIToggleGroup } from './toggle-group.class.js';
|
|
14
14
|
|
|
15
15
|
defineIfFree('toggle-option-ui', UIToggleOption);
|
|
16
16
|
defineIfFree('toggle-group-ui', UIToggleGroup);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
2
|
#
|
|
3
3
|
# §228 (v0.5.9): authored to close the §229 baseline class-export-undeclared
|
|
4
|
-
# drift for UIToggleOption. Ships as a sibling class in toggle-group/class.js
|
|
4
|
+
# drift for UIToggleOption. Ships as a sibling class in toggle-group/toggle-group.class.js
|
|
5
5
|
# + is registered alongside UIToggleGroup.
|
|
6
6
|
|
|
7
7
|
# Child component of <toggle-group-ui>. Surface only inside that parent.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
2
|
#
|
|
3
3
|
# §228 (v0.5.9): authored to close the §229 baseline class-export-undeclared
|
|
4
|
-
# drift for UIToolbarGroup. Ships as a sibling class in toolbar/class.js
|
|
4
|
+
# drift for UIToolbarGroup. Ships as a sibling class in toolbar/toolbar.class.js
|
|
5
5
|
# + is registered alongside UIToolbar.
|
|
6
6
|
|
|
7
7
|
# Child component of <toolbar-ui>. Groups a set of action buttons inside
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { defineIfFree } from '../../core/register.js';
|
|
13
|
-
import { UIToolbar, UIToolbarGroup } from './class.js';
|
|
13
|
+
import { UIToolbar, UIToolbarGroup } from './toolbar.class.js';
|
|
14
14
|
|
|
15
15
|
defineIfFree('toolbar-ui', UIToolbar);
|
|
16
16
|
defineIfFree('toolbar-group-ui', UIToolbarGroup);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# §184 (v0.5.5): authored to close FEEDBACK-08 §1 — tree-item-ui badge
|
|
4
4
|
# attribute + general orphan-class catalog gap. tree-item-ui has shipped
|
|
5
|
-
# since v0.0.x co-located in tree/class.js (UITreeItem) but never had its
|
|
5
|
+
# since v0.0.x co-located in tree/tree.class.js (UITreeItem) but never had its
|
|
6
6
|
# own catalog entry. With §172 sibling-yaml scanner, this file is picked
|
|
7
7
|
# up next to the parent yaml. Mirrors the v0.5.5 §176 sibling-yaml
|
|
8
8
|
# baseline-orphan closure pattern.
|
package/components/tree/tree.js
CHANGED