@adia-ai/web-components 0.8.37 → 0.8.38

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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog — @adia-ai/web-components
2
2
 
3
+ ## [0.8.38] — 2026-08-15
4
+
5
+ ### Added
6
+ - **`drilldown-ui` — a new single-panel, multi-level drill-in menu primitive (gh#1285).** Replaces the hand-rolled miller-columns shape (two stacked list columns) that adiav2's Schema Manager had to build because the kit had no drill-down primitive — cleared the pre-build audit against `tree-ui` (inline expand/collapse, wrong for wide/deep >2-level data), `segmented-ui` (no overflow behavior for 18 namespaces), `tag-ui`-as-menu (no keyboard path), `list-ui`/`nav-ui`/`menu-ui`/`context-menu`/`breadcrumb-ui` (flat, not hierarchical drill-in) — none provide single-panel level-swap navigation with back/focus-restoration. Data-driven (`.items` tree of `{value, label, meta?, dot?, counts?, children?}` nodes; `children` may be sync or an async `(item) => array | Promise<array>` lazy loader, rendering a `<skeleton-ui>` loading level while pending). Full keyboard path (roving-tabindex listbox per level; ArrowRight/Enter drills in, ArrowLeft/Backspace goes back with focus restored to the item drilled from), `select` + `navigate` events, a `path` property that reflects to a JSON-encoded attribute both ways (hand-managed, not the generic `reflect:` mechanism — array values don't round-trip through `String(v)`) for deep-link/URL restore, `[filterable]` filter input, `[select-on-drill]` mode flag, a `breadcrumb` slot, row-native trailing count chips (not full `<badge-ui>`, which reads oversized at row density), and a horizontal slide transition that honors `prefers-reduced-motion: reduce` automatically (also suppressible via `[static]`).
7
+
8
+ ### Fixed
9
+ - **`page-ui` header now ships the slot-gated grid its docs promised (gh#1253).** ADR-0009 recorded the named-slot vocabulary (`slot="icon"` / `slot="heading"` / `slot="action"`) as wired into four containers — Card, Drawer, Modal, and Page — but `page.css` never shipped its half; the slot attributes on a page header's children were dead metadata, so a block-level action child (e.g. `<toggle-scheme-ui>`) dropped to its own row instead of clustering. `page.css` gains the same `:has(> [slot])`-gated header grid as `card.css` (icon/heading/action columns, direct-child guard against nested false-positives), plus the `--page-header-gap` / `--page-heading-*` tokens `card-ui`'s pair already had. `page.yaml`'s `slots.default` and `page.examples.html` (new "Header slot-gated grid" demo) now describe the contract that's actually implemented.
10
+ - **`nav-ui` / `nav-item-ui` — `nav-select` now fires exactly once per click, and zero times re-clicking the already-selected item (gh#1254).** Root cause: two layered click handlers both drove selection for the same physical click — `nav-item-ui`'s own click handler called `nav.select(this)` *and* dispatched its own `nav-select`, while `nav-ui`'s click-delegation listener matched the same item on bubble and called `select()` again — three dispatches per click. `nav.select()` is now the single source of the event (idempotent: a no-op, including no hover-flush, when the item is already selected); `nav-item-ui` no longer dispatches its own copy, and `nav-ui`'s click listener no longer delegates item selection (it now only handles group expand/popover).
11
+ - **`view-transition` trait — no longer leaks unhandled `AbortError` rejections when a transition is superseded (gh#1255).** Only `transition.finished` had a `.catch()`; `ready` and `updateCallbackDone` are distinct promises that also reject (with `AbortError`) when a newer transition supersedes this one, and were previously uncaught. All three are now swallowed on abort — expected behavior for rapid navigation, not an error — with `fireEnd()` still driven solely by `finished`.
12
+
13
+ ### Maintenance
14
+ - **`bin/` touched in this release window** (1 file(s), e.g. `bin/doc.mjs`) — carried by the entries above.
15
+ - **`components/` touched in this release window** (18 file(s), e.g. `card/card.css`) — carried by the entries above.
16
+ - **`dist/` bundles rebuilt** in this cut's window (4 file(s)) — regenerated from the source changes described above, not independent edits.
17
+ - **`patterns/` touched in this release window** (1 file(s), e.g. `bulk-action-toolbar/bulk-action-toolbar.examples.html`) — carried by the entries above.
18
+ - **`styles/` touched in this release window** (1 file(s), e.g. `styles/components.css`) — carried by the entries above.
19
+ - **`traits/` touched in this release window** (2 file(s), e.g. `view-transition/view-transition.js`) — carried by the entries above.
20
+
3
21
  ## [0.8.37] — 2026-08-14
4
22
 
5
23
  ### Maintenance
package/MIGRATION.md CHANGED
@@ -130,8 +130,8 @@ failed at load. If you were writing them, they were already broken.
130
130
  | `@adia-ai/a2ui-compose/<sub>` (`core`, `strategies/*`, `transpiler`, `evals`, `shared/*`; incl. deprecated `engine`/`engines/*` aliases) | `@adia-ai/gen-ui/compose/<sub>` (aliases NOT carried over — they were already deprecated one cycle) |
131
131
  | `@adia-ai/a2ui-retrieval` | `@adia-ai/gen-ui/retrieval` |
132
132
  | `@adia-ai/a2ui-retrieval/<sub>` (e.g. `domain-router`, `intent/*`, `embedding/*`, `feedback/*`, `authoring/*`) | `@adia-ai/gen-ui/retrieval/<sub>` (e.g. `@adia-ai/gen-ui/retrieval/domain-router`) |
133
- | `@adia-ai/a2ui-corpus` | `@adia-ai/gen-ui/corpus` |
134
- | `@adia-ai/a2ui-corpus/<sub>` (`chunks/*`, `chunk-library`, `chunk-embeddings`, `manifest`) | `@adia-ai/gen-ui/corpus/<sub>` |
133
+ | `@adia-ai/a2ui-corpus` | **`@adia-ai/a2ui/catalog`** — this export WAS the catalog document, and the catalog moved protocol-side at ADR-0050 (gh#1243). `@adia-ai/gen-ui/corpus` no longer resolves as a root export |
134
+ | `@adia-ai/a2ui-corpus/<sub>` (`chunks/*`, `chunk-library`, `chunk-embeddings`, `manifest`) | `@adia-ai/gen-ui/corpus/<sub>` (unchanged — corpus fuel stays in gen-ui) |
135
135
  | `@adia-ai/a2ui-mcp` (bin `adiaui-mcp`) | `@adia-ai/mcp` (bin `adia-mcp`, subcommand `gen-ui`) — retargeted gh#1240; the `@adia-ai/gen-ui-mcp` name this row originally named never published |
136
136
  | — (new) | `@adia-ai/mcp` (bin `adia-mcp`, subcommand `protocol`) — folded into the same package as the row above by gh#1240; the `@adia-ai/a2ui-protocol-mcp` name this row originally named never published |
137
137
 
@@ -194,7 +194,8 @@ sweep '@adia-ai/a2ui-validator' '@adia-ai/a2ui/validate'
194
194
  sweep '@adia-ai/a2ui-compose/' '@adia-ai/gen-ui/compose/'
195
195
  sweep '@adia-ai/a2ui-compose' '@adia-ai/gen-ui'
196
196
  sweep '@adia-ai/a2ui-retrieval' '@adia-ai/gen-ui/retrieval'
197
- sweep '@adia-ai/a2ui-corpus' '@adia-ai/gen-ui/corpus'
197
+ sweep '@adia-ai/a2ui-corpus/' '@adia-ai/gen-ui/corpus/'
198
+ sweep '@adia-ai/a2ui-corpus' '@adia-ai/a2ui/catalog' # bare corpus import WAS the catalog (ADR-0050)
198
199
 
199
200
  # protocol
200
201
  sweep '@adia-ai/a2ui-runtime' '@adia-ai/a2ui'
@@ -218,7 +219,7 @@ between a dependency and a peer:
218
219
  MCP, into one package, `@adia-ai/mcp`, before either ever published — the
219
220
  bin gained a subcommand accordingly). Tool names and their input/output
220
221
  shapes are **unchanged**; only the package that serves them is renamed. The
221
- 30-tool surface is documented at `packages/mcp/TOOLS.md` (the `gen-ui`
222
+ 30-tool surface is documented at `packages/gen-ui/mcp/TOOLS.md` (the `gen-ui`
222
223
  section).
223
224
 
224
225
  ### After the sweep, check
@@ -1182,7 +1183,7 @@ git grep -nlz '<grid-ui[^>]*\bcols=' \
1182
1183
  done
1183
1184
  ```
1184
1185
 
1185
- Then re-run `npm run harvest:chunks` if any of the touched pages live under `site/pages/` and are tagged with `data-chunk` (extracts to `packages/a2ui/corpus/chunks/`).
1186
+ Then re-run `npm run harvest:chunks` if any of the touched pages live under `site/pages/` and are tagged with `data-chunk` (extracts to `packages/gen-ui/a2ui/corpus/chunks/`).
1186
1187
 
1187
1188
  ---
1188
1189
 
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Vanilla web components + A2UI runtime for AdiaUI. **95 light-DOM custom
4
4
  elements** + **56 composable traits**, a reactive core (signals + tagged-template renderer), form-associated form controls, and integration into the A2UI generation pipeline.
5
5
 
6
- > This package ships UI atoms only. Composite shells (admin / chat / editor / simple / theme) live in [`@adia-ai/web-modules`](../web-modules). The generation pipeline lives in [`@adia-ai/a2ui-compose`](../gen-ui/compose); the pattern corpus in [`@adia-ai/a2ui-corpus`](../gen-ui/corpus); the MCP server in [`@adia-ai/mcp`](../mcp) (its `gen-ui` surface).
6
+ > This package ships UI atoms only. Composite shells (admin / chat / editor / simple / theme) live in [`@adia-ai/web-modules`](../web-modules). The generation pipeline lives in [`@adia-ai/a2ui-compose`](../gen-ui/engine/compose); the pattern corpus in [`@adia-ai/a2ui-corpus`](../gen-ui/engine/corpus); the MCP server in [`@adia-ai/mcp`](../gen-ui/mcp) (its `gen-ui` surface).
7
7
  >
8
8
  > **Consumer guide:** [`USAGE.md`](./USAGE.md) — property reactivity, event contract, form participation, lifecycle, registration, TypeScript. Start here if you're integrating AdiaUI into an app.
9
9
  >
@@ -125,7 +125,7 @@ web-components/
125
125
  │ All actual A2UI runtime code (renderer,
126
126
  │ registry, streams, surface manifest,
127
127
  │ wiring, dockables, controllers) lives in
128
- │ `@adia-ai/a2ui` at packages/a2ui/.
128
+ │ `@adia-ai/a2ui` at packages/gen-ui/a2ui/.
129
129
 
130
130
  └── styles/ — Global tokens and CSS layering
131
131
  ├── tokens.css all --a-* design tokens
@@ -329,7 +329,7 @@ attribute table + live demos:
329
329
  npm run build:components # regenerate all .a2ui.json from YAML
330
330
  ```
331
331
 
332
- The build also writes `packages/gen-ui/corpus/catalog-a2ui_0_9.json` and
332
+ The build also writes `packages/gen-ui/engine/corpus/catalog-a2ui_0_9.json` and
333
333
  `catalog-a2ui_0_9_rules.txt` — the flat-file catalog the MCP server and
334
334
  generation engine consume.
335
335
 
package/bin/doc.mjs CHANGED
@@ -45,6 +45,32 @@ const DEMO_BASE = 'https://ui-kit.exe.xyz/site/components';
45
45
  * Defensive: any parse error returns a partial object plus an `_errors`
46
46
  * array — the caller decides how to surface failures.
47
47
  */
48
+ /**
49
+ * Strips a trailing YAML comment from a single raw line. A `#` only
50
+ * starts a comment when it's at column 0 or preceded by whitespace (the
51
+ * YAML plain-scalar rule) — a bare mid-word `#` (e.g. `gh#1253` inside a
52
+ * folded description block) is content, not a comment marker. Quote
53
+ * state is tracked (paired ' / ") so a `#` inside an actual quoted
54
+ * string is never treated as a comment start either.
55
+ *
56
+ * Fixes a truncation bug (CodeRabbit, PR #1284): the previous regex
57
+ * (`/^([^#"']*)(#.*)?$/`) cut ANY line at its first bare `#` regardless
58
+ * of context, silently truncating descriptions containing `gh#NNNN`.
59
+ */
60
+ function stripYamlComment(line) {
61
+ let inSingle = false;
62
+ let inDouble = false;
63
+ for (let i = 0; i < line.length; i++) {
64
+ const ch = line[i];
65
+ if (ch === "'" && !inDouble) inSingle = !inSingle;
66
+ else if (ch === '"' && !inSingle) inDouble = !inDouble;
67
+ else if (ch === '#' && !inSingle && !inDouble && (i === 0 || /\s/.test(line[i - 1]))) {
68
+ return line.slice(0, i).replace(/\s+$/, '');
69
+ }
70
+ }
71
+ return line.replace(/\s+$/, '');
72
+ }
73
+
48
74
  function parseYaml(source) {
49
75
  const out = {
50
76
  name: '',
@@ -59,11 +85,7 @@ function parseYaml(source) {
59
85
 
60
86
  // Strip comments + trailing whitespace, keep blank lines for block detection
61
87
  const rawLines = source.split(/\r?\n/);
62
- const lines = rawLines.map((l) => {
63
- // strip line comments unless inside a quoted string (rough heuristic)
64
- const m = l.match(/^([^#"']*)(#.*)?$/);
65
- return m ? m[1].replace(/\s+$/, '') : l;
66
- });
88
+ const lines = rawLines.map(stripYamlComment);
67
89
 
68
90
  /** Find the line range of a top-level key block (indent === 0). */
69
91
  function blockRange(key) {
@@ -264,7 +264,7 @@
264
264
  /* Heading — row 1.
265
265
  Matches native h1-h6 AND the text-ui variants the A2UI transpiler emits
266
266
  for them (display|title|heading|subsection — see HTML_TAG_MAP in
267
- packages/a2ui/compose/transpiler/transpiler-maps.js).
267
+ packages/gen-ui/a2ui/compose/transpiler/transpiler-maps.js).
268
268
  The text-ui variants are matched only when UNSLOTTED so an explicit
269
269
  `slot="heading"` / `slot="description"` / `slot="action"` always wins. */
270
270
  & > header > :is([slot="heading"], h1, h2, h3, h4, h5, h6),
@@ -0,0 +1,242 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://adiaui.dev/a2ui/v0_9/components/Drilldown.json",
4
+ "title": "Drilldown",
5
+ "description": "Single-panel, multi-level drill-in menu. One list panel slides between\nlevels (a level header with back navigation replaces stacking a column\nper level) — for hierarchical data where miller columns don't fit the\nviewport (>2 levels, >12 top-level entries, or narrow layouts). Rows\ncompose a leading dot/icon, primary label, optional meta line, and\ntrailing row-native count chips (not full <badge-ui>, which reads\noversized at row density) — plus a drill-in chevron on branch items.\nSet `.items` to a tree of `{value, label, meta?, dot?, counts?, children?}`\nnodes; `children` may be an array (sync) or a function returning an\narray/Promise (lazy, fetched on drill-in — a loading level is shown via\n<skeleton-ui> while it resolves). Distinct from <tree-ui> (inline\nexpand/collapse — right for file-tree shapes, wrong for wide/deep data\nwhere the expanded tree becomes a wall of rows), <nav-ui> (flat app\nnavigation, not hierarchical drill-in), and <context-menu> (transient\npopover submenus, not a persistent content panel).\n",
6
+ "type": "object",
7
+ "allOf": [
8
+ {
9
+ "$ref": "common_types.json#/$defs/ComponentCommon"
10
+ },
11
+ {
12
+ "$ref": "common_types.json#/$defs/CatalogComponentCommon"
13
+ }
14
+ ],
15
+ "properties": {
16
+ "items": {
17
+ "description": "Root-level array of node objects: {value, label, meta?, dot?, counts?, children?, leaf?}. `value` is the stable id used in `path` and event details. `dot` names a semantic tone (info, success, warning, danger, primary, neutral) rendered as a small leading color swatch. `counts` is an array of {variant?, value} rendered as compact trailing chips. `children` is either an array of child nodes (resolved synchronously) or a function `(item) => array | Promise<array>` for lazy per-level fetch — a loading level renders while the promise is pending. `leaf: true` forces no drill chevron even when `children` is present (rare — normally omit `children` instead).",
18
+ "$ref": "common_types.json#/$defs/DynamicObjectList"
19
+ },
20
+ "component": {
21
+ "const": "Drilldown"
22
+ },
23
+ "filterable": {
24
+ "description": "Show a filter input pinned above the list, filtering the current level's rows by label/meta.",
25
+ "type": "boolean",
26
+ "default": false
27
+ },
28
+ "path": {
29
+ "description": "Current drilled-in level, as an array of ancestor item `value`s (root = `[]`). Setting `.path` restores directly to that nested level without animating through every intermediate level — the deep-link/URL-restore path. Hand-managed (not the generic `reflect:` mechanism, which can't JSON-encode arrays) — it still genuinely reflects to a JSON-encoded `path` attribute both ways (property → attribute and attribute → property), unlike most array props on this kit.",
30
+ "$ref": "common_types.json#/$defs/DynamicStringList"
31
+ },
32
+ "placeholder": {
33
+ "description": "Placeholder text for the filter input (only rendered when `[filterable]`).",
34
+ "type": "string",
35
+ "default": "Filter…"
36
+ },
37
+ "rootLabel": {
38
+ "description": "Level-header title shown at the root level (depth 0). Empty by default (no title row).",
39
+ "type": "string",
40
+ "default": ""
41
+ },
42
+ "selectOnDrill": {
43
+ "description": "When true, clicking/activating a branch item (one with children) BOTH fires `select` and drills into it — the Schema Manager shape, where picking a namespace is both a selection and a navigation. Default false: branch activation only drills in; only leaf activation fires `select`.",
44
+ "type": "boolean",
45
+ "default": false
46
+ },
47
+ "static": {
48
+ "description": "Suppress the horizontal slide transition between levels — instant swap. Also honored automatically under `prefers-reduced-motion: reduce`.",
49
+ "type": "boolean",
50
+ "default": false
51
+ }
52
+ },
53
+ "required": [
54
+ "component"
55
+ ],
56
+ "unevaluatedProperties": false,
57
+ "x-adiaui": {
58
+ "anti_patterns": [],
59
+ "category": "navigation",
60
+ "composes": [
61
+ "icon-ui",
62
+ "skeleton-ui",
63
+ "empty-state-ui"
64
+ ],
65
+ "events": {
66
+ "navigate": {
67
+ "description": "Fired whenever the shown level changes — drill-in, back, breadcrumb jump, or a programmatic `.path` assignment. detail: { path }. Hosts mirror this to the URL instead of listening to `select`.\n",
68
+ "detail": {
69
+ "path": {
70
+ "description": "The newly-shown level's ancestor value chain.",
71
+ "type": "array",
72
+ "items": {
73
+ "type": "string"
74
+ }
75
+ }
76
+ }
77
+ },
78
+ "select": {
79
+ "description": "Fired when a leaf item is activated (click/Enter), or when a branch item is activated with `[select-on-drill]` set. detail: { path, item }. `path` is the drilled-in level the item lives at (the current `.path` at the time of activation); `item` is the raw node object.\n",
80
+ "detail": {
81
+ "item": {
82
+ "description": "The activated node object.",
83
+ "type": "object"
84
+ },
85
+ "path": {
86
+ "description": "Ancestor value chain the selected item lives at.",
87
+ "type": "array",
88
+ "items": {
89
+ "type": "string"
90
+ }
91
+ }
92
+ }
93
+ }
94
+ },
95
+ "examples": [
96
+ {
97
+ "description": "Basic Drilldown usage",
98
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"comp\"\n ]\n },\n {\n \"id\": \"comp\",\n \"component\": \"Drilldown\"\n }\n]",
99
+ "name": "basic-drilldown"
100
+ }
101
+ ],
102
+ "keywords": [
103
+ "drilldown",
104
+ "drill-down",
105
+ "miller",
106
+ "miller-columns",
107
+ "namespace",
108
+ "hierarchy",
109
+ "navigator",
110
+ "catalog-browser"
111
+ ],
112
+ "name": "UIDrilldown",
113
+ "related": [
114
+ "Tree",
115
+ "List",
116
+ "Nav",
117
+ "Breadcrumb",
118
+ "Menu"
119
+ ],
120
+ "slots": {
121
+ "title": {
122
+ "description": "Auto-stamped title cluster (current-level label + item count) inside the header."
123
+ },
124
+ "back": {
125
+ "description": "Auto-stamped back-affordance <button> (chevron + parent-level label). Hidden at the root level."
126
+ },
127
+ "breadcrumb": {
128
+ "description": "Optional slot for a consumer-supplied <breadcrumb-ui> in the level header, for deep hierarchies. Not managed by drilldown-ui — the consumer wires jump clicks to `.path = [...]` itself."
129
+ },
130
+ "counts": {
131
+ "description": "Auto-stamped per-row trailing count-chip cluster, rendered when the row's data item declares `counts`."
132
+ },
133
+ "dot": {
134
+ "description": "Auto-stamped per-row leading color swatch, rendered when the row's data item declares a `dot` tone."
135
+ },
136
+ "filter": {
137
+ "description": "Auto-stamped filter-input row, shown only when `[filterable]` is set."
138
+ },
139
+ "header": {
140
+ "description": "Auto-stamped level-header container (back affordance + breadcrumb + title/count). Structural — not consumer-overridable."
141
+ },
142
+ "main": {
143
+ "description": "Auto-stamped per-row content column (label + optional meta line)."
144
+ },
145
+ "meta": {
146
+ "description": "Auto-stamped per-row secondary meta line, rendered when the row's data item declares `meta`."
147
+ },
148
+ "viewport": {
149
+ "description": "Auto-stamped clipping container for the current level's panel (hosts the slide-transition overflow clip)."
150
+ }
151
+ },
152
+ "states": [
153
+ {
154
+ "description": "Default, ready for interaction.",
155
+ "name": "idle"
156
+ },
157
+ {
158
+ "description": "A lazy level's children are being resolved (async `children` function pending).",
159
+ "name": "loading"
160
+ },
161
+ {
162
+ "description": "The current level has no items.",
163
+ "name": "empty"
164
+ }
165
+ ],
166
+ "status": "beta",
167
+ "synonyms": {
168
+ "hierarchy": [
169
+ "tree",
170
+ "nav",
171
+ "drilldown"
172
+ ],
173
+ "miller": [
174
+ "drilldown",
175
+ "tree",
176
+ "column"
177
+ ],
178
+ "navigator": [
179
+ "tree",
180
+ "nav",
181
+ "drilldown",
182
+ "sidebar"
183
+ ]
184
+ },
185
+ "tag": "drilldown-ui",
186
+ "tokens": {
187
+ "--drilldown-bg-active": {
188
+ "description": "Row background when focused/active (roving tabindex)."
189
+ },
190
+ "--drilldown-bg-hover": {
191
+ "description": "Row background on hover."
192
+ },
193
+ "--drilldown-count-chip-font-size": {
194
+ "description": "Font size of a trailing count chip."
195
+ },
196
+ "--drilldown-count-chip-px": {
197
+ "description": "Inline padding of a trailing count chip."
198
+ },
199
+ "--drilldown-count-chip-radius": {
200
+ "description": "Border radius of a trailing count chip."
201
+ },
202
+ "--drilldown-dot-size": {
203
+ "description": "Diameter of the leading color dot."
204
+ },
205
+ "--drilldown-duration": {
206
+ "description": "Slide-transition duration."
207
+ },
208
+ "--drilldown-easing": {
209
+ "description": "Slide-transition easing function."
210
+ },
211
+ "--drilldown-fg": {
212
+ "description": "Primary row text color."
213
+ },
214
+ "--drilldown-fg-muted": {
215
+ "description": "Muted text color (meta line, chevron, back affordance)."
216
+ },
217
+ "--drilldown-focus-ring": {
218
+ "description": "Focus ring box-shadow for rows and the back button."
219
+ },
220
+ "--drilldown-header-px": {
221
+ "description": "Inline padding of the level header."
222
+ },
223
+ "--drilldown-header-py": {
224
+ "description": "Block padding of the level header."
225
+ },
226
+ "--drilldown-row-gap": {
227
+ "description": "Gap between row elements (dot / main / counts / chevron)."
228
+ },
229
+ "--drilldown-row-height": {
230
+ "description": "Height of each row."
231
+ },
232
+ "--drilldown-row-px": {
233
+ "description": "Inline padding of each row."
234
+ },
235
+ "--drilldown-row-radius": {
236
+ "description": "Border radius of each row."
237
+ }
238
+ },
239
+ "traits": [],
240
+ "version": 1
241
+ }
242
+ }