@nordmanai/nif 0.0.0-stage → 0.2.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 (398) hide show
  1. package/README.md +79 -2
  2. package/bin/nif.mjs +196 -0
  3. package/dist/index.d.ts +124 -0
  4. package/dist/index.js +12961 -0
  5. package/dist/styles.css +2 -0
  6. package/dist/tokens.css +72 -0
  7. package/dist/ui/components/nm-ai/nm-ai.d.ts +222 -0
  8. package/dist/ui/components/nm-avatar/nm-avatar.d.ts +12 -0
  9. package/dist/ui/components/nm-bar-overflow/nm-bar-overflow.d.ts +15 -0
  10. package/dist/ui/components/nm-bar-overflow/use-bar-overflow.d.ts +7 -0
  11. package/dist/ui/components/nm-brand-logo/nm-brand-logo.d.ts +10 -0
  12. package/dist/ui/components/nm-breadcrumb/nm-breadcrumb.d.ts +11 -0
  13. package/dist/ui/components/nm-button/nm-button.d.ts +19 -0
  14. package/dist/ui/components/nm-button-group/nm-button-group.d.ts +17 -0
  15. package/dist/ui/components/nm-calendar/nm-calendar.d.ts +3 -0
  16. package/dist/ui/components/nm-card/nm-card.d.ts +34 -0
  17. package/dist/ui/components/nm-chatbox/nm-chatbox-icon.d.ts +7 -0
  18. package/dist/ui/components/nm-chatbox/nm-chatbox.d.ts +19 -0
  19. package/dist/ui/components/nm-checkbox/nm-checkbox.d.ts +2 -0
  20. package/dist/ui/components/nm-chip/nm-chip.d.ts +38 -0
  21. package/dist/ui/components/nm-code-block/nm-code-block.d.ts +55 -0
  22. package/dist/ui/components/nm-collection/nm-collection-bar.d.ts +16 -0
  23. package/dist/ui/components/nm-collection/nm-collection-grid.d.ts +9 -0
  24. package/dist/ui/components/nm-collection/nm-collection-query.d.ts +18 -0
  25. package/dist/ui/components/nm-collection/nm-collection-row-menu.d.ts +7 -0
  26. package/dist/ui/components/nm-collection/nm-collection-table.d.ts +13 -0
  27. package/dist/ui/components/nm-collection/nm-collection-tile-actions.d.ts +7 -0
  28. package/dist/ui/components/nm-collection/nm-collection-title.d.ts +10 -0
  29. package/dist/ui/components/nm-collection/use-collection-scroll-reveal.d.ts +3 -0
  30. package/dist/ui/components/nm-color-picker/nm-color-picker.d.ts +15 -0
  31. package/dist/ui/components/nm-combobox/nm-combobox.d.ts +26 -0
  32. package/dist/ui/components/nm-command/nm-command.d.ts +37 -0
  33. package/dist/ui/components/nm-composer/nm-composer.d.ts +33 -0
  34. package/dist/ui/components/nm-context-menu/nm-context-menu.d.ts +9 -0
  35. package/dist/ui/components/nm-date-picker/nm-date-picker.d.ts +35 -0
  36. package/dist/ui/components/nm-dialog/nm-dialog.d.ts +13 -0
  37. package/dist/ui/components/nm-dropdown/nm-dropdown-item.d.ts +26 -0
  38. package/dist/ui/components/nm-dropdown/nm-dropdown-options.d.ts +12 -0
  39. package/dist/ui/components/nm-dropdown/nm-dropdown-panel.d.ts +16 -0
  40. package/dist/ui/components/nm-dropdown/nm-dropdown-placement.d.ts +55 -0
  41. package/dist/ui/components/nm-dropdown/nm-dropdown.d.ts +31 -0
  42. package/dist/ui/components/nm-dropdown-menu/nm-dropdown-menu.d.ts +30 -0
  43. package/dist/ui/components/nm-field/nm-field.d.ts +52 -0
  44. package/dist/ui/components/nm-form-field/nm-form-field.d.ts +18 -0
  45. package/dist/ui/components/nm-gallery/nm-gallery.d.ts +8 -0
  46. package/dist/ui/components/nm-hover-card/nm-hover-card.d.ts +5 -0
  47. package/dist/ui/components/nm-icon/nm-icon.d.ts +7 -0
  48. package/dist/ui/components/nm-icon/nm-lucide.d.ts +7 -0
  49. package/dist/ui/components/nm-icon-border/nm-icon-border.d.ts +21 -0
  50. package/dist/ui/components/nm-input/nm-input.d.ts +5 -0
  51. package/dist/ui/components/nm-input-group/nm-input-group.d.ts +9 -0
  52. package/dist/ui/components/nm-label/nm-label.d.ts +2 -0
  53. package/dist/ui/components/nm-list-item/nm-list-item.d.ts +23 -0
  54. package/dist/ui/components/nm-menubar/nm-menubar.d.ts +9 -0
  55. package/dist/ui/components/nm-message/nm-message-actions.d.ts +7 -0
  56. package/dist/ui/components/nm-message/nm-message-meta.d.ts +10 -0
  57. package/dist/ui/components/nm-message/nm-text-shimmer.d.ts +4 -0
  58. package/dist/ui/components/nm-message/nm-trace.d.ts +58 -0
  59. package/dist/ui/components/nm-modal/nm-modal.d.ts +35 -0
  60. package/dist/ui/components/nm-native-select/nm-native-select.d.ts +5 -0
  61. package/dist/ui/components/nm-panel/nm-panel.d.ts +14 -0
  62. package/dist/ui/components/nm-panel-bar/nm-panel-bar.d.ts +17 -0
  63. package/dist/ui/components/nm-popover/nm-popover.d.ts +8 -0
  64. package/dist/ui/components/nm-progress/nm-progress.d.ts +3 -0
  65. package/dist/ui/components/nm-prose/nm-prose.d.ts +6 -0
  66. package/dist/ui/components/nm-questionnaire/nm-questionnaire.d.ts +17 -0
  67. package/dist/ui/components/nm-radio-group/nm-radio-group.d.ts +4 -0
  68. package/dist/ui/components/nm-rail-icon/nm-rail-icon.d.ts +6 -0
  69. package/dist/ui/components/nm-resize-handle/nm-resize-handle.d.ts +18 -0
  70. package/dist/ui/components/nm-segmented/nm-segmented.d.ts +20 -0
  71. package/dist/ui/components/nm-select/nm-select.d.ts +22 -0
  72. package/dist/ui/components/nm-separator/nm-separator.d.ts +2 -0
  73. package/dist/ui/components/nm-side-panel/nm-side-panel.d.ts +33 -0
  74. package/dist/ui/components/nm-slider/nm-slider.d.ts +6 -0
  75. package/dist/ui/components/nm-small-icon-button/nm-small-icon-button.d.ts +21 -0
  76. package/dist/ui/components/nm-status-bar/nm-status-bar.d.ts +8 -0
  77. package/dist/ui/components/nm-switch/nm-switch.d.ts +2 -0
  78. package/dist/ui/components/nm-table/nm-table.d.ts +38 -0
  79. package/dist/ui/components/nm-tabs/nm-tabs.d.ts +9 -0
  80. package/dist/ui/components/nm-textarea/nm-textarea.d.ts +2 -0
  81. package/dist/ui/components/nm-toggle/nm-toggle.d.ts +9 -0
  82. package/dist/ui/components/nm-toolbar/nm-toolbar.d.ts +21 -0
  83. package/dist/ui/components/nm-tooltip/nm-tooltip.d.ts +5 -0
  84. package/dist/ui/components/nm-top-bar/nm-top-bar.d.ts +12 -0
  85. package/dist/ui/components/nordman-icon-button/nordman-icon-button.d.ts +29 -0
  86. package/dist/ui/components/nordman-login/nordman-login.d.ts +36 -0
  87. package/dist/ui/components/nordman-login-field/nordman-login-field.d.ts +13 -0
  88. package/dist/ui/components/nordman-login-forgot/nordman-login-forgot.d.ts +9 -0
  89. package/dist/ui/components/nordman-login-google/nordman-login-google.d.ts +6 -0
  90. package/dist/ui/components/nordman-login-hero/nordman-login-hero.d.ts +6 -0
  91. package/dist/ui/components/nordman-login-register/nordman-login-register.d.ts +11 -0
  92. package/dist/ui/components/nordman-login-reset/nordman-login-reset.d.ts +9 -0
  93. package/dist/ui/components/nordman-login-reveal/nordman-login-reveal.d.ts +6 -0
  94. package/dist/ui/components/nordman-login-sign-in/nordman-login-sign-in.d.ts +11 -0
  95. package/dist/ui/components/nordman-toggle/nordman-toggle.d.ts +12 -0
  96. package/dist/ui/config/nm-ai.d.ts +44 -0
  97. package/dist/ui/config/nm-app-panel.d.ts +36 -0
  98. package/dist/ui/config/nm-appearance.d.ts +100 -0
  99. package/dist/ui/config/nm-bar-overflow.d.ts +9 -0
  100. package/dist/ui/config/nm-button.d.ts +31 -0
  101. package/dist/ui/config/nm-chatbox-icons.d.ts +42 -0
  102. package/dist/ui/config/nm-chatbox.d.ts +40 -0
  103. package/dist/ui/config/nm-collection.d.ts +88 -0
  104. package/dist/ui/config/nm-composer.d.ts +42 -0
  105. package/dist/ui/config/nm-dropdown.d.ts +56 -0
  106. package/dist/ui/config/nm-fade.d.ts +6 -0
  107. package/dist/ui/config/nm-field.d.ts +38 -0
  108. package/dist/ui/config/nm-header-icons.d.ts +15 -0
  109. package/dist/ui/config/nm-icon-border.d.ts +3 -0
  110. package/dist/ui/config/nm-icon-button.d.ts +26 -0
  111. package/dist/ui/config/nm-icons.d.ts +371 -0
  112. package/dist/ui/config/nm-list-item.d.ts +14 -0
  113. package/dist/ui/config/nm-message.d.ts +87 -0
  114. package/dist/ui/config/nm-modal.d.ts +67 -0
  115. package/dist/ui/config/nm-panel-bar.d.ts +9 -0
  116. package/dist/ui/config/nm-questionnaire.d.ts +57 -0
  117. package/dist/ui/config/nm-radius.d.ts +49 -0
  118. package/dist/ui/config/nm-rail-icons.d.ts +14 -0
  119. package/dist/ui/config/nm-rail.d.ts +5 -0
  120. package/dist/ui/config/nm-segmented.d.ts +17 -0
  121. package/dist/ui/config/nm-side-panel.d.ts +33 -0
  122. package/dist/ui/config/nm-site-palette.d.ts +30 -0
  123. package/dist/ui/config/nm-small-icon-button.d.ts +12 -0
  124. package/dist/ui/config/nm-tabs.d.ts +8 -0
  125. package/dist/ui/config/nm-top-bar.d.ts +4 -0
  126. package/dist/ui/config/nordman-chrome.d.ts +12 -0
  127. package/dist/ui/config/nordman-login.d.ts +23 -0
  128. package/dist/ui/content/nm-modal.d.ts +1 -0
  129. package/dist/ui/content/nordman-login.d.ts +38 -0
  130. package/dist/ui/kit-logger.d.ts +1 -0
  131. package/dist/ui/lib/appearance/appearanceState.d.ts +28 -0
  132. package/dist/ui/lib/appearance/applyAppearance.d.ts +5 -0
  133. package/dist/ui/lib/appearance/cloudOrbAppearance.d.ts +4 -0
  134. package/dist/ui/lib/appearance/color.d.ts +13 -0
  135. package/dist/ui/lib/appearance/deriveTokens.d.ts +6 -0
  136. package/dist/ui/lib/appearance/index.d.ts +6 -0
  137. package/dist/ui/lib/appearance/markTokens.d.ts +2 -0
  138. package/dist/ui/lib/appearance/readLayoutMetrics.d.ts +4 -0
  139. package/dist/ui/lib/bar-overflow.d.ts +13 -0
  140. package/dist/ui/lib/logger.d.ts +8 -0
  141. package/dist/ui/lib/menu-motion.d.ts +72 -0
  142. package/dist/ui/lib/nm-class.d.ts +2 -0
  143. package/dist/ui/lib/nordman-ui-locale.d.ts +9 -0
  144. package/interface/app-panel/code.svg +5 -0
  145. package/interface/app-panel/console.svg +5 -0
  146. package/interface/app-panel/copy.svg +5 -0
  147. package/interface/app-panel/ellipsis.svg +7 -0
  148. package/interface/app-panel/message.svg +5 -0
  149. package/interface/app-panel/network.svg +10 -0
  150. package/interface/app-panel/play.svg +5 -0
  151. package/interface/app-panel/plus.svg +5 -0
  152. package/interface/chatbox/app.svg +5 -0
  153. package/interface/chatbox/audio-lines.svg +5 -0
  154. package/interface/chatbox/check.svg +5 -0
  155. package/interface/chatbox/globe.svg +5 -0
  156. package/interface/chatbox/integration.svg +5 -0
  157. package/interface/chatbox/mic.svg +5 -0
  158. package/interface/chatbox/paperclip.svg +5 -0
  159. package/interface/chatbox/pointer.svg +5 -0
  160. package/interface/chatbox/send.svg +5 -0
  161. package/interface/chatbox/settings.svg +5 -0
  162. package/interface/chatbox/spreadsheet.svg +5 -0
  163. package/interface/chatbox/x.svg +5 -0
  164. package/interface/collection/audio.svg +5 -0
  165. package/interface/collection/download.svg +5 -0
  166. package/interface/collection/expand.svg +5 -0
  167. package/interface/collection/grid.svg +10 -0
  168. package/interface/collection/image.svg +5 -0
  169. package/interface/collection/spreadsheet.svg +5 -0
  170. package/interface/collection/video.svg +5 -0
  171. package/interface/header/app.svg +5 -0
  172. package/interface/header/bot.svg +5 -0
  173. package/interface/header/chat.svg +10 -0
  174. package/interface/header/folder.svg +5 -0
  175. package/interface/header/layers.svg +10 -0
  176. package/interface/header/panel.svg +5 -0
  177. package/interface/header/play.svg +3 -0
  178. package/interface/header/schedule.svg +8 -0
  179. package/interface/header/search.svg +5 -0
  180. package/interface/header/settings.svg +5 -0
  181. package/interface/header/users.svg +5 -0
  182. package/interface/message/chevron.svg +5 -0
  183. package/interface/message/copy.svg +5 -0
  184. package/interface/message/fork.svg +5 -0
  185. package/interface/message/refresh.svg +5 -0
  186. package/interface/message/volume.svg +5 -0
  187. package/interface/rail/app.svg +5 -0
  188. package/interface/rail/bot.svg +5 -0
  189. package/interface/rail/chats.svg +5 -0
  190. package/interface/rail/folder.svg +5 -0
  191. package/interface/rail/library.svg +5 -0
  192. package/interface/rail/plus-sm.svg +5 -0
  193. package/interface/rail/plus.svg +5 -0
  194. package/interface/rail/search.svg +5 -0
  195. package/interface/rail/settings.svg +8 -0
  196. package/interface/rail/spreadsheet.svg +5 -0
  197. package/package.json +79 -4
  198. package/registry/index.json +1634 -0
  199. package/registry/tokens.css +72 -0
  200. package/registry/ui/components/nm-ai/nm-ai.css +358 -0
  201. package/registry/ui/components/nm-ai/nm-ai.tsx +632 -0
  202. package/registry/ui/components/nm-app-panel/nm-app-panel.css +169 -0
  203. package/registry/ui/components/nm-ask/nm-ask.css +277 -0
  204. package/registry/ui/components/nm-avatar/nm-avatar.css +85 -0
  205. package/registry/ui/components/nm-avatar/nm-avatar.tsx +30 -0
  206. package/registry/ui/components/nm-bar-overflow/nm-bar-overflow.css +43 -0
  207. package/registry/ui/components/nm-bar-overflow/nm-bar-overflow.tsx +61 -0
  208. package/registry/ui/components/nm-bar-overflow/use-bar-overflow.ts +92 -0
  209. package/registry/ui/components/nm-brand-logo/nm-brand-logo.css +20 -0
  210. package/registry/ui/components/nm-brand-logo/nm-brand-logo.tsx +21 -0
  211. package/registry/ui/components/nm-breadcrumb/nm-breadcrumb.css +57 -0
  212. package/registry/ui/components/nm-breadcrumb/nm-breadcrumb.tsx +42 -0
  213. package/registry/ui/components/nm-button/nm-button.css +110 -0
  214. package/registry/ui/components/nm-button/nm-button.tsx +58 -0
  215. package/registry/ui/components/nm-button-group/nm-button-group.css +87 -0
  216. package/registry/ui/components/nm-button-group/nm-button-group.tsx +32 -0
  217. package/registry/ui/components/nm-calendar/nm-calendar.css +178 -0
  218. package/registry/ui/components/nm-calendar/nm-calendar.tsx +43 -0
  219. package/registry/ui/components/nm-card/nm-card.css +130 -0
  220. package/registry/ui/components/nm-card/nm-card.tsx +83 -0
  221. package/registry/ui/components/nm-chatbox/nm-chatbox-icon.tsx +39 -0
  222. package/registry/ui/components/nm-chatbox/nm-chatbox.css +682 -0
  223. package/registry/ui/components/nm-chatbox/nm-chatbox.tsx +101 -0
  224. package/registry/ui/components/nm-checkbox/nm-checkbox.css +61 -0
  225. package/registry/ui/components/nm-checkbox/nm-checkbox.tsx +14 -0
  226. package/registry/ui/components/nm-chip/nm-chip.css +112 -0
  227. package/registry/ui/components/nm-chip/nm-chip.tsx +86 -0
  228. package/registry/ui/components/nm-code-block/nm-code-block.css +240 -0
  229. package/registry/ui/components/nm-code-block/nm-code-block.tsx +196 -0
  230. package/registry/ui/components/nm-collection/nm-collection-bar.tsx +65 -0
  231. package/registry/ui/components/nm-collection/nm-collection-grid.tsx +69 -0
  232. package/registry/ui/components/nm-collection/nm-collection-query.tsx +99 -0
  233. package/registry/ui/components/nm-collection/nm-collection-row-menu.tsx +55 -0
  234. package/registry/ui/components/nm-collection/nm-collection-table.tsx +99 -0
  235. package/registry/ui/components/nm-collection/nm-collection-tile-actions.tsx +50 -0
  236. package/registry/ui/components/nm-collection/nm-collection-title.tsx +25 -0
  237. package/registry/ui/components/nm-collection/nm-collection.css +353 -0
  238. package/registry/ui/components/nm-collection/use-collection-scroll-reveal.ts +38 -0
  239. package/registry/ui/components/nm-color-picker/nm-color-picker.css +67 -0
  240. package/registry/ui/components/nm-color-picker/nm-color-picker.tsx +79 -0
  241. package/registry/ui/components/nm-combobox/nm-combobox.css +72 -0
  242. package/registry/ui/components/nm-combobox/nm-combobox.tsx +80 -0
  243. package/registry/ui/components/nm-command/nm-command.css +190 -0
  244. package/registry/ui/components/nm-command/nm-command.tsx +125 -0
  245. package/registry/ui/components/nm-composer/nm-composer.css +178 -0
  246. package/registry/ui/components/nm-composer/nm-composer.tsx +151 -0
  247. package/registry/ui/components/nm-context-menu/nm-context-menu.tsx +25 -0
  248. package/registry/ui/components/nm-date-picker/nm-date-picker.css +140 -0
  249. package/registry/ui/components/nm-date-picker/nm-date-picker.tsx +153 -0
  250. package/registry/ui/components/nm-dialog/nm-dialog.css +84 -0
  251. package/registry/ui/components/nm-dialog/nm-dialog.tsx +40 -0
  252. package/registry/ui/components/nm-dropdown/nm-dropdown-item.ts +68 -0
  253. package/registry/ui/components/nm-dropdown/nm-dropdown-options.tsx +242 -0
  254. package/registry/ui/components/nm-dropdown/nm-dropdown-panel.tsx +171 -0
  255. package/registry/ui/components/nm-dropdown/nm-dropdown-placement.ts +157 -0
  256. package/registry/ui/components/nm-dropdown/nm-dropdown.css +312 -0
  257. package/registry/ui/components/nm-dropdown/nm-dropdown.tsx +412 -0
  258. package/registry/ui/components/nm-dropdown-menu/nm-dropdown-menu.css +145 -0
  259. package/registry/ui/components/nm-dropdown-menu/nm-dropdown-menu.tsx +118 -0
  260. package/registry/ui/components/nm-field/nm-field.css +356 -0
  261. package/registry/ui/components/nm-field/nm-field.tsx +355 -0
  262. package/registry/ui/components/nm-form-field/nm-form-field.css +103 -0
  263. package/registry/ui/components/nm-form-field/nm-form-field.tsx +71 -0
  264. package/registry/ui/components/nm-gallery/nm-gallery.css +66 -0
  265. package/registry/ui/components/nm-gallery/nm-gallery.tsx +31 -0
  266. package/registry/ui/components/nm-hover-card/nm-hover-card.css +26 -0
  267. package/registry/ui/components/nm-hover-card/nm-hover-card.tsx +28 -0
  268. package/registry/ui/components/nm-icon/nm-icon.css +6 -0
  269. package/registry/ui/components/nm-icon/nm-icon.tsx +69 -0
  270. package/registry/ui/components/nm-icon/nm-lucide.tsx +180 -0
  271. package/registry/ui/components/nm-icon-border/nm-icon-border.tsx +56 -0
  272. package/registry/ui/components/nm-input/nm-input.css +75 -0
  273. package/registry/ui/components/nm-input/nm-input.tsx +7 -0
  274. package/registry/ui/components/nm-input-group/nm-input-group.css +66 -0
  275. package/registry/ui/components/nm-input-group/nm-input-group.tsx +20 -0
  276. package/registry/ui/components/nm-label/nm-label.css +11 -0
  277. package/registry/ui/components/nm-label/nm-label.tsx +6 -0
  278. package/registry/ui/components/nm-list-item/nm-list-item.css +177 -0
  279. package/registry/ui/components/nm-list-item/nm-list-item.tsx +112 -0
  280. package/registry/ui/components/nm-menubar/nm-menubar.css +32 -0
  281. package/registry/ui/components/nm-menubar/nm-menubar.tsx +19 -0
  282. package/registry/ui/components/nm-message/nm-message-actions.tsx +24 -0
  283. package/registry/ui/components/nm-message/nm-message-meta.tsx +49 -0
  284. package/registry/ui/components/nm-message/nm-message.css +686 -0
  285. package/registry/ui/components/nm-message/nm-text-shimmer.tsx +6 -0
  286. package/registry/ui/components/nm-message/nm-trace.tsx +219 -0
  287. package/registry/ui/components/nm-modal/nm-modal.css +763 -0
  288. package/registry/ui/components/nm-modal/nm-modal.tsx +497 -0
  289. package/registry/ui/components/nm-native-select/nm-native-select.css +47 -0
  290. package/registry/ui/components/nm-native-select/nm-native-select.tsx +23 -0
  291. package/registry/ui/components/nm-panel/nm-panel.css +73 -0
  292. package/registry/ui/components/nm-panel/nm-panel.tsx +35 -0
  293. package/registry/ui/components/nm-panel-bar/nm-panel-bar.css +20 -0
  294. package/registry/ui/components/nm-panel-bar/nm-panel-bar.tsx +48 -0
  295. package/registry/ui/components/nm-popover/nm-popover.css +43 -0
  296. package/registry/ui/components/nm-popover/nm-popover.tsx +40 -0
  297. package/registry/ui/components/nm-progress/nm-progress.css +21 -0
  298. package/registry/ui/components/nm-progress/nm-progress.tsx +14 -0
  299. package/registry/ui/components/nm-prose/nm-prose.css +81 -0
  300. package/registry/ui/components/nm-prose/nm-prose.tsx +10 -0
  301. package/registry/ui/components/nm-questionnaire/nm-questionnaire.css +182 -0
  302. package/registry/ui/components/nm-questionnaire/nm-questionnaire.tsx +221 -0
  303. package/registry/ui/components/nm-radio-group/nm-radio-group.css +48 -0
  304. package/registry/ui/components/nm-radio-group/nm-radio-group.tsx +15 -0
  305. package/registry/ui/components/nm-rail-icon/nm-rail-icon.css +6 -0
  306. package/registry/ui/components/nm-rail-icon/nm-rail-icon.tsx +28 -0
  307. package/registry/ui/components/nm-resize-handle/nm-resize-handle.css +45 -0
  308. package/registry/ui/components/nm-resize-handle/nm-resize-handle.tsx +102 -0
  309. package/registry/ui/components/nm-segmented/nm-segmented.css +104 -0
  310. package/registry/ui/components/nm-segmented/nm-segmented.tsx +77 -0
  311. package/registry/ui/components/nm-select/nm-select.css +78 -0
  312. package/registry/ui/components/nm-select/nm-select.tsx +64 -0
  313. package/registry/ui/components/nm-separator/nm-separator.css +14 -0
  314. package/registry/ui/components/nm-separator/nm-separator.tsx +6 -0
  315. package/registry/ui/components/nm-side-panel/nm-side-panel.css +93 -0
  316. package/registry/ui/components/nm-side-panel/nm-side-panel.tsx +86 -0
  317. package/registry/ui/components/nm-slider/nm-slider.css +53 -0
  318. package/registry/ui/components/nm-slider/nm-slider.tsx +40 -0
  319. package/registry/ui/components/nm-small-icon-button/nm-small-icon-button.tsx +66 -0
  320. package/registry/ui/components/nm-status-bar/nm-status-bar.css +50 -0
  321. package/registry/ui/components/nm-status-bar/nm-status-bar.tsx +28 -0
  322. package/registry/ui/components/nm-switch/nm-switch.css +45 -0
  323. package/registry/ui/components/nm-switch/nm-switch.tsx +10 -0
  324. package/registry/ui/components/nm-table/nm-table.css +155 -0
  325. package/registry/ui/components/nm-table/nm-table.tsx +95 -0
  326. package/registry/ui/components/nm-tabs/nm-tabs.css +28 -0
  327. package/registry/ui/components/nm-tabs/nm-tabs.tsx +32 -0
  328. package/registry/ui/components/nm-textarea/nm-textarea.css +41 -0
  329. package/registry/ui/components/nm-textarea/nm-textarea.tsx +6 -0
  330. package/registry/ui/components/nm-toggle/nm-toggle.css +55 -0
  331. package/registry/ui/components/nm-toggle/nm-toggle.tsx +16 -0
  332. package/registry/ui/components/nm-toolbar/nm-toolbar.css +42 -0
  333. package/registry/ui/components/nm-toolbar/nm-toolbar.tsx +54 -0
  334. package/registry/ui/components/nm-tooltip/nm-tooltip.css +37 -0
  335. package/registry/ui/components/nm-tooltip/nm-tooltip.tsx +35 -0
  336. package/registry/ui/components/nm-top-bar/nm-top-bar.css +29 -0
  337. package/registry/ui/components/nm-top-bar/nm-top-bar.tsx +34 -0
  338. package/registry/ui/components/nordman-icon-button/nordman-icon-button.css +119 -0
  339. package/registry/ui/components/nordman-icon-button/nordman-icon-button.tsx +185 -0
  340. package/registry/ui/components/nordman-login/nordman-login.css +195 -0
  341. package/registry/ui/components/nordman-login/nordman-login.tsx +136 -0
  342. package/registry/ui/components/nordman-login-field/nordman-login-field.tsx +55 -0
  343. package/registry/ui/components/nordman-login-forgot/nordman-login-forgot.tsx +56 -0
  344. package/registry/ui/components/nordman-login-google/nordman-login-google.tsx +28 -0
  345. package/registry/ui/components/nordman-login-hero/nordman-login-hero.tsx +38 -0
  346. package/registry/ui/components/nordman-login-register/nordman-login-register.tsx +70 -0
  347. package/registry/ui/components/nordman-login-reset/nordman-login-reset.tsx +71 -0
  348. package/registry/ui/components/nordman-login-reveal/nordman-login-reveal.tsx +41 -0
  349. package/registry/ui/components/nordman-login-sign-in/nordman-login-sign-in.tsx +69 -0
  350. package/registry/ui/components/nordman-toggle/nordman-toggle.css +28 -0
  351. package/registry/ui/components/nordman-toggle/nordman-toggle.tsx +35 -0
  352. package/registry/ui/config/nm-ai.ts +59 -0
  353. package/registry/ui/config/nm-appearance.ts +275 -0
  354. package/registry/ui/config/nm-bar-overflow.ts +10 -0
  355. package/registry/ui/config/nm-button.ts +38 -0
  356. package/registry/ui/config/nm-chatbox-icons.ts +67 -0
  357. package/registry/ui/config/nm-chatbox.ts +42 -0
  358. package/registry/ui/config/nm-collection.ts +101 -0
  359. package/registry/ui/config/nm-composer.ts +39 -0
  360. package/registry/ui/config/nm-dropdown.ts +62 -0
  361. package/registry/ui/config/nm-field.ts +43 -0
  362. package/registry/ui/config/nm-icon-button.ts +35 -0
  363. package/registry/ui/config/nm-icons.ts +417 -0
  364. package/registry/ui/config/nm-list-item.ts +14 -0
  365. package/registry/ui/config/nm-message.ts +106 -0
  366. package/registry/ui/config/nm-modal.ts +76 -0
  367. package/registry/ui/config/nm-panel-bar.ts +11 -0
  368. package/registry/ui/config/nm-questionnaire.ts +53 -0
  369. package/registry/ui/config/nm-radius.ts +56 -0
  370. package/registry/ui/config/nm-rail-icons.ts +27 -0
  371. package/registry/ui/config/nm-segmented.ts +19 -0
  372. package/registry/ui/config/nm-side-panel.ts +16 -0
  373. package/registry/ui/config/nm-site-palette.ts +30 -0
  374. package/registry/ui/config/nm-small-icon-button.ts +17 -0
  375. package/registry/ui/config/nm-tabs.ts +9 -0
  376. package/registry/ui/config/nm-top-bar.ts +4 -0
  377. package/registry/ui/config/nordman-chrome.ts +14 -0
  378. package/registry/ui/config/nordman-login.ts +28 -0
  379. package/registry/ui/content/nm-modal.ts +5 -0
  380. package/registry/ui/content/nordman-login.ts +85 -0
  381. package/registry/ui/kit-logger.ts +1 -0
  382. package/registry/ui/lib/appearance/appearanceState.ts +240 -0
  383. package/registry/ui/lib/appearance/applyAppearance.ts +36 -0
  384. package/registry/ui/lib/appearance/cloudOrbAppearance.ts +36 -0
  385. package/registry/ui/lib/appearance/color.ts +96 -0
  386. package/registry/ui/lib/appearance/deriveTokens.ts +218 -0
  387. package/registry/ui/lib/appearance/index.ts +6 -0
  388. package/registry/ui/lib/appearance/markTokens.ts +49 -0
  389. package/registry/ui/lib/appearance/readLayoutMetrics.ts +28 -0
  390. package/registry/ui/lib/bar-overflow.ts +41 -0
  391. package/registry/ui/lib/logger.ts +53 -0
  392. package/registry/ui/lib/menu-motion.ts +187 -0
  393. package/registry/ui/lib/nm-class.ts +4 -0
  394. package/registry/ui/lib/nordman-ui-locale.ts +43 -0
  395. package/registry/ui/styles/interface-theme.css +196 -0
  396. package/registry/ui/styles/light-appearance.css +72 -0
  397. package/registry/ui/styles/tokens.css +424 -0
  398. package/registry/ui/styles/utilities.css +12 -0
@@ -0,0 +1,35 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { NM_MODAL_ACTION, NM_MODAL_CLASSES, NM_MODAL_FOOTER, NM_MODAL_SIZE, NM_MODAL_TITLE, type NmModalActionTone, type NmModalFooter, type NmModalSize, type NmModalTitleSize } from '../../config/nm-modal.ts';
4
+ import './nm-modal.css';
5
+ export declare function useReportSaveDirty(dirty: boolean, enabled?: boolean): void;
6
+ export declare function useTrackSave(): <T>(work: Promise<T>) => Promise<T>;
7
+ export type NmModalProps = {
8
+ open: boolean;
9
+ title: string;
10
+ titleSize?: NmModalTitleSize;
11
+ size?: NmModalSize;
12
+ footer?: NmModalFooter;
13
+ paneTitle?: ReactNode;
14
+ titleEnd?: ReactNode;
15
+ leading?: ReactNode;
16
+ onClose: () => void;
17
+ children: ReactNode;
18
+ menu?: ReactNode;
19
+ actions?: ReactNode;
20
+ testId?: string;
21
+ };
22
+ export declare function NmModal(props: NmModalProps): ReactNode;
23
+ export declare function NmModalAction(props: {
24
+ label?: string;
25
+ accessibleName?: string;
26
+ icon: NmIconId;
27
+ tone?: NmModalActionTone;
28
+ type?: 'button' | 'submit';
29
+ form?: string;
30
+ disabled?: boolean;
31
+ requireChange?: boolean;
32
+ testId?: string;
33
+ onClick?: () => void;
34
+ }): ReactNode;
35
+ export { NM_MODAL_ACTION, NM_MODAL_CLASSES, NM_MODAL_FOOTER, NM_MODAL_SIZE, NM_MODAL_TITLE };
@@ -0,0 +1,5 @@
1
+ import type { ComponentProps } from 'react';
2
+ /** The browser's own select, styled by NIF. Use it where the platform picker is the right control, such as on a phone. */
3
+ export declare function NmNativeSelect({ className, children, ...props }: ComponentProps<'select'>): import("react").JSX.Element;
4
+ export declare function NmNativeSelectOption(props: ComponentProps<'option'>): import("react").JSX.Element;
5
+ export declare function NmNativeSelectOptGroup(props: ComponentProps<'optgroup'>): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare const NM_PANEL_VARIANTS: readonly ['default', 'inset', 'plain'];
3
+ export type NmPanelVariant = (typeof NM_PANEL_VARIANTS)[number];
4
+ /** A region of the app, such as an inspector or a side panel: a header, content that scrolls, and a footer. */
5
+ export declare function NmPanel({ className, variant, ...props }: ComponentProps<'section'> & {
6
+ variant?: NmPanelVariant;
7
+ }): import("react").JSX.Element;
8
+ export declare function NmPanelHeader({ className, ...props }: ComponentProps<'header'>): import("react").JSX.Element;
9
+ export declare function NmPanelTitle({ className, ...props }: ComponentProps<'h2'>): import("react").JSX.Element;
10
+ export declare function NmPanelDescription({ className, ...props }: ComponentProps<'p'>): import("react").JSX.Element;
11
+ /** Buttons at the end of the header. */
12
+ export declare function NmPanelActions({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
13
+ export declare function NmPanelContent({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
14
+ export declare function NmPanelFooter({ className, ...props }: ComponentProps<'footer'>): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type NmSegmentedItem } from '../nm-segmented/nm-segmented.tsx';
3
+ import type { NmSegmentedTone } from '../../config/nm-segmented.ts';
4
+ import { NM_PANEL_BAR_LAYOUT } from '../../config/nm-panel-bar.ts';
5
+ export type NmPanelBarProps = {
6
+ label: string;
7
+ testId?: string;
8
+ items: readonly NmSegmentedItem[];
9
+ active: string;
10
+ toggleLabel: string;
11
+ toggleTestId?: string;
12
+ tone?: NmSegmentedTone;
13
+ layout?: (typeof NM_PANEL_BAR_LAYOUT)[keyof typeof NM_PANEL_BAR_LAYOUT];
14
+ onSelect: (id: string) => void;
15
+ trailing?: ReactNode;
16
+ };
17
+ export declare function NmPanelBar(props: NmPanelBarProps): ReactNode;
@@ -0,0 +1,8 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Popover as PopoverPrimitive } from '@base-ui/react/popover';
3
+ export declare function NmPopover(props: PopoverPrimitive.Root.Props): import("react").JSX.Element;
4
+ export declare function NmPopoverTrigger(props: PopoverPrimitive.Trigger.Props): import("react").JSX.Element;
5
+ export declare function NmPopoverContent({ className, align, alignOffset, side, sideOffset, ...props }: PopoverPrimitive.Popup.Props & Pick<PopoverPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>): import("react").JSX.Element;
6
+ export declare function NmPopoverHeader({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
7
+ export declare function NmPopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props): import("react").JSX.Element;
8
+ export declare function NmPopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { Progress as ProgressPrimitive } from '@base-ui/react/progress';
2
+ /** Base UI Progress, in the shadcn composition, styled by NIF tokens. */
3
+ export declare function NmProgress({ className, children, value, ...props }: ProgressPrimitive.Root.Props): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps } from 'react';
2
+ /**
3
+ * Rendered text: markdown, docs and long answers. Headings, paragraphs, lists, quotes, code, rules, links and
4
+ * tables take their type, space and colour from NIF tokens, so the plain elements inside it need no classes.
5
+ */
6
+ export declare function NmProse({ className, ...props }: ComponentProps<'article'>): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type NmQuestion, type NmQuestionnaireAnswers, type NmQuestionnaireShortcuts, type NmQuestionnaireVariant } from '../../config/nm-questionnaire.ts';
3
+ export type NmQuestionnaireProps = {
4
+ questions: readonly NmQuestion[];
5
+ /** Answers so far. Pass them with `onChange` to control the form, or to resume one. */
6
+ answers?: NmQuestionnaireAnswers;
7
+ onChange?: (answers: NmQuestionnaireAnswers) => void;
8
+ onSubmit: (answers: NmQuestionnaireAnswers) => void;
9
+ /** The step to show first. */
10
+ defaultStep?: number;
11
+ shortcuts?: NmQuestionnaireShortcuts;
12
+ variant?: NmQuestionnaireVariant;
13
+ submitLabel?: string;
14
+ /** After submit the form shows what was answered. */
15
+ submitted?: boolean;
16
+ };
17
+ export declare function NmQuestionnaire(props: NmQuestionnaireProps): ReactNode;
@@ -0,0 +1,4 @@
1
+ import { Radio as RadioPrimitive } from '@base-ui/react/radio';
2
+ import { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';
3
+ export declare function NmRadioGroup({ className, ...props }: RadioGroupPrimitive.Props): import("react").JSX.Element;
4
+ export declare function NmRadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { NmRailIconId } from '../../config/nm-rail-icons.ts';
3
+ export type NmRailIconProps = {
4
+ id: NmRailIconId;
5
+ };
6
+ export declare function NmRailIcon(props: NmRailIconProps): ReactNode;
@@ -0,0 +1,18 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * The handle that resizes a panel. Every NIF panel that sits beside other content has one. It follows the pointer,
4
+ * the arrow keys, Home and End, and Enter or a double click restores the default width.
5
+ * The limits are the target's own `min-width` and `max-width`, so tokens in CSS decide how far it goes.
6
+ */
7
+ export declare function NmResizeHandle({ target, edge, label, onSize, placement, className, }: {
8
+ /** The panel to resize. */
9
+ target: RefObject<HTMLElement | null>;
10
+ /** Which edge of the panel the handle is on. A panel on the right has its handle on the start edge. */
11
+ edge: 'start' | 'end';
12
+ label: string;
13
+ /** The new width in pixels, or null to restore the default. */
14
+ onSize: (px: number | null) => void;
15
+ /** `inside` pins the handle to the edge of its parent. `free` leaves placement to the layout. */
16
+ placement?: 'inside' | 'free';
17
+ className?: string;
18
+ }): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { NM_SEGMENTED_TONES, type NmSegmentedTone } from '../../config/nm-segmented.ts';
4
+ export type NmSegmentedItem = {
5
+ id: string;
6
+ label: string;
7
+ icon?: NmIconId;
8
+ imageSrc?: string;
9
+ iconOnly?: boolean;
10
+ };
11
+ export type NmSegmentedProps = {
12
+ items: readonly NmSegmentedItem[];
13
+ active: string;
14
+ tone?: NmSegmentedTone;
15
+ label: string;
16
+ testId?: string;
17
+ onSelect: (id: string) => void;
18
+ };
19
+ export declare function NmSegmented(props: NmSegmentedProps): ReactNode;
20
+ export { NM_SEGMENTED_TONES };
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+ import { Select as SelectPrimitive } from '@base-ui/react/select';
3
+ /**
4
+ * Base UI Select, in the shadcn composition, styled by NIF tokens. The choice of one value from a list that
5
+ * opens under the field. The list is the same surface as the dropdown menu.
6
+ */
7
+ export declare function NmSelect<Value = string>(props: SelectPrimitive.Root.Props<Value>): import("react").JSX.Element;
8
+ /** `bare` drops its own box, for a trigger that sits inside a field. */
9
+ export declare function NmSelectTrigger({ className, children, bare, ...props }: SelectPrimitive.Trigger.Props & {
10
+ bare?: boolean;
11
+ }): import("react").JSX.Element;
12
+ export declare function NmSelectValue(props: SelectPrimitive.Value.Props): import("react").JSX.Element;
13
+ /** `anchor` is the element the list lines up with. It defaults to the trigger. */
14
+ export declare function NmSelectContent({ className, children, anchor, ...props }: SelectPrimitive.Popup.Props & {
15
+ anchor?: HTMLElement | null;
16
+ }): import("react").JSX.Element;
17
+ export declare function NmSelectItem({ className, children, ...props }: SelectPrimitive.Item.Props & {
18
+ children: ReactNode;
19
+ }): import("react").JSX.Element;
20
+ export declare function NmSelectGroup(props: SelectPrimitive.Group.Props): import("react").JSX.Element;
21
+ export declare function NmSelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props): import("react").JSX.Element;
22
+ export declare function NmSelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { Separator as SeparatorPrimitive } from '@base-ui/react/separator';
2
+ export declare function NmSeparator({ className, orientation, ...props }: SeparatorPrimitive.Props): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { type ComponentProps } from 'react';
2
+ import { type NmSidePanelKind, type NmSidePanelSize } from '../../config/nm-side-panel.ts';
3
+ /**
4
+ * A view that holds a main area and a side panel next to it, such as a chat with an artifact beside it.
5
+ * It is the organ the side panel opens in.
6
+ */
7
+ export declare function NmWorkspace({ className, height, ...props }: ComponentProps<'div'> & {
8
+ height?: 'fill' | 'sm' | 'lg';
9
+ }): import("react").JSX.Element;
10
+ /** The main area. It takes the room the side panel leaves. */
11
+ export declare function NmWorkspaceMain({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
12
+ /** The content under a bar in the main area. It fills the height and scrolls. */
13
+ export declare function NmWorkspaceBody({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
14
+ /** A row under the body, such as the composer. */
15
+ export declare function NmWorkspaceFooter({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
16
+ /**
17
+ * The panel that opens beside the main area, for an app, code, an artifact, media, docs or markdown.
18
+ * `open` shows it. `size` sets how much of the view it takes, and the handle on its edge resizes it. Fill it with a toolbar and a body.
19
+ */
20
+ export declare function NmSidePanel({ className, open, size, label, resizable, style, children, ...props }: Omit<ComponentProps<'aside'>, 'aria-label'> & {
21
+ open?: boolean;
22
+ size?: NmSidePanelSize;
23
+ label: string;
24
+ resizable?: boolean;
25
+ }): import("react").JSX.Element;
26
+ /** The content under the toolbar. It fills the height and scrolls. */
27
+ export declare function NmSidePanelBody({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
28
+ /** One button per kind of content. Pressing one opens the panel on that kind. */
29
+ export declare function NmSidePanelKinds({ kinds, active, onSelect, }: {
30
+ kinds?: readonly NmSidePanelKind[];
31
+ active?: NmSidePanelKind | null;
32
+ onSelect: (kind: NmSidePanelKind) => void;
33
+ }): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { Slider as SliderPrimitive } from '@base-ui/react/slider';
2
+ /** `label` and `output` add a caption above the track, set like the caption of a Field. */
3
+ export declare function NmSlider({ className, defaultValue, value, min, max, label, output, ...props }: SliderPrimitive.Root.Props & {
4
+ label?: string;
5
+ output?: string;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { type NmSmallIconButtonTone } from '../../config/nm-small-icon-button.ts';
4
+ export type NmSmallIconButtonProps = {
5
+ label: string;
6
+ icon: NmIconId;
7
+ tone?: NmSmallIconButtonTone;
8
+ active?: boolean;
9
+ iconContent?: ReactNode;
10
+ testId?: string;
11
+ onClick?: () => void;
12
+ } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'aria-label' | 'children'>;
13
+ export declare const NmSmallIconButton: import("react").ForwardRefExoticComponent<{
14
+ label: string;
15
+ icon: NmIconId;
16
+ tone?: NmSmallIconButtonTone;
17
+ active?: boolean;
18
+ iconContent?: ReactNode;
19
+ testId?: string;
20
+ onClick?: () => void;
21
+ } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, "aria-label" | "children" | "onClick"> & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,8 @@
1
+ import type { ComponentProps } from 'react';
2
+ /** A thin bar at the bottom of a window for state: branch, errors, cursor position, connection. */
3
+ export declare function NmStatusBar({ className, ...props }: ComponentProps<'footer'>): import("react").JSX.Element;
4
+ /** One item. Give it `onClick` and it becomes a button. */
5
+ export declare function NmStatusBarItem({ className, onClick, children, ...props }: Omit<ComponentProps<'span'>, 'onClick'> & {
6
+ onClick?: () => void;
7
+ }): import("react").JSX.Element;
8
+ export declare function NmStatusBarSpacer({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { Switch as SwitchPrimitive } from '@base-ui/react/switch';
2
+ export declare function NmSwitch({ className, ...props }: SwitchPrimitive.Root.Props): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare const NM_TABLE_VARIANTS: readonly ['default', 'striped', 'lined', 'plain'];
3
+ export declare const NM_TABLE_SIZES: readonly ['default', 'sm'];
4
+ export type NmTableVariant = (typeof NM_TABLE_VARIANTS)[number];
5
+ export type NmTableSize = (typeof NM_TABLE_SIZES)[number];
6
+ type TableOptions = {
7
+ /** default has a line between rows. striped alternates the row fill. lined draws every cell. plain has no lines. */
8
+ variant?: NmTableVariant;
9
+ size?: NmTableSize;
10
+ /** Keeps the header in view while the body scrolls. Give the container a height with `maxHeight`. */
11
+ stickyHeader?: boolean;
12
+ /** The container's maximum height. The body scrolls past it. */
13
+ maxHeight?: string;
14
+ };
15
+ /** The shadcn Table composition, styled by NIF tokens. The container scrolls sideways when the table is wider than its space. */
16
+ export declare function NmTable({ className, variant, size, stickyHeader, maxHeight, ...props }: ComponentProps<'table'> & TableOptions): import("react").JSX.Element;
17
+ export declare function NmTableHeader({ className, ...props }: ComponentProps<'thead'>): import("react").JSX.Element;
18
+ export declare function NmTableBody({ className, ...props }: ComponentProps<'tbody'>): import("react").JSX.Element;
19
+ export declare function NmTableFooter({ className, ...props }: ComponentProps<'tfoot'>): import("react").JSX.Element;
20
+ /** A row. `selected` marks it chosen. `disabled` dims it and stops its hover. Give it `onClick` to make the whole row a target. */
21
+ export declare function NmTableRow({ className, selected, disabled, ...props }: ComponentProps<'tr'> & {
22
+ selected?: boolean;
23
+ disabled?: boolean;
24
+ }): import("react").JSX.Element;
25
+ export type NmSortDirection = 'asc' | 'desc' | 'none';
26
+ /** A column heading. Give it `sort` and `onSort` and it becomes a sort button. `textAlign="end"` is for numbers. */
27
+ export declare function NmTableHead({ className, textAlign, sort, onSort, children, ...props }: Omit<ComponentProps<'th'>, 'align'> & {
28
+ textAlign?: 'start' | 'center' | 'end';
29
+ sort?: NmSortDirection;
30
+ onSort?: () => void;
31
+ }): import("react").JSX.Element;
32
+ /** Cells stay on one line. Give `wrap` to a cell that holds a sentence, and it wraps and aligns to the top. */
33
+ export declare function NmTableCell({ className, textAlign, wrap, ...props }: Omit<ComponentProps<'td'>, 'align'> & {
34
+ textAlign?: 'start' | 'center' | 'end';
35
+ wrap?: boolean;
36
+ }): import("react").JSX.Element;
37
+ export declare function NmTableCaption({ className, ...props }: ComponentProps<'caption'>): import("react").JSX.Element;
38
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type NmTabItem } from '../../config/nm-tabs.ts';
3
+ export type NmTabsProps = {
4
+ label: string;
5
+ items: readonly NmTabItem[];
6
+ value: string;
7
+ onChange: (id: string) => void;
8
+ };
9
+ export declare function NmTabs(props: NmTabsProps): ReactNode;
@@ -0,0 +1,2 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare function NmTextarea({ className, ...props }: ComponentProps<'textarea'>): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
2
+ export declare const NM_TOGGLE_VARIANTS: readonly ['default', 'outline'];
3
+ export declare const NM_TOGGLE_SIZES: readonly ['sm', 'default', 'lg'];
4
+ export type NmToggleVariant = (typeof NM_TOGGLE_VARIANTS)[number];
5
+ export type NmToggleSize = (typeof NM_TOGGLE_SIZES)[number];
6
+ export declare function NmToggle({ className, variant, size, ...props }: TogglePrimitive.Props & {
7
+ variant?: NmToggleVariant;
8
+ size?: NmToggleSize;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ import { Toolbar as ToolbarPrimitive } from '@base-ui/react/toolbar';
3
+ import type { NmIconId } from '../../config/nm-icons.ts';
4
+ import { type NmIconButtonTone } from '../../config/nm-icon-button.ts';
5
+ /** Base UI Toolbar, in the shadcn composition, styled by NIF tokens. One tab stop, arrow keys move between controls. */
6
+ export declare function NmToolbar({ className, ...props }: ToolbarPrimitive.Root.Props): import("react").JSX.Element;
7
+ export declare function NmToolbarGroup({ className, ...props }: ToolbarPrimitive.Group.Props): import("react").JSX.Element;
8
+ /** A vertical line between groups, such as between two panes. It follows the Contrast setting. */
9
+ export declare function NmToolbarSeparator({ className, ...props }: ToolbarPrimitive.Separator.Props): import("react").JSX.Element;
10
+ /** Takes the free space, pushing what follows to the end. */
11
+ export declare function NmToolbarSpacer({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
12
+ /** An icon button, or a button with text. `label` is its accessible name. */
13
+ export declare function NmToolbarButton({ icon, label, tone, pressed, className, children, ...props }: Omit<ToolbarPrimitive.Button.Props, 'children'> & {
14
+ icon?: NmIconId;
15
+ label: string;
16
+ tone?: NmIconButtonTone;
17
+ pressed?: boolean;
18
+ children?: ReactNode;
19
+ }): import("react").JSX.Element;
20
+ /** A field in the bar that takes the free width, such as an address. */
21
+ export declare function NmToolbarInput({ className, ...props }: ToolbarPrimitive.Input.Props): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';
2
+ export declare function NmTooltipProvider({ delay, ...props }: TooltipPrimitive.Provider.Props): import("react").JSX.Element;
3
+ export declare function NmTooltip(props: TooltipPrimitive.Root.Props): import("react").JSX.Element;
4
+ export declare function NmTooltipTrigger(props: TooltipPrimitive.Trigger.Props): import("react").JSX.Element;
5
+ export declare function NmTooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from 'react';
2
+ export type NmTopBarProps = {
3
+ /** Controls on the leading side: mode, title, search, filters. */
4
+ children: ReactNode;
5
+ /** Controls on the trailing edge, such as the panel toggle. */
6
+ end?: ReactNode;
7
+ /** Narrow-screen control, such as the button that opens the rail. */
8
+ menu?: ReactNode;
9
+ endHidden?: boolean;
10
+ };
11
+ /** The one page bar. Chat, agents, work, artifacts, and the library pass their controls in. */
12
+ export declare function NmTopBar(props: NmTopBarProps): ReactNode;
@@ -0,0 +1,29 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { NM_ICON_BUTTON_TONES, type NmIconButtonTone } from '../../config/nm-icon-button.ts';
4
+ import { type NordmanChromeIconId } from '../../config/nordman-chrome.ts';
5
+ export declare const NORDMAN_ICON_BUTTON_VARIANTS: {
6
+ readonly line: "line";
7
+ readonly raised: "raised";
8
+ };
9
+ export type NordmanIconButtonVariant = (typeof NORDMAN_ICON_BUTTON_VARIANTS)[keyof typeof NORDMAN_ICON_BUTTON_VARIANTS];
10
+ export declare const NordmanIconButton: import("react").ForwardRefExoticComponent<{
11
+ label: string;
12
+ href?: string;
13
+ tone?: NmIconButtonTone;
14
+ variant?: NordmanIconButtonVariant;
15
+ testId?: string;
16
+ imageSrc?: string;
17
+ children?: ReactNode;
18
+ active?: boolean;
19
+ pressed?: boolean;
20
+ checked?: boolean;
21
+ busy?: boolean;
22
+ expanded?: boolean;
23
+ popup?: 'listbox';
24
+ controls?: string;
25
+ ariaDisabled?: boolean;
26
+ glyph?: NmIconId;
27
+ icon?: NordmanChromeIconId;
28
+ } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, "aria-label" | "children"> & import("react").RefAttributes<HTMLButtonElement>>;
29
+ export { NM_ICON_BUTTON_TONES };
@@ -0,0 +1,36 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type NordmanLoginView } from '../../config/nordman-login.ts';
3
+ import { type NordmanLoginShape } from '../nordman-login-hero/nordman-login-hero.tsx';
4
+ export type NordmanLoginProps = {
5
+ title: string;
6
+ view: NordmanLoginView;
7
+ error: string | null;
8
+ notice: string | null;
9
+ pending: boolean;
10
+ sent: boolean;
11
+ passwordMin: number;
12
+ onView: (view: NordmanLoginView) => void;
13
+ onSignIn: (input: {
14
+ username: string;
15
+ password: string;
16
+ }) => void;
17
+ onRegister: (input: {
18
+ username: string;
19
+ displayName: string;
20
+ password: string;
21
+ }) => void;
22
+ onRequestReset: (input: {
23
+ identifier: string;
24
+ }) => void;
25
+ onResetPassword: (input: {
26
+ password: string;
27
+ }) => void;
28
+ children?: ReactNode;
29
+ hideSwitch?: boolean;
30
+ after?: ReactNode;
31
+ shape: NordmanLoginShape;
32
+ /** Google-only sign-in via Supabase Auth (hides email/password UI). */
33
+ googleOnly?: boolean;
34
+ onContinueWithGoogle?: () => void;
35
+ };
36
+ export declare function NordmanLogin(props: NordmanLoginProps): ReactNode;
@@ -0,0 +1,13 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginFieldProps = {
3
+ id: string;
4
+ name: string;
5
+ label: string;
6
+ type: 'text' | 'email' | 'password';
7
+ autoComplete: string;
8
+ placeholder?: string;
9
+ minLength?: number;
10
+ required?: boolean;
11
+ accessory?: ReactNode;
12
+ };
13
+ export declare function NordmanLoginField(props: NordmanLoginFieldProps): ReactNode;
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginForgotProps = {
3
+ pending: boolean;
4
+ sent: boolean;
5
+ onRequestReset: (input: {
6
+ identifier: string;
7
+ }) => void;
8
+ };
9
+ export declare function NordmanLoginForgot(props: NordmanLoginForgotProps): ReactNode;
@@ -0,0 +1,6 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginGoogleProps = {
3
+ pending: boolean;
4
+ onContinueWithGoogle: () => void;
5
+ };
6
+ export declare function NordmanLoginGoogle(props: NordmanLoginGoogleProps): ReactNode;
@@ -0,0 +1,6 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginShape = 'square' | 'triangle' | 'circle';
3
+ /** The website hero. The app loads `nordman-ui.js` and `hero.css`, which live beside `site.css`. */
4
+ export declare function NordmanLoginHero(props: {
5
+ shape: NordmanLoginShape;
6
+ }): ReactNode;
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginRegisterProps = {
3
+ pending: boolean;
4
+ passwordMin: number;
5
+ onRegister: (input: {
6
+ username: string;
7
+ displayName: string;
8
+ password: string;
9
+ }) => void;
10
+ };
11
+ export declare function NordmanLoginRegister(props: NordmanLoginRegisterProps): ReactNode;
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginResetProps = {
3
+ pending: boolean;
4
+ passwordMin: number;
5
+ onResetPassword: (input: {
6
+ password: string;
7
+ }) => void;
8
+ };
9
+ export declare function NordmanLoginReset(props: NordmanLoginResetProps): ReactNode;
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from 'react';
2
+ export type NordmanLoginRevealProps = {
3
+ revealed: boolean;
4
+ onToggle: () => void;
5
+ };
6
+ export declare function NordmanLoginReveal(props: NordmanLoginRevealProps): ReactNode;
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from 'react';
2
+ export type NordmanLoginSignInProps = {
3
+ pending: boolean;
4
+ passwordMin: number;
5
+ onForgot: () => void;
6
+ onSignIn: (input: {
7
+ username: string;
8
+ password: string;
9
+ }) => void;
10
+ };
11
+ export declare function NordmanLoginSignIn(props: NordmanLoginSignInProps): ReactNode;
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from 'react';
2
+ export type NordmanToggleItem = {
3
+ id: string;
4
+ label: string;
5
+ href: string;
6
+ };
7
+ export type NordmanToggleProps = {
8
+ items: readonly NordmanToggleItem[];
9
+ active: string;
10
+ testId?: string;
11
+ };
12
+ export declare function NordmanToggle(props: NordmanToggleProps): ReactNode;
@@ -0,0 +1,44 @@
1
+ /** AI Elements for Nordman. Each is a composition of the kit's trace, message, dropdown and chatbox parts. */
2
+ import type { NmTraceStatus } from './nm-message.ts';
3
+ export declare const NM_AI_STATUS: readonly ['pending', 'running', 'done', 'error'];
4
+ export type NmAiStatus = (typeof NM_AI_STATUS)[number];
5
+ /** Trace lines show `running`, `error` and `pending`. A finished line carries no status. */
6
+ export declare function nmAiTraceStatus(status: NmAiStatus): NmTraceStatus | undefined;
7
+ export declare const NM_TOOL_STATES: readonly ['input-streaming', 'input-available', 'approval-requested', 'approval-responded', 'output-available', 'output-error', 'output-denied'];
8
+ export type NmToolState = (typeof NM_TOOL_STATES)[number];
9
+ export declare const NM_AI_BADGE_TONES: readonly ['neutral', 'ok', 'error', 'warn'];
10
+ export type NmAiBadgeTone = (typeof NM_AI_BADGE_TONES)[number];
11
+ export declare const NM_AI_CLASSES: {
12
+ readonly bubble: 'nm-ai-bubble';
13
+ readonly bubbleUser: 'nm-ai-bubble--user';
14
+ readonly turn: 'nm-ai-turn';
15
+ readonly turnUser: 'nm-ai-turn--user';
16
+ readonly turnBody: 'nm-ai-turn__body';
17
+ readonly turnFooter: 'nm-ai-turn__footer';
18
+ readonly item: 'nm-ai-item';
19
+ readonly itemMedia: 'nm-ai-item__media';
20
+ readonly itemBody: 'nm-ai-item__body';
21
+ readonly itemTitle: 'nm-ai-item__title';
22
+ readonly itemDescription: 'nm-ai-item__description';
23
+ readonly itemActions: 'nm-ai-item__actions';
24
+ readonly sheet: 'nm-ai-sheet';
25
+ readonly sheetHead: 'nm-ai-sheet__head';
26
+ readonly sheetBody: 'nm-ai-sheet__body';
27
+ readonly stack: 'nm-ai-stack';
28
+ readonly checkpoint: 'nm-ai-checkpoint';
29
+ readonly contextRows: 'nm-ai-context__rows';
30
+ readonly tree: 'nm-ai-tree';
31
+ readonly treeNode: 'nm-ai-tree__node';
32
+ readonly citation: 'nm-ai-citation';
33
+ readonly suggestions: 'nm-ai-suggestions';
34
+ readonly suggestion: 'nm-ai-suggestion';
35
+ readonly thread: 'nm-ai-thread';
36
+ readonly threadEmpty: 'nm-ai-thread__empty';
37
+ readonly threadJump: 'nm-ai-thread__jump';
38
+ readonly selector: 'nm-ai-selector';
39
+ readonly tests: 'nm-ai-tests';
40
+ readonly testRow: 'nm-ai-tests__row';
41
+ readonly frame: 'nm-ai-frame';
42
+ readonly steps: 'nm-ai-steps';
43
+ readonly stepsItem: 'nm-ai-steps__item';
44
+ };