@adia-ai/web-components 0.8.42 → 0.8.44
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 +44 -0
- package/MIGRATION.md +130 -80
- package/USAGE.md +1 -1
- package/color/index.js +1 -1
- package/components/action-list/action-item.a2ui.json +3 -8
- package/components/action-list/action-item.yaml +10 -16
- package/components/action-list/action-list.class.js +5 -61
- package/components/action-list/action-list.d.ts +1 -3
- package/components/avatar/avatar.class.js +12 -1
- package/components/button/button.d.ts +4 -0
- package/components/button/button.yaml +1 -1
- package/components/calendar-picker/calendar-picker.a2ui.json +1 -1
- package/components/calendar-picker/calendar-picker.class.js +2 -3
- package/components/calendar-picker/calendar-picker.css +16 -18
- package/components/calendar-picker/calendar-picker.yaml +2 -2
- package/components/card/card.css +3 -3
- package/components/chart/chart.a2ui.json +29 -18
- package/components/chart/chart.class.js +1308 -266
- package/components/chart/chart.css +151 -1
- package/components/chart/chart.d.ts +9 -9
- package/components/chart/chart.yaml +63 -31
- package/components/chart-legend/chart-legend.a2ui.json +20 -14
- package/components/chart-legend/chart-legend.class.js +79 -58
- package/components/chart-legend/chart-legend.css +65 -1
- package/components/chart-legend/chart-legend.d.ts +5 -5
- package/components/chart-legend/chart-legend.examples.md +4 -4
- package/components/chart-legend/chart-legend.yaml +50 -20
- package/components/check/check.css +9 -0
- package/components/color-area/color-area.a2ui.json +1 -1
- package/components/color-area/color-area.class.js +2 -2
- package/components/color-area/color-area.css +4 -7
- package/components/color-area/color-area.d.ts +1 -1
- package/components/color-area/color-area.yaml +3 -3
- package/components/color-input/color-input.a2ui.json +1 -1
- package/components/color-input/color-input.class.js +1 -1
- package/components/color-input/color-input.yaml +2 -2
- package/components/combobox/combobox.a2ui.json +3 -0
- package/components/combobox/combobox.class.js +9 -8
- package/components/combobox/combobox.css +25 -4
- package/components/combobox/combobox.yaml +6 -0
- package/components/command/command.css +17 -1
- package/components/context-menu/context-menu.d.ts +2 -0
- package/components/drilldown/drilldown.a2ui.json +3 -0
- package/components/drilldown/drilldown.css +8 -1
- package/components/drilldown/drilldown.yaml +2 -0
- package/components/field/field.class.js +5 -5
- package/components/heatmap/heatmap.a2ui.json +5 -0
- package/components/heatmap/heatmap.d.ts +2 -0
- package/components/heatmap/heatmap.yaml +8 -0
- package/components/index.js +0 -4
- package/components/input/input.a2ui.json +4 -4
- package/components/input/input.class.js +20 -7
- package/components/input/input.css +6 -0
- package/components/input/input.yaml +15 -11
- package/components/integration-card/integration-card.d.ts +2 -0
- package/components/menu/menu-item.a2ui.json +3 -8
- package/components/menu/menu-item.yaml +13 -21
- package/components/menu/menu.class.js +5 -27
- package/components/menu/menu.d.ts +1 -3
- package/components/noodles/noodles.a2ui.json +0 -15
- package/components/noodles/noodles.yaml +0 -12
- package/components/number-format/number-format.class.js +10 -0
- package/components/pagination/pagination.class.js +88 -4
- package/components/pane/pane.a2ui.json +2 -12
- package/components/pane/pane.class.js +5 -30
- package/components/pane/pane.d.ts +3 -5
- package/components/pane/pane.yaml +7 -19
- package/components/popover/popover.d.ts +2 -0
- package/components/progress/progress.a2ui.json +1 -1
- package/components/progress/progress.class.js +13 -8
- package/components/progress/progress.d.ts +1 -1
- package/components/progress/progress.yaml +2 -2
- package/components/radio/radio.css +7 -0
- package/components/range/range.class.js +9 -1
- package/components/search/search.css +10 -1
- package/components/segment/segment.a2ui.json +1 -2
- package/components/segment/segment.css +10 -0
- package/components/segment/segment.yaml +1 -2
- package/components/segmented/segmented.a2ui.json +1 -3
- package/components/segmented/segmented.class.js +2 -2
- package/components/segmented/segmented.yaml +2 -4
- package/components/select/select.a2ui.json +5 -1
- package/components/select/select.class.js +14 -14
- package/components/select/select.css +20 -1
- package/components/select/select.yaml +7 -1
- package/components/step-progress/step-progress.yaml +1 -1
- package/components/stream/stream.d.ts +2 -0
- package/components/switch/switch.css +8 -0
- package/components/table/table.a2ui.json +6 -1
- package/components/table/table.class.js +18 -1
- package/components/table/table.css +31 -6
- package/components/table/table.d.ts +3 -1
- package/components/table/table.examples.md +2 -2
- package/components/table/table.yaml +9 -1
- package/components/table-toolbar/table-toolbar.a2ui.json +67 -2
- package/components/table-toolbar/table-toolbar.class.js +492 -17
- package/components/table-toolbar/table-toolbar.css +311 -0
- package/components/table-toolbar/table-toolbar.d.ts +17 -1
- package/components/table-toolbar/table-toolbar.yaml +220 -15
- package/components/tag/tag.class.js +13 -1
- package/components/text/text.a2ui.json +3 -3
- package/components/text/text.d.ts +5 -3
- package/components/text/text.yaml +3 -3
- package/components/textarea/textarea.class.js +9 -1
- package/components/textarea/textarea.css +4 -0
- package/components/time-picker/time-picker.yaml +3 -2
- package/components/tour/tour.d.ts +10 -0
- package/components/tree/tree.yaml +1 -1
- package/components/upload/upload.class.js +16 -0
- package/components/upload/upload.d.ts +7 -0
- package/components/upload/upload.yaml +7 -3
- package/core/a11y.d.ts +22 -0
- package/core/a11y.js +64 -0
- package/core/anchor.js +9 -5
- package/core/element.js +1 -1
- package/core/icons.js +2 -5
- package/custom-elements.json +142 -594
- package/dist/host.min.css +1 -1
- package/dist/host.sheet.js +1 -1
- package/dist/theme-provider.min.js +1 -1
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +122 -119
- package/dist/web-components.sheet.js +1 -1
- package/index.d.ts +0 -15
- package/package.json +1 -1
- package/patterns/access-requests/access-requests.examples.html +1 -1
- package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +7 -7
- package/patterns/agent-cost/agent-cost.examples.html +6 -6
- package/patterns/agent-memory/agent-memory.examples.html +3 -3
- package/patterns/agent-prompt-library/agent-prompt-library.examples.html +8 -8
- package/patterns/agent-tool-call/agent-tool-call.examples.html +1 -1
- package/patterns/approvals/approvals.examples.html +6 -6
- package/patterns/audit-log/audit-log.examples.html +1 -1
- package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +4 -4
- package/patterns/chart-in-card/chart-in-card.examples.html +124 -10
- package/patterns/chart-in-card/chart-in-card.examples.js +37 -0
- package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +5 -5
- package/patterns/conversion-funnel/conversion-funnel.html +2 -2
- package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +2 -2
- package/patterns/diff-review/diff-review.examples.html +6 -6
- package/patterns/editor-shell/editor-shell.examples.html +3 -3
- package/patterns/export-flow/export-flow.examples.html +2 -2
- package/patterns/filter-bar/filter-bar.examples.html +2 -2
- package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +2 -2
- package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
- package/patterns/marketing-engagement/marketing-engagement.examples.html +4 -4
- package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +1 -1
- package/patterns/permissions-matrix/permissions-matrix.examples.html +1 -1
- package/patterns/permissions-sharing/permissions-sharing.examples.html +2 -2
- package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +4 -4
- package/patterns/search-discovery/search-discovery.examples.html +2 -2
- package/styles/colors/semantics/features.css +8 -1
- package/styles/components.css +0 -4
- package/styles/type/roles.css +29 -9
- package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -1
- package/traits/resize-observer/resize-observer.js +1 -1
- package/components/color-picker/color-picker.a2ui.json +0 -148
- package/components/color-picker/color-picker.class.js +0 -46
- package/components/color-picker/color-picker.css +0 -14
- package/components/color-picker/color-picker.d.ts +0 -99
- package/components/color-picker/color-picker.examples.md +0 -19
- package/components/color-picker/color-picker.js +0 -17
- package/components/color-picker/color-picker.yaml +0 -175
- package/components/datetime-picker/datetime-picker.a2ui.json +0 -256
- package/components/datetime-picker/datetime-picker.class.js +0 -58
- package/components/datetime-picker/datetime-picker.css +0 -11
- package/components/datetime-picker/datetime-picker.d.ts +0 -87
- package/components/datetime-picker/datetime-picker.examples.md +0 -25
- package/components/datetime-picker/datetime-picker.js +0 -17
- package/components/datetime-picker/datetime-picker.yaml +0 -254
- package/components/progress-row/progress-row.a2ui.json +0 -107
- package/components/progress-row/progress-row.class.js +0 -118
- package/components/progress-row/progress-row.css +0 -60
- package/components/progress-row/progress-row.d.ts +0 -24
- package/components/progress-row/progress-row.examples.md +0 -7
- package/components/progress-row/progress-row.js +0 -17
- package/components/progress-row/progress-row.yaml +0 -85
- package/components/toggle-group/toggle-group.a2ui.json +0 -148
- package/components/toggle-group/toggle-group.class.js +0 -195
- package/components/toggle-group/toggle-group.css +0 -127
- package/components/toggle-group/toggle-group.d.ts +0 -50
- package/components/toggle-group/toggle-group.examples.md +0 -33
- package/components/toggle-group/toggle-group.js +0 -18
- package/components/toggle-group/toggle-group.yaml +0 -135
- package/components/toggle-group/toggle-option.a2ui.json +0 -86
- package/components/toggle-group/toggle-option.yaml +0 -75
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/* Position variants — drive flex-direction. DOM placement still wins for
|
|
38
|
-
actual layout; these tune the internal row direction.
|
|
38
|
+
actual layout; these tune the internal row direction. Pre-ADR-0074
|
|
39
|
+
fallback: superseded below by a resolved [data-ratio-resolved] bucket
|
|
40
|
+
whenever one is in effect (an explicit [ratio] pin, or a [for]-bound
|
|
41
|
+
chart's own mirrored bucket) — a legend with neither keeps this exact
|
|
42
|
+
behavior, unchanged. */
|
|
39
43
|
:scope[position="top"],
|
|
40
44
|
:scope[position="bottom"] {
|
|
41
45
|
flex-direction: row;
|
|
@@ -48,6 +52,32 @@
|
|
|
48
52
|
align-items: flex-start;
|
|
49
53
|
}
|
|
50
54
|
|
|
55
|
+
/* Ratio-resolved layout buckets (ADR-0074, gh#1624 plan step 5, REQ-R-005).
|
|
56
|
+
Same selector specificity as the [position] rules above — placed AFTER
|
|
57
|
+
them in source order so a resolved bucket always wins the cascade over
|
|
58
|
+
a stale/default [position] on the same element. */
|
|
59
|
+
|
|
60
|
+
/* 3:2 — horizontal row (beside/below the chart). */
|
|
61
|
+
:scope[data-ratio-resolved="3:2"] {
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: row;
|
|
64
|
+
justify-content: flex-start;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* 1:1 — wrapped 2-column grid. */
|
|
68
|
+
:scope[data-ratio-resolved="1:1"] {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
71
|
+
align-items: start;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* 2:3 — vertical stacked list. */
|
|
75
|
+
:scope[data-ratio-resolved="2:3"] {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
align-items: flex-start;
|
|
79
|
+
}
|
|
80
|
+
|
|
51
81
|
/* Rows are <badge-ui> chips. We override badge-ui's default tokens
|
|
52
82
|
to give them a quieter, click-to-toggle appearance — transparent
|
|
53
83
|
bg by default (so they read as inline text not chips), highlighted
|
|
@@ -93,6 +123,16 @@
|
|
|
93
123
|
opacity: 0.4;
|
|
94
124
|
}
|
|
95
125
|
|
|
126
|
+
/* De-emphasized (REQ-R-007) rows — a mirrored chart's own muted series
|
|
127
|
+
(e.g. composed@1:1's secondary line). Distinct from :not([data-active])
|
|
128
|
+
above: this is the chart's OWN designed treatment for a still-visible
|
|
129
|
+
series, not a user-toggled-off one; the swatch color itself is set
|
|
130
|
+
inline per-row (matches the neutral token, not opacity) so only the
|
|
131
|
+
label's --badge-fg needs the muted tier here. */
|
|
132
|
+
badge-ui[data-row][data-deemphasized] {
|
|
133
|
+
--badge-fg: var(--chart-legend-fg-inactive);
|
|
134
|
+
}
|
|
135
|
+
|
|
96
136
|
/* Swatch is composed via <swatch-ui shape="…">; per-shape styling
|
|
97
137
|
lives in swatch.css. The legend just hands its [shape] attr through
|
|
98
138
|
and writes --swatch-color inline. Pre-2026-05-01 this file owned a
|
|
@@ -101,3 +141,27 @@
|
|
|
101
141
|
rule (cascade leak). Composing the primitive moves the styling to
|
|
102
142
|
one place. */
|
|
103
143
|
}
|
|
144
|
+
|
|
145
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
146
|
+
gh#1624 plan step 7 — full-bleed × legend horizontal breathing room.
|
|
147
|
+
|
|
148
|
+
Deliberately OUTSIDE `@scope (chart-legend-ui)`, same reason as
|
|
149
|
+
chart.css's own `card-ui[padding="none"] chart-ui` rule: this needs to
|
|
150
|
+
match an ANCESTOR of the scoping root. `--chart-legend-px` defaults to
|
|
151
|
+
0 because a legend normally sits inside a card section that already
|
|
152
|
+
supplies horizontal inset via `--card-inset` (card.css's own
|
|
153
|
+
margin-based section model); `card-ui[padding="none"]` zeroes that
|
|
154
|
+
inset CARD-WIDE (every section, not just the chart's), so a legend
|
|
155
|
+
paired with a full-bleed chart lost its own horizontal clearance too —
|
|
156
|
+
confirmed via browser probe: badge rows sat ~1px from the card's
|
|
157
|
+
rounded edge, at real risk of visual crowding against the corner-radius
|
|
158
|
+
`overflow: hidden` (card.css :scope). The chart itself doesn't need this
|
|
159
|
+
— its own internal plot margins (REQ-R-004) already supply clearance
|
|
160
|
+
regardless of the card's inset — but the legend's chip rows have no
|
|
161
|
+
equivalent internal margin of their own. Restoring `--chart-legend-px`
|
|
162
|
+
only (not `-py`, which the legend already carries unconditionally) is
|
|
163
|
+
the minimal fix: vertical spacing between the chart and legend sections
|
|
164
|
+
is unaffected, only the legend's own left/right clearance is restored. */
|
|
165
|
+
card-ui[padding="none"] chart-legend-ui {
|
|
166
|
+
--chart-legend-px: var(--a-space-4);
|
|
167
|
+
}
|
|
@@ -24,20 +24,20 @@ export interface ChartLegendToggleEventDetail {
|
|
|
24
24
|
export type ChartLegendToggleEvent = CustomEvent<ChartLegendToggleEventDetail>;
|
|
25
25
|
|
|
26
26
|
export class UIChartLegend extends UIElement {
|
|
27
|
-
/** JSON array of {key, label, slot?, pct?} legend items. Takes precedence over [for] when both are provided. */
|
|
27
|
+
/** JSON array of {key, label, slot?, pct?, deemphasized?} legend items. Takes precedence over [for] when both are provided. `deemphasized` (REQ-R-007) mutes the row's swatch/label to the same muted-neutral tier chart-ui's own internal legend uses for a de-emphasized series (e.g. `composed@1:1`'s secondary line) — mirrored automatically from a `[for]`-bound chart's own `.legendData`, or settable explicitly here. */
|
|
28
28
|
items: string;
|
|
29
29
|
/** id-ref of a chart-ui / heatmap-ui to mirror series from. */
|
|
30
30
|
for: string;
|
|
31
|
-
/** Canonical opt-in spelling (ADR-0063, gh#1563)
|
|
31
|
+
/** Canonical opt-in spelling (ADR-0063, gh#1563) — the deprecated `static` opt-out alias was cut in 0.8.43 (gh#1617). Rows are interactive <button>-role badges by default — this default stays `true` (deliberately NOT flipped yet; the 0.9.0 cut inverts it to `false` after a full consumer scan of every `<chart-legend-ui>` tag per the ADR). */
|
|
32
32
|
interactive: boolean;
|
|
33
33
|
/** Series-toggle mode emitted via the `toggle` event. `hide` removes the series from the render; `opacity` fades it. Wired via [for] on chart-ui. */
|
|
34
34
|
onToggle: 'hide' | 'opacity';
|
|
35
|
-
/** Layout hint — drives flex-direction. Actual placement follows DOM order. */
|
|
35
|
+
/** Layout hint — drives flex-direction. Actual placement follows DOM order. Superseded by a resolved `ratio` bucket (below) whenever one is in effect; this is the pre-ADR-0074 fallback for a legend with neither an explicit `ratio` nor a `[for]`-bound chart. */
|
|
36
36
|
position: 'top' | 'bottom' | 'left' | 'right';
|
|
37
|
+
/** Chart 2.0 legend layout bucket (ADR-0074, gh#1624 plan step 5, REQ-R-005): 3:2 renders a horizontal row, 1:1 a wrapped 2-column grid, 2:3 a vertical stacked list. An explicit value PINS the bucket regardless of any bound chart. Unset (default) auto-mirrors the `[for]`-bound chart's own resolved `data-ratio-resolved` bucket — the legend never runs its own container-query classification, since its own box is typically a thin strip with no studied aspect of its own. With neither a pin nor a bound chart, no bucket resolves and `position`'s flex-direction rules apply unchanged. The resolved bucket reflects read-only onto the host as `data-ratio-resolved`, mirroring chart-ui's own convention. */
|
|
38
|
+
ratio: '3:2' | '1:1' | '2:3';
|
|
37
39
|
/** Swatch shape. Maps to badge-ui's icon for dot/square variants. */
|
|
38
40
|
shape: 'dot' | 'square' | 'line' | 'dashed';
|
|
39
|
-
/** DEPRECATED (ADR-0063, gh#1563) — use `interactive` instead. When set (and `interactive` is absent), rows are non-interactive <span>s (no click, no toggle). Kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. */
|
|
40
|
-
static: boolean;
|
|
41
41
|
|
|
42
42
|
addEventListener(type: 'toggle', listener: (ev: ChartLegendToggleEvent) => unknown, options?: boolean | AddEventListenerOptions): void;
|
|
43
43
|
addEventListener<K extends keyof HTMLElementEventMap>(
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
<chart-legend-ui id="legend-bottom" shape="dot" position="bottom" items='[{"key":"a","label":"Series A","slot":0},{"key":"b","label":"Series B","slot":1},{"key":"c","label":"Series C","slot":2}]'></chart-legend-ui>
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## ratio — mirrors a bound chart's resolved ratio (ADR-0074)
|
|
16
16
|
|
|
17
17
|
```html
|
|
18
|
-
<div style="display:flex; flex-direction:column; gap:var(--a-space-2);">
|
|
19
|
-
<chart-ui id="
|
|
20
|
-
<chart-legend-ui id="legend-
|
|
18
|
+
<div style="display:flex; flex-direction:column; gap:var(--a-space-2); width:360px;">
|
|
19
|
+
<chart-ui id="ratio-chart-32" type="multi-line" ratio="3:2" x="month" y="revenue,users,churn"></chart-ui>
|
|
20
|
+
<chart-legend-ui id="ratio-legend-32" for="ratio-chart-32" shape="line"></chart-legend-ui>
|
|
21
21
|
</div>
|
|
22
22
|
```
|
|
@@ -23,8 +23,12 @@ props:
|
|
|
23
23
|
reflect: true
|
|
24
24
|
items:
|
|
25
25
|
description: >-
|
|
26
|
-
JSON array of {key, label, slot?, pct?} legend items.
|
|
27
|
-
over [for] when both are provided.
|
|
26
|
+
JSON array of {key, label, slot?, pct?, deemphasized?} legend items.
|
|
27
|
+
Takes precedence over [for] when both are provided. `deemphasized`
|
|
28
|
+
(REQ-R-007) mutes the row's swatch/label to the same muted-neutral
|
|
29
|
+
tier chart-ui's own internal legend uses for a de-emphasized series
|
|
30
|
+
(e.g. `composed@1:1`'s secondary line) — mirrored automatically from
|
|
31
|
+
a `[for]`-bound chart's own `.legendData`, or settable explicitly here.
|
|
28
32
|
type: string
|
|
29
33
|
default: ''
|
|
30
34
|
shape:
|
|
@@ -38,7 +42,11 @@ props:
|
|
|
38
42
|
- dashed
|
|
39
43
|
reflect: true
|
|
40
44
|
position:
|
|
41
|
-
description:
|
|
45
|
+
description: >-
|
|
46
|
+
Layout hint — drives flex-direction. Actual placement follows DOM
|
|
47
|
+
order. Superseded by a resolved `ratio` bucket (below) whenever one
|
|
48
|
+
is in effect; this is the pre-ADR-0074 fallback for a legend with
|
|
49
|
+
neither an explicit `ratio` nor a `[for]`-bound chart.
|
|
42
50
|
type: string
|
|
43
51
|
default: bottom
|
|
44
52
|
enum:
|
|
@@ -47,22 +55,34 @@ props:
|
|
|
47
55
|
- left
|
|
48
56
|
- right
|
|
49
57
|
reflect: true
|
|
50
|
-
|
|
58
|
+
ratio:
|
|
51
59
|
description: >-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
Chart 2.0 legend layout bucket (ADR-0074, gh#1624 plan step 5,
|
|
61
|
+
REQ-R-005): 3:2 renders a horizontal row, 1:1 a wrapped 2-column
|
|
62
|
+
grid, 2:3 a vertical stacked list. An explicit value PINS the
|
|
63
|
+
bucket regardless of any bound chart. Unset (default) auto-mirrors
|
|
64
|
+
the `[for]`-bound chart's own resolved `data-ratio-resolved` bucket
|
|
65
|
+
— the legend never runs its own container-query classification,
|
|
66
|
+
since its own box is typically a thin strip with no studied aspect
|
|
67
|
+
of its own. With neither a pin nor a bound chart, no bucket
|
|
68
|
+
resolves and `position`'s flex-direction rules apply unchanged. The
|
|
69
|
+
resolved bucket reflects read-only onto the host as
|
|
70
|
+
`data-ratio-resolved`, mirroring chart-ui's own convention.
|
|
71
|
+
type: string
|
|
72
|
+
default: ""
|
|
73
|
+
enum:
|
|
74
|
+
- "3:2"
|
|
75
|
+
- "1:1"
|
|
76
|
+
- "2:3"
|
|
58
77
|
reflect: true
|
|
59
78
|
interactive:
|
|
60
79
|
description: >-
|
|
61
|
-
Canonical opt-in spelling (ADR-0063, gh#1563)
|
|
62
|
-
opt-out
|
|
63
|
-
default — this default stays
|
|
64
|
-
flipped yet; the 0.9.0 cut inverts it to
|
|
65
|
-
consumer scan of every `<chart-legend-ui>` tag
|
|
80
|
+
Canonical opt-in spelling (ADR-0063, gh#1563) — the deprecated
|
|
81
|
+
`static` opt-out alias was cut in 0.8.43 (gh#1617). Rows are
|
|
82
|
+
interactive <button>-role badges by default — this default stays
|
|
83
|
+
`true` (deliberately NOT flipped yet; the 0.9.0 cut inverts it to
|
|
84
|
+
`false` after a full consumer scan of every `<chart-legend-ui>` tag
|
|
85
|
+
per the ADR).
|
|
66
86
|
type: boolean
|
|
67
87
|
default: true
|
|
68
88
|
reflect: true
|
|
@@ -80,7 +100,7 @@ props:
|
|
|
80
100
|
events:
|
|
81
101
|
toggle:
|
|
82
102
|
description: >-
|
|
83
|
-
Fires on row click
|
|
103
|
+
Fires on row click when interactive. Detail: {key, active, mode}. `active` is
|
|
84
104
|
the new state (true=visible). Consumers (or chart-ui via [for]) wire
|
|
85
105
|
this to series visibility.
|
|
86
106
|
detail:
|
|
@@ -104,9 +124,7 @@ states:
|
|
|
104
124
|
- name: idle
|
|
105
125
|
description: Default, ready for interaction.
|
|
106
126
|
- name: interactive
|
|
107
|
-
description: Rows are <button>s.
|
|
108
|
-
- name: static
|
|
109
|
-
description: Rows are <span>s. No click handler, no toggle affordance.
|
|
127
|
+
description: Rows are <button>s (the default). When false, rows are <span>s — no click handler, no toggle affordance.
|
|
110
128
|
traits: []
|
|
111
129
|
tokens: {}
|
|
112
130
|
a2ui:
|
|
@@ -115,8 +133,10 @@ a2ui:
|
|
|
115
133
|
reason: 'Legend pattern.'
|
|
116
134
|
- rule: 'Pairs with <chart-ui> via [for] id-ref (auto-bidirectional series toggling) or via items= for standalone use.'
|
|
117
135
|
reason: 'Composition contract.'
|
|
118
|
-
- rule: 'position attribute (top|bottom|left|right) places legend relative to its chart;
|
|
136
|
+
- rule: 'position attribute (top|bottom|left|right) places legend relative to its chart; interactive="false" disables interactivity.'
|
|
119
137
|
reason: 'Layout + interaction knobs.'
|
|
138
|
+
- rule: 'ratio attribute (3:2|1:1|2:3, ADR-0074) selects the legend layout shape (row/grid/list); left unset it auto-mirrors a [for]-bound chart''s own resolved ratio.'
|
|
139
|
+
reason: 'Ratio-responsive layout contract, gh#1624 plan step 5.'
|
|
120
140
|
anti_patterns: []
|
|
121
141
|
examples:
|
|
122
142
|
- name: standalone-with-items
|
|
@@ -129,6 +149,16 @@ examples:
|
|
|
129
149
|
"items": "[{\"key\":\"revenue\",\"label\":\"Revenue\",\"slot\":0},{\"key\":\"users\",\"label\":\"Users\",\"slot\":1}]"
|
|
130
150
|
}
|
|
131
151
|
]
|
|
152
|
+
- name: ratio-pinned-grid
|
|
153
|
+
description: Standalone legend pinned to the 1:1 (2-col grid) layout bucket.
|
|
154
|
+
a2ui: >-
|
|
155
|
+
[
|
|
156
|
+
{
|
|
157
|
+
"id": "legend", "component": "ChartLegend",
|
|
158
|
+
"ratio": "1:1",
|
|
159
|
+
"items": "[{\"key\":\"revenue\",\"label\":\"Revenue\",\"slot\":0},{\"key\":\"users\",\"label\":\"Users\",\"slot\":1},{\"key\":\"churn\",\"label\":\"Churn\",\"slot\":2},{\"key\":\"nps\",\"label\":\"NPS\",\"slot\":3}]"
|
|
160
|
+
}
|
|
161
|
+
]
|
|
132
162
|
- name: mirror-chart-by-id
|
|
133
163
|
description: Legend mirrors a named chart's series data.
|
|
134
164
|
a2ui: >-
|
|
@@ -17,6 +17,14 @@ check-ui[indeterminate] [slot="box"] {
|
|
|
17
17
|
background: var(--check-bg-checked);
|
|
18
18
|
border-color: var(--check-border-checked);
|
|
19
19
|
}
|
|
20
|
+
/* gh#1596 — a checked/indeterminate box kept its full primary fill when
|
|
21
|
+
disabled (only the label fg dimmed); higher specificity (2 attrs) than
|
|
22
|
+
the rule above wins without reordering. */
|
|
23
|
+
check-ui[checked][disabled] [slot="box"],
|
|
24
|
+
check-ui[indeterminate][disabled] [slot="box"] {
|
|
25
|
+
background: var(--check-bg-checked-disabled);
|
|
26
|
+
border-color: var(--check-bg-checked-disabled);
|
|
27
|
+
}
|
|
20
28
|
check-ui[checked] {
|
|
21
29
|
--_icon-w: calc(var(--check-size) * 0.3);
|
|
22
30
|
--_icon-h: calc(var(--check-size) * 0.55);
|
|
@@ -61,6 +69,7 @@ check-ui[indeterminate] {
|
|
|
61
69
|
|
|
62
70
|
/* ── State: disabled ── */
|
|
63
71
|
--check-fg-disabled: var(--a-ui-text-disabled);
|
|
72
|
+
--check-bg-checked-disabled: var(--a-ui-bg-disabled);
|
|
64
73
|
|
|
65
74
|
/* ── Check icon (CSS border trick, no SVG) ── */
|
|
66
75
|
--_icon-w: 0;
|
|
@@ -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/ColorArea.json",
|
|
4
4
|
"title": "ColorArea",
|
|
5
|
-
"description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead. Renamed from `<color-picker-ui>` (ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger + popover composite shape; this is the inline substrate, mirroring <calendar-grid-ui>'s naming precedent). `<color-picker-ui>`
|
|
5
|
+
"description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead. Renamed from `<color-picker-ui>` (ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger + popover composite shape; this is the inline substrate, mirroring <calendar-grid-ui>'s naming precedent). `<color-picker-ui>` was cut in 0.8.43 (gh#1617) — this is the sole tag now.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* <color-area-ui value="#3b82f6" format="hex"></color-area-ui>
|
|
16
16
|
*
|
|
17
17
|
* OKLCH-native color picker with 2D area + H/C/L sliders (ADR-0063,
|
|
18
|
-
* gh#1563 — renamed from `<color-picker-ui>`, which
|
|
19
|
-
*
|
|
18
|
+
* gh#1563 — renamed from `<color-picker-ui>`, which was cut in 0.8.43,
|
|
19
|
+
* gh#1617; this is the sole tag now).
|
|
20
20
|
*
|
|
21
21
|
* Layout:
|
|
22
22
|
* [═══════════ color area (chroma x lightness) ═══════════]
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
/* ADR-0063 (gh#1563) —
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* calendar-picker.css's `@scope (calendar-picker-ui, datetime-picker-ui)`
|
|
6
|
-
* for its own deprecated alias. */
|
|
7
|
-
@scope (color-area-ui, color-picker-ui) {
|
|
1
|
+
/* ADR-0063 (gh#1563) — `color-picker-ui` was a thin alias subclassing
|
|
2
|
+
* `UIColorArea`; cut in 0.8.43 (gh#1617). `color-area-ui` is the sole tag
|
|
3
|
+
* now. */
|
|
4
|
+
@scope (color-area-ui) {
|
|
8
5
|
:where(:scope) {
|
|
9
6
|
/* ── Tokens ── */
|
|
10
7
|
--color-area-gap: var(--a-space-2);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `<color-area-ui>` — OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead. Renamed from `<color-picker-ui>` (ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger + popover composite shape; this is the inline substrate, mirroring <calendar-grid-ui>'s naming precedent). `<color-picker-ui>`
|
|
2
|
+
* `<color-area-ui>` — OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead. Renamed from `<color-picker-ui>` (ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger + popover composite shape; this is the inline substrate, mirroring <calendar-grid-ui>'s naming precedent). `<color-picker-ui>` was cut in 0.8.43 (gh#1617) — this is the sole tag now.
|
|
3
3
|
*
|
|
4
4
|
* @see https://ui-kit.exe.xyz/site/components/color-area
|
|
5
5
|
*
|
|
@@ -15,8 +15,8 @@ description: >-
|
|
|
15
15
|
or <color-input-ui> instead. Renamed from `<color-picker-ui>`
|
|
16
16
|
(ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger +
|
|
17
17
|
popover composite shape; this is the inline substrate, mirroring
|
|
18
|
-
<calendar-grid-ui>'s naming precedent). `<color-picker-ui>`
|
|
19
|
-
|
|
18
|
+
<calendar-grid-ui>'s naming precedent). `<color-picker-ui>` was cut in
|
|
19
|
+
0.8.43 (gh#1617) — this is the sole tag now.
|
|
20
20
|
# Per ADR-0027 — primitives that programmatically create other primitives
|
|
21
21
|
# do NOT auto-import them. Consumer (or demo shell) must explicitly import.
|
|
22
22
|
composes:
|
|
@@ -115,7 +115,7 @@ a2ui:
|
|
|
115
115
|
reason: 'Canonical color-authoring surface.'
|
|
116
116
|
- rule: 'For simple color swatches (read-only display) use <swatch-ui>; for hex/rgb text input use <color-input-ui>.'
|
|
117
117
|
reason: 'Surface boundary.'
|
|
118
|
-
- rule: 'Renamed from <color-picker-ui> (ADR-0063, gh#1563); the old tag
|
|
118
|
+
- rule: 'Renamed from <color-picker-ui> (ADR-0063, gh#1563); the old tag was cut in 0.8.43 (gh#1617) — ColorArea is the sole tag now.'
|
|
119
119
|
reason: 'Picker-naming convention: -picker names the outer trigger+popover composite, never the inline substrate.'
|
|
120
120
|
- rule: 'Output format defaults to oklch(); set format= to override (hex, rgb, hsl).'
|
|
121
121
|
reason: 'Format knob.'
|
|
@@ -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/ColorInput.json",
|
|
4
4
|
"title": "ColorInput",
|
|
5
|
-
"description": "Compact form-bearing color input — opens a popover-anchored\n`<color-area-ui>` from an inline swatch button. §302 (v0.5.12,\nFEEDBACK-29 re-bucket from v0.6.0). Canonicalizes the USAGE.md §221f\nOption B recipe (popover + button + color-area) into a single\nform-associated tag for inline form contexts (settings drawer \"source\ncolor\" field, swatch-row inline-edit, etc.). Composes `<color-area-ui>`\n(ADR-0063, gh#1563 — renamed from `<color-picker-ui>`,
|
|
5
|
+
"description": "Compact form-bearing color input — opens a popover-anchored\n`<color-area-ui>` from an inline swatch button. §302 (v0.5.12,\nFEEDBACK-29 re-bucket from v0.6.0). Canonicalizes the USAGE.md §221f\nOption B recipe (popover + button + color-area) into a single\nform-associated tag for inline form contexts (settings drawer \"source\ncolor\" field, swatch-row inline-edit, etc.). Composes `<color-area-ui>`\n(ADR-0063, gh#1563 — renamed from `<color-picker-ui>`, cut in 0.8.43,\ngh#1617); `color-input-ui`'s own tag/name is unaffected.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* </color-input-ui>
|
|
33
33
|
*
|
|
34
34
|
* Composes `<color-area-ui>` (ADR-0063, gh#1563 — renamed from
|
|
35
|
-
* `<color-picker-ui>`,
|
|
35
|
+
* `<color-picker-ui>`, cut in 0.8.43, gh#1617).
|
|
36
36
|
*
|
|
37
37
|
* Form-associated via UIFormElement + ElementInternals.
|
|
38
38
|
*/
|
|
@@ -12,8 +12,8 @@ description: |-
|
|
|
12
12
|
Option B recipe (popover + button + color-area) into a single
|
|
13
13
|
form-associated tag for inline form contexts (settings drawer "source
|
|
14
14
|
color" field, swatch-row inline-edit, etc.). Composes `<color-area-ui>`
|
|
15
|
-
(ADR-0063, gh#1563 — renamed from `<color-picker-ui>`,
|
|
16
|
-
|
|
15
|
+
(ADR-0063, gh#1563 — renamed from `<color-picker-ui>`, cut in 0.8.43,
|
|
16
|
+
gh#1617); `color-input-ui`'s own tag/name is unaffected.
|
|
17
17
|
# Per ADR-0027 — primitives that programmatically create other primitives
|
|
18
18
|
# do NOT auto-import them. The consumer (or demo shell) explicitly imports
|
|
19
19
|
# the composed primitives. This element creates `<button-ui>` +
|
|
@@ -339,6 +339,9 @@
|
|
|
339
339
|
"--combobox-match-bg": {
|
|
340
340
|
"description": "Background for `<mark>` spans that highlight matched substrings"
|
|
341
341
|
},
|
|
342
|
+
"--combobox-min-width": {
|
|
343
|
+
"description": "Intrinsic min-width floor on the host (default `20ch`, matching input-ui's own `--input-min-width` UA-baseline derivation) so a combobox in a shrinking flex/grid cell doesn't crush to unusable width. Set to `0` to opt back into full collapse (gh#1633)."
|
|
344
|
+
},
|
|
342
345
|
"--combobox-option-bg-active": {
|
|
343
346
|
"description": "Background for the currently active (arrow-navigated) option"
|
|
344
347
|
},
|
|
@@ -41,6 +41,7 @@ import { UIFormElement } from '../../core/form.js';
|
|
|
41
41
|
import { anchorPopover } from '../../core/anchor.js';
|
|
42
42
|
import { untracked } from '../../core/signals.js';
|
|
43
43
|
import { logicalSlotted } from '../../core/logical-children.js';
|
|
44
|
+
import { syncAutoAriaLabel } from '../../core/a11y.js';
|
|
44
45
|
|
|
45
46
|
function escapeHTML(s) {
|
|
46
47
|
return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
@@ -103,6 +104,10 @@ export class UICombobox extends UIFormElement {
|
|
|
103
104
|
#anchorCleanup = null;
|
|
104
105
|
#rafId = null;
|
|
105
106
|
#instanceId = `combobox-${++cbInstanceSeq}`;
|
|
107
|
+
// gh#1647: tracks the aria-label VALUE this element itself last derived
|
|
108
|
+
// from `placeholder` (undefined when none) — value-tracking guard
|
|
109
|
+
// ported from tag.class.js/select.class.js (gh#1644/#1646).
|
|
110
|
+
#lastAutoAriaLabel = undefined;
|
|
106
111
|
|
|
107
112
|
// ── Stable handler refs (so removeEventListener finds them) ──
|
|
108
113
|
#onInputEvent = () => this.#handleInput();
|
|
@@ -176,14 +181,10 @@ export class UICombobox extends UIFormElement {
|
|
|
176
181
|
this.#labelEl.style.display = this.label ? '' : 'none';
|
|
177
182
|
}
|
|
178
183
|
|
|
179
|
-
// aria-label fallback when no [label] is set
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
this.setAttribute('aria-label', this.placeholder);
|
|
184
|
-
} else {
|
|
185
|
-
this.removeAttribute('aria-label');
|
|
186
|
-
}
|
|
184
|
+
// aria-label fallback when no [label] is set (gh#1647) — never clobber
|
|
185
|
+
// a consumer's own aria-label (value-tracking guard, gh#1644/#1646).
|
|
186
|
+
const ariaSource = this.label ? '' : (this.placeholder || '');
|
|
187
|
+
this.#lastAutoAriaLabel = syncAutoAriaLabel(this, this.#lastAutoAriaLabel, ariaSource);
|
|
187
188
|
|
|
188
189
|
// Toggle clear-button visibility when [clearable].
|
|
189
190
|
if (this.#clearBtn) {
|
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
--combobox-height: var(--a-size);
|
|
7
7
|
--combobox-px: var(--a-ui-px);
|
|
8
8
|
--combobox-radius: var(--a-radius);
|
|
9
|
+
/* gh#1633 / ADIA2-9136 (adiav2#12791) — the host's own `min-width: 0`
|
|
10
|
+
below (the ellipsis-reset trick, kept for [data-input] inside this
|
|
11
|
+
floor) had no intrinsic lower bound, so a combobox in a shrinking
|
|
12
|
+
flex/grid cell crushed to unusable width — the same gap already
|
|
13
|
+
fixed on --input-min-width (this family's reference; see input.css,
|
|
14
|
+
gh#781) and on --select-min-width (same fix, select.css). Same
|
|
15
|
+
ch-based UA-baseline derivation. Override to 0 to opt back into
|
|
16
|
+
full collapse. */
|
|
17
|
+
--combobox-min-width: 20ch;
|
|
9
18
|
|
|
10
19
|
/* ── Typography ── */
|
|
11
20
|
--combobox-font-size: var(--a-ui-size);
|
|
@@ -62,7 +71,11 @@
|
|
|
62
71
|
flex-direction: column;
|
|
63
72
|
gap: var(--combobox-gap);
|
|
64
73
|
position: relative;
|
|
65
|
-
min-width
|
|
74
|
+
/* Floored, not zeroed — see --combobox-min-width above (gh#1633).
|
|
75
|
+
[data-input]'s own `min-width: 0` further down stays 0: that one
|
|
76
|
+
exists so its value text can ellipsis-truncate INSIDE this floor,
|
|
77
|
+
not to guard the host's own collapse. */
|
|
78
|
+
min-width: var(--combobox-min-width);
|
|
66
79
|
/* font-family floor on the host — internal input/options inherit it. */
|
|
67
80
|
font-family: var(--combobox-font-family, var(--a-font-family-ui));
|
|
68
81
|
font-size: var(--combobox-font-size);
|
|
@@ -326,9 +339,17 @@ combobox-ui [data-listbox] [role="group"] [data-group-label] {
|
|
|
326
339
|
white-space: nowrap;
|
|
327
340
|
}
|
|
328
341
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
342
|
+
/* Scoped to `[data-listbox]`'s own markers — gh#1700, same shape as
|
|
343
|
+
gh#1697/#1698. The input span (`[data-input]`) toggles the SAME
|
|
344
|
+
`data-empty` attribute for an unrelated reason (gating its own
|
|
345
|
+
`::before` placeholder pseudo) — a bare, unscoped `combobox-ui
|
|
346
|
+
[data-empty]` selector matched BOTH uses, and (being (0,1,1)) outranked
|
|
347
|
+
`[data-input]`'s own (0,1,0) padding/color/font-size, one property away
|
|
348
|
+
from repeating the command-ui leak. Scoping to the listbox container
|
|
349
|
+
removes the collision at its root. */
|
|
350
|
+
combobox-ui [data-listbox] [data-empty],
|
|
351
|
+
combobox-ui [data-listbox] [data-loading],
|
|
352
|
+
combobox-ui [data-listbox] [data-footer] {
|
|
332
353
|
padding: var(--a-space-2) var(--a-ui-px);
|
|
333
354
|
color: var(--a-ui-text-muted);
|
|
334
355
|
font-size: var(--a-ui-size);
|
|
@@ -257,6 +257,12 @@ tokens:
|
|
|
257
257
|
tinted selected row.
|
|
258
258
|
--combobox-match-bg:
|
|
259
259
|
description: Background for `<mark>` spans that highlight matched substrings
|
|
260
|
+
--combobox-min-width:
|
|
261
|
+
description: >-
|
|
262
|
+
Intrinsic min-width floor on the host (default `20ch`, matching
|
|
263
|
+
input-ui's own `--input-min-width` UA-baseline derivation) so a
|
|
264
|
+
combobox in a shrinking flex/grid cell doesn't crush to unusable
|
|
265
|
+
width. Set to `0` to opt back into full collapse (gh#1633).
|
|
260
266
|
requiredIcons:
|
|
261
267
|
- caret-down
|
|
262
268
|
- x-circle
|
|
@@ -221,7 +221,23 @@
|
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
/* ── Empty state ── */
|
|
224
|
-
[data-empty]
|
|
224
|
+
/* Scoped to `[slot="list"]`'s own `[data-empty]` — gh#1697. The search
|
|
225
|
+
input (`& > header [slot="input"]`) toggles the SAME `data-empty`
|
|
226
|
+
attribute for an unrelated reason (gating its own `::before`
|
|
227
|
+
placeholder pseudo, per REQ above) — a bare, unscoped `[data-empty]`
|
|
228
|
+
selector matched BOTH uses, so this rule's `text-align: center` leaked
|
|
229
|
+
onto the input span whenever it was empty, centering the placeholder
|
|
230
|
+
(and, structurally, any text a consumer's own script inserted while
|
|
231
|
+
the attribute was still present). `padding`/`color` never leaked in
|
|
232
|
+
practice — `& > header [slot="input"]`'s own compound selector
|
|
233
|
+
(header-descendant + attribute, (0,1,1)) already outranks the bare
|
|
234
|
+
`[data-empty]` (0,1,0) for those two properties — but `text-align` had
|
|
235
|
+
no competing declaration anywhere else in this file, so the leaked
|
|
236
|
+
value won by default with nothing to lose against. Scoping the
|
|
237
|
+
selector to the list container removes the collision at its root
|
|
238
|
+
instead of only patching the one property a screenshot happened to
|
|
239
|
+
catch. */
|
|
240
|
+
[slot="list"] [data-empty] {
|
|
225
241
|
padding: var(--command-py) var(--command-px);
|
|
226
242
|
color: var(--command-empty-fg);
|
|
227
243
|
text-align: center;
|
|
@@ -56,6 +56,8 @@ export type ContextMenuSelectEvent = CustomEvent<ContextMenuSelectEventDetail>;
|
|
|
56
56
|
export class UIContextMenu extends UIElement {
|
|
57
57
|
/** CSS selector(s) for target element(s). Empty = use default-slot child. */
|
|
58
58
|
for: string;
|
|
59
|
+
/** Long-press duration (ms) on touch devices to open the menu. */
|
|
60
|
+
longPressMs: number;
|
|
59
61
|
/** Programmatic open state. Set true to open at target center. */
|
|
60
62
|
open: boolean;
|
|
61
63
|
|
|
@@ -236,6 +236,9 @@
|
|
|
236
236
|
"--drilldown-row-px": {
|
|
237
237
|
"description": "Inline padding of each row."
|
|
238
238
|
},
|
|
239
|
+
"--drilldown-row-py": {
|
|
240
|
+
"description": "Block padding of each row (grows a row past --drilldown-row-height once content, e.g. a two-line label+meta row, exceeds it)."
|
|
241
|
+
},
|
|
239
242
|
"--drilldown-row-radius": {
|
|
240
243
|
"description": "Border radius of each row."
|
|
241
244
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
--drilldown-row-height: var(--a-size, 2.25rem);
|
|
5
5
|
--drilldown-row-radius: var(--a-radius-sm);
|
|
6
6
|
--drilldown-row-px: var(--a-space-2);
|
|
7
|
+
--drilldown-row-py: var(--a-space-1-5);
|
|
7
8
|
--drilldown-row-gap: var(--a-space-2);
|
|
8
9
|
--drilldown-header-px: var(--a-space-3);
|
|
9
10
|
--drilldown-header-py: var(--a-space-2);
|
|
@@ -189,13 +190,19 @@
|
|
|
189
190
|
to { transform: none; opacity: 1; }
|
|
190
191
|
}
|
|
191
192
|
|
|
192
|
-
/* ── Rows ──
|
|
193
|
+
/* ── Rows ──
|
|
194
|
+
min-height sets the single-line floor; padding-block (--drilldown-row-py,
|
|
195
|
+
matching menu-item-ui/action-item-ui's own row-density token) only grows
|
|
196
|
+
the row once content (e.g. a two-line label+meta row, gh#1591) exceeds
|
|
197
|
+
that floor — the two never stack into a taller one-liner because a
|
|
198
|
+
single-line row's content-box is shorter than the min-height already. */
|
|
193
199
|
[role="option"] {
|
|
194
200
|
display: flex;
|
|
195
201
|
align-items: center;
|
|
196
202
|
gap: var(--drilldown-row-gap);
|
|
197
203
|
min-height: var(--drilldown-row-height);
|
|
198
204
|
padding-inline: var(--drilldown-row-px);
|
|
205
|
+
padding-block: var(--drilldown-row-py);
|
|
199
206
|
border-radius: var(--drilldown-row-radius);
|
|
200
207
|
cursor: pointer;
|
|
201
208
|
outline: none;
|
|
@@ -194,6 +194,8 @@ tokens:
|
|
|
194
194
|
description: Border radius of each row.
|
|
195
195
|
--drilldown-row-px:
|
|
196
196
|
description: Inline padding of each row.
|
|
197
|
+
--drilldown-row-py:
|
|
198
|
+
description: Block padding of each row (grows a row past --drilldown-row-height once content, e.g. a two-line label+meta row, exceeds it).
|
|
197
199
|
--drilldown-row-gap:
|
|
198
200
|
description: Gap between row elements (dot / main / counts / chevron).
|
|
199
201
|
--drilldown-bg-hover:
|
|
@@ -279,11 +279,11 @@ export class UIField extends UIElement {
|
|
|
279
279
|
'input-ui', 'textarea-ui', 'select-ui', 'combobox-ui', 'search-ui',
|
|
280
280
|
'check-ui', 'radio-ui', 'switch-ui', 'slider-ui', 'range-ui',
|
|
281
281
|
'otp-input-ui', 'tags-input-ui', 'chat-input-ui', 'autocomplete-input-ui',
|
|
282
|
-
'
|
|
283
|
-
//
|
|
284
|
-
//
|
|
285
|
-
// tags
|
|
286
|
-
'color-area-ui', '
|
|
282
|
+
'date-range-picker-ui', 'calendar-picker-ui',
|
|
283
|
+
// datetime-picker-ui / color-picker-ui cut in 0.8.43 (gh#1617,
|
|
284
|
+
// ADR-0063/gh#1372) — calendar-picker-ui / color-area-ui are the
|
|
285
|
+
// sole tags now.
|
|
286
|
+
'color-area-ui', 'upload-ui', 'rating-ui', 'segmented-ui',
|
|
287
287
|
'input', 'textarea', 'select',
|
|
288
288
|
]);
|
|
289
289
|
|
|
@@ -53,6 +53,11 @@
|
|
|
53
53
|
"component": {
|
|
54
54
|
"const": "Heatmap"
|
|
55
55
|
},
|
|
56
|
+
"data": {
|
|
57
|
+
"description": "Cell data as a JSON array of `{ r, c, v, label? }` objects, or set the `.data` property directly with an already-parsed array. Parsed on connect if the attribute is present and `.data` hasn't already been set programmatically.",
|
|
58
|
+
"type": "string",
|
|
59
|
+
"default": ""
|
|
60
|
+
},
|
|
56
61
|
"noLegend": {
|
|
57
62
|
"description": "Hide the Less/More legend strip",
|
|
58
63
|
"type": "boolean",
|
|
@@ -27,6 +27,8 @@ export class UIHeatmap extends UIElement {
|
|
|
27
27
|
colorScheme: 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'data-ramp';
|
|
28
28
|
/** Column count */
|
|
29
29
|
cols: number;
|
|
30
|
+
/** Cell data as a JSON array of `{ r, c, v, label? }` objects, or set the `.data` property directly with an already-parsed array. Parsed on connect if the attribute is present and `.data` hasn't already been set programmatically. */
|
|
31
|
+
data: string;
|
|
30
32
|
/** Hide the Less/More legend strip */
|
|
31
33
|
noLegend: boolean;
|
|
32
34
|
/** Row count */
|