@panphora/bevel 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.
Files changed (539) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +226 -0
  3. package/bevel-fonts.css +16 -0
  4. package/bevel.css +3075 -0
  5. package/bevel.js +2126 -0
  6. package/dist/react/components/activity-feed.d.ts +89 -0
  7. package/dist/react/components/activity-feed.js +54 -0
  8. package/dist/react/components/alert-dialog.d.ts +14 -0
  9. package/dist/react/components/alert-dialog.js +19 -0
  10. package/dist/react/components/app-shell.d.ts +98 -0
  11. package/dist/react/components/app-shell.js +86 -0
  12. package/dist/react/components/app-toolbar.d.ts +19 -0
  13. package/dist/react/components/app-toolbar.js +22 -0
  14. package/dist/react/components/avatar-group.d.ts +67 -0
  15. package/dist/react/components/avatar-group.js +49 -0
  16. package/dist/react/components/badge-and-pill.d.ts +34 -0
  17. package/dist/react/components/badge-and-pill.js +12 -0
  18. package/dist/react/components/breadcrumbs.d.ts +56 -0
  19. package/dist/react/components/breadcrumbs.js +44 -0
  20. package/dist/react/components/bulk-bar.d.ts +22 -0
  21. package/dist/react/components/bulk-bar.js +59 -0
  22. package/dist/react/components/button.d.ts +15 -0
  23. package/dist/react/components/button.js +20 -0
  24. package/dist/react/components/callout-and-hint.d.ts +17 -0
  25. package/dist/react/components/callout-and-hint.js +8 -0
  26. package/dist/react/components/checkbox.d.ts +5 -0
  27. package/dist/react/components/checkbox.js +13 -0
  28. package/dist/react/components/chip.d.ts +149 -0
  29. package/dist/react/components/chip.js +29 -0
  30. package/dist/react/components/code-block.d.ts +50 -0
  31. package/dist/react/components/code-block.js +77 -0
  32. package/dist/react/components/code-editor.d.ts +122 -0
  33. package/dist/react/components/code-editor.js +695 -0
  34. package/dist/react/components/column-manager.d.ts +28 -0
  35. package/dist/react/components/column-manager.js +85 -0
  36. package/dist/react/components/combobox.d.ts +32 -0
  37. package/dist/react/components/combobox.js +37 -0
  38. package/dist/react/components/data-grid.d.ts +108 -0
  39. package/dist/react/components/data-grid.js +159 -0
  40. package/dist/react/components/data-table.d.ts +2 -0
  41. package/dist/react/components/data-table.js +6 -0
  42. package/dist/react/components/date.d.ts +23 -0
  43. package/dist/react/components/date.js +11 -0
  44. package/dist/react/components/details.d.ts +13 -0
  45. package/dist/react/components/details.js +20 -0
  46. package/dist/react/components/dialog.d.ts +74 -0
  47. package/dist/react/components/dialog.js +31 -0
  48. package/dist/react/components/diff-view.d.ts +73 -0
  49. package/dist/react/components/diff-view.js +68 -0
  50. package/dist/react/components/documents.d.ts +70 -0
  51. package/dist/react/components/documents.js +10 -0
  52. package/dist/react/components/drawer.d.ts +45 -0
  53. package/dist/react/components/drawer.js +35 -0
  54. package/dist/react/components/editable-grid-cells.d.ts +32 -0
  55. package/dist/react/components/editable-grid-cells.js +116 -0
  56. package/dist/react/components/eyebrow-kicker-lede-pull-quote.d.ts +39 -0
  57. package/dist/react/components/eyebrow-kicker-lede-pull-quote.js +12 -0
  58. package/dist/react/components/field.d.ts +32 -0
  59. package/dist/react/components/field.js +27 -0
  60. package/dist/react/components/file-tree.d.ts +75 -0
  61. package/dist/react/components/file-tree.js +247 -0
  62. package/dist/react/components/file.d.ts +43 -0
  63. package/dist/react/components/file.js +73 -0
  64. package/dist/react/components/files-table.d.ts +174 -0
  65. package/dist/react/components/files-table.js +237 -0
  66. package/dist/react/components/filter-builder.d.ts +37 -0
  67. package/dist/react/components/filter-builder.js +109 -0
  68. package/dist/react/components/form-error-summary.d.ts +16 -0
  69. package/dist/react/components/form-error-summary.js +49 -0
  70. package/dist/react/components/icon-button.d.ts +8 -0
  71. package/dist/react/components/icon-button.js +14 -0
  72. package/dist/react/components/icon.d.ts +7 -0
  73. package/dist/react/components/icon.js +15 -0
  74. package/dist/react/components/image.d.ts +72 -0
  75. package/dist/react/components/image.js +24 -0
  76. package/dist/react/components/inline-edit.d.ts +70 -0
  77. package/dist/react/components/inline-edit.js +149 -0
  78. package/dist/react/components/input.d.ts +29 -0
  79. package/dist/react/components/input.js +20 -0
  80. package/dist/react/components/kanban-board.d.ts +140 -0
  81. package/dist/react/components/kanban-board.js +374 -0
  82. package/dist/react/components/layout.d.ts +51 -0
  83. package/dist/react/components/layout.js +28 -0
  84. package/dist/react/components/list.d.ts +28 -0
  85. package/dist/react/components/list.js +6 -0
  86. package/dist/react/components/masthead-and-verdict.d.ts +60 -0
  87. package/dist/react/components/masthead-and-verdict.js +8 -0
  88. package/dist/react/components/menu.d.ts +26 -0
  89. package/dist/react/components/menu.js +31 -0
  90. package/dist/react/components/multi-select-picker.d.ts +49 -0
  91. package/dist/react/components/multi-select-picker.js +20 -0
  92. package/dist/react/components/note.d.ts +33 -0
  93. package/dist/react/components/note.js +8 -0
  94. package/dist/react/components/number-field.d.ts +16 -0
  95. package/dist/react/components/number-field.js +17 -0
  96. package/dist/react/components/pagination.d.ts +45 -0
  97. package/dist/react/components/pagination.js +87 -0
  98. package/dist/react/components/persistent-action-banner.d.ts +71 -0
  99. package/dist/react/components/persistent-action-banner.js +39 -0
  100. package/dist/react/components/popconfirm.d.ts +42 -0
  101. package/dist/react/components/popconfirm.js +59 -0
  102. package/dist/react/components/popover.d.ts +16 -0
  103. package/dist/react/components/popover.js +21 -0
  104. package/dist/react/components/progress-and-gauge.d.ts +44 -0
  105. package/dist/react/components/progress-and-gauge.js +19 -0
  106. package/dist/react/components/radio.d.ts +7 -0
  107. package/dist/react/components/radio.js +13 -0
  108. package/dist/react/components/rich-text-toolbar.d.ts +26 -0
  109. package/dist/react/components/rich-text-toolbar.js +64 -0
  110. package/dist/react/components/rows-and-card.d.ts +88 -0
  111. package/dist/react/components/rows-and-card.js +10 -0
  112. package/dist/react/components/save-status-indicator.d.ts +11 -0
  113. package/dist/react/components/save-status-indicator.js +33 -0
  114. package/dist/react/components/segmented-control.d.ts +21 -0
  115. package/dist/react/components/segmented-control.js +15 -0
  116. package/dist/react/components/select.d.ts +29 -0
  117. package/dist/react/components/select.js +29 -0
  118. package/dist/react/components/selectable-cards.d.ts +30 -0
  119. package/dist/react/components/selectable-cards.js +29 -0
  120. package/dist/react/components/settings-rows.d.ts +51 -0
  121. package/dist/react/components/settings-rows.js +8 -0
  122. package/dist/react/components/sidebar-nav.d.ts +77 -0
  123. package/dist/react/components/sidebar-nav.js +41 -0
  124. package/dist/react/components/skeleton-and-empty.d.ts +51 -0
  125. package/dist/react/components/skeleton-and-empty.js +14 -0
  126. package/dist/react/components/slider.d.ts +19 -0
  127. package/dist/react/components/slider.js +17 -0
  128. package/dist/react/components/small-charts.d.ts +60 -0
  129. package/dist/react/components/small-charts.js +76 -0
  130. package/dist/react/components/sortable.d.ts +30 -0
  131. package/dist/react/components/sortable.js +85 -0
  132. package/dist/react/components/split-button.d.ts +38 -0
  133. package/dist/react/components/split-button.js +43 -0
  134. package/dist/react/components/split-panes.d.ts +35 -0
  135. package/dist/react/components/split-panes.js +102 -0
  136. package/dist/react/components/stat-tiles.d.ts +54 -0
  137. package/dist/react/components/stat-tiles.js +8 -0
  138. package/dist/react/components/steps.d.ts +11 -0
  139. package/dist/react/components/steps.js +13 -0
  140. package/dist/react/components/switch.d.ts +6 -0
  141. package/dist/react/components/switch.js +13 -0
  142. package/dist/react/components/table.d.ts +61 -0
  143. package/dist/react/components/table.js +6 -0
  144. package/dist/react/components/tabs.d.ts +7 -0
  145. package/dist/react/components/tabs.js +13 -0
  146. package/dist/react/components/tags.d.ts +33 -0
  147. package/dist/react/components/tags.js +83 -0
  148. package/dist/react/components/textarea.d.ts +10 -0
  149. package/dist/react/components/textarea.js +6 -0
  150. package/dist/react/components/toast.d.ts +35 -0
  151. package/dist/react/components/toast.js +90 -0
  152. package/dist/react/components/tooltip-and-key.d.ts +20 -0
  153. package/dist/react/components/tooltip-and-key.js +20 -0
  154. package/dist/react/components/tree-view.d.ts +34 -0
  155. package/dist/react/components/tree-view.js +118 -0
  156. package/dist/react/components/upload-dropzone.d.ts +92 -0
  157. package/dist/react/components/upload-dropzone.js +116 -0
  158. package/dist/react/components/wizard-shell.d.ts +78 -0
  159. package/dist/react/components/wizard-shell.js +176 -0
  160. package/dist/react/fonts.css.d.ts +1 -0
  161. package/dist/react/index.d.ts +76 -0
  162. package/dist/react/index.js +77 -0
  163. package/dist/react/integrations/quickcrop.d.ts +58 -0
  164. package/dist/react/integrations/quickcrop.js +137 -0
  165. package/dist/react/integrations/richclay.d.ts +43 -0
  166. package/dist/react/integrations/richclay.js +129 -0
  167. package/dist/react/internal/classes.d.ts +3 -0
  168. package/dist/react/internal/classes.js +10 -0
  169. package/dist/react/internal/close-mark.d.ts +1 -0
  170. package/dist/react/internal/close-mark.js +10 -0
  171. package/dist/react/internal/controllable-state.d.ts +9 -0
  172. package/dist/react/internal/controllable-state.js +22 -0
  173. package/dist/react/internal/drop-effect.d.ts +28 -0
  174. package/dist/react/internal/drop-effect.js +8 -0
  175. package/dist/react/internal/form-reset.d.ts +2 -0
  176. package/dist/react/internal/form-reset.js +22 -0
  177. package/dist/react/internal/format.d.ts +1 -0
  178. package/dist/react/internal/format.js +14 -0
  179. package/dist/react/internal/link.d.ts +2 -0
  180. package/dist/react/internal/link.js +8 -0
  181. package/dist/react/internal/part.d.ts +20 -0
  182. package/dist/react/internal/part.js +47 -0
  183. package/dist/react/internal/pointer-session.d.ts +8 -0
  184. package/dist/react/internal/pointer-session.js +60 -0
  185. package/dist/react/internal/refs.d.ts +2 -0
  186. package/dist/react/internal/refs.js +22 -0
  187. package/dist/react/internal/rich-text.d.ts +28 -0
  188. package/dist/react/internal/rich-text.js +4 -0
  189. package/dist/react/internal/table-context.d.ts +39 -0
  190. package/dist/react/internal/table-context.js +12 -0
  191. package/dist/react/internal/use-object-url.d.ts +1 -0
  192. package/dist/react/internal/use-object-url.js +15 -0
  193. package/dist/react/layout.css +274 -0
  194. package/dist/react/layout.css.d.ts +1 -0
  195. package/dist/react/models/filter.d.ts +31 -0
  196. package/dist/react/models/filter.js +79 -0
  197. package/dist/react/models/kanban.d.ts +51 -0
  198. package/dist/react/models/kanban.js +35 -0
  199. package/dist/react/models/reorder.d.ts +9 -0
  200. package/dist/react/models/reorder.js +23 -0
  201. package/dist/react/models/table.d.ts +85 -0
  202. package/dist/react/models/table.js +144 -0
  203. package/dist/react/models/tree.d.ts +16 -0
  204. package/dist/react/models/tree.js +26 -0
  205. package/dist/react/provider.d.ts +18 -0
  206. package/dist/react/provider.js +31 -0
  207. package/dist/react/recipes/context-hypercms.d.ts +17 -0
  208. package/dist/react/recipes/context-hypercms.js +71 -0
  209. package/dist/react/recipes/context-quickcrop.d.ts +8 -0
  210. package/dist/react/recipes/context-quickcrop.js +49 -0
  211. package/dist/react/theme.css +8004 -0
  212. package/dist/react/theme.css.d.ts +1 -0
  213. package/examples/README.md +34 -0
  214. package/examples/components/activity-feed.html +28 -0
  215. package/examples/components/app-shell.html +12 -0
  216. package/examples/components/app-toolbar.html +38 -0
  217. package/examples/components/avatar-group.html +27 -0
  218. package/examples/components/breadcrumbs.html +26 -0
  219. package/examples/components/bulk-bar.html +22 -0
  220. package/examples/components/code-block.html +12 -0
  221. package/examples/components/code-editor.html +25 -0
  222. package/examples/components/column-manager.html +9 -0
  223. package/examples/components/combobox.html +13 -0
  224. package/examples/components/context-hypercms.css +41 -0
  225. package/examples/components/context-hypercms.html +40 -0
  226. package/examples/components/context-hypercms.js +62 -0
  227. package/examples/components/context-quickcrop.html +137 -0
  228. package/examples/components/diff-view.html +9 -0
  229. package/examples/components/drawer.html +11 -0
  230. package/examples/components/editable-grid-cells.html +9 -0
  231. package/examples/components/file-browser.html +53 -0
  232. package/examples/components/file-tree.html +34 -0
  233. package/examples/components/files-table.html +80 -0
  234. package/examples/components/filter-builder.html +11 -0
  235. package/examples/components/form-error-summary.html +11 -0
  236. package/examples/components/index.html +51 -0
  237. package/examples/components/inline-edit.html +42 -0
  238. package/examples/components/kanban-board.html +42 -0
  239. package/examples/components/manifest.json +3279 -0
  240. package/examples/components/modal.html +11 -0
  241. package/examples/components/multi-select-picker.html +13 -0
  242. package/examples/components/pagination.html +32 -0
  243. package/examples/components/persistent-action-banner.html +23 -0
  244. package/examples/components/popconfirm.html +13 -0
  245. package/examples/components/popover-menu.html +13 -0
  246. package/examples/components/reference/baseline/DECISIONS.md +85 -0
  247. package/examples/components/reference/baseline/README.md +58 -0
  248. package/examples/components/reference/baseline/bevel-fonts.css +16 -0
  249. package/examples/components/reference/baseline/bevel.css +1339 -0
  250. package/examples/components/reference/baseline/bevel.js +496 -0
  251. package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-mono.txt +93 -0
  252. package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-sans.txt +93 -0
  253. package/examples/components/reference/baseline/fonts/LICENSE-newsreader.txt +93 -0
  254. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  255. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  256. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  257. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
  258. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  259. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  260. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  261. package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  262. package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  263. package/examples/components/reference/fable/IMPROVEMENTS.md +106 -0
  264. package/examples/components/reference/fable/PARENT-REPAIRS.md +17 -0
  265. package/examples/components/reference/fable/__pycache__/build_repairs.cpython-311.pyc +0 -0
  266. package/examples/components/reference/fable/__pycache__/kanban.cpython-311.pyc +0 -0
  267. package/examples/components/reference/fable/as-authored/IMPROVEMENTS-completed.md +106 -0
  268. package/examples/components/reference/fable/as-authored/base-astra.css +17 -0
  269. package/examples/components/reference/fable/as-authored/base-parent.css +416 -0
  270. package/examples/components/reference/fable/as-authored/build.py +858 -0
  271. package/examples/components/reference/fable/as-authored/fable.css +823 -0
  272. package/examples/components/reference/fable/as-authored/kanban-completed.css +235 -0
  273. package/examples/components/reference/fable/as-authored/kanban-completed.html +53 -0
  274. package/examples/components/reference/fable/as-authored/kanban-completed.py +212 -0
  275. package/examples/components/reference/fable/as-authored/kanban.py +207 -0
  276. package/examples/components/reference/fable/base-astra.css +17 -0
  277. package/examples/components/reference/fable/base-parent.css +416 -0
  278. package/examples/components/reference/fable/build.py +858 -0
  279. package/examples/components/reference/fable/build_repairs.py +25 -0
  280. package/examples/components/reference/fable/components/activity-feed.html +3 -0
  281. package/examples/components/reference/fable/components/app-toolbar.html +3 -0
  282. package/examples/components/reference/fable/components/avatar-group.html +4 -0
  283. package/examples/components/reference/fable/components/breadcrumbs.html +3 -0
  284. package/examples/components/reference/fable/components/code-block.html +9 -0
  285. package/examples/components/reference/fable/components/column-manager.html +3 -0
  286. package/examples/components/reference/fable/components/combobox.html +6 -0
  287. package/examples/components/reference/fable/components/context-hypercms.html +3 -0
  288. package/examples/components/reference/fable/components/context-quickcrop.html +4 -0
  289. package/examples/components/reference/fable/components/diff-view.html +13 -0
  290. package/examples/components/reference/fable/components/drawer.html +3 -0
  291. package/examples/components/reference/fable/components/editable-grid-cells.html +3 -0
  292. package/examples/components/reference/fable/components/filter-builder.html +3 -0
  293. package/examples/components/reference/fable/components/form-error-summary.html +4 -0
  294. package/examples/components/reference/fable/components/inline-edit.html +3 -0
  295. package/examples/components/reference/fable/components/kanban-board.html +53 -0
  296. package/examples/components/reference/fable/components/modal.html +3 -0
  297. package/examples/components/reference/fable/components/multi-select-picker.html +5 -0
  298. package/examples/components/reference/fable/components/pagination.html +3 -0
  299. package/examples/components/reference/fable/components/persistent-action-banner.html +4 -0
  300. package/examples/components/reference/fable/components/popconfirm.html +5 -0
  301. package/examples/components/reference/fable/components/popover-menu.html +3 -0
  302. package/examples/components/reference/fable/components/rich-text-toolbar.html +3 -0
  303. package/examples/components/reference/fable/components/save-status-indicator.html +2 -0
  304. package/examples/components/reference/fable/components/selectable-cards.html +3 -0
  305. package/examples/components/reference/fable/components/settings-rows.html +3 -0
  306. package/examples/components/reference/fable/components/sidebar-nav.html +4 -0
  307. package/examples/components/reference/fable/components/small-charts.html +5 -0
  308. package/examples/components/reference/fable/components/split-button.html +4 -0
  309. package/examples/components/reference/fable/components/split-panes.html +8 -0
  310. package/examples/components/reference/fable/components/stat-tiles.html +3 -0
  311. package/examples/components/reference/fable/components/toast-stack.html +5 -0
  312. package/examples/components/reference/fable/components/tree-view.html +4 -0
  313. package/examples/components/reference/fable/components/upload-dropzone.html +6 -0
  314. package/examples/components/reference/fable/components/wizard-shell.html +3 -0
  315. package/examples/components/reference/fable/coverage.json +414 -0
  316. package/examples/components/reference/fable/fable.css +823 -0
  317. package/examples/components/reference/fable/index.html +5 -0
  318. package/examples/components/reference/fable/kanban.css +237 -0
  319. package/examples/components/reference/fable/kanban.py +212 -0
  320. package/examples/components/reference/fable/parent-repairs.css +9 -0
  321. package/examples/components/reference/fixtures/data.json +102 -0
  322. package/examples/components/reference/fixtures/host.js +47 -0
  323. package/examples/components/reference/fixtures/static-host.js +39 -0
  324. package/examples/components/reference/fixtures/workspace.jpg +0 -0
  325. package/examples/components/reference/parent/CHANGES.md +179 -0
  326. package/examples/components/reference/parent/__pycache__/kanban.cpython-311.pyc +0 -0
  327. package/examples/components/reference/parent/base-astra.css +17 -0
  328. package/examples/components/reference/parent/base-parent.css +416 -0
  329. package/examples/components/reference/parent/build.py +148 -0
  330. package/examples/components/reference/parent/components/activity-feed.html +2 -0
  331. package/examples/components/reference/parent/components/app-toolbar.html +2 -0
  332. package/examples/components/reference/parent/components/avatar-group.html +4 -0
  333. package/examples/components/reference/parent/components/breadcrumbs.html +2 -0
  334. package/examples/components/reference/parent/components/code-block.html +8 -0
  335. package/examples/components/reference/parent/components/column-manager.html +2 -0
  336. package/examples/components/reference/parent/components/combobox.html +6 -0
  337. package/examples/components/reference/parent/components/context-hypercms.html +2 -0
  338. package/examples/components/reference/parent/components/context-quickcrop.html +4 -0
  339. package/examples/components/reference/parent/components/diff-view.html +4 -0
  340. package/examples/components/reference/parent/components/drawer.html +2 -0
  341. package/examples/components/reference/parent/components/editable-grid-cells.html +2 -0
  342. package/examples/components/reference/parent/components/filter-builder.html +2 -0
  343. package/examples/components/reference/parent/components/form-error-summary.html +2 -0
  344. package/examples/components/reference/parent/components/inline-edit.html +2 -0
  345. package/examples/components/reference/parent/components/kanban-board.html +84 -0
  346. package/examples/components/reference/parent/components/modal.html +2 -0
  347. package/examples/components/reference/parent/components/multi-select-picker.html +5 -0
  348. package/examples/components/reference/parent/components/pagination.html +2 -0
  349. package/examples/components/reference/parent/components/persistent-action-banner.html +4 -0
  350. package/examples/components/reference/parent/components/popconfirm.html +5 -0
  351. package/examples/components/reference/parent/components/popover-menu.html +2 -0
  352. package/examples/components/reference/parent/components/rich-text-toolbar.html +2 -0
  353. package/examples/components/reference/parent/components/save-status-indicator.html +2 -0
  354. package/examples/components/reference/parent/components/selectable-cards.html +2 -0
  355. package/examples/components/reference/parent/components/settings-rows.html +2 -0
  356. package/examples/components/reference/parent/components/sidebar-nav.html +4 -0
  357. package/examples/components/reference/parent/components/small-charts.html +2 -0
  358. package/examples/components/reference/parent/components/split-button.html +5 -0
  359. package/examples/components/reference/parent/components/split-panes.html +8 -0
  360. package/examples/components/reference/parent/components/stat-tiles.html +2 -0
  361. package/examples/components/reference/parent/components/toast-stack.html +5 -0
  362. package/examples/components/reference/parent/components/tree-view.html +4 -0
  363. package/examples/components/reference/parent/components/upload-dropzone.html +6 -0
  364. package/examples/components/reference/parent/components/wizard-shell.html +2 -0
  365. package/examples/components/reference/parent/coverage.json +414 -0
  366. package/examples/components/reference/parent/index.html +1 -0
  367. package/examples/components/reference/parent/kanban.css +114 -0
  368. package/examples/components/reference/parent/kanban.py +55 -0
  369. package/examples/components/reference/parent/refinement.css +53 -0
  370. package/examples/components/reference/selected/build.py +70 -0
  371. package/examples/components/reference/selected/components/activity-feed.html +3 -0
  372. package/examples/components/reference/selected/components/app-toolbar.html +3 -0
  373. package/examples/components/reference/selected/components/avatar-group.html +4 -0
  374. package/examples/components/reference/selected/components/breadcrumbs.html +3 -0
  375. package/examples/components/reference/selected/components/code-block.html +9 -0
  376. package/examples/components/reference/selected/components/column-manager.html +3 -0
  377. package/examples/components/reference/selected/components/combobox.html +6 -0
  378. package/examples/components/reference/selected/components/context-hypercms.html +3 -0
  379. package/examples/components/reference/selected/components/context-quickcrop.html +4 -0
  380. package/examples/components/reference/selected/components/diff-view.html +13 -0
  381. package/examples/components/reference/selected/components/drawer.html +3 -0
  382. package/examples/components/reference/selected/components/editable-grid-cells.html +3 -0
  383. package/examples/components/reference/selected/components/filter-builder.html +3 -0
  384. package/examples/components/reference/selected/components/form-error-summary.html +4 -0
  385. package/examples/components/reference/selected/components/inline-edit.html +3 -0
  386. package/examples/components/reference/selected/components/kanban-board.html +53 -0
  387. package/examples/components/reference/selected/components/modal.html +2 -0
  388. package/examples/components/reference/selected/components/multi-select-picker.html +5 -0
  389. package/examples/components/reference/selected/components/pagination.html +3 -0
  390. package/examples/components/reference/selected/components/persistent-action-banner.html +4 -0
  391. package/examples/components/reference/selected/components/popconfirm.html +5 -0
  392. package/examples/components/reference/selected/components/popover-menu.html +3 -0
  393. package/examples/components/reference/selected/components/rich-text-toolbar.html +3 -0
  394. package/examples/components/reference/selected/components/save-status-indicator.html +2 -0
  395. package/examples/components/reference/selected/components/selectable-cards.html +3 -0
  396. package/examples/components/reference/selected/components/settings-rows.html +3 -0
  397. package/examples/components/reference/selected/components/sidebar-nav.html +4 -0
  398. package/examples/components/reference/selected/components/small-charts.html +5 -0
  399. package/examples/components/reference/selected/components/split-button.html +4 -0
  400. package/examples/components/reference/selected/components/split-panes.html +8 -0
  401. package/examples/components/reference/selected/components/stat-tiles.html +3 -0
  402. package/examples/components/reference/selected/components/toast-stack.html +5 -0
  403. package/examples/components/reference/selected/components/tree-view.html +4 -0
  404. package/examples/components/reference/selected/components/upload-dropzone.html +6 -0
  405. package/examples/components/reference/selected/components/wizard-shell.html +3 -0
  406. package/examples/components/reference/selected/corrections.css +11 -0
  407. package/examples/components/reference/selected/coverage.json +413 -0
  408. package/examples/components/reference/selected/gallery-build.mjs +49 -0
  409. package/examples/components/reference/selected/gallery-spec.json +12 -0
  410. package/examples/components/reference/selected/index.html +1 -0
  411. package/examples/components/reference/selected/kanban-comparison.json +6 -0
  412. package/examples/components/reference/selected/manifest.json +476 -0
  413. package/examples/components/reference/sha256.json +142 -0
  414. package/examples/components/reference/sources/diagonal-close.svg +1 -0
  415. package/examples/components/reference/sources/hyperclay/public-assets/css/hyperclay-app-source.css +614 -0
  416. package/examples/components/reference/sources/hyperclay/public-assets/js/app.js +94 -0
  417. package/examples/components/reference/sources/hyperclayjs/src/ui/theModal.js +897 -0
  418. package/examples/components/reference/sources/hypercms/scripts/build-theme.js +203 -0
  419. package/examples/components/reference/sources/hypercms/src/anchor.js +24 -0
  420. package/examples/components/reference/sources/hypercms/src/apply-loop.js +167 -0
  421. package/examples/components/reference/sources/hypercms/src/diagnostics.js +44 -0
  422. package/examples/components/reference/sources/hypercms/src/enhance.js +173 -0
  423. package/examples/components/reference/sources/hypercms/src/events.js +955 -0
  424. package/examples/components/reference/sources/hypercms/src/form-builder.js +518 -0
  425. package/examples/components/reference/sources/hypercms/src/form-rules.js +208 -0
  426. package/examples/components/reference/sources/hypercms/src/hooks.js +100 -0
  427. package/examples/components/reference/sources/hypercms/src/hypercms-bundle.js +10 -0
  428. package/examples/components/reference/sources/hypercms/src/hypercms.js +347 -0
  429. package/examples/components/reference/sources/hypercms/src/morph.js +10 -0
  430. package/examples/components/reference/sources/hypercms/src/path.js +61 -0
  431. package/examples/components/reference/sources/hypercms/src/place.js +131 -0
  432. package/examples/components/reference/sources/hypercms/src/platform.js +131 -0
  433. package/examples/components/reference/sources/hypercms/src/refresh.js +87 -0
  434. package/examples/components/reference/sources/hypercms/src/richclay-bridge.js +140 -0
  435. package/examples/components/reference/sources/hypercms/src/row-identity.js +111 -0
  436. package/examples/components/reference/sources/hypercms/src/scaffold.js +10 -0
  437. package/examples/components/reference/sources/hypercms/src/session.js +303 -0
  438. package/examples/components/reference/sources/hypercms/src/shell.js +248 -0
  439. package/examples/components/reference/sources/hypercms/src/styles.css +298 -0
  440. package/examples/components/reference/sources/hypercms/src/targets.js +144 -0
  441. package/examples/components/reference/sources/hypercms/src/templates.js +656 -0
  442. package/examples/components/reference/sources/hypercms/src/theme/pixel-quiet.overrides.css +761 -0
  443. package/examples/components/reference/sources/hypercms/src/theme.generated.css +1772 -0
  444. package/examples/components/reference/sources/hypercms/src/toggle.js +666 -0
  445. package/examples/components/reference/sources/hypercms/src/unresolved.js +211 -0
  446. package/examples/components/reference/sources/hypercms/src/vendor/mirk.vendor.js +212 -0
  447. package/examples/components/reference/sources/hypercms/src/views/inline-layer.js +421 -0
  448. package/examples/components/reference/sources/hypercms/src/views/inline.js +1072 -0
  449. package/examples/components/reference/sources/hypercms/src/views/sidebar.js +97 -0
  450. package/examples/components/reference/sources/modal-reference.html +301 -0
  451. package/examples/components/reference/sources/quickcrop/quickcrop.css +124 -0
  452. package/examples/components/reference/sources/quickcrop/quickcrop.js +400 -0
  453. package/examples/components/reference/sources/richclay/richclay.css +416 -0
  454. package/examples/components/reference/sources/richclay/richclay.js +2962 -0
  455. package/examples/components/reference/sources/richclay/src/a11y.js +67 -0
  456. package/examples/components/reference/sources/richclay/src/browser-global.js +7 -0
  457. package/examples/components/reference/sources/richclay/src/buttons.js +254 -0
  458. package/examples/components/reference/sources/richclay/src/hyperclay.js +470 -0
  459. package/examples/components/reference/sources/richclay/src/normalize.js +380 -0
  460. package/examples/components/reference/sources/richclay/src/richclay.js +1356 -0
  461. package/examples/components/reference/sources/richclay/src/sanitize.js +189 -0
  462. package/examples/components/reference/sources/richclay/src/styles.js +23 -0
  463. package/examples/components/reference/sources/richclay/src/toolbar-float.js +175 -0
  464. package/examples/components/reference/sources/richclay/src/toolbar.js +394 -0
  465. package/examples/components/reference/sources/richclay/src/vendor-bundle.js +15 -0
  466. package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE +202 -0
  467. package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
  468. package/examples/components/reference/sources/richclay/vendor/SQUIRE-LICENSE +21 -0
  469. package/examples/components/reference/sources/richclay/vendor/purify.es.mjs +2249 -0
  470. package/examples/components/reference/sources/richclay/vendor/purify.min.js +3 -0
  471. package/examples/components/reference/sources/richclay/vendor/squire.js +22 -0
  472. package/examples/components/reference/sources/richclay/vendor/squire.mjs +22 -0
  473. package/examples/components/reference/sources/richclay/vendor/squire.provenance.json +19 -0
  474. package/examples/components/rich-text-toolbar.html +43 -0
  475. package/examples/components/save-status-indicator.html +11 -0
  476. package/examples/components/selectable-cards.html +9 -0
  477. package/examples/components/settings-rows.html +10 -0
  478. package/examples/components/sidebar-nav.html +9 -0
  479. package/examples/components/small-charts.html +21 -0
  480. package/examples/components/split-button.html +13 -0
  481. package/examples/components/split-panes-editor.html +6 -0
  482. package/examples/components/split-panes.html +9 -0
  483. package/examples/components/stat-tiles.html +23 -0
  484. package/examples/components/toast-stack.html +21 -0
  485. package/examples/components/tree-view.html +9 -0
  486. package/examples/components/upload-dropzone.html +88 -0
  487. package/examples/components/wizard-shell.html +50 -0
  488. package/examples/datastar/index.html +38 -0
  489. package/examples/datastar/server.mjs +31 -0
  490. package/examples/fixtures/field-guide.pdf +14 -0
  491. package/examples/fixtures/workspace.jpg +0 -0
  492. package/examples/setup-peers.mjs +35 -0
  493. package/fonts/LICENSE-ibm-plex-mono.txt +93 -0
  494. package/fonts/LICENSE-ibm-plex-sans.txt +93 -0
  495. package/fonts/LICENSE-newsreader.txt +93 -0
  496. package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  497. package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  498. package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  499. package/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
  500. package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  501. package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  502. package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  503. package/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  504. package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  505. package/icons/LICENSE +21 -0
  506. package/icons/house.json +71 -0
  507. package/icons/icons.d.ts +17 -0
  508. package/icons/icons.js +648 -0
  509. package/icons/icons.svg +126 -0
  510. package/icons/marks/build-tray.source.mjs +45 -0
  511. package/icons/marks/hyperclay-local.svg +11 -0
  512. package/icons/phosphor.json +53 -0
  513. package/icons/round.json +8 -0
  514. package/integrations/datastar.js +202 -0
  515. package/integrations/quickcrop.css +26 -0
  516. package/integrations/quickcrop.js +56 -0
  517. package/integrations/richclay.css +100 -0
  518. package/integrations/richclay.js +131 -0
  519. package/package.json +630 -0
  520. package/react/README.md +244 -0
  521. package/src/README.md +83 -0
  522. package/vendor/datastar/datastar-1.0.3.js +10 -0
  523. package/vendor/datastar/provenance.json +6 -0
  524. package/vendor/floating-ui/LICENSE-core +20 -0
  525. package/vendor/floating-ui/LICENSE-dom +20 -0
  526. package/vendor/floating-ui/floating-ui.core.umd.min.js +1 -0
  527. package/vendor/floating-ui/floating-ui.dom.umd.min.js +1 -0
  528. package/vendor/floating-ui/provenance.json +17 -0
  529. package/vendor/richclay/LICENSE +16 -0
  530. package/vendor/richclay/THIRD-PARTY-NOTICES.md +45 -0
  531. package/vendor/richclay/provenance.json +17 -0
  532. package/vendor/richclay/richclay.css +404 -0
  533. package/vendor/richclay/richclay.js +2940 -0
  534. package/vendor/richclay/vendor/DOMPURIFY-LICENSE +202 -0
  535. package/vendor/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
  536. package/vendor/richclay/vendor/SQUIRE-LICENSE +21 -0
  537. package/vendor/richclay/vendor/purify.min.js +3 -0
  538. package/vendor/richclay/vendor/squire.js +22 -0
  539. package/vendor/richclay/vendor/squire.provenance.json +30 -0
@@ -0,0 +1,114 @@
1
+ .k-stage{padding:30px 30px 0;min-height:780px;font:14px/1.5 var(--bevel-font-sans)}
2
+ .k-stage h1,.k-stage h2,.k-stage h3,.k-stage p{margin:0}
3
+ .k-stage button{font:inherit;color:inherit}
4
+ .k-masthead{display:flex;justify-content:space-between;align-items:center;gap:25px;margin-bottom:28px}
5
+ .k-eyebrow,.k-id{font:10px/1.4 var(--bevel-font-mono);letter-spacing:.035em;color:var(--bevel-muted)}
6
+ .k-eyebrow{letter-spacing:.12em;color:var(--bevel-brass);margin-bottom:11px}
7
+ .k-eyebrow span{margin:0 12px;color:var(--bevel-line-2)}
8
+ .k-masthead h1{font:46px/1 var(--bevel-font-serif);letter-spacing:-.03em}
9
+ .k-project-mark{font:21px var(--bevel-font-sans);display:inline-block;vertical-align:middle;margin-left:16px;color:var(--bevel-brass)}
10
+ .k-masthead p{font-size:13px;color:var(--bevel-muted);margin-top:9px}
11
+ .k-masthead-actions{display:flex;gap:22px;align-items:center}
12
+ .k-team{display:grid;gap:7px;text-align:center;font-size:10px;color:var(--bevel-muted)}
13
+ .k-members{display:inline-flex;padding-left:6px;align-items:center}
14
+ .k-avatar{display:inline-grid;place-items:center;width:26px;height:26px;background:var(--bevel-brass-soft);color:var(--bevel-brass);border:2px solid var(--bevel-surface);font:9px/1 var(--bevel-font-mono);flex-shrink:0}
15
+ .k-members .k-avatar{margin-left:-6px}
16
+ .k-avatar-ar{background:var(--bevel-sunk);color:var(--bevel-ink-2)}
17
+ .k-avatar-sp{background:var(--bevel-ox-soft);color:var(--bevel-ox)}
18
+ .k-avatar-jp{background:var(--bevel-teal-soft);color:var(--bevel-teal)}
19
+ .k-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:7px 12px;border:2px solid;border-color:var(--bevel-edge-hi) var(--bevel-edge-lo) var(--bevel-edge-lo) var(--bevel-edge-hi);background:var(--bevel-face);font-size:12px!important;white-space:nowrap}
20
+ .k-quiet{background:none;border:1px solid var(--bevel-line-2);padding:8px 10px}
21
+ .k-icon{display:inline-flex;align-items:center;justify-content:center;background:none;border:0;padding:3px;color:var(--bevel-muted)!important}
22
+ .k-tabs{display:flex;gap:25px;align-items:center;border-bottom:1px solid var(--bevel-line-2);margin-bottom:18px}
23
+ .k-tabs>span{display:flex;align-items:center;gap:9px;padding:12px 0;color:var(--bevel-muted);font-size:12px;border-bottom:2px solid transparent;margin-bottom:-1px}
24
+ .k-tabs>span.active{border-color:var(--bevel-brass);color:var(--bevel-ink)}
25
+ .k-tabs b{font:10px var(--bevel-font-mono);padding:1px 5px;color:var(--bevel-brass);background:var(--bevel-brass-soft)}
26
+ .k-tabs small{margin-left:auto;display:flex;gap:8px;align-items:center;font:9px var(--bevel-font-mono);color:var(--bevel-muted)}
27
+ .k-toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:18px}
28
+ .k-search{display:flex;align-items:center;gap:9px;color:var(--bevel-muted);font-size:12px;padding:8px 10px;background:var(--bevel-surface);border:1px solid var(--bevel-line-2);width:235px}
29
+ .k-search kbd{margin-left:auto;font:9px var(--bevel-font-mono);padding:1px 3px;border:1px solid var(--bevel-line)}
30
+ .k-toolbar-spacer{flex:1}
31
+ .k-overview{display:flex;align-items:center;gap:25px;flex-wrap:wrap;padding:12px 0 16px;border-bottom:1px solid var(--bevel-line-2);color:var(--bevel-muted);font-size:11px}
32
+ .k-overview>span{display:flex;align-items:center;gap:7px}
33
+ .k-overview>span:last-child{margin-left:auto}
34
+ .k-overview b{font:12px var(--bevel-font-mono);color:var(--bevel-ink)}
35
+ .k-overview-bar{display:block;width:65px;height:4px;background:var(--bevel-line)}
36
+ .k-overview-bar i{display:block;height:100%;background:var(--bevel-teal)}
37
+ .k-board{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;min-width:0}
38
+ .k-lane{min-width:0;padding-top:20px}
39
+ .k-lane>header{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding:0 2px}
40
+ .k-lane h2{font:500 13px var(--bevel-font-sans)}
41
+ .k-lane>header>.k-icon{margin-left:auto}
42
+ .k-count{font:10px var(--bevel-font-mono);color:var(--bevel-muted)}
43
+ .k-lane-dot{width:7px;height:7px;border:1px solid var(--bevel-muted)}
44
+ .k-lane-dot-1{background:var(--bevel-brass);border-color:var(--bevel-brass)}
45
+ .k-lane-dot-2{background:var(--bevel-teal);border-color:var(--bevel-teal)}
46
+ .k-wip{font:9px var(--bevel-font-mono);color:var(--bevel-brass);background:var(--bevel-brass-soft);padding:2px 4px}
47
+ .k-lane-body{display:flex;flex-direction:column;gap:12px}
48
+ .k-task{border:1px solid var(--bevel-line-2);background:var(--bevel-surface);box-shadow:inset 0 1px 0 color-mix(in srgb,var(--bevel-edge-hi) 50%,transparent)}
49
+ .k-task-body{padding:13px 14px 0}
50
+ .k-task-top{display:flex;align-items:center;gap:6px;margin-bottom:10px}
51
+ .k-task-top .k-icon{margin-left:auto}
52
+ .k-priority{display:flex;align-items:center;gap:4px;font:9px var(--bevel-font-mono);color:var(--bevel-muted);margin-left:auto}
53
+ .k-urgent,.k-overdue{color:var(--bevel-ox)!important}
54
+ .k-high{color:var(--bevel-brass)}
55
+ .k-task h3{font:22px/1.14 var(--bevel-font-serif);letter-spacing:-.015em;max-width:240px}
56
+ .k-task p{font-size:11px;line-height:1.55;color:var(--bevel-muted);margin-top:8px}
57
+ .k-tags{display:flex;gap:5px;margin-top:12px;flex-wrap:wrap}
58
+ .k-tag{font:9px/1.4 var(--bevel-font-mono);padding:2px 5px;background:var(--bevel-sunk);color:var(--bevel-ink-2)}
59
+ .k-tag-design{background:var(--bevel-brass-soft);color:var(--bevel-brass)}
60
+ .k-tag-editorial{background:var(--bevel-teal-soft);color:var(--bevel-teal)}
61
+ .k-tag-engineering{background:var(--bevel-sunk);color:var(--bevel-ink-2)}
62
+ .k-tag-studio{border:1px solid var(--bevel-line-2);background:none}
63
+ .k-check{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;color:var(--bevel-muted);margin:14px 0 6px}
64
+ .k-check>span{display:flex;gap:6px;align-items:center}
65
+ .k-check b{font:9px var(--bevel-font-mono);color:var(--bevel-ink-2)}
66
+ .k-progress{height:3px;background:var(--bevel-line);margin-bottom:13px}
67
+ .k-progress i{display:block;height:100%;background:var(--bevel-brass)}
68
+ .k-done .k-progress i{background:var(--bevel-teal)}
69
+ .k-task-bottom{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:15px}
70
+ .k-date{display:flex;align-items:center;gap:5px;font:9px var(--bevel-font-mono);color:var(--bevel-muted)}
71
+ .k-done .k-date{color:var(--bevel-teal)}
72
+ .k-task-meta{display:flex;align-items:center;gap:10px;margin:12px -14px 0;padding:8px 14px;border-top:1px solid var(--bevel-line);font:9px var(--bevel-font-mono);color:var(--bevel-muted)}
73
+ .k-task-meta>span{display:flex;align-items:center;gap:4px}
74
+ .k-task-note{margin-left:auto;font-size:8px}
75
+ .k-featured{border-left:3px solid var(--bevel-brass)}
76
+ .k-selected{outline:1px solid var(--bevel-brass);outline-offset:2px}
77
+ .k-blocked{display:flex;gap:6px;align-items:flex-start;background:var(--bevel-ox-soft);color:var(--bevel-ox);font-size:10px;line-height:1.5;margin:14px -14px 0;padding:7px 14px}
78
+ .k-cover{height:100px;position:relative;border-bottom:1px solid var(--bevel-line-2);overflow:hidden}
79
+ .k-cover img{height:100%;width:100%;object-fit:cover;object-position:50% 56%}
80
+ .k-cover>span{position:absolute;bottom:8px;left:12px;background:var(--bevel-surface);color:var(--bevel-ink);font:8px var(--bevel-font-mono);letter-spacing:.06em;padding:4px 5px}
81
+ .k-add{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;padding:12px;border:1px dashed var(--bevel-line-2);color:var(--bevel-muted)!important;font-size:11px!important;background:none;margin:12px 0 20px}
82
+ .k-board-footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--bevel-line);padding:15px 0;color:var(--bevel-muted);font-size:10px}
83
+ .k-board-footer>span{display:flex;align-items:center;gap:7px}
84
+ .k-board-footer span span{color:var(--bevel-line-2)}
85
+ .k-workspace.has-inspector{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:22px}
86
+ .has-inspector .k-board{grid-template-columns:repeat(3,minmax(205px,1fr));overflow:auto;padding:3px 3px 0}
87
+ .k-inspector{border-left:1px solid var(--bevel-line-2);padding:22px 0 0 22px;min-width:0}
88
+ .k-inspector-head{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}
89
+ .k-inspector h2{font:30px/1.08 var(--bevel-font-serif)}
90
+ .k-inspector>p{font-size:12px;line-height:1.65;color:var(--bevel-muted);margin:15px 0 22px}
91
+ .k-inspector dl{display:grid;grid-template-columns:75px 1fr;gap:12px;margin:0 0 24px;font-size:11px;align-items:center}
92
+ .k-inspector dt{color:var(--bevel-muted)}
93
+ .k-inspector dd{margin:0;display:flex;align-items:center;gap:8px}
94
+ .k-inspector-section{border-top:1px solid var(--bevel-line);padding:16px 0}
95
+ .k-inspector-section>.k-check{margin:0 0 12px}
96
+ .k-inspector-section strong{font-size:12px;color:var(--bevel-ink);font-weight:500}
97
+ .k-check-row{display:flex;gap:9px;align-items:center;margin:10px 0;font-size:11px;color:var(--bevel-ink-2)}
98
+ .k-check-box{display:grid;place-items:center;width:15px;height:15px;border:1px solid var(--bevel-line-2)}
99
+ .k-check-box.checked{background:var(--bevel-teal-soft);color:var(--bevel-teal);border-color:var(--bevel-teal)}
100
+ .k-related{display:flex;gap:8px;align-items:center;font-size:10px}
101
+ .k-related svg:last-child{color:var(--bevel-teal);margin-left:auto}
102
+ .k-comment{display:flex;align-items:flex-start;gap:9px;margin:18px 0}
103
+ .k-comment b{font-size:10px;font-weight:500}
104
+ .k-comment small{font-size:9px;font-weight:400;color:var(--bevel-muted);margin-left:6px}
105
+ .k-comment p{margin-top:7px;font-size:11px;line-height:1.6;color:var(--bevel-ink-2)}
106
+ .k-comment-input{display:flex;justify-content:space-between;padding:10px;border:1px solid var(--bevel-line-2);color:var(--bevel-muted);font-size:11px;background:var(--bevel-surface)}
107
+ .k-inspector footer{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--bevel-line);padding:16px 0}
108
+ .k-inspector footer .k-id{font-size:8px}
109
+ .k-empty{padding:36px 20px;min-height:315px;border:1px dashed var(--bevel-line-2);display:flex;flex-direction:column;align-items:flex-start;justify-content:center}
110
+ .k-empty>svg{color:var(--bevel-brass);margin-bottom:24px}
111
+ .k-empty h3{font:26px/1.12 var(--bevel-font-serif)}
112
+ .k-empty p{font-size:12px;line-height:1.6;color:var(--bevel-muted);margin-top:14px}
113
+ @media(max-width:900px){.k-stage{padding:25px 22px 0}.k-masthead h1{font-size:40px}.k-masthead-actions{gap:12px}.k-board{gap:12px}.k-task-body{padding:12px 11px 0}.k-task-meta{margin-left:-11px;margin-right:-11px;padding-left:11px;padding-right:11px}.k-blocked{margin-left:-11px;margin-right:-11px;padding-left:11px;padding-right:11px}.k-task h3{font-size:20px}.k-wip{display:none}.k-workspace.has-inspector{grid-template-columns:1fr}.k-inspector{border-left:0;border-top:1px solid var(--bevel-line-2);padding-left:0;max-width:600px}.has-inspector .k-board{grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible}.k-overview{gap:15px}.k-team>span:last-child{display:none}}
114
+ @media(max-width:540px){.k-stage{padding:25px 18px 0}.k-masthead{align-items:flex-start;gap:16px;flex-wrap:wrap}.k-masthead-actions{width:100%;justify-content:space-between}.k-eyebrow{font-size:9px}.k-tabs{gap:22px}.k-tabs small{display:none}.k-search{width:100%}.k-toolbar-spacer{display:none}.k-toolbar{gap:8px}.k-overview{gap:12px}.k-overview>span:last-child{margin:0}.k-board,.has-inspector .k-board{grid-template-columns:1fr}.k-lane{padding-top:22px}.k-wip{display:block}.k-task h3{font-size:25px;max-width:100%}.k-task-body{padding:16px 17px 0}.k-task-top{margin-bottom:13px}.k-task-meta{margin-left:-17px;margin-right:-17px;padding-left:17px;padding-right:17px}.k-blocked{margin-left:-17px;margin-right:-17px;padding-left:17px;padding-right:17px}.k-task p{font-size:12px}.k-cover{height:135px}.k-board-footer{flex-wrap:wrap;gap:10px}.k-empty{min-height:230px}}
@@ -0,0 +1,55 @@
1
+ from html import escape
2
+
3
+ def icon(name, size=16):
4
+ paths = {
5
+ 'plus':'M12 5v14M5 12h14', 'more':'M5 12h1m5 0h1m5 0h1',
6
+ 'search':'M20 20l-5-5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0',
7
+ 'filter':'M4 6h16M7 12h10M10 18h4', 'chevron':'m7 10 5 5 5-5',
8
+ 'check':'m5 12 4 4L19 6', 'clock':'M12 7v5l3 2M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0',
9
+ 'comment':'M4 4h16v12H9l-5 4V4Z', 'clip':'m9 16 7-7a3 3 0 0 0-4-4l-7 7a5 5 0 0 0 7 7l8-8',
10
+ 'arrow':'M4 12h16m-6-6 6 6-6 6', 'flag':'M5 21V3h13l-3 4 3 4H5',
11
+ 'board':'M3 4h5v16H3ZM10 4h5v11h-5ZM17 4h4v7h-4Z', 'grid':'M3 3h7v7H3ZM14 3h7v7h-7ZM3 14h7v7H3ZM14 14h7v7h-7Z',
12
+ 'list':'M8 5h13M8 12h13M8 19h13M3 5h1M3 12h1M3 19h1',
13
+ 'calendar':'M4 5h16v16H4ZM4 10h16M8 2v6m8-6v6',
14
+ 'lock':'M6 11h12v10H6ZM8 11V7a4 4 0 0 1 8 0v4',
15
+ 'link':'m10 14 4-4M9 15l-2 2a3 3 0 0 1-4-4l4-4a3 3 0 0 1 4 0m2 0 2-2a3 3 0 0 1 4 4l-4 4a3 3 0 0 1-4 0',
16
+ }
17
+ return f'<svg width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="{paths[name]}"/></svg>'
18
+
19
+ def button(label, name=None, quiet=False):
20
+ return f'<button type="button" class="k-button {"k-quiet" if quiet else ""}">{icon(name) if name else ""}<span>{label}</span></button>'
21
+
22
+ def avatar(initials):
23
+ return f'<span class="k-avatar k-avatar-{initials.lower()}" aria-label="{dict(MC="Mira Chen",AR="Alex Rivera",SP="Sam Patel",JP="Jules Park")[initials]}">{initials}</span>'
24
+
25
+ TASKS = [
26
+ dict(id='FN-101',title='Turn research into a field guide',tag='Editorial',priority='High',date='Sep 10',people=['SP'],comments=3,attachments=2,check='2/5',desc='A useful home for what we learned.'),
27
+ dict(id='FN-102',title='Shape the cover story',tag='Design',priority='Normal',date='Sep 11',people=['MC','SP'],comments=2,attachments=1,check='',cover=True),
28
+ dict(id='FN-103',title='Invite the next four collaborators',tag='Studio',priority='Normal',date='Sep 12',people=['JP'],comments=0,attachments=0,check='0/4'),
29
+ dict(id='FN-104',title='Make room for good work',tag='Design',priority='Urgent',date='Today',people=['MC','AR'],comments=8,attachments=3,check='3/4',desc='Finish the new project experience.',featured=True),
30
+ dict(id='FN-105',title='Polish the document export',tag='Engineering',priority='High',date='Sep 07',people=['AR'],comments=4,attachments=0,check='1/3',blocked=True),
31
+ dict(id='FN-106',title='Give every empty state a voice',tag='Editorial',priority='Normal',date='Sep 09',people=['SP'],comments=1,attachments=0,check='2/3'),
32
+ dict(id='FN-107',title='A calmer workspace navigation',tag='Design',priority='Normal',date='Done today',people=['MC'],comments=5,attachments=2,check='4/4',done=True),
33
+ dict(id='FN-108',title='Write the first welcome',tag='Editorial',priority='Normal',date='Done yesterday',people=['SP','JP'],comments=2,attachments=0,check='3/3',done=True),
34
+ ]
35
+
36
+ def task(t, selected=False):
37
+ urgency = 'k-urgent' if t['priority']=='Urgent' else 'k-high' if t['priority']=='High' else ''
38
+ tag = t['tag'].lower()
39
+ checks = t['check'].split('/') if t['check'] else []
40
+ progress = int(checks[0])/int(checks[1])*100 if checks else 0
41
+ return f'''<article class="k-task {'k-featured' if t.get('featured') else ''} {'k-selected' if selected else ''} {'k-done' if t.get('done') else ''}" data-task="{t['id']}">
42
+ {'<div class="k-cover"><img src="../../fixtures/workspace.jpg" alt="A sunlit studio workspace"><span>VISUAL DIRECTION</span></div>' if t.get('cover') else ''}
43
+ <div class="k-task-body"><div class="k-task-top"><span class="k-id">{t['id']}</span><span class="k-priority {urgency}">{icon('flag',12)} {t['priority']}</span><button class="k-icon" aria-label="Task options">{icon('more')}</button></div>
44
+ <h3>{t['title']}</h3>{'<p>'+t['desc']+'</p>' if t.get('desc') else ''}<div class="k-tags"><span class="k-tag k-tag-{tag}">{t['tag']}</span>{'<span class="k-tag k-tag-studio">Launch</span>' if t.get('featured') else ''}</div>
45
+ {'<div class="k-blocked">'+icon('lock',13)+' Waiting on font licensing</div>' if t.get('blocked') else ''}
46
+ {'<div class="k-check"><span>'+icon('check',13)+' Checklist</span><b>'+t['check']+'</b></div><div class="k-progress"><i style="width:'+str(progress)+'%"></i></div>' if checks else ''}
47
+ <div class="k-task-bottom"><span class="k-date {"k-overdue" if t.get("blocked") else ""}">{icon('check' if t.get('done') else 'clock',12)}{t['date']}</span><span class="k-members">{''.join(avatar(p) for p in t['people'])}</span></div>
48
+ <div class="k-task-meta"><span>{icon('comment',12)}{t['comments']}</span>{'<span>'+icon('clip',12)+str(t['attachments'])+'</span>' if t['attachments'] else ''}{'<span class="k-task-note">Final review</span>' if t.get('featured') else '<span class="k-task-note">'+('Complete' if t.get('done') else 'Field notes')+'</span>'}</div></div></article>'''
49
+
50
+ def kanban(state):
51
+ empty=state=='empty'
52
+ lanes=[('Up next','3','',TASKS[:3]),('In progress','3','WIP 3 / 3',TASKS[3:6]),('Ready','2','',TASKS[6:])]
53
+ columns=''.join(f'''<section class="k-lane"><header><span class="k-lane-dot k-lane-dot-{i}"></span><h2>{title}</h2><span class="k-count">{0 if empty else count}</span>{'<small class="k-wip">'+wip+'</small>' if wip and not empty else ''}<button class="k-icon" aria-label="Add a task to {title}">{icon('plus')}</button></header><div class="k-lane-body">{('<div class="k-empty">'+icon('board',30)+'<h3>'+['The next good idea starts here.','Room to focus.','A place for finished work.'][i]+'</h3><p>'+['Add a task, assign an owner and give it a place to go.','Move a task here when you are ready to begin.','Completed work will collect here.'][i]+'</p></div>') if empty else ''.join(task(t,state=='selected' and t['id']=='FN-104') for t in tasks)}</div><button class="k-add">{icon('plus',14)} Add task</button></section>''' for i,(title,count,wip,tasks) in enumerate(lanes))
54
+ inspector=f'''<aside class="k-inspector"><div class="k-inspector-head"><span class="k-id">FN-104 / TASK DETAILS</span><span class="k-tag k-tag-design">In progress</span></div><h2>Make room for good work</h2><p>Finish the new project experience. Keep the first step calm, direct and easy to return to.</p><dl><dt>Owner</dt><dd>{avatar('MC')} Mira Chen</dd><dt>Priority</dt><dd class="k-urgent">{icon('flag',13)} Urgent</dd><dt>Due date</dt><dd>{icon('calendar',14)} Today, Sep 08</dd><dt>Project</dt><dd>Field notes</dd></dl><div class="k-inspector-section"><div class="k-check"><strong>Ready to share</strong><b>3 / 4</b></div>{''.join('<div class="k-check-row"><span class="k-check-box '+('checked' if i<3 else '')+'">'+(icon('check',12) if i<3 else '')+'</span>'+s+'</div>' for i,s in enumerate(['Set the project details','Check both color modes','Review the compact layout','Get Jules’ final review']))}</div><div class="k-inspector-section"><div class="k-check"><strong>Connected work</strong><span class="k-id">1</span></div><div class="k-related">{icon('link')}<span>FN-107 · Workspace navigation</span>{icon('check',14)}</div></div><div class="k-inspector-section"><strong>Latest conversation</strong><div class="k-comment">{avatar('AR')}<div><b>Alex Rivera <small>18 min ago</small></b><p>The new flow reads clearly. Ready for one last look at the copy.</p></div></div><div class="k-comment-input">Leave a comment… <span>⌘ ↵</span></div></div><footer><span class="k-id">UPDATED AT 10:42</span>{button('Open task','arrow')}</footer></aside>''' if state=='selected' else ''
55
+ return f'''<main class="k-stage"><header class="k-masthead"><div><div class="k-eyebrow">NORTHSTAR STUDIO <span>/</span> PROJECT 004</div><h1>Field notes<span class="k-project-mark">↗</span></h1><p>A place for the ideas worth making.</p></div><div class="k-masthead-actions"><div class="k-team"><span class="k-members">{''.join(avatar(x) for x in ['MC','AR','SP','JP'])}</span><span>4 people</span></div>{button('New task','plus')}</div></header><nav class="k-tabs"><span class="active">{icon('board')}Board <b>{0 if empty else 8}</b></span><span>{icon('list')}List</span><span>{icon('calendar')}Timeline</span><small>PRIVATE PROJECT {icon('lock',12)}</small></nav><div class="k-toolbar"><div class="k-search">{icon('search')}<span>Search this board</span><kbd>⌘ K</kbd></div>{button('Filters','filter')}<span class="k-toolbar-spacer"></span>{button('Status','chevron',True)}{button('This week','calendar',True)}</div><div class="k-overview"><span><b>{0 if empty else 8}</b> tasks in this project</span><span><i class="k-overview-bar"><i style="width:{0 if empty else 25}%"></i></i><b>{0 if empty else 2}/{0 if empty else 8}</b> complete</span><span class="k-overdue">{icon('flag',13)} {0 if empty else 2} need attention</span><span class="k-id">SEP 08 – 12</span></div><div class="k-workspace {'has-inspector' if inspector else ''}"><div class="k-board">{columns}</div>{inspector}</div><footer class="k-board-footer"><span>{icon('board',13)} Grouped by status <span>·</span> Ordered by priority</span><span>{0 if empty else 8} tasks <span>·</span> 4 collaborators</span></footer></main>'''
@@ -0,0 +1,53 @@
1
+ [hidden]{display:none!important}
2
+ [data-ref-state]{position:relative}
3
+ .r-static-note{padding:10px 20px;border-top:1px solid var(--bevel-line);color:var(--bevel-muted);font:11px/1.5 var(--bevel-font-mono)}
4
+ body[data-component="modal"] .micromodal__close,.r-diagonal-close{position:absolute;top:-1px;right:-1px;width:68px;height:68px;padding:0;border:0;background:none;clip-path:polygon(0 4%,0 0,100% 0,100% 100%,94% 100%);z-index:2}
5
+ body[data-component="modal"] .micromodal__close svg,.r-diagonal-close svg{display:block;width:100%;height:100%}
6
+ .micromodal__close-bg{fill:var(--bevel-sunk)}
7
+ .micromodal__close-x{fill:var(--bevel-ink)}
8
+ .drawer-panel{position:relative}
9
+ .drawer-panel header>.row:first-child{padding-right:35px;min-height:26px}
10
+ .p-popconfirm{position:relative;margin-top:15px}
11
+ .p-popconfirm::before{content:"";position:absolute;right:10px;top:-7px;width:12px;height:12px;background:var(--bevel-surface);border-top:1px solid var(--bevel-line-2);border-left:1px solid var(--bevel-line-2);transform:rotate(45deg)}
12
+ .p-split-button{display:inline-flex;border:2px solid;border-color:var(--bevel-edge-hi) var(--bevel-edge-lo) var(--bevel-edge-lo) var(--bevel-edge-hi);background:var(--bevel-face);height:36px}
13
+ .p-split-button>button{height:32px;min-height:0;border:0;background:var(--bevel-face);color:var(--bevel-ink);box-shadow:none;transform:none;padding:0 12px;font-size:13px}
14
+ .p-split-button>button:first-child{border-right:0}
15
+ .p-split-button>button+button{width:33px;padding:0;border:0;border-left:1px solid var(--bevel-edge-lo)}
16
+ .p-split-button[data-divider="inset"]>button+button{border-left:2px solid var(--bevel-edge-in);box-shadow:inset 1px 0 var(--bevel-edge-in-hi)}
17
+ .p-split-button:has(:disabled){opacity:.5}
18
+ .r-split-label{font:11px var(--bevel-font-mono);color:var(--bevel-muted);margin-bottom:14px}
19
+ .p-sidebar{position:relative}
20
+ .p-sidebar-brand{padding:20px 11px;gap:8px;min-height:68px}
21
+ .p-sidebar-brand strong{font-size:19px}
22
+ .p-sidebar-brand>svg{width:18px}
23
+ .p-sidebar-brand>.r-collapse{margin-left:auto;width:26px;height:26px;flex-shrink:0}
24
+ .p-sidebar.compact .p-sidebar-brand{flex-direction:column;gap:15px}
25
+ .p-sidebar.compact .r-collapse{margin:0}
26
+ .p-sidebar footer.r-identity{gap:10px;padding:16px 13px}
27
+ .r-identity .r-avatar{display:grid;place-items:center;width:35px;height:35px;flex-shrink:0;background:var(--bevel-teal-soft);color:var(--bevel-teal);border:1px solid var(--bevel-line-2);font:11px var(--bevel-font-mono)}
28
+ .r-identity strong{display:block;font-size:13px;font-weight:500}
29
+ .p-sidebar footer.r-identity small{font-size:11px;margin-top:2px}
30
+ .p-sidebar.compact .r-identity>span:last-child{display:none}
31
+ .p-sidebar.compact footer.r-identity{justify-content:center}
32
+ body[data-component="app-toolbar"] .toolbar .bevel-button{width:36px;height:36px;min-height:0;display:inline-grid;place-items:center;padding:0;background:var(--bevel-face);color:var(--bevel-ink);border:2px solid;border-color:var(--bevel-edge-hi) var(--bevel-edge-lo) var(--bevel-edge-lo) var(--bevel-edge-hi)}
33
+ body[data-component="app-toolbar"] .toolbar .bevel-button[aria-pressed="true"]{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in)}
34
+ .p-tree summary{padding:3px 10px;line-height:24px;margin:8px 0}
35
+ .p-tree-leaf{padding:3px 10px;line-height:20px;min-height:30px;margin:8px 0;border-left:2px solid transparent}
36
+ .p-tree-leaf.selected{border-left-color:var(--bevel-brass);color:var(--bevel-ink);margin-bottom:10.5px}
37
+ .p-tree-leaf .p-badge{flex:0 0 auto;font-size:9px;padding:2px 5px}
38
+ .wizard-step b{display:grid;place-items:center;width:30px;height:30px;border:1px solid var(--bevel-line-2);font:12px/1 var(--bevel-font-mono);color:var(--bevel-muted);margin-bottom:10px;background:var(--bevel-surface)}
39
+ .wizard-step.current b{background:var(--bevel-ink);color:var(--bevel-ground);border-color:var(--bevel-ink)}
40
+ .p-banner{border-top:0;border-left:3px solid var(--bevel-brass)}
41
+ .p-banner.resolved{border-left-color:var(--bevel-teal)}
42
+ .r-inline-name{position:relative;margin:26px 0 0;padding:19px 0 18px;min-height:72px;border-top:1px solid var(--bevel-line);border-bottom:2px solid var(--bevel-brass);outline:0}
43
+ .r-inline-name::after{content:"";display:inline-block;vertical-align:-3px;height:29px;margin-left:3px;border-left:1px solid var(--bevel-ink)}
44
+ .r-inline-name[aria-invalid="true"]{border-bottom-color:var(--bevel-ox);color:var(--bevel-faint)}
45
+ .r-inline-name[aria-invalid="true"]::after{display:none}
46
+ .r-inline-name .r-placeholder{font-style:italic}
47
+ .r-saved-page{min-height:580px;padding:40px 38px;position:relative}
48
+ .r-saved-page header{padding-bottom:20px;border-bottom:1px solid var(--bevel-line);display:flex;align-items:center;justify-content:space-between;gap:20px}
49
+ .r-saved-page article{max-width:480px;margin:45px auto}
50
+ .r-saved-page h1{font:38px/1.12 var(--bevel-font-serif);margin:16px 0}
51
+ .r-saved-page p{font-size:15px;line-height:1.75;color:var(--bevel-ink-2);margin:14px 0}
52
+ .r-saved-chip{position:absolute;right:16px;bottom:16px;padding:4px 12px;border-radius:999px;font:13px/1.6 var(--bevel-font-sans);background:color-mix(in srgb,var(--bevel-teal-soft) 60%,var(--bevel-sunk));color:var(--bevel-ink-2);border:1px solid color-mix(in srgb,var(--bevel-teal) 25%,var(--bevel-line));pointer-events:none}
53
+ @media(max-width:540px){.p-sidebar:not(.compact){width:155px}.p-sidebar-brand{flex-wrap:wrap}.p-sidebar-brand strong{font-size:17px}.p-sidebar-brand>.r-collapse{width:23px;height:23px}.p-sidebar-brand>svg{display:none}.r-saved-page{padding:28px 24px}.r-saved-page h1{font-size:34px}.wizard-step b{margin-bottom:8px}}
@@ -0,0 +1,70 @@
1
+ import json
2
+ import re
3
+ from pathlib import Path
4
+ from bs4 import BeautifulSoup
5
+
6
+ ROOT = Path(__file__).resolve().parent.parent
7
+ OUT = ROOT / 'selected'
8
+ manifest = json.loads((ROOT / 'manifest.json').read_text())
9
+ feedback = json.loads((ROOT / 'selection-round-2.json').read_text())
10
+ answers = {a['key'].removeprefix('ui2-'): a for a in feedback['answers']}
11
+ answers.update({a['key'].removeprefix('ui3-'): a for a in json.loads((ROOT / 'selection-round-3.json').read_text())['answers']})
12
+ components = [c.copy() for c in manifest['components'] if c['id'] in answers]
13
+ contexts = [c.copy() for c in manifest['contexts']]
14
+ assert len(components) == 33
15
+ assert answers['split-divider']['picked'] == ['inset']
16
+ (OUT / 'components').mkdir(parents=True, exist_ok=True)
17
+ coverage = {'seat': 'selected', 'phase': 'static', 'components': [], 'contexts': [], 'pending': []}
18
+
19
+ for component in components + contexts:
20
+ key = component['id']
21
+ if key.startswith('context-'):
22
+ source = 'parent' if key == 'context-quickcrop' else 'fable'
23
+ comment = ''
24
+ else:
25
+ source = answers[key]['picked'][0]
26
+ comment = answers[key]['comment']
27
+ html = (ROOT / source / 'components' / f'{key}.html').read_text()
28
+ html = re.sub(r'<title>.*?</title>', f'<title>{component["name"]} · Selected · Bevel</title>', html)
29
+ html = html.replace(f'data-seat="{source}"', f'data-seat="selected" data-selected-from="{source}"')
30
+ html = re.sub(r'href="\.\./([^"/]+\.css)"', lambda m: f'href="../../{source}/{m[1]}"', html)
31
+ html = html.replace('</head>', '<link rel="stylesheet" href="../corrections.css"></head>')
32
+ html = re.sub(r'(<footer class="r-static-note">).*?(</footer>)', rf'\1Selected static UI · {source.title()} design · Preview controls show authored states.\2', html)
33
+ if key == 'form-error-summary':
34
+ html, count = re.subn(r'(<strong>Two things need your attention\.</strong>)(<ul>.*?</ul>)', r'<div class="s-error-copy">\1\2</div>', html)
35
+ assert count == 1
36
+ if key == 'toast-stack':
37
+ def retry(match):
38
+ button = match[0]
39
+ if '>Try again<' in button:
40
+ return button.replace('f-toast-action', 'f-toast-action s-retry')
41
+ return button
42
+ html = re.sub(r'<button\b[^>]*>.*?</button>', retry, html, flags=re.S)
43
+ assert html.count('s-retry') == 2
44
+ if key == 'split-button':
45
+ soup = BeautifulSoup(html, 'html.parser')
46
+ for state in soup.select('[data-ref-state]'):
47
+ if state['data-ref-state'] in ['line', 'line-open']:
48
+ state.decompose()
49
+ for i, state in enumerate(soup.select('[data-ref-state]')):
50
+ if i:
51
+ state['hidden'] = ''
52
+ elif state.has_attr('hidden'):
53
+ del state['hidden']
54
+ for group in state.select('.p-split-button'):
55
+ group['data-divider'] = 'inset'
56
+ for label in soup.select('.r-split-label'):
57
+ label.string = 'Selected divider: slight inset bevel'
58
+ html = str(soup)
59
+ for attr in ['viewBox', 'preserveAspectRatio', 'gradientUnits', 'markerWidth', 'markerHeight']:
60
+ html = html.replace(attr.lower() + '=', attr + '=')
61
+ component['states'] = ['inset', 'inset-open', 'disabled']
62
+ (OUT / 'components' / f'{key}.html').write_text(html)
63
+ section = 'contexts' if key.startswith('context-') else 'components'
64
+ coverage[section].append({'id': key, 'source': source, 'states': component['states'], 'file': f'components/{key}.html', 'behavior': 'static', 'feedback': comment})
65
+
66
+ (OUT / 'manifest.json').write_text(json.dumps({'components': components, 'contexts': contexts}, indent=2) + '\n')
67
+ (OUT / 'coverage.json').write_text(json.dumps(coverage, indent=2) + '\n')
68
+ links = ''.join(f'<li><a href="components/{c["id"]}.html">{c["name"]}</a></li>' for c in components + contexts)
69
+ (OUT / 'index.html').write_text(f'''<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Selected Bevel components</title><link rel="stylesheet" href="../baseline/bevel-fonts.css"><link rel="stylesheet" href="../baseline/bevel.css"><style>body{{padding:32px;max-width:800px;margin:auto;font-family:var(--bevel-font-sans)}}h1{{font:38px var(--bevel-font-serif)}}ul{{columns:2;line-height:2}}a{{color:var(--bevel-brass)}}@media(max-width:520px){{ul{{columns:1}}}}</style></head><body><h1>Selected Bevel components</h1><p>29 Fable designs and 4 Parent designs, with your requested corrections. These are static visual references.</p><p>All 33 visual choices are settled.</p><ul>{links}</ul></body></html>''')
70
+ print(f'Built {len(components)} selected components and {len(contexts)} contexts.')
@@ -0,0 +1,3 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Activity feed · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-astra.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="activity-feed" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="astra"><section data-ref-state="recent" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>The work, as it happens.</h1><p>Small changes add up to something good.</p></header><div class="eyebrow f-day">TODAY / SEPTEMBER 07</div><div class="timeline"><article class="event f-event" data-verb="pencil"><span class="f-avatar" data-who="MC">MC</span><div class="f-event-body"><div class="f-event-head"><p><strong>Mira Chen</strong> updated <strong>A place for good work</strong></p><time>10:42</time></div><p class="f-event-detail">Clarified the introduction and added the field guide.</p></div></article><article class="event f-event" data-verb="user"><span class="f-avatar" data-who="AR">AR</span><div class="f-event-body"><div class="f-event-head"><p><strong>Alex Rivera</strong> joined <strong>Field notes</strong></p><time>10:18</time></div><p class="f-event-detail">Invited by Jules Park.</p></div></article><article class="event f-event" data-verb="image"><span class="f-avatar" data-who="SP">SP</span><div class="f-event-body"><div class="f-event-head"><p><strong>Sam Patel</strong> added <strong>workspace.jpg</strong></p><time>09:56</time></div><p class="f-event-detail">Project cover · 184 KB</p></div></article></div><button class="bevel-button bevel-button--small f-show-more" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="m6 9 6 6 6-6"></path></svg><span class="bevel-button__label">Show yesterday</span></button></div></section><section data-ref-state="expanded" hidden="" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>The work, as it happens.</h1><p>Small changes add up to something good.</p></header><div class="eyebrow f-day">TODAY / SEPTEMBER 07</div><div class="timeline"><article class="event f-event" data-verb="pencil"><span class="f-avatar" data-who="MC">MC</span><div class="f-event-body"><div class="f-event-head"><p><strong>Mira Chen</strong> updated <strong>A place for good work</strong></p><time>10:42</time></div><p class="f-event-detail">Clarified the introduction and added the field guide.</p></div></article><article class="event f-event" data-verb="user"><span class="f-avatar" data-who="AR">AR</span><div class="f-event-body"><div class="f-event-head"><p><strong>Alex Rivera</strong> joined <strong>Field notes</strong></p><time>10:18</time></div><p class="f-event-detail">Invited by Jules Park.</p></div></article><article class="event f-event" data-verb="image"><span class="f-avatar" data-who="SP">SP</span><div class="f-event-body"><div class="f-event-head"><p><strong>Sam Patel</strong> added <strong>workspace.jpg</strong></p><time>09:56</time></div><p class="f-event-detail">Project cover · 184 KB</p></div></article></div><div class="eyebrow f-day">YESTERDAY / SEPTEMBER 06</div><div class="timeline"><article class="event f-event" data-verb="plus"><span class="f-avatar" data-who="JP">JP</span><div class="f-event-body"><div class="f-event-head"><p><strong>Jules Park</strong> created <strong>Field notes</strong></p><time>16:32</time></div></div></article></div></div></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,3 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>App toolbar · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-astra.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="app-toolbar" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="astra"><section data-ref-state="default" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>The tools, close at hand.</h1><p>Field notes / Documents</p></header><div class="toolbar f-toolbar" data-part="toolbar"><button aria-label="New note" class="f-icon-button f-toolbar-new" title="New note" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M12 5v14M5 12h14"></path></svg></button><span class="f-toolbar-sep"></span><div aria-label="Layout" class="bevel-seg f-toolbar-seg" role="group"><button aria-label="List view" aria-pressed="true" class="f-icon-button" title="List view" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M8 6h13M8 12h13M8 18h13M3 6h1M3 12h1M3 18h1"></path></svg></button><button aria-label="Grid view" aria-pressed="false" class="f-icon-button" title="Grid view" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M3 3h7v7H3ZM14 3h7v7h-7ZM3 14h7v7H3ZM14 14h7v7h-7Z"></path></svg></button></div><span class="f-toolbar-sep"></span><button aria-label="Filter notes" class="f-icon-button f-toolbar-filter" title="Filter notes" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M3 5h18l-7 8v6l-4 2v-8Z"></path></svg></button><span class="spacer"></span><label class="f-toolbar-search"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M20 20l-4.5-4.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0"></path></svg><input aria-label="Search notes" class="bevel-input bevel-input--small" placeholder="Search notes" type="search"/><kbd>/</kbd></label><button aria-expanded="false" aria-label="More actions" class="f-icon-button f-toolbar-more" title="More actions" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M5 12h1m5 0h1m5 0h1"></path></svg></button></div><div class="rule row between"><strong>All documents</strong><span class="mono muted" style="font-size:11px">12 NOTES</span></div><div class="listrow"><span class="f-file-icon"><svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="18"><path d="M5 3h9l5 5v13H5ZM14 3v6h5"></path></svg></span><div><strong>A place for good work</strong><br/><small>Mira Chen · Edited today</small></div></div><div class="listrow"><span class="f-file-icon"><svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="18"><path d="M5 3h9l5 5v13H5ZM14 3v6h5"></path></svg></span><div><strong>The field guide</strong><br/><small>Sam Patel · Edited yesterday</small></div></div></div></section><section data-ref-state="overflow" hidden="" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>The tools, close at hand.</h1><p>Field notes / Documents</p></header><div class="toolbar f-toolbar" data-part="toolbar"><button aria-label="New note" class="f-icon-button f-toolbar-new" title="New note" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M12 5v14M5 12h14"></path></svg></button><span class="f-toolbar-sep"></span><div aria-label="Layout" class="bevel-seg f-toolbar-seg" role="group"><button aria-label="List view" aria-pressed="true" class="f-icon-button" title="List view" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M8 6h13M8 12h13M8 18h13M3 6h1M3 12h1M3 18h1"></path></svg></button><button aria-label="Grid view" aria-pressed="false" class="f-icon-button" title="Grid view" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M3 3h7v7H3ZM14 3h7v7h-7ZM3 14h7v7H3ZM14 14h7v7h-7Z"></path></svg></button></div><span class="f-toolbar-sep"></span><button aria-label="Filter notes" class="f-icon-button f-toolbar-filter" title="Filter notes" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M3 5h18l-7 8v6l-4 2v-8Z"></path></svg></button><span class="spacer"></span><label class="f-toolbar-search"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M20 20l-4.5-4.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0"></path></svg><input aria-label="Search notes" class="bevel-input bevel-input--small" placeholder="Search notes" type="search"/><kbd>/</kbd></label><button aria-expanded="true" aria-label="More actions" class="f-icon-button f-toolbar-more" title="More actions" type="button"><svg aria-hidden="true" fill="none" height="17" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="17"><path d="M5 12h1m5 0h1m5 0h1"></path></svg></button></div><div class="f-overflow-anchor"><div class="menu f-overflow-menu"><button data-action="Sort by last edited selected locally"><span><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M4 6h16M7 12h10M10 18h4"></path></svg></span>Sort by last edited</button><button data-action="Show archived selected locally"><span><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M3 3h18v5H3ZM5 8v13h14V8M9 12h6"></path></svg></span>Show archived</button><button data-action="Export selection selected locally"><span><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M12 3v12m-4-8 4-4 4 4M5 14v6h14v-6"></path></svg></span>Export selection</button></div></div></div></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,4 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Avatar group · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-parent.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="avatar-group" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="parent"><section data-ref-state="group" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">People / 26</div><h1>A human detail</h1><p>Recognizable at a glance, useful at a small size.</p></div></header><div class="p-panel"><div class="p-between"><div><h2>Working together</h2><p class="p-small p-muted">7 people in Northstar Studio</p></div><span class="p-badge">Shared</span></div><div class="p-avatar-stack f-avatar-stack" data-part="avatar-stack"><img alt="Northstar Studio workspace" class="p-avatar-photo" src="../../fixtures/workspace.jpg"/><span aria-label="Mira Chen" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="MC">MC</span><i aria-label="Online" class="p-presence"></i></span><span aria-label="Alex Rivera" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="AR">AR</span></span><span aria-label="Sam Patel" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="SP">SP</span></span><span aria-label="Three more members" class="f-avatar f-avatar-more">+3</span></div><div class="p-avatar-list f-avatar-list"><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="MC">MC</span><div><strong class="p-small">Mira Chen</strong><p class="p-small p-muted"><i class="f-presence-dot"></i>Online now · Designer</p></div></div><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="AR">AR</span><div><strong class="p-small">Alex Rivera</strong><p class="p-small p-muted">Developer</p></div></div><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="SP">SP</span><div><strong class="p-small">Sam Patel</strong><p class="p-small p-muted">Editor</p></div></div><div class="p-row f-avatar-list-more"><span class="f-avatar f-avatar-more">+3</span><div><strong class="p-small">Jules Park, Priya Nair and Tomas Berg</strong><p class="p-small p-muted">Owner, Researcher, Producer</p></div></div></div></div></main></section>
4
+ <section data-ref-state="fallback" hidden="" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">People / 26</div><h1>A human detail</h1><p>Recognizable at a glance, useful at a small size.</p></div></header><div class="p-panel"><div class="p-between"><div><h2>Working together</h2><p class="p-small p-muted">7 people in Northstar Studio</p></div><span class="p-badge">Shared</span></div><div class="p-avatar-stack f-avatar-stack" data-part="avatar-stack"><span aria-hidden="true" class="f-avatar" data-who="NS">NS</span><span aria-label="Mira Chen" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="MC">MC</span><i aria-label="Online" class="p-presence"></i></span><span aria-label="Alex Rivera" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="AR">AR</span></span><span aria-label="Sam Patel" class="p-avatar-wrap"><span aria-hidden="true" class="f-avatar" data-who="SP">SP</span></span><span aria-label="Three more members" class="f-avatar f-avatar-more">+3</span></div><div class="p-avatar-list f-avatar-list"><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="MC">MC</span><div><strong class="p-small">Mira Chen</strong><p class="p-small p-muted"><i class="f-presence-dot"></i>Online now · Designer</p></div></div><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="AR">AR</span><div><strong class="p-small">Alex Rivera</strong><p class="p-small p-muted">Developer</p></div></div><div class="p-row"><span aria-hidden="true" class="f-avatar" data-who="SP">SP</span><div><strong class="p-small">Sam Patel</strong><p class="p-small p-muted">Editor</p></div></div><div class="p-row f-avatar-list-more"><span class="f-avatar f-avatar-more">+3</span><div><strong class="p-small">Jules Park, Priya Nair and Tomas Berg</strong><p class="p-small p-muted">Owner, Researcher, Producer</p></div></div></div></div></main></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,3 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Breadcrumbs · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-astra.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="breadcrumbs" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="astra"><section data-ref-state="short" inert=""><div class="specimen"><nav aria-label="Breadcrumb" class="breadcrumb f-breadcrumb"><a href="#level-0">Northstar Studio</a><span aria-hidden="true"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><a href="#level-1">Field notes</a><span aria-hidden="true"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><strong aria-current="page">A place for good work</strong></nav><div style="padding-top:34px"><div class="eyebrow">FIELD NOTE / 001</div><h1>A place for<br/>good work.</h1><p class="muted" style="max-width:420px;margin-top:20px">Keep the useful things close. Field notes brings the documents, decisions and small details of a project into one place.</p></div><div class="rule row"><span class="f-avatar" data-who="MC">MC</span><small>Mira Chen · Updated at 10:42</small></div><div hidden=""><span id="level-0">Northstar Studio</span><span id="level-1">Field notes</span></div></div></section><section data-ref-state="long" hidden="" inert=""><div class="specimen"><nav aria-label="Breadcrumb" class="breadcrumb f-breadcrumb"><a href="#level-0">Northstar Studio</a><span aria-hidden="true"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><button aria-label="Show full path" class="f-crumb-more" type="button">…</button><span aria-hidden="true" class="f-crumb-more-sep"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><a class="f-crumb-mid" href="#level-1">Projects</a><span aria-hidden="true" class="f-crumb-mid"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><a class="f-crumb-mid" href="#level-2">Field notes</a><span aria-hidden="true" class="f-crumb-mid"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><a class="f-crumb-mid" href="#level-3">Documents</a><span aria-hidden="true" class="f-crumb-mid"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><a href="#level-4">The field guide</a><span aria-hidden="true"><svg aria-hidden="true" fill="none" height="12" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="12"><path d="m9 5 7 7-7 7"></path></svg></span><strong aria-current="page">A place for good work</strong></nav><div style="padding-top:34px"><div class="eyebrow">FIELD NOTE / 001</div><h1>A place for<br/>good work.</h1><p class="muted" style="max-width:420px;margin-top:20px">Keep the useful things close. Field notes brings the documents, decisions and small details of a project into one place.</p></div><div class="rule row"><span class="f-avatar" data-who="MC">MC</span><small>Mira Chen · Updated at 10:42</small></div><div hidden=""><span id="level-0">Northstar Studio</span><span id="level-1">Projects</span><span id="level-2">Field notes</span><span id="level-3">Documents</span><span id="level-4">The field guide</span></div></div></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Code block · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-astra.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="code-block" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="astra"><section data-ref-state="default" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>Small code. Clear intent.</h1><p>A readable home for the details.</p></header><div class="code-shell f-code"><div class="code-head"><span class="f-code-name"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M5 3h9l5 5v13H5ZM14 3v6h5"></path></svg>field-note.html</span><span class="badge">HTML</span><span class="f-code-meta">4 lines</span><span class="spacer"></span><button aria-pressed="false" class="bevel-button bevel-button--small" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M3 5h18M3 10h14a4 4 0 0 1 0 8h-4m3-3-3 3 3 3M3 16h5"></path></svg><span class="bevel-button__label">Wrap</span></button><button class="bevel-button bevel-button--small" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M8 8h12v13H8ZM4 17H2V2h12v2"></path></svg><span class="bevel-button__label">Copy</span></button></div><ol class="code-lines f-code-lines" data-part="code"><li><code><span class="tk-tag">&lt;article</span> <span class="tk-attr">class</span>=<span class="tk-str">"field-note"</span><span class="tk-tag">&gt;</span></code></li><li><code> <span class="tk-tag">&lt;h1&gt;</span>A place for good work<span class="tk-tag">&lt;/h1&gt;</span></code></li><li><code> <span class="tk-tag">&lt;p</span> <span class="tk-attr">data-description</span>=<span class="tk-str">"Documents, decisions and the small details that make a project feel like home"</span><span class="tk-tag">&gt;</span>Keep the useful things close.<span class="tk-tag">&lt;/p&gt;</span></code></li><li><code><span class="tk-tag">&lt;/article&gt;</span></code></li></ol><pre data-copy-source="" hidden="">&lt;article class="field-note"&gt;
4
+ &lt;h1&gt;A place for good work&lt;/h1&gt;
5
+ &lt;p data-description="Documents, decisions and the small details that make a project feel like home"&gt;Keep the useful things close.&lt;/p&gt;
6
+ &lt;/article&gt;</pre></div><p class="note">Copy takes the whole file. Wrap keeps long attribute lines in view.</p></div></section><section data-ref-state="wrapped" hidden="" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>Small code. Clear intent.</h1><p>A readable home for the details.</p></header><div class="code-shell f-code"><div class="code-head"><span class="f-code-name"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M5 3h9l5 5v13H5ZM14 3v6h5"></path></svg>field-note.html</span><span class="badge">HTML</span><span class="f-code-meta">4 lines</span><span class="spacer"></span><button aria-pressed="true" class="bevel-button bevel-button--small" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M3 5h18M3 10h14a4 4 0 0 1 0 8h-4m3-3-3 3 3 3M3 16h5"></path></svg><span class="bevel-button__label">Wrap</span></button><button class="bevel-button bevel-button--small" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="M8 8h12v13H8ZM4 17H2V2h12v2"></path></svg><span class="bevel-button__label">Copy</span></button></div><ol class="code-lines f-code-lines wrap-code" data-part="code"><li><code><span class="tk-tag">&lt;article</span> <span class="tk-attr">class</span>=<span class="tk-str">"field-note"</span><span class="tk-tag">&gt;</span></code></li><li><code> <span class="tk-tag">&lt;h1&gt;</span>A place for good work<span class="tk-tag">&lt;/h1&gt;</span></code></li><li><code> <span class="tk-tag">&lt;p</span> <span class="tk-attr">data-description</span>=<span class="tk-str">"Documents, decisions and the small details that make a project feel like home"</span><span class="tk-tag">&gt;</span>Keep the useful things close.<span class="tk-tag">&lt;/p&gt;</span></code></li><li><code><span class="tk-tag">&lt;/article&gt;</span></code></li></ol><pre data-copy-source="" hidden="">&lt;article class="field-note"&gt;
7
+ &lt;h1&gt;A place for good work&lt;/h1&gt;
8
+ &lt;p data-description="Documents, decisions and the small details that make a project feel like home"&gt;Keep the useful things close.&lt;/p&gt;
9
+ &lt;/article&gt;</pre></div><p class="note">Copy takes the whole file. Wrap keeps long attribute lines in view.</p></div></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,3 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Column manager · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-astra.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="column-manager" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="astra"><section data-ref-state="default" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>Make the table yours.</h1><p>Visibility and order, without losing your place.</p></header><div class="panel f-column-panel"><div class="pad f-column-head"><h2>Your view of the records.</h2><p class="note">Choose visible columns. Use arrows to reorder.</p></div><div data-part="column-list"><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" disabled="" type="checkbox" value="Invoice"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Invoice</span></label><span class="badge">Pinned</span><button aria-label="Move Invoice up" class="f-icon-button f-order-btn" data-move-column="up" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Invoice down" class="f-icon-button f-order-btn" data-move-column="down" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Client"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Client</span></label><span class="f-order-n">2</span><button aria-label="Move Client up" class="f-icon-button f-order-btn" data-move-column="up" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Client down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Amount"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Amount</span></label><span class="f-order-n">3</span><button aria-label="Move Amount up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Amount down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Status"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Status</span></label><span class="f-order-n">4</span><button aria-label="Move Status up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Status down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input class="bevel-sr-only" data-column-check="" type="checkbox" value="Owner"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Owner</span></label><span class="f-order-n">5</span><button aria-label="Move Owner up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Owner down" class="f-icon-button f-order-btn" data-move-column="down" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div></div><div class="pad f-column-foot"><svg aria-hidden="true" fill="none" height="13" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="13"><path d="M6 11h12v10H6ZM8 11V7a4 4 0 0 1 8 0v4"></path></svg><small>Invoice stays pinned as the record identifier.</small><span class="spacer"></span><small class="f-order-summary">4 of 5 shown</small></div></div></div></section><section data-ref-state="reordered" hidden="" inert=""><div class="specimen"><header data-part="heading"><div class="eyebrow">NORTHSTAR STUDIO / FIELD NOTES</div><h1>Make the table yours.</h1><p>Visibility and order, without losing your place.</p></header><div class="panel f-column-panel"><div class="pad f-column-head"><h2>Your view of the records.</h2><p class="note">Choose visible columns. Use arrows to reorder.</p></div><div data-part="column-list"><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" disabled="" type="checkbox" value="Invoice"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Invoice</span></label><span class="badge">Pinned</span><button aria-label="Move Invoice up" class="f-icon-button f-order-btn" data-move-column="up" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Invoice down" class="f-icon-button f-order-btn" data-move-column="down" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item is-moved"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Status"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Status</span></label><span class="f-order-n is-moved">2<i>moved</i></span><button aria-label="Move Status up" class="f-icon-button f-order-btn" data-move-column="up" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Status down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Client"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Client</span></label><span class="f-order-n">3</span><button aria-label="Move Client up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Client down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input checked="" class="bevel-sr-only" data-column-check="" type="checkbox" value="Amount"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Amount</span></label><span class="f-order-n">4</span><button aria-label="Move Amount up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Amount down" class="f-icon-button f-order-btn" data-move-column="down" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div><div class="column-item f-column-item"><span aria-hidden="true" class="f-grip"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="M8 4h1m6 0h1M8 9h1m6 0h1M8 14h1m6 0h1M8 19h1m6 0h1"></path></svg></span><label class="bevel-checkbox bevel-checkbox--small"><input class="bevel-sr-only" data-column-check="" type="checkbox" value="Owner"/><span aria-hidden="true" class="bevel-checkbox__box"></span><span class="bevel-checkbox__label">Owner</span></label><span class="f-order-n">5</span><button aria-label="Move Owner up" class="f-icon-button f-order-btn" data-move-column="up" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 15 7-7 7 7"></path></svg></button><button aria-label="Move Owner down" class="f-icon-button f-order-btn" data-move-column="down" disabled="" type="button"><svg aria-hidden="true" fill="none" height="14" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="14"><path d="m5 9 7 7 7-7"></path></svg></button></div></div><div class="pad f-column-foot"><svg aria-hidden="true" fill="none" height="13" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="13"><path d="M6 11h12v10H6ZM8 11V7a4 4 0 0 1 8 0v4"></path></svg><small>Invoice stays pinned as the record identifier.</small><span class="spacer"></span><small class="f-order-summary">4 of 5 shown</small></div></div></div></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>
@@ -0,0 +1,6 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html class="light" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Combobox · Selected · Bevel</title><link href="../../baseline/bevel-fonts.css" rel="stylesheet"/><link href="../../baseline/bevel.css" rel="stylesheet"/><link href="../../fable/base-parent.css" rel="stylesheet"/><link href="../../fable/fable.css" rel="stylesheet"/><link href="../../fable/parent-repairs.css" rel="stylesheet"/><link rel="stylesheet" href="../corrections.css"></head><body data-component="combobox" data-reference-phase="static" data-seat="selected" data-selected-from="fable" data-selected-source="parent"><section data-ref-state="open" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">Choose / 05</div><h1>The right person</h1><p>Find a teammate by name.</p></div></header><div class="p-picker" data-picker=""><label class="p-field" style="margin-bottom:8px"><span>Project owner</span></label><div class="p-search f-search is-open"><svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="18"><path d="M16 16l5 5M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0"></path></svg><input aria-controls="people-open" aria-expanded="true" aria-label="Search members" autocomplete="off" data-member-search="" placeholder="Search people…" role="combobox" value=""/><button aria-expanded="true" aria-label="Open choices" class="f-icon-button f-combo-toggle" title="Open choices" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="m6 9 6 6 6-6"></path></svg></button></div><div aria-label="Project members" class="p-options" id="people-open" role="listbox"><button aria-selected="true" class="p-option" data-initials="MC" data-person="Mira Chen" role="option"><span aria-hidden="true" class="f-avatar small" data-who="MC">MC</span><span class="p-person"><strong>Mira Chen</strong><small>Designer</small></span><svg aria-hidden="true" fill="none" height="16" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="16"><path d="m5 12 4 4L19 6"></path></svg></button><button aria-selected="false" class="p-option" data-initials="AR" data-person="Alex Rivera" role="option"><span aria-hidden="true" class="f-avatar small" data-who="AR">AR</span><span class="p-person"><strong>Alex Rivera</strong><small>Developer</small></span></button><button aria-selected="false" class="p-option" data-initials="SP" data-person="Sam Patel" role="option"><span aria-hidden="true" class="f-avatar small" data-who="SP">SP</span><span class="p-person"><strong>Sam Patel</strong><small>Editor</small></span></button><button aria-selected="false" class="p-option" data-initials="JP" data-person="Jules Park" role="option"><span aria-hidden="true" class="f-avatar small" data-who="JP">JP</span><span class="p-person"><strong>Jules Park</strong><small>Owner</small></span></button><div class="p-empty f-empty" data-picker-empty="" hidden=""><svg aria-hidden="true" fill="none" height="22" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="22"><path d="M20 20l-4.5-4.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0"></path></svg><h3>No one by that name.</h3><p class="p-small">No member matches “Taylor”. Check the spelling or invite them.</p></div></div><div class="p-picker-foot">4 members in Northstar Studio · ↑↓ to move, ↵ to choose</div></div></main></section>
4
+ <section data-ref-state="closed" hidden="" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">Choose / 05</div><h1>The right person</h1><p>Find a teammate by name.</p></div></header><div class="p-picker" data-picker=""><label class="p-field" style="margin-bottom:8px"><span>Project owner</span></label><div class="p-search f-search"><span aria-label="Mira Chen" class="f-avatar small" data-who="MC" title="Mira Chen">MC</span><input aria-controls="people-closed" aria-expanded="false" aria-label="Search members" autocomplete="off" data-member-search="" placeholder="Search people…" role="combobox" value="Mira Chen"/><button aria-expanded="false" aria-label="Open choices" class="f-icon-button f-combo-toggle" title="Open choices" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="m6 9 6 6 6-6"></path></svg></button></div></div></main></section>
5
+ <section data-ref-state="filtered" hidden="" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">Choose / 05</div><h1>The right person</h1><p>Find a teammate by name.</p></div></header><div class="p-picker" data-picker=""><label class="p-field" style="margin-bottom:8px"><span>Project owner</span></label><div class="p-search f-search is-open"><svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="18"><path d="M16 16l5 5M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0"></path></svg><input aria-controls="people-filtered" aria-expanded="true" aria-label="Search members" autocomplete="off" data-member-search="" placeholder="Search people…" role="combobox" value="mi"/><button aria-expanded="true" aria-label="Open choices" class="f-icon-button f-combo-toggle" title="Open choices" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="m6 9 6 6 6-6"></path></svg></button></div><div aria-label="Project members" class="p-options" id="people-filtered" role="listbox"><button aria-selected="true" class="p-option" data-initials="MC" data-person="Mira Chen" role="option"><span aria-hidden="true" class="f-avatar small" data-who="MC">MC</span><span class="p-person"><strong><mark>Mi</mark>ra Chen</strong><small>Designer</small></span><svg aria-hidden="true" fill="none" height="16" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="16"><path d="m5 12 4 4L19 6"></path></svg></button><button aria-selected="false" class="p-option" data-initials="AR" data-person="Alex Rivera" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="AR">AR</span><span class="p-person"><strong>Alex Rivera</strong><small>Developer</small></span></button><button aria-selected="false" class="p-option" data-initials="SP" data-person="Sam Patel" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="SP">SP</span><span class="p-person"><strong>Sam Patel</strong><small>Editor</small></span></button><button aria-selected="false" class="p-option" data-initials="JP" data-person="Jules Park" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="JP">JP</span><span class="p-person"><strong>Jules Park</strong><small>Owner</small></span></button><div class="p-empty f-empty" data-picker-empty="" hidden=""><svg aria-hidden="true" fill="none" height="22" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="22"><path d="M20 20l-4.5-4.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0"></path></svg><h3>No one by that name.</h3><p class="p-small">No member matches “Taylor”. Check the spelling or invite them.</p></div></div><div class="p-picker-foot">4 members in Northstar Studio · ↑↓ to move, ↵ to choose</div></div></main></section>
6
+ <section data-ref-state="empty" hidden="" inert=""><main class="reference-stage"><header class="p-header" data-part="heading"><div><div class="p-eyebrow">Choose / 05</div><h1>The right person</h1><p>Find a teammate by name.</p></div></header><div class="p-picker" data-picker=""><label class="p-field" style="margin-bottom:8px"><span>Project owner</span></label><div class="p-search f-search is-open"><svg aria-hidden="true" fill="none" height="18" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="18"><path d="M16 16l5 5M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0"></path></svg><input aria-controls="people-empty" aria-expanded="true" aria-label="Search members" autocomplete="off" data-member-search="" placeholder="Search people…" role="combobox" value="Taylor"/><button aria-expanded="true" aria-label="Open choices" class="f-icon-button f-combo-toggle" title="Open choices" type="button"><svg aria-hidden="true" fill="none" height="15" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="15"><path d="m6 9 6 6 6-6"></path></svg></button></div><div aria-label="Project members" class="p-options" id="people-empty" role="listbox"><button aria-selected="true" class="p-option" data-initials="MC" data-person="Mira Chen" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="MC">MC</span><span class="p-person"><strong>Mira Chen</strong><small>Designer</small></span><svg aria-hidden="true" fill="none" height="16" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="16"><path d="m5 12 4 4L19 6"></path></svg></button><button aria-selected="false" class="p-option" data-initials="AR" data-person="Alex Rivera" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="AR">AR</span><span class="p-person"><strong>Alex Rivera</strong><small>Developer</small></span></button><button aria-selected="false" class="p-option" data-initials="SP" data-person="Sam Patel" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="SP">SP</span><span class="p-person"><strong>Sam Patel</strong><small>Editor</small></span></button><button aria-selected="false" class="p-option" data-initials="JP" data-person="Jules Park" hidden="" role="option"><span aria-hidden="true" class="f-avatar small" data-who="JP">JP</span><span class="p-person"><strong>Jules Park</strong><small>Owner</small></span></button><div class="p-empty f-empty" data-picker-empty=""><svg aria-hidden="true" fill="none" height="22" stroke="currentColor" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1.6" viewBox="0 0 24 24" width="22"><path d="M20 20l-4.5-4.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0"></path></svg><h3>No one by that name.</h3><p class="p-small">No member matches “Taylor”. Check the spelling or invite them.</p></div></div><div class="p-picker-foot">4 members in Northstar Studio · ↑↓ to move, ↵ to choose</div></div></main></section><footer class="r-static-note">Selected static UI · Fable design · Preview controls show authored states.</footer><script src="../../fixtures/static-host.js"></script></body></html>