@exponential-at/ui 0.0.0-stage → 0.1.0
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/LICENSE +201 -0
- package/NOTICE +54 -0
- package/README.md +360 -2
- package/catalog/a11y.json +668 -0
- package/catalog/basic-map.json +104 -0
- package/catalog/code.json +58 -0
- package/catalog/core.catalog.json +4752 -0
- package/catalog/core.schema.json +22667 -0
- package/catalog/host.json +64 -0
- package/catalog/layout.json +20 -0
- package/catalog/limits.json +9 -0
- package/catalog/locale.json +48 -0
- package/catalog/macros.json +3417 -0
- package/catalog/recipes.json +61 -0
- package/catalog/strings.json +72 -0
- package/catalog/style.json +128 -0
- package/catalog/theme.schema.json +42543 -0
- package/catalog/tokens.json +47 -0
- package/conformance/README.md +217 -0
- package/conformance/baseline.ts +101 -0
- package/conformance/browser-page.ts +146 -0
- package/conformance/browser-suites.ts +683 -0
- package/conformance/compare.ts +201 -0
- package/conformance/dom.ts +96 -0
- package/conformance/dump.ts +163 -0
- package/conformance/fonts.json +154 -0
- package/conformance/manifest.json +224 -0
- package/conformance/parity-compare.ts +191 -0
- package/conformance/parity-report.schema.json +73 -0
- package/conformance/parity.ts +412 -0
- package/conformance/pixel.ts +177 -0
- package/conformance/primitives-page.ts +49 -0
- package/conformance/report.schema.json +66 -0
- package/conformance/run.ts +118 -0
- package/dist/chunks/index-98npjvsd.js +3940 -0
- package/dist/chunks/index-98npjvsd.js.map +27 -0
- package/dist/chunks/index-gwkt14w3.js +7314 -0
- package/dist/chunks/index-gwkt14w3.js.map +10 -0
- package/dist/chunks/index-njt7yzzm.js +134 -0
- package/dist/chunks/index-njt7yzzm.js.map +9 -0
- package/dist/chunks/index-we7va6v6.js +7984 -0
- package/dist/chunks/index-we7va6v6.js.map +15 -0
- package/dist/chunks/index-xrm6f7wc.js +2563 -0
- package/dist/chunks/index-xrm6f7wc.js.map +10 -0
- package/dist/conformance.js +182749 -0
- package/dist/conformance.js.map +10 -0
- package/dist/entries/prompt.js +251 -0
- package/dist/entries/prompt.js.map +11 -0
- package/dist/entries/schema.js +1725 -0
- package/dist/entries/schema.js.map +11 -0
- package/dist/host/index.js +122 -0
- package/dist/host/index.js.map +9 -0
- package/dist/index.js +3213 -0
- package/dist/index.js.map +27 -0
- package/dist/types/src/a11y.d.ts +21 -0
- package/dist/types/src/animation.d.ts +76 -0
- package/dist/types/src/basic-map.d.ts +38 -0
- package/dist/types/src/builder.d.ts +50 -0
- package/dist/types/src/catalog.d.ts +54 -0
- package/dist/types/src/catalog.described.d.ts +33 -0
- package/dist/types/src/catalog.generated.d.ts +829 -0
- package/dist/types/src/chart.d.ts +46 -0
- package/dist/types/src/code.d.ts +44 -0
- package/dist/types/src/color.d.ts +20 -0
- package/dist/types/src/conformance.d.ts +39 -0
- package/dist/types/src/connector/app.d.ts +14 -0
- package/dist/types/src/connector/connector.d.ts +77 -0
- package/dist/types/src/connector/index.d.ts +4 -0
- package/dist/types/src/css.d.ts +29 -0
- package/dist/types/src/define.d.ts +66 -0
- package/dist/types/src/direction.d.ts +16 -0
- package/dist/types/src/dynamic.d.ts +159 -0
- package/dist/types/src/entries/prompt.d.ts +11 -0
- package/dist/types/src/entries/schema.d.ts +8 -0
- package/dist/types/src/expr.d.ts +71 -0
- package/dist/types/src/extension.d.ts +4 -0
- package/dist/types/src/format.d.ts +112 -0
- package/dist/types/src/geometry.d.ts +40 -0
- package/dist/types/src/host/contract.d.ts +188 -0
- package/dist/types/src/host/decoders.d.ts +61 -0
- package/dist/types/src/host/index.d.ts +11 -0
- package/dist/types/src/host/package.d.ts +58 -0
- package/dist/types/src/host/policy.d.ts +105 -0
- package/dist/types/src/host/router.d.ts +34 -0
- package/dist/types/src/host/runtime.d.ts +205 -0
- package/dist/types/src/host/sources.d.ts +15 -0
- package/dist/types/src/host/transports.d.ts +109 -0
- package/dist/types/src/index.d.ts +63 -0
- package/dist/types/src/layout.d.ts +20 -0
- package/dist/types/src/limits.d.ts +21 -0
- package/dist/types/src/list.d.ts +133 -0
- package/dist/types/src/locale.d.ts +22 -0
- package/dist/types/src/macros.d.ts +29 -0
- package/dist/types/src/overlay.d.ts +27 -0
- package/dist/types/src/prompt.d.ts +44 -0
- package/dist/types/src/recipes.d.ts +17 -0
- package/dist/types/src/reducer.d.ts +41 -0
- package/dist/types/src/resizable.d.ts +38 -0
- package/dist/types/src/schema.d.ts +7 -0
- package/dist/types/src/strings.d.ts +13 -0
- package/dist/types/src/style.d.ts +201 -0
- package/dist/types/src/test-preload.d.ts +1 -0
- package/dist/types/src/text-shimmer.d.ts +24 -0
- package/dist/types/src/theme-types.d.ts +162 -0
- package/dist/types/src/theme.d.ts +73 -0
- package/dist/types/src/themes.d.ts +22 -0
- package/dist/types/src/tree-guides.d.ts +17 -0
- package/dist/types/src/types.d.ts +314 -0
- package/dist/types/src/validate.d.ts +31 -0
- package/dist/types/src/web/base-css.d.ts +1 -0
- package/dist/types/src/web/box-css.d.ts +55 -0
- package/dist/types/src/web/coerce.d.ts +32 -0
- package/dist/types/src/web/data.d.ts +105 -0
- package/dist/types/src/web/dates.d.ts +12 -0
- package/dist/types/src/web/form.d.ts +44 -0
- package/dist/types/src/web/host-types.d.ts +119 -0
- package/dist/types/src/web/index.d.ts +28 -0
- package/dist/types/src/web/inputs.d.ts +55 -0
- package/dist/types/src/web/list.d.ts +13 -0
- package/dist/types/src/web/listbox.d.ts +14 -0
- package/dist/types/src/web/markdown.d.ts +96 -0
- package/dist/types/src/web/media.d.ts +62 -0
- package/dist/types/src/web/parts.d.ts +4 -0
- package/dist/types/src/web/primitives/alert-dialog.d.ts +10 -0
- package/dist/types/src/web/primitives/alert.d.ts +9 -0
- package/dist/types/src/web/primitives/avatar-color.d.ts +2 -0
- package/dist/types/src/web/primitives/avatar.d.ts +13 -0
- package/dist/types/src/web/primitives/badge.d.ts +10 -0
- package/dist/types/src/web/primitives/breadcrumb.d.ts +10 -0
- package/dist/types/src/web/primitives/button.d.ts +6 -0
- package/dist/types/src/web/primitives/calendar.d.ts +43 -0
- package/dist/types/src/web/primitives/card.d.ts +9 -0
- package/dist/types/src/web/primitives/checkbox.d.ts +5 -0
- package/dist/types/src/web/primitives/choice-tiles.d.ts +32 -0
- package/dist/types/src/web/primitives/cn.d.ts +3 -0
- package/dist/types/src/web/primitives/code-block.d.ts +24 -0
- package/dist/types/src/web/primitives/command.d.ts +134 -0
- package/dist/types/src/web/primitives/context-ring.d.ts +24 -0
- package/dist/types/src/web/primitives/dialog-arms.d.ts +6 -0
- package/dist/types/src/web/primitives/dialog.d.ts +24 -0
- package/dist/types/src/web/primitives/disclosure-header.d.ts +5 -0
- package/dist/types/src/web/primitives/dock.d.ts +42 -0
- package/dist/types/src/web/primitives/dropdown-menu.d.ts +14 -0
- package/dist/types/src/web/primitives/empty-state.d.ts +15 -0
- package/dist/types/src/web/primitives/glass-card.d.ts +4 -0
- package/dist/types/src/web/primitives/hover-card.d.ts +7 -0
- package/dist/types/src/web/primitives/icon-disc.d.ts +12 -0
- package/dist/types/src/web/primitives/index.d.ts +48 -0
- package/dist/types/src/web/primitives/input.d.ts +5 -0
- package/dist/types/src/web/primitives/kbd.d.ts +4 -0
- package/dist/types/src/web/primitives/label.d.ts +3 -0
- package/dist/types/src/web/primitives/menu-surface.d.ts +17 -0
- package/dist/types/src/web/primitives/meter.d.ts +21 -0
- package/dist/types/src/web/primitives/popover.d.ts +3 -0
- package/dist/types/src/web/primitives/progress-ring.d.ts +5 -0
- package/dist/types/src/web/primitives/progress.d.ts +8 -0
- package/dist/types/src/web/primitives/scroll-area.d.ts +49 -0
- package/dist/types/src/web/primitives/segmented-control.d.ts +5 -0
- package/dist/types/src/web/primitives/select.d.ts +47 -0
- package/dist/types/src/web/primitives/separator.d.ts +3 -0
- package/dist/types/src/web/primitives/sheet-chrome.d.ts +4 -0
- package/dist/types/src/web/primitives/sheet.d.ts +20 -0
- package/dist/types/src/web/primitives/skeleton.d.ts +3 -0
- package/dist/types/src/web/primitives/spinner.d.ts +3 -0
- package/dist/types/src/web/primitives/switch.d.ts +4 -0
- package/dist/types/src/web/primitives/table.d.ts +11 -0
- package/dist/types/src/web/primitives/tabs.d.ts +13 -0
- package/dist/types/src/web/primitives/textarea.d.ts +3 -0
- package/dist/types/src/web/primitives/toast.d.ts +163 -0
- package/dist/types/src/web/primitives/tooltip.d.ts +3 -0
- package/dist/types/src/web/primitives/truncate.d.ts +7 -0
- package/dist/types/src/web/primitives/typeahead-portal.d.ts +12 -0
- package/dist/types/src/web/share.d.ts +6 -0
- package/dist/types/src/web/table.d.ts +20 -0
- package/dist/types/src/web/theme-css.d.ts +69 -0
- package/dist/types/src/web/urls.d.ts +21 -0
- package/dist/web/index.js +2303 -0
- package/dist/web/index.js.map +26 -0
- package/dist/web/primitives/index.js +1450 -0
- package/dist/web/primitives/index.js.map +57 -0
- package/docs/components.generated.json +6238 -0
- package/docs/round-1-contract.md +679 -0
- package/docs/round-2-contract.md +476 -0
- package/docs/round-3-contract.md +174 -0
- package/docs/themes.generated.json +3503 -0
- package/fixtures/animations.json +2890 -0
- package/fixtures/bench-list.json +58 -0
- package/fixtures/bind-time.json +30664 -0
- package/fixtures/catalog-basic-map.json +1692 -0
- package/fixtures/catalog-components.json +9323 -0
- package/fixtures/catalog-extension.json +620 -0
- package/fixtures/catalog-macros.json +36370 -0
- package/fixtures/code-tokens.json +1993 -0
- package/fixtures/conformance-baseline.json +55544 -0
- package/fixtures/conformance-cases.json +49 -0
- package/fixtures/conformance-known.json +2123 -0
- package/fixtures/control-geometry.json +4200 -0
- package/fixtures/dashboard.data.json +74 -0
- package/fixtures/dashboard.json +752 -0
- package/fixtures/demo-surface.json +47 -0
- package/fixtures/format.json +870 -0
- package/fixtures/host-policy.json +1067 -0
- package/fixtures/host-router.json +1152 -0
- package/fixtures/host-transport.json +590 -0
- package/fixtures/interactions-round1.json +773 -0
- package/fixtures/kitchen-sink.expanded.json +10844 -0
- package/fixtures/kitchen-sink.json +3049 -0
- package/fixtures/layout-geometry-round1.json +7278 -0
- package/fixtures/layout-geometry.json +2072 -0
- package/fixtures/overlay-geometry.json +272 -0
- package/fixtures/primitive-specimens.json +58 -0
- package/fixtures/prompt-budget.json +33 -0
- package/fixtures/resizable.json +714 -0
- package/fixtures/round4-contract.json +2985 -0
- package/fixtures/specimens.json +9832 -0
- package/fixtures/style-conditions.json +336 -0
- package/fixtures/template-items.json +2215 -0
- package/fixtures/text-direction.json +309 -0
- package/fixtures/text-shimmer.json +96 -0
- package/fixtures/theme-extends.json +573 -0
- package/fixtures/theme-invalid.json +1296 -0
- package/fixtures/theme-recipes.json +58600 -0
- package/fixtures/theme-resolved.json +23949 -0
- package/fixtures/toast-stack.json +215 -0
- package/fixtures/tree-guides.json +224 -0
- package/fixtures/virtual-list.json +733 -0
- package/generated/ExponentialUICatalog.generated.kt +67 -0
- package/generated/ExponentialUICatalog.generated.swift +67 -0
- package/generated/ExponentialUIThemes.generated.kt +23 -0
- package/generated/ExponentialUIThemes.generated.swift +23 -0
- package/generated/catalog.descriptions.generated.rs +6 -0
- package/generated/catalog.generated.rs +80 -0
- package/generated/catalog.themes.generated.rs +34 -0
- package/generated/core.descriptions.json +2505 -0
- package/generated/core.runtime.json +3609 -0
- package/package.json +87 -4
- package/themes/exponential.recipes.json +49 -0
- package/themes/exponential.theme.json +755 -0
- package/themes/neutral.theme.json +5676 -0
- package/themes/orange.theme.json +43 -0
- package/themes/playful.theme.json +219 -0
- package/vendor/a2ui/LICENSE.txt +203 -0
- package/vendor/a2ui/README.md +27 -0
- package/vendor/a2ui/v0_9/basic_catalog.json +1387 -0
- package/vendor/a2ui/v0_9/basic_catalog_rules.txt +5 -0
- package/vendor/a2ui/v0_9/client_capabilities.json +97 -0
- package/vendor/a2ui/v0_9/client_to_server.json +104 -0
- package/vendor/a2ui/v0_9/common_types.json +315 -0
- package/vendor/a2ui/v0_9/server_to_client.json +132 -0
- package/vendor/json-render/LICENSE.txt +201 -0
- package/vendor/json-render/README.md +13 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Exponential UI — round 3 contract (VAPP-102)
|
|
2
|
+
|
|
3
|
+
Round 3 folds the catalog onto the vocabulary the Exponential app settled on
|
|
4
|
+
in its UI cleanup (EXP-1248, EXP-1249, EXP-1251): ONE row, ONE section band,
|
|
5
|
+
ONE chip, ONE segmented control, ONE menu. The catalog had split each of
|
|
6
|
+
these several ways; the app has one of each. This file is the CONTRACT half:
|
|
7
|
+
what changed in `@exponential-at/ui` and what each renderer implements to
|
|
8
|
+
match. Everything here is locked by a fixture or a test.
|
|
9
|
+
|
|
10
|
+
Read §0, the sections you own, then §6 (your checklist).
|
|
11
|
+
|
|
12
|
+
## 0. What moved
|
|
13
|
+
|
|
14
|
+
| area | change | source of truth | locked by |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `Row` | NEW macro: leading/trailing slots, identifier, title/subtitle/meta/value(+placeholder), chevron, selected, density, surface flat\|card, pressable, depth | `core.catalog.json`, `macros.json` | `catalog-macros.json` |
|
|
17
|
+
| `Section` | NEW macro: a band header (title, caption, count OFF by default, glyph, leading/trailing slots, collapsible/open, tint) over hairline-divided rows (a `List` native, the windowed backend); `tree` = the rows nest by depth | same | `catalog-macros.json`, `kitchen-sink.expanded.json` |
|
|
18
|
+
| tree guides | computed by the CORE from consecutive rows' `depth` (elbow, tee, pass-through); `TreeGuides` = a hidden Row part, never authored; column 14 px (the line's left edge at i·14 + 7), rounded 3 px elbow, 1 px bridge | `src/tree-guides.ts`, `layout.json` | `fixtures/tree-guides.json`, the `Row/tree:*` macro cases |
|
|
19
|
+
| `Chip` | NEW macro: shape pill\|rect (the old Pill + EntityChip), selected, tone, dot, icon, image, detail, removable, pressable, a `leading` slot | `macros.json` | `catalog-macros.json` |
|
|
20
|
+
| `Segmented` | native (ToggleGroup renamed): variant segmented (default) \| toggles \| outline \| bar; TabBar + ButtonGroup fold in | `core.catalog.json`, `recipes.json` | `catalog-components.json`, `control-geometry.json` |
|
|
21
|
+
| `Menu` | native (DropdownMenu + ContextMenu): `openOn press\|contextmenu`, the ONE child = the trigger or the target region, `menuItem.items` bindable (a source-fed submenu) | `core.catalog.json` | `catalog-components.json`, the React + Rust bound-submenu tests |
|
|
22
|
+
| `Badge` | counts and short status labels only | `core.catalog.json` | — |
|
|
23
|
+
| sheets | `Drawer side: bottom` (what the app calls a sheet; the Sheet name is gone) | `core.catalog.json` | `catalog-components.json` |
|
|
24
|
+
| removed names | round 4 (VAPP-103) REMOVED the 16 folded names (§4): no aliases, an old name is an `unknown component` | `core.catalog.json` `$comment` | `catalog.test.ts` |
|
|
25
|
+
| lite | Pagination, Accordion, Radio, Slider, Spinner, Table, Toggle leave the lite subset (with Carousel, the overlays, media, Chart) | `core.catalog.json` | `prompt-budget.json` |
|
|
26
|
+
| a11y | roles gain `tree`, `treeitem` | `a11y.json` | `round1-fixes.test.ts` |
|
|
27
|
+
| extension | the app extension splits RunRow into RunStatusRow + SessionRow, adds PrRow/StackRail/DiffCounts/DiffFileRow/GuideSection; IssueRow, IssueGroupBand and IssueChip are macros over Row/Section/Chip | `packages/ui/exponential-ui/extension.json` | `packages/ui/src/exponential-ui-extension.test.ts` |
|
|
28
|
+
|
|
29
|
+
Counts (after round 4): 72 components in the catalog, 70 offered (44
|
|
30
|
+
natives, 26 macros; 50 lite), TreeGuides and Unknown hidden.
|
|
31
|
+
|
|
32
|
+
## 1. Row and Section
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{ "id": "runs", "component": "Section", "props": { "title": "Running", "tree": true, "collapsible": true },
|
|
36
|
+
"children": ["r1", "r2", "r3"] }
|
|
37
|
+
{ "id": "r1", "component": "Row", "props": { "identifier": "EXP-12", "title": "Release 0.18", "meta": "4 runs", "pressable": true } }
|
|
38
|
+
{ "id": "r2", "component": "Row", "props": { "title": "Notarize", "depth": 1, "icon": "status-in-progress" } }
|
|
39
|
+
{ "id": "r3", "component": "Row", "props": { "title": "Upload", "depth": 1, "value": "queued", "chevron": "right", "pressable": true } }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Row** parts, in order: `root` (a pressable Box: flex row, gap sm, min
|
|
43
|
+
height `$control.row` / `$control.rowCompact` by `density`, padding
|
|
44
|
+
horizontal md and NO vertical padding (the `body` carries xs (flat) / md
|
|
45
|
+
(card) so the `guides` part spans the row's full height and the lines of
|
|
46
|
+
consecutive rows meet across the divider), radius md (flat) / lg (card))
|
|
47
|
+
→ `guides` (a `TreeGuides` native, only when `depth > 0`, FILLED BY THE
|
|
48
|
+
CORE) → the `leading` slot → `icon` (sm, when no slot is given) →
|
|
49
|
+
`identifier` (Text `code`) → `body` (`title` Text body, `subtitle` Text
|
|
50
|
+
muted) → `meta` (Text muted) → `value` (Text body, or muted while it shows
|
|
51
|
+
`placeholder`, aligned end) → the `trailing` slot → `chevron` (`right` =
|
|
52
|
+
`ui-chevron-right`, `selector` = `ui-selector`). Recipe props: `selected`,
|
|
53
|
+
`density`, `surface`, `depth`. A11y: role `button` + `selected` when
|
|
54
|
+
`pressable`, otherwise `none`. `on.press` implies `pressable`.
|
|
55
|
+
|
|
56
|
+
**Section** parts: `root` (column, gap xs) → `header` (only with a `title`;
|
|
57
|
+
flex row, height `$control.row`, padding horizontal md, radius md; a heading
|
|
58
|
+
(level 3), or a `button` with `expanded` when `collapsible`, whose press
|
|
59
|
+
routes to `change {open}` and writes a bound `open` back) → `chevron`
|
|
60
|
+
(collapsible only, `ui-chevron-right`, rotates when open) → the `leading`
|
|
61
|
+
slot → `icon` → `title` (Text label) → `caption` (Text muted) → `count`
|
|
62
|
+
(Text muted, only when given) → `spacer` → the `trailing` slot; then `body`
|
|
63
|
+
= a `List` native (`divided: true`, `gap: none`, role `list`, or `tree`
|
|
64
|
+
when `tree`) holding the author's children (a data template rides through),
|
|
65
|
+
shown while `open` (default true). Recipe props: `tint`, `tree`, `open`,
|
|
66
|
+
`collapsible`. The old `Band` = a Section without rows; the old `RowList` =
|
|
67
|
+
a Section without a title.
|
|
68
|
+
|
|
69
|
+
## 2. The tree guides the core computes
|
|
70
|
+
|
|
71
|
+
`treeGuides(depths)` (`src/tree-guides.ts`; Rust `tree_guides.rs`) is the
|
|
72
|
+
app's ×4 rule verbatim: a row at depth `d ≥ 1` gets its elbow in gutter
|
|
73
|
+
level `d − 1`; the elbow TEES on when another row at depth `d` follows
|
|
74
|
+
before the walk leaves the subtree (a row at depth `≤ d − 1`); every
|
|
75
|
+
ancestor level `L < d − 1` whose subtree continues after the row passes
|
|
76
|
+
straight through. `fixtures/tree-guides.json` locks the vectors.
|
|
77
|
+
|
|
78
|
+
`applyTreeGuides(root)` runs ONCE at the end of `expandMacros`
|
|
79
|
+
(`expand_macros`), when every node is native: over every node's children in
|
|
80
|
+
order, a Row root (`recipe.macro` Row, part root) contributes its numeric
|
|
81
|
+
`recipe.props.depth` (floored; anything else, including a non-Row sibling,
|
|
82
|
+
counts as 0 and ends every subtree); the Row's `guides` part gets
|
|
83
|
+
`{depth, elbowAt?, tee, passThrough}` in that key order (`elbowAt` omitted
|
|
84
|
+
for a root). A lone root or slot value is a one-element list. Any OTHER
|
|
85
|
+
sibling with a numeric `depth` prop (an extension row such as SessionRow or
|
|
86
|
+
PrRow) takes part too and gets the result as its `guide` prop
|
|
87
|
+
(`{elbowAt?, tee, passThrough}`) for its painter to draw. A `depth` is
|
|
88
|
+
static (never bindable). The pass runs over the EXPANDED tree only: rows a
|
|
89
|
+
data template instantiates (a List over `{path}`) are not siblings at
|
|
90
|
+
expansion time, and a painter draws NO elbow without `elbowAt`; author
|
|
91
|
+
static rows for a connected tree. A macro that offers `pressable` (Row,
|
|
92
|
+
Chip) takes it from an `on.press` when unset.
|
|
93
|
+
|
|
94
|
+
**Geometry** (`layout.json`): `treeGuideColumn` = 14 (the `guides` part is
|
|
95
|
+
`depth × 14` wide, stretched to the row; column `i`'s line is at
|
|
96
|
+
`x = i·14 + 7`, the elbow's stub runs to `i·14 + 14` so it ends at the
|
|
97
|
+
child's own lead glyph), `treeGuideRadius` = 3 (the elbow's corner),
|
|
98
|
+
`treeGuideBridge` = 1 (every guide vertical starts that many px ABOVE the
|
|
99
|
+
part's top edge, paint only, so a Section's hairline divider never breaks the
|
|
100
|
+
line). Stroke width and colour = the `TreeGuides/line` recipe.
|
|
101
|
+
|
|
102
|
+
## 3. Chip, Segmented, Menu
|
|
103
|
+
|
|
104
|
+
**Chip** `shape: pill` = radius full, height `$control.pill` (the old
|
|
105
|
+
Pill); `rect` = radius md, height `$control.chip` (the old EntityChip).
|
|
106
|
+
Parts: root → the `leading` slot → dot → image (16 px, round) → icon (when
|
|
107
|
+
no image) → label (caption) → detail (muted) → remove (a ghost icon Button,
|
|
108
|
+
`$on press → remove`). Recipe props `shape`, `selected`, `tone`.
|
|
109
|
+
|
|
110
|
+
**Segmented** keeps ToggleGroup's contract (`items`, `type`, bound `value`
|
|
111
|
+
comma-joined when multiple, `size`, `fill`) with `variant`: `segmented` (the
|
|
112
|
+
DEFAULT: the pill track), `toggles` (bare toggle buttons, ToggleGroup's old
|
|
113
|
+
default), `outline` (joined outline buttons, the old ButtonGroup), `bar` (the
|
|
114
|
+
old TabBar: full width, each item a column of icon over a caption label,
|
|
115
|
+
role `navigation` with `aria-current=page` on the selected item). Recipe
|
|
116
|
+
parts `root`, `item`, `icon`, `label`; `when` props `type`, `variant`, `size`,
|
|
117
|
+
`fill`. Content-sized (align-self start) unless `fill` or `bar`.
|
|
118
|
+
|
|
119
|
+
**Menu** keeps the `menuItem` contract (item | checkbox | separator | label |
|
|
120
|
+
submenu, one level) with `openOn`: `press` (the ONE child is the trigger; no
|
|
121
|
+
child = a default outline Button from `label`/`icon`, no chevron) or
|
|
122
|
+
`contextmenu` (the child is the target region: right-click, long-press,
|
|
123
|
+
Shift+F10 or the Menu key open it at the pointer). `menuItem.items` is
|
|
124
|
+
bindable: a `{path}` whose rows a host feeds (`bindDataModel` from an
|
|
125
|
+
`exp:` source) becomes the submenu. Parts `trigger`, `content`, `item`,
|
|
126
|
+
`separator`, `label`, `shortcut`, `check`, `submenuIndicator`; built-in
|
|
127
|
+
glyphs `Menu.check`, `Menu.submenuIndicator`. The DropdownMenu and
|
|
128
|
+
ContextMenu glyph rows are gone (round 4 removed those names).
|
|
129
|
+
|
|
130
|
+
## 4. Removed names (round 4)
|
|
131
|
+
|
|
132
|
+
Round 3 shipped these as one-release aliases; round 4 (VAPP-103) REMOVED
|
|
133
|
+
them before any release: there is no `deprecated` key, no alias macro, no
|
|
134
|
+
example case and no generated `componentDeprecated` constant. An old name
|
|
135
|
+
reduces to the `Unknown` placeholder with an `unknown component <name>`
|
|
136
|
+
issue, and a theme naming one fails to load (`unknown component`).
|
|
137
|
+
|
|
138
|
+
| removed | write instead |
|
|
139
|
+
|---|---|
|
|
140
|
+
| ListRow, CardRow, PropertyRow, PickerRow, NavRow | `Row` (card = `surface: card`; property = a `value`; picker = `value` + `placeholder` + `chevron: selector`; nav = `icon` + `selected` + a `Badge` in the trailing slot) |
|
|
141
|
+
| Band, RowList | `Section` (no rows / no title; `tree` for nested rows) |
|
|
142
|
+
| Pill, EntityChip | `Chip` (`shape: pill` / `rect`) |
|
|
143
|
+
| ToggleGroup, TabBar, ButtonGroup | `Segmented` (`toggles`\|`outline`\|`segmented` / `bar` + fill / `outline`) |
|
|
144
|
+
| DropdownMenu, ContextMenu | `Menu` (`openOn: press` with the trigger as the child / `contextmenu`) |
|
|
145
|
+
| Sheet | `Drawer side: bottom` |
|
|
146
|
+
| HoverCard | `Popover openOn: hover` |
|
|
147
|
+
|
|
148
|
+
## 5. Breaking changes
|
|
149
|
+
|
|
150
|
+
- Themes: recipes for the folded components fail to load (`unknown
|
|
151
|
+
component`); move them to `Row`, `Section`, `Chip`, `Segmented`, `Menu`.
|
|
152
|
+
- `layout.json` `treeGuideColumn` 16 → 14; `TreeGuides` is hidden.
|
|
153
|
+
- `builtinIcons`: `DropdownMenu.*` / `ContextMenu.*` → `Menu.*`.
|
|
154
|
+
- Enums `bandVariant`, `toggleVariant` are gone; `rowChevron`, `rowSurface`,
|
|
155
|
+
`chipShape`, `segmentedVariant`, `menuOpenOn` are new.
|
|
156
|
+
- The lite subset lost seven components; `prompt-budget.json` moved.
|
|
157
|
+
|
|
158
|
+
## 6. Per-renderer checklist
|
|
159
|
+
|
|
160
|
+
Every renderer: replay the regenerated fixtures (`catalog-components.json`, `catalog-macros.json` with the `Row/tree:*` cases,
|
|
161
|
+
`tree-guides.json`, `kitchen-sink*.json`, `control-geometry.json`,
|
|
162
|
+
`theme-*.json`, `bind-time.json`); paint `Segmented` (+ `bar`) and `Menu`
|
|
163
|
+
(+ `contextmenu`) under the new names; draw `TreeGuides` at 14 / 3 / 1.
|
|
164
|
+
|
|
165
|
+
- **Rust core**: `tree_guides.rs` + the post-expansion pass; `Menu` and
|
|
166
|
+
`Segmented` in the layout tree, events and state.
|
|
167
|
+
- **gpui**: the menu and segmented painters renamed, the `bar` column item,
|
|
168
|
+
the rounded + bridged guides; the conformance ratchet re-recorded against
|
|
169
|
+
the new web baseline.
|
|
170
|
+
- **React**: `MenuNative`, `SegmentedNative`, the guides geometry, the
|
|
171
|
+
snapshot and the web baseline re-recorded.
|
|
172
|
+
- **SwiftUI / Compose**: the leaf switches renamed (`Menu`, `Segmented`),
|
|
173
|
+
the `bar` item, the guides geometry, the built-in glyph mirror, snapshots
|
|
174
|
+
re-recorded (Compose on ubuntu).
|