@estiva-app/ui 0.35.1 → 0.36.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.
Files changed (132) hide show
  1. package/dist/eslint/escape.d.ts +23 -6
  2. package/dist/eslint/escape.d.ts.map +1 -1
  3. package/dist/eslint/index.js +70 -9
  4. package/dist/eslint/index.js.map +2 -2
  5. package/dist/eslint/no-raw-element.d.ts +7 -0
  6. package/dist/eslint/no-raw-element.d.ts.map +1 -1
  7. package/dist/eslint/no-restyled-part.d.ts +8 -0
  8. package/dist/eslint/no-restyled-part.d.ts.map +1 -1
  9. package/dist/gates/app-checks.d.ts.map +1 -1
  10. package/dist/gates/{chunk-DRIHHXQK.js → chunk-CC6L4B5U.js} +23 -17
  11. package/dist/gates/chunk-CC6L4B5U.js.map +7 -0
  12. package/dist/gates/chunk-SYVKGOWM.js +1131 -0
  13. package/dist/gates/chunk-SYVKGOWM.js.map +7 -0
  14. package/dist/gates/ci.d.ts +18 -0
  15. package/dist/gates/ci.d.ts.map +1 -0
  16. package/dist/gates/cli.js +20 -3
  17. package/dist/gates/cli.js.map +2 -2
  18. package/dist/gates/create-app.d.ts.map +1 -1
  19. package/dist/gates/create-app.js +1 -1
  20. package/dist/gates/escapes.d.ts +23 -0
  21. package/dist/gates/escapes.d.ts.map +1 -0
  22. package/dist/gates/gate-config.d.ts.map +1 -1
  23. package/dist/gates/hook.d.ts +2 -0
  24. package/dist/gates/hook.d.ts.map +1 -1
  25. package/dist/gates/index.d.ts +5 -1
  26. package/dist/gates/index.d.ts.map +1 -1
  27. package/dist/gates/index.js +41 -185
  28. package/dist/gates/index.js.map +4 -4
  29. package/dist/gates/name-escapes.d.ts +14 -0
  30. package/dist/gates/name-escapes.d.ts.map +1 -0
  31. package/dist/gates/status.d.ts +3 -1
  32. package/dist/gates/status.d.ts.map +1 -1
  33. package/dist/gates/token-lint.d.ts.map +1 -1
  34. package/dist/gates/token-style.d.ts +21 -0
  35. package/dist/gates/token-style.d.ts.map +1 -0
  36. package/dist/index.js +13 -13
  37. package/dist/index.js.map +1 -1
  38. package/dist/registry/{app-3ALZE6XO.js → app-YMABQII6.js} +3 -3
  39. package/dist/registry/app.d.ts.map +1 -1
  40. package/dist/registry/behaviours.d.ts +71 -0
  41. package/dist/registry/behaviours.d.ts.map +1 -0
  42. package/dist/registry/{build-NDXMVFQ5.js → build-3EANARLQ.js} +2 -2
  43. package/dist/registry/build.d.ts.map +1 -1
  44. package/dist/registry/{chunk-3WJ7ZZ7Z.js → chunk-EVJW26UR.js} +51 -4
  45. package/dist/registry/chunk-EVJW26UR.js.map +7 -0
  46. package/dist/registry/{chunk-XVII7P6G.js → chunk-SIB44CES.js} +276 -90
  47. package/dist/registry/chunk-SIB44CES.js.map +7 -0
  48. package/dist/registry/{chunk-KMZIMB3G.js → chunk-XK747STJ.js} +46 -3
  49. package/dist/registry/chunk-XK747STJ.js.map +7 -0
  50. package/dist/registry/cli.js +93 -34
  51. package/dist/registry/cli.js.map +3 -3
  52. package/dist/registry/contract.d.ts +27 -1
  53. package/dist/registry/contract.d.ts.map +1 -1
  54. package/dist/registry/index.d.ts +1 -1
  55. package/dist/registry/index.d.ts.map +1 -1
  56. package/dist/registry/index.js +11 -5
  57. package/dist/registry/siblings.d.ts +9 -0
  58. package/dist/registry/siblings.d.ts.map +1 -1
  59. package/dist/registry/storymap.d.ts +19 -5
  60. package/dist/registry/storymap.d.ts.map +1 -1
  61. package/package.json +4 -1
  62. package/registry.json +293 -17
  63. package/skill/estiva-ui.md +2 -1
  64. package/src/AppShell.mdx +2 -1
  65. package/src/AttachmentCard.tsx +7 -7
  66. package/src/Button.tsx +1 -1
  67. package/src/Card.tsx +2 -2
  68. package/src/ChipInput.mdx +2 -0
  69. package/src/ChipInput.tsx +1 -1
  70. package/src/CommandPalette.tsx +3 -3
  71. package/src/DialogShell.tsx +1 -1
  72. package/src/EmptyState.mdx +4 -3
  73. package/src/Lightbox.tsx +1 -1
  74. package/src/NavItem.tsx +1 -1
  75. package/src/PersonTrigger.tsx +1 -1
  76. package/src/Reaction.tsx +1 -1
  77. package/src/ScrollArea.mdx +4 -0
  78. package/src/Select.tsx +1 -1
  79. package/src/TopBar.mdx +1 -1
  80. package/src/eslint/escape.ts +43 -14
  81. package/src/eslint/has-a-page-and-a-story.test.ts +1 -1
  82. package/src/eslint/index.test.ts +2 -2
  83. package/src/eslint/no-copied-look.test.ts +1 -1
  84. package/src/eslint/no-hand-rolled-behaviour.test.ts +3 -3
  85. package/src/eslint/no-handmade-empty-state.test.ts +2 -2
  86. package/src/eslint/no-handmade-header.test.ts +2 -2
  87. package/src/eslint/no-native-title.test.ts +2 -2
  88. package/src/eslint/no-raw-element.test.ts +47 -15
  89. package/src/eslint/no-raw-element.ts +53 -3
  90. package/src/eslint/no-rebuilt-behaviour.test.ts +9 -9
  91. package/src/eslint/no-restyled-part.test.ts +21 -2
  92. package/src/eslint/no-restyled-part.ts +30 -0
  93. package/src/eslint/raw-element-outside-a-wrapper.test.ts +3 -3
  94. package/src/gates/app-checks.ts +4 -3
  95. package/src/gates/ci.ts +152 -0
  96. package/src/gates/cli.ts +19 -3
  97. package/src/gates/count.ts +1 -1
  98. package/src/gates/create-app.test.ts +2 -2
  99. package/src/gates/create-app.ts +22 -16
  100. package/src/gates/escapes.ts +111 -0
  101. package/src/gates/gate-config.ts +6 -2
  102. package/src/gates/gates.test.ts +93 -1
  103. package/src/gates/hook.ts +44 -6
  104. package/src/gates/index.ts +5 -1
  105. package/src/gates/name-escapes.ts +77 -0
  106. package/src/gates/status.ts +45 -2
  107. package/src/gates/token-lint.ts +11 -4
  108. package/src/gates/token-style.ts +79 -0
  109. package/src/how.test.ts +282 -0
  110. package/src/pages.test.ts +17 -0
  111. package/src/registry/app.test.ts +34 -0
  112. package/src/registry/app.ts +52 -2
  113. package/src/registry/behaviours.ts +223 -0
  114. package/src/registry/build.ts +36 -0
  115. package/src/registry/cli.ts +37 -18
  116. package/src/registry/contract.test.ts +63 -3
  117. package/src/registry/contract.ts +75 -2
  118. package/src/registry/index.ts +1 -1
  119. package/src/registry/registry.test.ts +14 -0
  120. package/src/registry/siblings.test.ts +24 -1
  121. package/src/registry/siblings.ts +23 -0
  122. package/src/registry/storymap.test.ts +52 -31
  123. package/src/registry/storymap.ts +76 -37
  124. package/stories/Choosing.mdx +8 -2
  125. package/dist/gates/chunk-DRIHHXQK.js.map +0 -7
  126. package/dist/gates/chunk-GI6M4P7H.js +0 -606
  127. package/dist/gates/chunk-GI6M4P7H.js.map +0 -7
  128. package/dist/registry/chunk-3WJ7ZZ7Z.js.map +0 -7
  129. package/dist/registry/chunk-KMZIMB3G.js.map +0 -7
  130. package/dist/registry/chunk-XVII7P6G.js.map +0 -7
  131. /package/dist/registry/{app-3ALZE6XO.js.map → app-YMABQII6.js.map} +0 -0
  132. /package/dist/registry/{build-NDXMVFQ5.js.map → build-3EANARLQ.js.map} +0 -0
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CONTRACT_KINDS,
4
+ NO_ALTERNATIVE,
4
5
  PAGE_SECTIONS,
5
6
  contractProblems,
6
7
  docsLink,
@@ -9,16 +10,18 @@ import {
9
10
  formatFindings,
10
11
  hasSeenIn,
11
12
  linkProblems,
12
- pageProblem
13
- } from "./chunk-KMZIMB3G.js";
13
+ namedParts,
14
+ pageProblem,
15
+ whenNotProblem
16
+ } from "./chunk-XK747STJ.js";
14
17
  import {
15
18
  buildAppRegistry
16
- } from "./chunk-3WJ7ZZ7Z.js";
19
+ } from "./chunk-EVJW26UR.js";
17
20
  import {
18
21
  buildRegistry,
19
22
  readIndexExports,
20
23
  serializeRegistry
21
- } from "./chunk-XVII7P6G.js";
24
+ } from "./chunk-SIB44CES.js";
22
25
  import {
23
26
  CLASSES,
24
27
  SCHEMA_VERSION,
@@ -27,6 +30,7 @@ import {
27
30
  export {
28
31
  CLASSES,
29
32
  CONTRACT_KINDS,
33
+ NO_ALTERNATIVE,
30
34
  PAGE_SECTIONS,
31
35
  SCHEMA_VERSION,
32
36
  buildAppRegistry,
@@ -38,9 +42,11 @@ export {
38
42
  formatFindings,
39
43
  hasSeenIn,
40
44
  linkProblems,
45
+ namedParts,
41
46
  pageProblem,
42
47
  readIndexExports,
43
48
  serializeRegistry,
44
- validateRegistry
49
+ validateRegistry,
50
+ whenNotProblem
45
51
  };
46
52
  //# sourceMappingURL=index.js.map
@@ -18,4 +18,13 @@ export declare function workspaceOf(from: string): string;
18
18
  export declare function findSiblings(workspace: string, { skip }?: {
19
19
  skip?: string[];
20
20
  }): Sibling[];
21
+ /**
22
+ * How many commits the checkout that holds `folder` is behind its remote's main,
23
+ * as last fetched: nothing is fetched, so a search stays quick. Null when it is
24
+ * not a git checkout or has no remote main. A search that reads a stale copy
25
+ * answers with parts that are gone (the re-review after the audit before UIG-26:
26
+ * "files panel" found Peek's deleted FilesPanel in an old checkout), so `find`
27
+ * says so beside its answer.
28
+ */
29
+ export declare function behindBy(folder: string): number | null;
21
30
  //# sourceMappingURL=siblings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"siblings.d.ts","sourceRoot":"","sources":["../../src/registry/siblings.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,YAAY,mBAAmB,CAAA;AAE5C,MAAM,WAAW,OAAO;IACtB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAA;CACpB;AAYD,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAUD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAS,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAAG,OAAO,EAAE,CAsBlG"}
1
+ {"version":3,"file":"siblings.d.ts","sourceRoot":"","sources":["../../src/registry/siblings.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,YAAY,mBAAmB,CAAA;AAE5C,MAAM,WAAW,OAAO;IACtB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAA;CACpB;AAYD,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrD;AAUD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAS,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAAG,OAAO,EAAE,CAsBlG;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYtD"}
@@ -1,12 +1,26 @@
1
1
  import type { Registry } from './schema';
2
- /** Every top-level heading the sidebar has: the first segment of each story file's or page's title. */
2
+ /** Every top-level heading the sidebar has, read from the story files: the first segment of each title. */
3
3
  export declare function sidebarHeadings(root: string): Set<string>;
4
- /** The headings `preview.tsx` orders, or null when it keeps no list. */
4
+ /** The top-level headings of Storybook's own index (`storybook index`): the first segment of every entry's title. */
5
+ export declare function indexHeadings(entries: Record<string, {
6
+ title?: string;
7
+ }>): Set<string>;
8
+ /** The headings the preview orders — a `HEADINGS` list or `storySort: { order: [...] }` — or null when it keeps no order. */
5
9
  export declare function orderedHeadings(previewText: string): string[] | null;
6
- /** The headings the Introduction names, one per table row that opens with a bold name. */
10
+ /**
11
+ * The headings the Introduction names: a table row that opens with a bold name,
12
+ * or a bullet that opens with bold names joined by " · ".
13
+ */
7
14
  export declare function introductionHeadings(introText: string): Set<string>;
8
15
  /** The number the Introduction states, or null when it states none. */
9
16
  export declare function introductionCount(introText: string): number | null;
10
- /** What is wrong with the app's hand-written map of its Storybook; empty when nothing is. */
11
- export declare function storyMapProblems(registry: Registry, root: string): string[];
17
+ /**
18
+ * What is wrong with the repository's hand-written map of its Storybook; empty
19
+ * when nothing is. `real` is the sidebar's top-level headings from Storybook's
20
+ * index, when the caller has it; `registry` is needed only for an app's count.
21
+ */
22
+ export declare function storyMapProblems(root: string, { registry, real }?: {
23
+ registry?: Registry;
24
+ real?: Set<string>;
25
+ }): string[];
12
26
  //# sourceMappingURL=storymap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storymap.d.ts","sourceRoot":"","sources":["../../src/registry/storymap.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAsBxC,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAUzD;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAOpE;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEnE;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA8B3E"}
1
+ {"version":3,"file":"storymap.d.ts","sourceRoot":"","sources":["../../src/registry/storymap.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAuBxC,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAUzD;AAED,qHAAqH;AACrH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAEtF;AA0BD,6HAA6H;AAC7H,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAIpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAInE;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAA4B,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAO,GAAG,MAAM,EAAE,CA6BrJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@estiva-app/ui",
3
- "version": "0.35.1",
3
+ "version": "0.36.0",
4
4
  "description": "Estiva's design tokens (the contract) and a small set of primitives (a convenience) for every Estiva app.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -52,12 +52,15 @@
52
52
  "test": "vitest run --project unit",
53
53
  "test:watch": "vitest --project unit",
54
54
  "test:a11y": "vitest run --project storybook-signal --project storybook-ship",
55
+ "test:stories": "vitest run --project storybook-draw",
55
56
  "typecheck": "tsc --noEmit",
56
57
  "prelint": "node build.mjs",
57
58
  "lint": "eslint .",
58
59
  "prelint:rules": "node build.mjs",
59
60
  "lint:rules": "eslint --config eslint.gates.config.js .",
60
61
  "postlint:rules": "node dist/gates/cli.js count --repo estiva-ui --package",
62
+ "pregates:ci": "node build.mjs",
63
+ "gates:ci": "node dist/gates/cli.js ci --package",
61
64
  "pregates:status": "node build.mjs",
62
65
  "gates:status": "node dist/gates/cli.js status",
63
66
  "pregates:compare": "node build.mjs",
package/registry.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "kind": "package",
5
5
  "repo": "estiva-ui",
6
6
  "package": "@estiva-app/ui",
7
- "packageVersion": "0.35.1",
7
+ "packageVersion": "0.36.0",
8
8
  "exports": 87,
9
9
  "typeExports": 96,
10
10
  "files": null
@@ -218,7 +218,20 @@
218
218
  ]
219
219
  }
220
220
  ],
221
- "ownsBehaviours": [],
221
+ "ownsBehaviours": [
222
+ {
223
+ "id": "base-ui",
224
+ "behaviour": "Is built on Base UI"
225
+ },
226
+ {
227
+ "id": "role",
228
+ "behaviour": "Says what it is to assistive technology"
229
+ },
230
+ {
231
+ "id": "tab-stop",
232
+ "behaviour": "Is reachable with Tab"
233
+ }
234
+ ],
222
235
  "status": "stable",
223
236
  "migrationStage": null,
224
237
  "docsId": "components-attachmentcard--docs",
@@ -728,6 +741,10 @@
728
741
  {
729
742
  "id": "role",
730
743
  "behaviour": "Says what it is to assistive technology"
744
+ },
745
+ {
746
+ "id": "tab-stop",
747
+ "behaviour": "Is reachable with Tab"
731
748
  }
732
749
  ],
733
750
  "status": "stable",
@@ -902,6 +919,22 @@
902
919
  "id": "portal",
903
920
  "behaviour": "Floats on top of the page"
904
921
  },
922
+ {
923
+ "id": "press-outside",
924
+ "behaviour": "Closes on a press outside"
925
+ },
926
+ {
927
+ "id": "page-keys",
928
+ "behaviour": "Takes its keys by itself"
929
+ },
930
+ {
931
+ "id": "focus",
932
+ "behaviour": "Holds focus inside while open, and gives it back"
933
+ },
934
+ {
935
+ "id": "follow",
936
+ "behaviour": "Stays attached to its anchor on scroll and resize"
937
+ },
905
938
  {
906
939
  "id": "walking",
907
940
  "behaviour": "Moves through its items with the arrow keys"
@@ -1100,10 +1133,22 @@
1100
1133
  "id": "portal",
1101
1134
  "behaviour": "Floats on top of the page"
1102
1135
  },
1136
+ {
1137
+ "id": "press-outside",
1138
+ "behaviour": "Closes on a press outside"
1139
+ },
1140
+ {
1141
+ "id": "page-keys",
1142
+ "behaviour": "Takes its keys by itself"
1143
+ },
1103
1144
  {
1104
1145
  "id": "focus",
1105
1146
  "behaviour": "Holds focus inside while open, and gives it back"
1106
1147
  },
1148
+ {
1149
+ "id": "scroll-lock",
1150
+ "behaviour": "Stops the page behind it scrolling"
1151
+ },
1107
1152
  {
1108
1153
  "id": "walking",
1109
1154
  "behaviour": "Moves through its items with the arrow keys"
@@ -1316,7 +1361,20 @@
1316
1361
  }
1317
1362
  ],
1318
1363
  "variants": [],
1319
- "ownsBehaviours": [],
1364
+ "ownsBehaviours": [
1365
+ {
1366
+ "id": "base-ui",
1367
+ "behaviour": "Is built on Base UI"
1368
+ },
1369
+ {
1370
+ "id": "portal",
1371
+ "behaviour": "Floats on top of the page"
1372
+ },
1373
+ {
1374
+ "id": "walking",
1375
+ "behaviour": "Moves through its items with the arrow keys"
1376
+ }
1377
+ ],
1320
1378
  "status": "stable",
1321
1379
  "migrationStage": null,
1322
1380
  "docsId": "overlays-commandpalette--docs",
@@ -1415,6 +1473,22 @@
1415
1473
  "id": "portal",
1416
1474
  "behaviour": "Floats on top of the page"
1417
1475
  },
1476
+ {
1477
+ "id": "press-outside",
1478
+ "behaviour": "Closes on a press outside"
1479
+ },
1480
+ {
1481
+ "id": "page-keys",
1482
+ "behaviour": "Takes its keys by itself"
1483
+ },
1484
+ {
1485
+ "id": "focus",
1486
+ "behaviour": "Holds focus inside while open, and gives it back"
1487
+ },
1488
+ {
1489
+ "id": "scroll-lock",
1490
+ "behaviour": "Stops the page behind it scrolling"
1491
+ },
1418
1492
  {
1419
1493
  "id": "role",
1420
1494
  "behaviour": "Says what it is to assistive technology"
@@ -1710,7 +1784,12 @@
1710
1784
  }
1711
1785
  ],
1712
1786
  "variants": [],
1713
- "ownsBehaviours": [],
1787
+ "ownsBehaviours": [
1788
+ {
1789
+ "id": "base-ui",
1790
+ "behaviour": "Is built on Base UI"
1791
+ }
1792
+ ],
1714
1793
  "status": "stable",
1715
1794
  "migrationStage": null,
1716
1795
  "docsId": "inputs-editabletext--docs",
@@ -2483,7 +2562,20 @@
2483
2562
  }
2484
2563
  ],
2485
2564
  "variants": [],
2486
- "ownsBehaviours": [],
2565
+ "ownsBehaviours": [
2566
+ {
2567
+ "id": "base-ui",
2568
+ "behaviour": "Is built on Base UI"
2569
+ },
2570
+ {
2571
+ "id": "role",
2572
+ "behaviour": "Says what it is to assistive technology"
2573
+ },
2574
+ {
2575
+ "id": "tab-stop",
2576
+ "behaviour": "Is reachable with Tab"
2577
+ }
2578
+ ],
2487
2579
  "status": "stable",
2488
2580
  "migrationStage": null,
2489
2581
  "docsId": "inputs-chipinput--docs",
@@ -2568,10 +2660,18 @@
2568
2660
  ],
2569
2661
  "variants": [],
2570
2662
  "ownsBehaviours": [
2663
+ {
2664
+ "id": "base-ui",
2665
+ "behaviour": "Is built on Base UI"
2666
+ },
2571
2667
  {
2572
2668
  "id": "portal",
2573
2669
  "behaviour": "Floats on top of the page"
2574
2670
  },
2671
+ {
2672
+ "id": "press-outside",
2673
+ "behaviour": "Closes on a press outside"
2674
+ },
2575
2675
  {
2576
2676
  "id": "page-keys",
2577
2677
  "behaviour": "Takes its keys by itself"
@@ -2583,6 +2683,10 @@
2583
2683
  {
2584
2684
  "id": "scroll-lock",
2585
2685
  "behaviour": "Stops the page behind it scrolling"
2686
+ },
2687
+ {
2688
+ "id": "role",
2689
+ "behaviour": "Says what it is to assistive technology"
2586
2690
  }
2587
2691
  ],
2588
2692
  "status": "stable",
@@ -2820,6 +2924,10 @@
2820
2924
  "id": "page-keys",
2821
2925
  "behaviour": "Takes its keys by itself"
2822
2926
  },
2927
+ {
2928
+ "id": "focus",
2929
+ "behaviour": "Holds focus inside while open, and gives it back"
2930
+ },
2823
2931
  {
2824
2932
  "id": "follow",
2825
2933
  "behaviour": "Stays attached to its anchor on scroll and resize"
@@ -2926,7 +3034,16 @@
2926
3034
  ]
2927
3035
  }
2928
3036
  ],
2929
- "ownsBehaviours": [],
3037
+ "ownsBehaviours": [
3038
+ {
3039
+ "id": "base-ui",
3040
+ "behaviour": "Is built on Base UI"
3041
+ },
3042
+ {
3043
+ "id": "role",
3044
+ "behaviour": "Says what it is to assistive technology"
3045
+ }
3046
+ ],
2930
3047
  "status": "stable",
2931
3048
  "migrationStage": null,
2932
3049
  "docsId": "overlays-menuitem--docs",
@@ -3024,7 +3141,16 @@
3024
3141
  }
3025
3142
  ],
3026
3143
  "variants": [],
3027
- "ownsBehaviours": [],
3144
+ "ownsBehaviours": [
3145
+ {
3146
+ "id": "base-ui",
3147
+ "behaviour": "Is built on Base UI"
3148
+ },
3149
+ {
3150
+ "id": "role",
3151
+ "behaviour": "Says what it is to assistive technology"
3152
+ }
3153
+ ],
3028
3154
  "status": "stable",
3029
3155
  "migrationStage": null,
3030
3156
  "docsId": "overlays-menu--docs",
@@ -3093,7 +3219,16 @@
3093
3219
  }
3094
3220
  ],
3095
3221
  "variants": [],
3096
- "ownsBehaviours": [],
3222
+ "ownsBehaviours": [
3223
+ {
3224
+ "id": "base-ui",
3225
+ "behaviour": "Is built on Base UI"
3226
+ },
3227
+ {
3228
+ "id": "role",
3229
+ "behaviour": "Says what it is to assistive technology"
3230
+ }
3231
+ ],
3097
3232
  "status": "stable",
3098
3233
  "migrationStage": null,
3099
3234
  "docsId": "overlays-menu--docs",
@@ -3265,7 +3400,20 @@
3265
3400
  }
3266
3401
  ],
3267
3402
  "variants": [],
3268
- "ownsBehaviours": [],
3403
+ "ownsBehaviours": [
3404
+ {
3405
+ "id": "base-ui",
3406
+ "behaviour": "Is built on Base UI"
3407
+ },
3408
+ {
3409
+ "id": "role",
3410
+ "behaviour": "Says what it is to assistive technology"
3411
+ },
3412
+ {
3413
+ "id": "tab-stop",
3414
+ "behaviour": "Is reachable with Tab"
3415
+ }
3416
+ ],
3269
3417
  "status": "stable",
3270
3418
  "migrationStage": null,
3271
3419
  "docsId": "components-persontrigger--docs",
@@ -3399,6 +3547,10 @@
3399
3547
  "id": "page-keys",
3400
3548
  "behaviour": "Takes its keys by itself"
3401
3549
  },
3550
+ {
3551
+ "id": "focus",
3552
+ "behaviour": "Holds focus inside while open, and gives it back"
3553
+ },
3402
3554
  {
3403
3555
  "id": "follow",
3404
3556
  "behaviour": "Stays attached to its anchor on scroll and resize"
@@ -3494,6 +3646,10 @@
3494
3646
  "id": "press-outside",
3495
3647
  "behaviour": "Closes on a press outside"
3496
3648
  },
3649
+ {
3650
+ "id": "page-keys",
3651
+ "behaviour": "Takes its keys by itself"
3652
+ },
3497
3653
  {
3498
3654
  "id": "follow",
3499
3655
  "behaviour": "Stays attached to its anchor on scroll and resize"
@@ -3757,6 +3913,10 @@
3757
3913
  {
3758
3914
  "id": "base-ui",
3759
3915
  "behaviour": "Is built on Base UI"
3916
+ },
3917
+ {
3918
+ "id": "tab-stop",
3919
+ "behaviour": "Is reachable with Tab"
3760
3920
  }
3761
3921
  ],
3762
3922
  "status": "stable",
@@ -3814,7 +3974,12 @@
3814
3974
  }
3815
3975
  ],
3816
3976
  "variants": [],
3817
- "ownsBehaviours": [],
3977
+ "ownsBehaviours": [
3978
+ {
3979
+ "id": "page-keys",
3980
+ "behaviour": "Takes its keys by itself"
3981
+ }
3982
+ ],
3818
3983
  "status": "stable",
3819
3984
  "migrationStage": null,
3820
3985
  "docsId": "components-reactionpicker--docs",
@@ -3890,6 +4055,10 @@
3890
4055
  "id": "base-ui",
3891
4056
  "behaviour": "Is built on Base UI"
3892
4057
  },
4058
+ {
4059
+ "id": "tab-stop",
4060
+ "behaviour": "Is reachable with Tab"
4061
+ },
3893
4062
  {
3894
4063
  "id": "scroll",
3895
4064
  "behaviour": "Scrolls with our scrollbar"
@@ -4201,6 +4370,10 @@
4201
4370
  "id": "page-keys",
4202
4371
  "behaviour": "Takes its keys by itself"
4203
4372
  },
4373
+ {
4374
+ "id": "focus",
4375
+ "behaviour": "Holds focus inside while open, and gives it back"
4376
+ },
4204
4377
  {
4205
4378
  "id": "follow",
4206
4379
  "behaviour": "Stays attached to its anchor on scroll and resize"
@@ -4437,6 +4610,10 @@
4437
4610
  {
4438
4611
  "id": "role",
4439
4612
  "behaviour": "Says what it is to assistive technology"
4613
+ },
4614
+ {
4615
+ "id": "tab-stop",
4616
+ "behaviour": "Is reachable with Tab"
4440
4617
  }
4441
4618
  ],
4442
4619
  "status": "stable",
@@ -4459,7 +4636,12 @@
4459
4636
  "purposeFrom": "page",
4460
4637
  "props": [],
4461
4638
  "variants": [],
4462
- "ownsBehaviours": [],
4639
+ "ownsBehaviours": [
4640
+ {
4641
+ "id": "base-ui",
4642
+ "behaviour": "Is built on Base UI"
4643
+ }
4644
+ ],
4463
4645
  "status": "stable",
4464
4646
  "migrationStage": null,
4465
4647
  "docsId": "inputs-textarea--docs",
@@ -4615,7 +4797,24 @@
4615
4797
  }
4616
4798
  ],
4617
4799
  "variants": [],
4618
- "ownsBehaviours": [],
4800
+ "ownsBehaviours": [
4801
+ {
4802
+ "id": "base-ui",
4803
+ "behaviour": "Is built on Base UI"
4804
+ },
4805
+ {
4806
+ "id": "portal",
4807
+ "behaviour": "Floats on top of the page"
4808
+ },
4809
+ {
4810
+ "id": "page-keys",
4811
+ "behaviour": "Takes its keys by itself"
4812
+ },
4813
+ {
4814
+ "id": "follow",
4815
+ "behaviour": "Stays attached to its anchor on scroll and resize"
4816
+ }
4817
+ ],
4619
4818
  "status": "stable",
4620
4819
  "migrationStage": null,
4621
4820
  "docsId": "feedback-toast--docs",
@@ -4701,6 +4900,10 @@
4701
4900
  {
4702
4901
  "id": "role",
4703
4902
  "behaviour": "Says what it is to assistive technology"
4903
+ },
4904
+ {
4905
+ "id": "tab-stop",
4906
+ "behaviour": "Is reachable with Tab"
4704
4907
  }
4705
4908
  ],
4706
4909
  "status": "stable",
@@ -4800,7 +5003,16 @@
4800
5003
  ]
4801
5004
  }
4802
5005
  ],
4803
- "ownsBehaviours": [],
5006
+ "ownsBehaviours": [
5007
+ {
5008
+ "id": "base-ui",
5009
+ "behaviour": "Is built on Base UI"
5010
+ },
5011
+ {
5012
+ "id": "role",
5013
+ "behaviour": "Says what it is to assistive technology"
5014
+ }
5015
+ ],
4804
5016
  "status": "stable",
4805
5017
  "migrationStage": null,
4806
5018
  "docsId": "primitives-toolbar--docs",
@@ -4834,7 +5046,16 @@
4834
5046
  ]
4835
5047
  }
4836
5048
  ],
4837
- "ownsBehaviours": [],
5049
+ "ownsBehaviours": [
5050
+ {
5051
+ "id": "base-ui",
5052
+ "behaviour": "Is built on Base UI"
5053
+ },
5054
+ {
5055
+ "id": "role",
5056
+ "behaviour": "Says what it is to assistive technology"
5057
+ }
5058
+ ],
4838
5059
  "status": "stable",
4839
5060
  "migrationStage": null,
4840
5061
  "docsId": "primitives-toolbar--docs",
@@ -4920,7 +5141,16 @@
4920
5141
  ]
4921
5142
  }
4922
5143
  ],
4923
- "ownsBehaviours": [],
5144
+ "ownsBehaviours": [
5145
+ {
5146
+ "id": "base-ui",
5147
+ "behaviour": "Is built on Base UI"
5148
+ },
5149
+ {
5150
+ "id": "role",
5151
+ "behaviour": "Says what it is to assistive technology"
5152
+ }
5153
+ ],
4924
5154
  "status": "stable",
4925
5155
  "migrationStage": null,
4926
5156
  "docsId": "primitives-toolbar--docs",
@@ -4946,7 +5176,16 @@
4946
5176
  }
4947
5177
  ],
4948
5178
  "variants": [],
4949
- "ownsBehaviours": [],
5179
+ "ownsBehaviours": [
5180
+ {
5181
+ "id": "base-ui",
5182
+ "behaviour": "Is built on Base UI"
5183
+ },
5184
+ {
5185
+ "id": "role",
5186
+ "behaviour": "Says what it is to assistive technology"
5187
+ }
5188
+ ],
4950
5189
  "status": "stable",
4951
5190
  "migrationStage": null,
4952
5191
  "docsId": "primitives-toolbar--docs",
@@ -5041,7 +5280,28 @@
5041
5280
  }
5042
5281
  ],
5043
5282
  "variants": [],
5044
- "ownsBehaviours": [],
5283
+ "ownsBehaviours": [
5284
+ {
5285
+ "id": "base-ui",
5286
+ "behaviour": "Is built on Base UI"
5287
+ },
5288
+ {
5289
+ "id": "portal",
5290
+ "behaviour": "Floats on top of the page"
5291
+ },
5292
+ {
5293
+ "id": "press-outside",
5294
+ "behaviour": "Closes on a press outside"
5295
+ },
5296
+ {
5297
+ "id": "page-keys",
5298
+ "behaviour": "Takes its keys by itself"
5299
+ },
5300
+ {
5301
+ "id": "follow",
5302
+ "behaviour": "Stays attached to its anchor on scroll and resize"
5303
+ }
5304
+ ],
5045
5305
  "status": "stable",
5046
5306
  "migrationStage": null,
5047
5307
  "docsId": "primitives-tooltip--docs",
@@ -5193,6 +5453,22 @@
5193
5453
  "id": "base-ui",
5194
5454
  "behaviour": "Is built on Base UI"
5195
5455
  },
5456
+ {
5457
+ "id": "portal",
5458
+ "behaviour": "Floats on top of the page"
5459
+ },
5460
+ {
5461
+ "id": "press-outside",
5462
+ "behaviour": "Closes on a press outside"
5463
+ },
5464
+ {
5465
+ "id": "page-keys",
5466
+ "behaviour": "Takes its keys by itself"
5467
+ },
5468
+ {
5469
+ "id": "follow",
5470
+ "behaviour": "Stays attached to its anchor on scroll and resize"
5471
+ },
5196
5472
  {
5197
5473
  "id": "role",
5198
5474
  "behaviour": "Says what it is to assistive technology"
@@ -32,7 +32,8 @@ and when not to. Most of what gets asked for already exists somewhere.
32
32
  refuses a raw element, a rebuilt behaviour or a restyled part, and its error
33
33
  names the part to use.
34
34
  5. **An exception** carries its reason on the line above it. For the gate:
35
- `// @estiva-escape: <reason>`, never `eslint-disable`. For the token lint:
35
+ `// @estiva-escape(<rule>): <reason>`, naming the one rule it keeps off,
36
+ never `eslint-disable`. For the token lint:
36
37
  `// eslint-disable-next-line <rule> -- @estiva-escape: <reason>`.
37
38
 
38
39
  ## Gotchas
package/src/AppShell.mdx CHANGED
@@ -32,7 +32,8 @@ Layout only: no data, no routes.
32
32
  ## When not
33
33
 
34
34
  - Panels *inside* the content — lists beside conversations, side rails —
35
- are layout components, not the shell's business.
35
+ are layout components, not the shell's business. A list beside the
36
+ content is **ListColumn**.
36
37
  - Mixing the pairs (a rail in the solid frame, a sidebar in the floating
37
38
  one) is possible but is a new design, not a port — take it to the
38
39
  designer first.