neba 1.13.0 → 1.16.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 (341) hide show
  1. package/README.md +22 -30
  2. package/dist/a2ui/catalog.json +1466 -0
  3. package/dist/a2ui/components.d.ts +21 -0
  4. package/dist/a2ui/components.js +1 -0
  5. package/dist/a2ui/index.d.ts +62 -0
  6. package/dist/a2ui/index.js +1 -0
  7. package/dist/a2ui/schema.d.ts +47 -0
  8. package/dist/a2ui/schema.js +1 -0
  9. package/dist/components/accordion/Accordion.d.ts +5 -1
  10. package/dist/components/accordion/Accordion.js +1 -1
  11. package/dist/components/agent-steps/AgentSteps.d.ts +80 -0
  12. package/dist/components/agent-steps/AgentSteps.js +1 -0
  13. package/dist/components/agent-steps/index.d.ts +2 -0
  14. package/dist/components/agent-steps/index.js +1 -0
  15. package/dist/components/alert/Alert.js +1 -1
  16. package/dist/components/anchor/Anchor.d.ts +3 -2
  17. package/dist/components/anchor/Anchor.js +1 -1
  18. package/dist/components/animate-appear/AnimateAppear.js +1 -1
  19. package/dist/components/animate-blink/AnimateBlink.d.ts +3 -0
  20. package/dist/components/animate-blink/AnimateBlink.js +1 -1
  21. package/dist/components/animate-counter/AnimateCounter.d.ts +3 -1
  22. package/dist/components/animate-counter/AnimateCounter.js +1 -1
  23. package/dist/components/animate-fade/AnimateFade.js +1 -1
  24. package/dist/components/animate-float/AnimateFloat.js +1 -1
  25. package/dist/components/animate-grow/AnimateGrow.js +1 -1
  26. package/dist/components/animate-headline/AnimateHeadline.d.ts +9 -2
  27. package/dist/components/animate-headline/AnimateHeadline.js +1 -1
  28. package/dist/components/animate-lighting/AnimateLighting.d.ts +1 -1
  29. package/dist/components/animate-lighting/AnimateLighting.js +1 -1
  30. package/dist/components/animate-marquee/AnimateMarquee.d.ts +15 -6
  31. package/dist/components/animate-marquee/AnimateMarquee.js +1 -1
  32. package/dist/components/animate-reveal/AnimateReveal.js +1 -1
  33. package/dist/components/animate-rotate/AnimateRotate.js +1 -1
  34. package/dist/components/animate-scramble/AnimateScramble.d.ts +5 -3
  35. package/dist/components/animate-scramble/AnimateScramble.js +1 -1
  36. package/dist/components/animate-shake/AnimateShake.js +1 -1
  37. package/dist/components/animate-slide/AnimateSlide.js +1 -1
  38. package/dist/components/animate-split/AnimateSplit.d.ts +3 -1
  39. package/dist/components/animate-split/AnimateSplit.js +1 -1
  40. package/dist/components/animate-typing/AnimateTyping.d.ts +12 -4
  41. package/dist/components/animate-typing/AnimateTyping.js +1 -1
  42. package/dist/components/animate-zoom/AnimateZoom.js +1 -1
  43. package/dist/components/app-logo/AppLogo.js +1 -1
  44. package/dist/components/approval/Approval.d.ts +115 -0
  45. package/dist/components/approval/Approval.js +1 -0
  46. package/dist/components/approval/index.d.ts +2 -0
  47. package/dist/components/approval/index.js +1 -0
  48. package/dist/components/area-chart/AreaChart.d.ts +16 -5
  49. package/dist/components/area-chart/AreaChart.js +1 -1
  50. package/dist/components/aspect-ratio/AspectRatio.d.ts +6 -4
  51. package/dist/components/aspect-ratio/AspectRatio.js +1 -1
  52. package/dist/components/avatar/Avatar.js +1 -1
  53. package/dist/components/badge/Badge.js +1 -1
  54. package/dist/components/bar-chart/BarChart.d.ts +1 -1
  55. package/dist/components/bar-chart/BarChart.js +1 -1
  56. package/dist/components/blockquote/Blockquote.js +1 -1
  57. package/dist/components/bottom-navigation/BottomNavigation.d.ts +2 -1
  58. package/dist/components/bottom-navigation/BottomNavigation.js +1 -1
  59. package/dist/components/box/Box.d.ts +5 -0
  60. package/dist/components/box/Box.js +1 -1
  61. package/dist/components/breadcrumb/Breadcrumb.d.ts +10 -0
  62. package/dist/components/breadcrumb/Breadcrumb.js +1 -1
  63. package/dist/components/button/Button.d.ts +11 -0
  64. package/dist/components/button/Button.js +1 -1
  65. package/dist/components/button-group/ButtonGroup.js +1 -1
  66. package/dist/components/calendar/Calendar.js +1 -1
  67. package/dist/components/card/Card.js +1 -1
  68. package/dist/components/carousel/Carousel.d.ts +4 -0
  69. package/dist/components/carousel/Carousel.js +1 -1
  70. package/dist/components/chat-bubble/ChatBubble.js +1 -1
  71. package/dist/components/checkbox/Checkbox.js +1 -1
  72. package/dist/components/chip/Chip.d.ts +3 -1
  73. package/dist/components/chip/Chip.js +1 -1
  74. package/dist/components/code-block/CodeBlock.d.ts +6 -3
  75. package/dist/components/code-block/CodeBlock.js +1 -1
  76. package/dist/components/collapsible/Collapsible.d.ts +11 -1
  77. package/dist/components/collapsible/Collapsible.js +1 -1
  78. package/dist/components/color-picker/ColorPicker.js +1 -1
  79. package/dist/components/combobox/Combobox.d.ts +11 -1
  80. package/dist/components/combobox/Combobox.js +1 -1
  81. package/dist/components/command-palette/CommandPalette.js +1 -1
  82. package/dist/components/confirm/Confirm.js +1 -1
  83. package/dist/components/container/Container.js +1 -1
  84. package/dist/components/context-window/ContextWindow.d.ts +103 -0
  85. package/dist/components/context-window/ContextWindow.js +1 -0
  86. package/dist/components/context-window/index.d.ts +2 -0
  87. package/dist/components/context-window/index.js +1 -0
  88. package/dist/components/data-list/DataList.js +1 -1
  89. package/dist/components/data-table/DataTable.d.ts +12 -1
  90. package/dist/components/data-table/DataTable.js +1 -1
  91. package/dist/components/date-picker/DatePicker.js +1 -1
  92. package/dist/components/date-range-picker/DateRangePicker.js +1 -1
  93. package/dist/components/date-time-picker/DateTimePicker.js +1 -1
  94. package/dist/components/dialog/Dialog.d.ts +12 -0
  95. package/dist/components/dialog/Dialog.js +1 -1
  96. package/dist/components/divider/Divider.js +1 -1
  97. package/dist/components/drawer/Drawer.d.ts +7 -0
  98. package/dist/components/drawer/Drawer.js +1 -1
  99. package/dist/components/empty/Empty.js +1 -1
  100. package/dist/components/fieldset/Fieldset.js +1 -1
  101. package/dist/components/file-picker/FilePicker.d.ts +12 -4
  102. package/dist/components/file-picker/FilePicker.js +1 -1
  103. package/dist/components/flex/Flex.d.ts +8 -2
  104. package/dist/components/flex/Flex.js +1 -1
  105. package/dist/components/floating-action-button/FloatingActionButton.d.ts +16 -1
  106. package/dist/components/floating-action-button/FloatingActionButton.js +1 -1
  107. package/dist/components/floating-bottom-navigation/FloatingBottomNavigation.js +1 -1
  108. package/dist/components/footer/Footer.d.ts +8 -0
  109. package/dist/components/footer/Footer.js +1 -1
  110. package/dist/components/form/Form.d.ts +4 -2
  111. package/dist/components/form/Form.js +1 -1
  112. package/dist/components/gallery/Gallery.d.ts +56 -3
  113. package/dist/components/gallery/Gallery.js +1 -1
  114. package/dist/components/gallery/GalleryViewer.js +1 -1
  115. package/dist/components/gauge-chart/GaugeChart.d.ts +1 -1
  116. package/dist/components/gauge-chart/GaugeChart.js +1 -1
  117. package/dist/components/grid/Grid.js +1 -1
  118. package/dist/components/grid-container/GridContainer.js +1 -1
  119. package/dist/components/header/Header.js +1 -1
  120. package/dist/components/heatmap-chart/HeatmapChart.d.ts +20 -1
  121. package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
  122. package/dist/components/highlight/Highlight.js +1 -1
  123. package/dist/components/how-to-steps/HowToSteps.d.ts +26 -1
  124. package/dist/components/how-to-steps/HowToSteps.js +1 -1
  125. package/dist/components/icon/Icon.js +1 -1
  126. package/dist/components/icon-button/IconButton.d.ts +0 -20
  127. package/dist/components/icon-button/IconButton.js +1 -1
  128. package/dist/components/image/Image.d.ts +137 -11
  129. package/dist/components/image/Image.js +1 -1
  130. package/dist/components/image/index.d.ts +1 -1
  131. package/dist/components/inline-citation/InlineCitation.d.ts +53 -0
  132. package/dist/components/inline-citation/InlineCitation.js +1 -0
  133. package/dist/components/inline-citation/index.d.ts +2 -0
  134. package/dist/components/inline-citation/index.js +1 -0
  135. package/dist/components/line-chart/LineChart.d.ts +16 -5
  136. package/dist/components/line-chart/LineChart.js +1 -1
  137. package/dist/components/list/List.js +1 -1
  138. package/dist/components/menu/Menu.d.ts +25 -11
  139. package/dist/components/menu/Menu.js +1 -1
  140. package/dist/components/menubar/Menubar.js +1 -1
  141. package/dist/components/meter/Meter.d.ts +6 -0
  142. package/dist/components/meter/Meter.js +1 -1
  143. package/dist/components/mockup/Mockup.js +1 -1
  144. package/dist/components/navigation-menu/NavigationMenu.d.ts +10 -1
  145. package/dist/components/navigation-menu/NavigationMenu.js +1 -1
  146. package/dist/components/number-field/NumberField.d.ts +20 -6
  147. package/dist/components/number-field/NumberField.js +1 -1
  148. package/dist/components/otp-field/OtpField.d.ts +7 -0
  149. package/dist/components/otp-field/OtpField.js +1 -1
  150. package/dist/components/overlay/Overlay.d.ts +1 -1
  151. package/dist/components/overlay/Overlay.js +1 -1
  152. package/dist/components/page-layout/PageLayout.d.ts +11 -0
  153. package/dist/components/page-layout/PageLayout.js +1 -1
  154. package/dist/components/pagination/Pagination.js +1 -1
  155. package/dist/components/panes/Panes.d.ts +11 -0
  156. package/dist/components/panes/Panes.js +1 -1
  157. package/dist/components/pie-chart/PieChart.d.ts +34 -3
  158. package/dist/components/pie-chart/PieChart.js +1 -1
  159. package/dist/components/pill/Pill.d.ts +8 -0
  160. package/dist/components/pill/Pill.js +1 -1
  161. package/dist/components/popconfirm/Popconfirm.d.ts +10 -3
  162. package/dist/components/popconfirm/Popconfirm.js +1 -1
  163. package/dist/components/popover/Popover.d.ts +8 -1
  164. package/dist/components/popover/Popover.js +1 -1
  165. package/dist/components/portal/Portal.js +1 -1
  166. package/dist/components/progress-box/ProgressBox.js +1 -1
  167. package/dist/components/progress-circular/ProgressCircular.js +1 -1
  168. package/dist/components/progress-linear/ProgressLinear.js +1 -1
  169. package/dist/components/prompt-input/PromptInput.d.ts +104 -0
  170. package/dist/components/prompt-input/PromptInput.js +1 -0
  171. package/dist/components/prompt-input/index.d.ts +2 -0
  172. package/dist/components/prompt-input/index.js +1 -0
  173. package/dist/components/provider/NebaProvider.d.ts +3 -3
  174. package/dist/components/provider/NebaProvider.js +1 -1
  175. package/dist/components/radio-group/RadioGroup.js +1 -1
  176. package/dist/components/rating/Rating.d.ts +4 -1
  177. package/dist/components/rating/Rating.js +1 -1
  178. package/dist/components/reasoning/Reasoning.d.ts +78 -0
  179. package/dist/components/reasoning/Reasoning.js +1 -0
  180. package/dist/components/reasoning/index.d.ts +2 -0
  181. package/dist/components/reasoning/index.js +1 -0
  182. package/dist/components/scatter-chart/ScatterChart.js +1 -1
  183. package/dist/components/scroll-area/ScrollArea.js +1 -1
  184. package/dist/components/scroll-zone/ScrollZone.d.ts +10 -0
  185. package/dist/components/scroll-zone/ScrollZone.js +1 -1
  186. package/dist/components/segmented-button/SegmentedButton.js +1 -1
  187. package/dist/components/select/Select.js +1 -1
  188. package/dist/components/shortcut/Shortcut.js +1 -1
  189. package/dist/components/show/Show.d.ts +6 -5
  190. package/dist/components/show/Show.js +1 -1
  191. package/dist/components/sidebar/Sidebar.d.ts +7 -5
  192. package/dist/components/sidebar/Sidebar.js +1 -1
  193. package/dist/components/sidebar/SidebarTrigger.js +1 -1
  194. package/dist/components/skeleton/Skeleton.d.ts +1 -1
  195. package/dist/components/skeleton/Skeleton.js +1 -1
  196. package/dist/components/slider/Slider.d.ts +13 -1
  197. package/dist/components/slider/Slider.js +1 -1
  198. package/dist/components/sources/Sources.d.ts +78 -0
  199. package/dist/components/sources/Sources.js +1 -0
  200. package/dist/components/sources/index.d.ts +2 -0
  201. package/dist/components/sources/index.js +1 -0
  202. package/dist/components/sparkline/Sparkline.d.ts +14 -1
  203. package/dist/components/sparkline/Sparkline.js +1 -1
  204. package/dist/components/spoiler/Spoiler.js +1 -1
  205. package/dist/components/stack/Stack.d.ts +2 -2
  206. package/dist/components/stack/Stack.js +1 -1
  207. package/dist/components/statistic/Statistic.js +1 -1
  208. package/dist/components/streaming-text/StreamingText.d.ts +75 -0
  209. package/dist/components/streaming-text/StreamingText.js +1 -0
  210. package/dist/components/streaming-text/index.d.ts +2 -0
  211. package/dist/components/streaming-text/index.js +1 -0
  212. package/dist/components/switch/Switch.js +1 -1
  213. package/dist/components/table/Table.d.ts +8 -2
  214. package/dist/components/table/Table.js +1 -1
  215. package/dist/components/tabs/Tabs.d.ts +17 -1
  216. package/dist/components/tabs/Tabs.js +1 -1
  217. package/dist/components/text-field/TextField.js +1 -1
  218. package/dist/components/text-link/TextLink.js +1 -1
  219. package/dist/components/time-picker/TimePicker.js +1 -1
  220. package/dist/components/timeline/Timeline.d.ts +8 -0
  221. package/dist/components/timeline/Timeline.js +1 -1
  222. package/dist/components/timeline-chart/TimelineChart.js +1 -1
  223. package/dist/components/toast/Toast.d.ts +9 -3
  224. package/dist/components/toast/Toast.js +1 -1
  225. package/dist/components/toggle/Toggle.js +1 -1
  226. package/dist/components/toggle-group/ToggleGroup.js +1 -1
  227. package/dist/components/tool-call/ToolCall.d.ts +104 -0
  228. package/dist/components/tool-call/ToolCall.js +1 -0
  229. package/dist/components/tool-call/index.d.ts +2 -0
  230. package/dist/components/tool-call/index.js +1 -0
  231. package/dist/components/toolbar/Toolbar.d.ts +8 -0
  232. package/dist/components/toolbar/Toolbar.js +1 -1
  233. package/dist/components/tooltip/Tooltip.js +1 -1
  234. package/dist/components/tour/Tour.d.ts +2 -0
  235. package/dist/components/tour/Tour.js +1 -1
  236. package/dist/components/transfer/Transfer.js +1 -1
  237. package/dist/components/tree-select/TreeSelect.js +1 -1
  238. package/dist/components/tree-view/TreeView.d.ts +6 -0
  239. package/dist/components/tree-view/TreeView.js +1 -1
  240. package/dist/components/typography/Typography.js +1 -1
  241. package/dist/components/visually-hidden/VisuallyHidden.d.ts +9 -7
  242. package/dist/components/visually-hidden/VisuallyHidden.js +1 -1
  243. package/dist/components/window-pane/WindowPane.d.ts +2 -2
  244. package/dist/components/window-pane/WindowPane.js +1 -1
  245. package/dist/hooks/useElementSize.d.ts +3 -1
  246. package/dist/hooks/useElementSize.js +1 -1
  247. package/dist/hooks/useOnScreen.d.ts +3 -0
  248. package/dist/hooks/useOnScreen.js +1 -1
  249. package/dist/index.d.ts +9 -0
  250. package/dist/index.js +1 -1
  251. package/dist/internal/animate.d.ts +63 -16
  252. package/dist/internal/animate.js +1 -1
  253. package/dist/internal/calendar.d.ts +6 -1
  254. package/dist/internal/calendar.js +1 -1
  255. package/dist/internal/chart-brush.d.ts +53 -0
  256. package/dist/internal/chart-brush.js +1 -0
  257. package/dist/internal/chart-frame.d.ts +186 -30
  258. package/dist/internal/chart-frame.js +1 -1
  259. package/dist/internal/chart-line.js +1 -1
  260. package/dist/internal/chart.d.ts +133 -6
  261. package/dist/internal/chart.js +1 -1
  262. package/dist/internal/children.d.ts +15 -0
  263. package/dist/internal/children.js +1 -0
  264. package/dist/internal/color.d.ts +4 -0
  265. package/dist/internal/color.js +1 -1
  266. package/dist/internal/csv.d.ts +12 -1
  267. package/dist/internal/csv.js +1 -1
  268. package/dist/internal/data-table.d.ts +28 -10
  269. package/dist/internal/data-table.js +1 -1
  270. package/dist/internal/date.d.ts +12 -5
  271. package/dist/internal/date.js +1 -1
  272. package/dist/internal/defaults.d.ts +6 -1
  273. package/dist/internal/defaults.js +1 -1
  274. package/dist/internal/drag.d.ts +13 -1
  275. package/dist/internal/drag.js +1 -1
  276. package/dist/internal/drop.d.ts +61 -0
  277. package/dist/internal/drop.js +1 -0
  278. package/dist/internal/fieldset.d.ts +13 -0
  279. package/dist/internal/fieldset.js +1 -0
  280. package/dist/internal/glow.d.ts +102 -0
  281. package/dist/internal/glow.js +1 -0
  282. package/dist/internal/highlight.js +1 -1
  283. package/dist/internal/i18n.d.ts +232 -11
  284. package/dist/internal/i18n.js +1 -1
  285. package/dist/internal/icons.d.ts +13 -2
  286. package/dist/internal/icons.js +1 -1
  287. package/dist/internal/inert.d.ts +13 -0
  288. package/dist/internal/inert.js +1 -0
  289. package/dist/internal/initials.d.ts +8 -3
  290. package/dist/internal/initials.js +1 -1
  291. package/dist/internal/keys.d.ts +13 -0
  292. package/dist/internal/keys.js +1 -1
  293. package/dist/internal/link.d.ts +13 -15
  294. package/dist/internal/link.js +1 -1
  295. package/dist/internal/media.d.ts +9 -17
  296. package/dist/internal/media.js +1 -1
  297. package/dist/internal/menu.d.ts +6 -1
  298. package/dist/internal/mockup.d.ts +5 -4
  299. package/dist/internal/mockup.js +1 -1
  300. package/dist/internal/observe.d.ts +12 -0
  301. package/dist/internal/observe.js +1 -1
  302. package/dist/internal/page-layout.d.ts +10 -8
  303. package/dist/internal/page-layout.js +1 -1
  304. package/dist/internal/picker.d.ts +1 -1
  305. package/dist/internal/picker.js +1 -1
  306. package/dist/internal/progress.d.ts +11 -5
  307. package/dist/internal/progress.js +1 -1
  308. package/dist/internal/responsive.d.ts +0 -8
  309. package/dist/internal/responsive.js +1 -1
  310. package/dist/internal/run.d.ts +71 -0
  311. package/dist/internal/run.js +1 -0
  312. package/dist/internal/screen.d.ts +12 -0
  313. package/dist/internal/screen.js +1 -0
  314. package/dist/internal/styles.d.ts +185 -14
  315. package/dist/internal/styles.js +1 -1
  316. package/dist/internal/text.d.ts +3 -3
  317. package/dist/internal/text.js +1 -1
  318. package/dist/internal/window.js +1 -1
  319. package/dist/locales/ar.js +1 -1
  320. package/dist/locales/de.js +1 -1
  321. package/dist/locales/es.js +1 -1
  322. package/dist/locales/fr.js +1 -1
  323. package/dist/locales/hi.js +1 -1
  324. package/dist/locales/id.js +1 -1
  325. package/dist/locales/it.js +1 -1
  326. package/dist/locales/ja.js +1 -1
  327. package/dist/locales/ko.js +1 -1
  328. package/dist/locales/nl.js +1 -1
  329. package/dist/locales/pl.js +1 -1
  330. package/dist/locales/pt.js +1 -1
  331. package/dist/locales/ru.js +1 -1
  332. package/dist/locales/th.js +1 -1
  333. package/dist/locales/tr.js +1 -1
  334. package/dist/locales/vi.js +1 -1
  335. package/dist/locales/zh-hans.js +1 -1
  336. package/dist/locales/zh-hant.js +1 -1
  337. package/dist/styles.css +1 -1
  338. package/dist/tailwind.css +516 -53
  339. package/dist/types.d.ts +167 -7
  340. package/dist/types.js +0 -8
  341. package/package.json +43 -9
package/dist/types.d.ts CHANGED
@@ -27,7 +27,7 @@ export type NebaOrientation = 'horizontal' | 'vertical';
27
27
  * Which edge of an anchor something is placed against. Tooltip reads this, and
28
28
  * so does anything else that hangs a popup off an element.
29
29
  *
30
- * Logical rather than physical — `start`/`end` would be wrong here, because a
30
+ * Physical rather than logical — `start`/`end` would be wrong here, because a
31
31
  * tooltip above a button is above it in every writing direction.
32
32
  */
33
33
  export type NebaSide = 'top' | 'right' | 'bottom' | 'left';
@@ -86,6 +86,24 @@ export type NebaWeekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;
86
86
  * would be reporting a day nobody chose.
87
87
  */
88
88
  export type NebaDateGranularity = 'day' | 'month' | 'year';
89
+ /**
90
+ * How far a piece of work an agent is doing has got.
91
+ *
92
+ * One vocabulary rather than one per component, for the reason `NebaSize` is
93
+ * one: a tool call and a step of a plan are the same lifecycle seen at two
94
+ * scales, and a library that said `running` on one and `current` on the other
95
+ * would make a caller translate between them in the middle of a transcript.
96
+ * [Timeline](../components/display/timeline) keeps its own three words on
97
+ * purpose — a step of a checkout is `upcoming` rather than `pending`, because
98
+ * nothing is waiting on it.
99
+ *
100
+ * Four, and the list is closed. `success` and `error` are two endings and not
101
+ * one `done` with a flag beside it, because what a reader needs from a failed
102
+ * step is the thing a boolean would bury; and there is no `cancelled`, because
103
+ * a run that was stopped ended without succeeding, which is what `error`
104
+ * already says.
105
+ */
106
+ export type NebaRunStatus = 'pending' | 'running' | 'success' | 'error';
89
107
  /**
90
108
  * The viewport widths the layout components branch on, smallest first.
91
109
  *
@@ -280,8 +298,12 @@ export interface NebaAnimateProps {
280
298
  paused?: boolean;
281
299
  /** What starts it. @default 'mount' */
282
300
  trigger?: NebaAnimateTrigger;
283
- /** Runs it, when `trigger` is `manual`. Each `false` → `true` starts it over. */
284
- play?: boolean;
301
+ /**
302
+ * Runs it, when `trigger` is `manual`. Each `false` → `true` starts it over,
303
+ * and so does a number that changes: a count of failed attempts replays a
304
+ * shake on every failure without remounting what is inside it. `0` is stopped.
305
+ */
306
+ play?: boolean | number;
285
307
  /**
286
308
  * With `trigger="visible"`, whether it runs only the first time. Off, it runs
287
309
  * again every time the element comes back into view.
@@ -359,7 +381,8 @@ export interface NebaTransitionOptions {
359
381
  * A bare effect name is the whole of what most callers want —
360
382
  * `transition="fade"` — and the object form is there for the rest.
361
383
  *
362
- * It runs on mount and once. Anything else — replaying on scroll, on hover, or
384
+ * It runs on mount and once, except `blink`, which repeats until its `repeat`
385
+ * says otherwise: a blink that ran once would be a flicker. Anything else — replaying on scroll, on hover, or
363
386
  * under your own control — is what the `Animate*` components are, and any
364
387
  * component can be wrapped in one. This prop exists so the common case does not
365
388
  * need an extra element in the tree.
@@ -444,6 +467,21 @@ export interface NebaChartSeries {
444
467
  * @default false
445
468
  */
446
469
  hidden?: boolean;
470
+ /**
471
+ * Which value axis this series is measured against.
472
+ *
473
+ * `secondary` is for the series whose units are not the others' — revenue
474
+ * beside a conversion rate, a count beside a duration. It is read only when
475
+ * the chart was given a `secondaryAxis`, and never on a stacked chart: a
476
+ * stack is a total, and a total across two units is not a number.
477
+ *
478
+ * Reach for it rarely. Two scales on one plot let a caller make any two
479
+ * series look like they move together by choosing the ranges, and a reader
480
+ * has no way to see that it was done — which is why the second axis is drawn
481
+ * on the far edge and labelled rather than merely implied.
482
+ * @default 'primary'
483
+ */
484
+ axis?: 'primary' | 'secondary';
447
485
  }
448
486
  /**
449
487
  * One span on a [TimelineChart] — a stretch of time with two ends.
@@ -487,6 +525,24 @@ export interface NebaTimelineSeries {
487
525
  }
488
526
  /** How a line gets from one point to the next. */
489
527
  export type NebaChartCurve = 'linear' | 'smooth' | 'step';
528
+ /**
529
+ * What a line or a band does where a value is missing.
530
+ *
531
+ * - `gap` — breaks. The default, and the honest one: a `null` is a month that
532
+ * has not closed or a sensor that was offline, and a chart that draws over
533
+ * the hole has stated a number nobody measured.
534
+ * - `connect` — joins the two sides with a straight segment. For a gap that is
535
+ * an artefact of how the data was collected rather than a fact about the
536
+ * world — a reading that failed to arrive for something that never stopped.
537
+ * - `zero` — reads the gap as a nought, everywhere: the line goes to the
538
+ * baseline, the axis takes the nought into its range, and the tooltip and the
539
+ * table say `0` rather than nothing. That last part is the point of it being
540
+ * here rather than a change to the drawing alone — a picture that touches
541
+ * zero over a table that says "no reading" is two answers to one question.
542
+ * Reach for it when a missing row genuinely means none happened, which is
543
+ * what an event count usually means and what a rate never does.
544
+ */
545
+ export type NebaChartNulls = 'gap' | 'connect' | 'zero';
490
546
  /**
491
547
  * Which values are written onto the marks themselves.
492
548
  *
@@ -527,7 +583,7 @@ export interface NebaChartTooltipContext {
527
583
  }
528
584
  /** The tooltip, when a bare `true` or `false` is not enough. */
529
585
  export interface NebaChartTooltip {
530
- /** @default 'index' */
586
+ /** @default 'index', or 'item' on ScatterChart and TimelineChart */
531
587
  mode?: NebaChartTooltipMode;
532
588
  /**
533
589
  * The line dropped through the plot at the active category. On in `index`
@@ -537,6 +593,86 @@ export interface NebaChartTooltip {
537
593
  /** Draws the panel. Without it the chart draws its own. */
538
594
  render?: (context: NebaChartTooltipContext) => React.ReactNode;
539
595
  }
596
+ /**
597
+ * A line, or a band, drawn across a plot at a value the data has none of.
598
+ *
599
+ * A target, an SLA, a budget, last year's average, the window a forecast
600
+ * covers. It is the one thing on a chart that is neither a mark nor chrome: it
601
+ * carries meaning, so it is drawn heavier than a gridline — and it is not the
602
+ * reader's data, so it is dashed and neutral rather than taking one of the
603
+ * eight series hues.
604
+ *
605
+ * The scale is widened to hold it. A target drawn off the top of the plot is a
606
+ * target nobody can see, and moving every mark down a little to make room is
607
+ * the cheaper of the two costs.
608
+ */
609
+ export interface NebaChartReference {
610
+ /** Where it sits, in the units of the axis it is read against. */
611
+ value: number;
612
+ /**
613
+ * Turns the line into a band that runs from `value` to here — a tolerance, a
614
+ * quarter, the range a forecast covers. Drawn as a wash with an edge at each
615
+ * end, so what is inside it stays readable.
616
+ */
617
+ to?: number;
618
+ /**
619
+ * Which axis the numbers are read against.
620
+ *
621
+ * - `value` — the one the marks are measured on. A target, a budget, a limit.
622
+ * - `category` — the one they are placed along, for a rule that says *when*:
623
+ * a release, a policy change. On an axis of columns the number is the
624
+ * column's index; on one of dates or numbers it is a point on that scale.
625
+ * @default 'value'
626
+ */
627
+ axis?: 'value' | 'category';
628
+ /**
629
+ * What it is called, written at the far end of it. SVG text, so a string:
630
+ * an element has nowhere to go.
631
+ */
632
+ label?: string;
633
+ /**
634
+ * Its colour. A `NebaColor` family, or any CSS colour.
635
+ *
636
+ * Neutral by default, and that is the right answer more often than it looks:
637
+ * a reference in `danger` says the line is the bad thing, when usually the
638
+ * bad thing is the data crossing it.
639
+ * @default the muted ink
640
+ */
641
+ color?: NebaColor | (string & {});
642
+ /**
643
+ * Draws it as a solid rule. Dashed otherwise, which is what says a line is a
644
+ * threshold rather than one more gridline.
645
+ * @default false
646
+ */
647
+ solid?: boolean;
648
+ }
649
+ /**
650
+ * The strip under a plot that says which part of a long series is drawn.
651
+ *
652
+ * A chart of two thousand points is a chart with no points on it: every column
653
+ * is a fraction of a pixel wide and the shape is a smear. The answer is not to
654
+ * draw fewer of them — that is the caller's data — but to draw a window of
655
+ * them, and to put the whole series under the plot small so the reader can see
656
+ * where the window is and move it.
657
+ *
658
+ * The window is in **category indices**, inclusive at both ends, because that
659
+ * is what a category axis is indexed by whether it holds dates, numbers or
660
+ * columns.
661
+ */
662
+ export interface NebaChartBrush {
663
+ /** Which categories the window covers to begin with. Defaults to all of them. */
664
+ defaultRange?: readonly [number, number];
665
+ /** The window, for a chart whose range the caller holds. */
666
+ range?: readonly [number, number];
667
+ /** Called with the new window whenever the reader moves it. */
668
+ onRangeChange?: (range: [number, number]) => void;
669
+ /**
670
+ * How tall the strip is, in pixels. Drawn **inside** the chart's own height,
671
+ * like the axis labels, so a card sized to the chart is a card it fits in.
672
+ * @default 32
673
+ */
674
+ height?: number;
675
+ }
540
676
  /** One axis of a cartesian chart. */
541
677
  export interface NebaChartAxis {
542
678
  /** Leaves the axis undrawn — its rule, its ticks and its labels. */
@@ -558,8 +694,32 @@ export interface NebaChartAxis {
558
694
  max?: number;
559
695
  /** Roughly how many ticks. The scale still rounds to clean numbers. */
560
696
  tickCount?: number;
561
- /** How a tick is written, overriding the chart's own `format`. */
562
- tickFormat?: (value: NebaChartCategory, index: number) => React.ReactNode;
697
+ /**
698
+ * How a tick is written, overriding the chart's own `format`. A tick is SVG
699
+ * text, so this returns a string or a number: an element has nowhere to go and
700
+ * was written out as `[object Object]`.
701
+ */
702
+ tickFormat?: (value: NebaChartCategory, index: number) => string | number;
703
+ /**
704
+ * Turns the labels by this many degrees, between `-90` and `90`. Negative
705
+ * tilts them up to the right, which is the one most readers have met;
706
+ * positive tilts them down, and `-90` stands them on end.
707
+ *
708
+ * What it buys is **all** of the labels. Flat, a long category name has one
709
+ * slot to fit in, so the axis either cuts it to an ellipsis or drops every
710
+ * second one; turned, each label only has to clear its neighbour across its
711
+ * own height, and a dozen product names fit where three did. What it costs is
712
+ * a band of the plot and a label nobody can read at a glance, so it is worth
713
+ * it when the names are what the reader came for and not when the shape is.
714
+ *
715
+ * Only the **category** axis reads it, and only on a chart that draws that
716
+ * axis along the bottom: a horizontal chart already gives each label a row of
717
+ * its own, and a value tick is a rounded number that was never cut. The band
718
+ * under the plot grows to hold the turned labels, up to a cap — past that
719
+ * they are still cut, because a chart that is mostly axis is not a chart.
720
+ * @default 0
721
+ */
722
+ tickAngle?: number;
563
723
  /**
564
724
  * How much room the axis keeps for its ticks and its label, in pixels.
565
725
  * Measured from the ticks themselves otherwise; set it when a long category
package/dist/types.js CHANGED
@@ -1,8 +0,0 @@
1
- /**
2
- * Shared prop vocabulary for every Neba component.
3
- *
4
- * These names and values are deliberately generic: a `size` of `md` or a
5
- * `color` of `primary` has to mean the same thing on a Button, a Chip, a
6
- * TextField or a Dialog. Components pick the subset they need from here and
7
- * never invent a parallel spelling of the same idea.
8
- */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neba",
3
- "version": "1.13.0",
3
+ "version": "1.16.0",
4
4
  "description": "A comprehensive React UI component library — buttons, fields, menus, dialogs, tables and much more — accessible and themeable, sharing one prop vocabulary and a translucent acrylic design language. ESM only, types included, dark mode built in.",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
@@ -19,22 +19,24 @@
19
19
  },
20
20
  "scripts": {
21
21
  "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
22
- "build": "npm run clean && npm run format:fix && tsc --project tsconfig.prod.json && node scripts/annotate-pure.mjs && npm run minify && node scripts/build-styles.mjs",
22
+ "build": "npm run clean && npm run format:fix && tsc --project tsconfig.prod.json && node scripts/annotate-pure.mjs && npm run minify && node scripts/build-styles.mjs && node scripts/build-catalog.mjs",
23
23
  "lint": "eslint . --report-unused-disable-directives",
24
24
  "lint:fix": "eslint . --report-unused-disable-directives --fix",
25
- "minify": "terser-glob 'dist/**/*.js' --config-file terser.config.json",
25
+ "minify": "node scripts/minify.mjs",
26
26
  "size": "node scripts/measure-bundle.mjs",
27
27
  "size:update": "node scripts/measure-bundle.mjs --update",
28
+ "compat": "node scripts/check-browsers.mjs",
28
29
  "prepare": "npm run build",
29
30
  "format": "prettier .",
30
31
  "format:fix": "prettier . --write",
31
32
  "docs:changelog": "node scripts/copy-changelog.mjs",
32
- "docs:dev": "npm run docs:changelog && vitepress dev docs",
33
- "docs:build": "npm run docs:changelog && node --max-old-space-size=8192 ./node_modules/vitepress/bin/vitepress.js build docs",
33
+ "docs:dev": "npm run docs:changelog && npm run docs:catalog && vitepress dev docs",
34
+ "docs:build": "npm run docs:changelog && npm run docs:catalog && node --max-old-space-size=8192 ./node_modules/vitepress/bin/vitepress.js build docs",
34
35
  "docs:serve": "npm run docs:build && vitepress serve docs",
35
36
  "test": "node scripts/run-tests.mjs",
36
37
  "test:watch": "vitest",
37
- "typecheck": "tsc --project tsconfig.prod.json --noEmit && tsc --project test/tsconfig.json && tsc --project docs/tsconfig.json"
38
+ "typecheck": "tsc --project tsconfig.prod.json --noEmit && tsc --project test/tsconfig.json && tsc --project docs/tsconfig.json",
39
+ "docs:catalog": "node scripts/build-catalog.mjs --docs"
38
40
  },
39
41
  "engines": {
40
42
  "node": ">=18.0.0"
@@ -69,6 +71,12 @@
69
71
  "./styles.css": "./dist/styles.css",
70
72
  "./tailwind.css": "./dist/tailwind.css",
71
73
  "./package.json": "./package.json",
74
+ "./a2ui": {
75
+ "types": "./dist/a2ui/index.d.ts",
76
+ "module": "./dist/a2ui/index.js",
77
+ "default": "./dist/a2ui/index.js"
78
+ },
79
+ "./a2ui/catalog.json": "./dist/a2ui/catalog.json",
72
80
  "./*": {
73
81
  "types": "./dist/components/*/index.d.ts",
74
82
  "module": "./dist/components/*/index.js",
@@ -89,6 +97,12 @@
89
97
  "locales/*": [
90
98
  "dist/locales/*.d.ts"
91
99
  ],
100
+ "hooks": [
101
+ "dist/hooks/index.d.ts"
102
+ ],
103
+ "a2ui": [
104
+ "dist/a2ui/index.d.ts"
105
+ ],
92
106
  "*": [
93
107
  "dist/components/*/index.d.ts"
94
108
  ]
@@ -137,7 +151,10 @@
137
151
  "form"
138
152
  ],
139
153
  "devDependencies": {
154
+ "@a2ui/react": "^0.11.1",
155
+ "@a2ui/web_core": "^0.11.0",
140
156
  "@eslint/js": "^9.39.1",
157
+ "@mdn/browser-compat-data": "^8.1.1",
141
158
  "@tailwindcss/postcss": "^4.3.3",
142
159
  "@types/node": "^26.4.1",
143
160
  "@types/react": "^19.2.18",
@@ -159,7 +176,7 @@
159
176
  "react": "^19.2.8",
160
177
  "react-dom": "^19.2.8",
161
178
  "tailwindcss": "^4.3.3",
162
- "terser-glob": "^1.2.1",
179
+ "terser": "^5.51.2",
163
180
  "tsx": "^4.23.13",
164
181
  "typescript": "^6.0.3",
165
182
  "typescript-eslint": "^8.69.0",
@@ -168,7 +185,8 @@
168
185
  "vitepress-i18n": "^1.4.0",
169
186
  "vitepress-sidebar": "^1.40.0",
170
187
  "vitest": "^5.0.0",
171
- "vitest-browser-react": "^2.3.0"
188
+ "vitest-browser-react": "^2.3.0",
189
+ "zod": "^3.25.76"
172
190
  },
173
191
  "dependencies": {
174
192
  "@base-ui/react": "^1.8.0",
@@ -177,11 +195,27 @@
177
195
  "peerDependencies": {
178
196
  "@types/react": "^18.0.0 || ^19.0.0",
179
197
  "react": "^18.0.0 || ^19.0.0",
180
- "react-dom": "^18.0.0 || ^19.0.0"
198
+ "react-dom": "^18.0.0 || ^19.0.0",
199
+ "@a2ui/react": "^0.11.0",
200
+ "@a2ui/web_core": "^0.11.0",
201
+ "zod": "^3.25.76"
181
202
  },
182
203
  "peerDependenciesMeta": {
183
204
  "@types/react": {
184
205
  "optional": true
206
+ },
207
+ "@a2ui/react": {
208
+ "optional": true
209
+ },
210
+ "@a2ui/web_core": {
211
+ "optional": true
212
+ },
213
+ "zod": {
214
+ "optional": true
185
215
  }
216
+ },
217
+ "allowScripts": {
218
+ "esbuild": false,
219
+ "fsevents": false
186
220
  }
187
221
  }