@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,15 @@
1
+ /** One colour as a swatch. The colour picker and the theme list both draw it. */
2
+ export declare function NmColorSwatch({ color, shape }: {
3
+ color: string;
4
+ shape?: 'square' | 'round';
5
+ }): import("react").JSX.Element;
6
+ /** A colour field. The picker opens in a popover, drawn by NIF tokens around react-colorful. */
7
+ export declare function NmColorPicker({ value, onValueChange, swatches, label, caption, disabled, }: {
8
+ value: string;
9
+ onValueChange: (hex: string) => void;
10
+ swatches?: readonly string[];
11
+ label?: string;
12
+ /** A caption above the field, set like the caption of a Field. */
13
+ caption?: string;
14
+ disabled?: boolean;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import type { ReactNode } from 'react';
2
+ import { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';
3
+ /**
4
+ * Base UI Combobox, in the shadcn composition, styled by NIF tokens. A select you can search: type to filter the
5
+ * list, then choose. The list is the same surface as the Dropdown Menu and the Select.
6
+ */
7
+ export declare function NmCombobox<Value = string>(props: ComboboxPrimitive.Root.Props<Value>): import("react").JSX.Element;
8
+ /** The field you type in, with the button that opens the list. `bare` drops its own box, for use inside a Field. */
9
+ export declare function NmComboboxInput({ className, bare, showClear, ...props }: ComboboxPrimitive.Input.Props & {
10
+ bare?: boolean;
11
+ showClear?: boolean;
12
+ }): import("react").JSX.Element;
13
+ /** `anchor` is the element the list lines up with. It defaults to the input. */
14
+ export declare function NmComboboxContent({ className, children, anchor, ...props }: ComboboxPrimitive.Popup.Props & {
15
+ anchor?: HTMLElement | null;
16
+ }): import("react").JSX.Element;
17
+ /** The items. Give it a function of one item, and it draws the filtered list. */
18
+ export declare function NmComboboxList({ className, ...props }: ComboboxPrimitive.List.Props): import("react").JSX.Element;
19
+ export declare function NmComboboxItem({ className, children, ...props }: ComboboxPrimitive.Item.Props & {
20
+ children: ReactNode;
21
+ }): import("react").JSX.Element;
22
+ /** What the list says when nothing matches. */
23
+ export declare function NmComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props): import("react").JSX.Element;
24
+ export declare function NmComboboxGroup(props: ComboboxPrimitive.Group.Props): import("react").JSX.Element;
25
+ export declare function NmComboboxLabel({ className, ...props }: ComboboxPrimitive.GroupLabel.Props): import("react").JSX.Element;
26
+ export declare function NmComboboxSeparator({ className, ...props }: ComboboxPrimitive.Separator.Props): import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
+ import { Command as CommandPrimitive } from 'cmdk';
3
+ import { NmDialog } from '../nm-dialog/nm-dialog.tsx';
4
+ /**
5
+ * Command: search and run. The shadcn Command composition on cmdk, which gives filtering, arrow-key
6
+ * navigation and the listbox roles. Everything you see is NIF tokens.
7
+ */
8
+ export declare function NmCommand({ className, ...props }: ComponentProps<typeof CommandPrimitive>): import("react").JSX.Element;
9
+ export declare function NmCommandDialog({ title, description, children, ...props }: Omit<ComponentProps<typeof NmDialog>, 'children'> & {
10
+ title?: string;
11
+ description?: string;
12
+ children: ReactNode;
13
+ }): import("react").JSX.Element;
14
+ /** The search row: an icon, the field and a clear button once there is text. */
15
+ export declare function NmCommandInput({ className, value, defaultValue, onValueChange, clearLabel, ...props }: ComponentProps<typeof CommandPrimitive.Input> & {
16
+ clearLabel?: string;
17
+ defaultValue?: string;
18
+ }): import("react").JSX.Element;
19
+ /** Chips that narrow the list to one kind of result. */
20
+ export declare function NmCommandFilters({ items, value, onValueChange, label, }: {
21
+ items: readonly {
22
+ id: string;
23
+ label: string;
24
+ }[];
25
+ value: string;
26
+ onValueChange: (id: string) => void;
27
+ label?: string;
28
+ }): import("react").JSX.Element;
29
+ export declare function NmCommandList({ className, ...props }: ComponentProps<typeof CommandPrimitive.List>): import("react").JSX.Element;
30
+ export declare function NmCommandEmpty({ className, ...props }: ComponentProps<typeof CommandPrimitive.Empty>): import("react").JSX.Element;
31
+ export declare function NmCommandLoading({ className, children, ...props }: ComponentProps<typeof CommandPrimitive.Loading>): import("react").JSX.Element;
32
+ export declare function NmCommandGroup({ className, ...props }: ComponentProps<typeof CommandPrimitive.Group>): import("react").JSX.Element;
33
+ export declare function NmCommandSeparator({ className, ...props }: ComponentProps<typeof CommandPrimitive.Separator>): import("react").JSX.Element;
34
+ export declare function NmCommandItem({ className, children, ...props }: ComponentProps<typeof CommandPrimitive.Item>): import("react").JSX.Element;
35
+ /** Shown on the right of an item, and only while the item is selected. */
36
+ export declare function NmCommandItemActions({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
37
+ export declare function NmCommandShortcut({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type NmComposerAttachment, type NmComposerQueued } from '../../config/nm-composer.ts';
3
+ export type NmComposerProps = {
4
+ value: string;
5
+ onChange: (value: string) => void;
6
+ onSend: () => void;
7
+ /** While the agent answers, the send button becomes Stop. */
8
+ busy?: boolean;
9
+ onStop?: () => void;
10
+ placeholder?: string;
11
+ /** A card shown above the box, such as a usage warning. It stacks directly over the frame. */
12
+ notice?: ReactNode;
13
+ /** Messages waiting for the agent to finish. They stack above the text, oldest first. */
14
+ queue?: readonly NmComposerQueued[];
15
+ onEditQueued?: (id: string) => void;
16
+ onRemoveQueued?: (id: string) => void;
17
+ attachments?: readonly NmComposerAttachment[];
18
+ onRemoveAttachment?: (id: string) => void;
19
+ /** The add button on the left. Omit it to hide the button. */
20
+ onAdd?: () => void;
21
+ /** Dictation. Pressed while it listens. */
22
+ onMic?: () => void;
23
+ micActive?: boolean;
24
+ /** Voice mode. It shows while the box is empty. Typing swaps it for Send. */
25
+ onVoice?: () => void;
26
+ /** Replaces the add button, for a menu of what to add. Give the trigger the composer button class. */
27
+ addControl?: ReactNode;
28
+ /** Controls beside the add button, such as the model selector. */
29
+ start?: ReactNode;
30
+ disabled?: boolean;
31
+ testId?: string;
32
+ };
33
+ export declare function NmComposer(props: NmComposerProps): ReactNode;
@@ -0,0 +1,9 @@
1
+ import { ContextMenu as ContextMenuPrimitive } from '@base-ui/react/context-menu';
2
+ /**
3
+ * Base UI Context Menu: the menu that opens on right click or long press. Its items are the dropdown menu parts
4
+ * (NmDropdownMenuItem, NmDropdownMenuSub, NmDropdownMenuCheckboxItem and the rest).
5
+ */
6
+ export declare function NmContextMenu(props: ContextMenuPrimitive.Root.Props): import("react").JSX.Element;
7
+ /** The area that answers a right click. */
8
+ export declare function NmContextMenuTrigger({ className, ...props }: ContextMenuPrimitive.Trigger.Props): import("react").JSX.Element;
9
+ export declare function NmContextMenuContent({ className, ...props }: ContextMenuPrimitive.Popup.Props): import("react").JSX.Element;
@@ -0,0 +1,35 @@
1
+ import type { DateRange } from 'react-day-picker';
2
+ type Common = {
3
+ placeholder?: string;
4
+ invalid?: boolean;
5
+ disabled?: boolean;
6
+ label?: string;
7
+ className?: string;
8
+ };
9
+ /** A date field. The calendar opens in a popover, so it follows the theme as everything else does. */
10
+ export declare function NmDatePicker({ value, onValueChange, placeholder, ...rest }: Common & {
11
+ value?: Date;
12
+ onValueChange?: (date: Date | undefined) => void;
13
+ }): import("react").JSX.Element;
14
+ export declare function NmDateRangePicker({ value, onValueChange, placeholder, ...rest }: Common & {
15
+ value?: DateRange;
16
+ onValueChange?: (range: DateRange | undefined) => void;
17
+ }): import("react").JSX.Element;
18
+ /** A month field. Value is `YYYY-MM`. */
19
+ export declare function NmMonthPicker({ value, onValueChange, placeholder, ...rest }: Common & {
20
+ value?: string;
21
+ onValueChange?: (month: string) => void;
22
+ }): import("react").JSX.Element;
23
+ /** A time field in 24 hours. Value is `HH:mm`. */
24
+ export declare function NmTimePicker({ value, onValueChange, placeholder, minuteStep, ...rest }: Common & {
25
+ value?: string;
26
+ onValueChange?: (time: string) => void;
27
+ minuteStep?: number;
28
+ }): import("react").JSX.Element;
29
+ /** A date and a time in one field. */
30
+ export declare function NmDateTimePicker({ value, onValueChange, placeholder, minuteStep, ...rest }: Common & {
31
+ value?: Date;
32
+ onValueChange?: (date: Date | undefined) => void;
33
+ minuteStep?: number;
34
+ }): import("react").JSX.Element;
35
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';
3
+ /** Base UI Dialog, in the shadcn composition, styled by NIF tokens. */
4
+ export declare function NmDialog(props: DialogPrimitive.Root.Props): import("react").JSX.Element;
5
+ export declare function NmDialogTrigger(props: DialogPrimitive.Trigger.Props): import("react").JSX.Element;
6
+ export declare function NmDialogClose(props: DialogPrimitive.Close.Props): import("react").JSX.Element;
7
+ /** `size="full"` fills the screen, for a whole view. */
8
+ export declare function NmDialogContent({ className, children, size, ...props }: DialogPrimitive.Popup.Props & {
9
+ size?: 'default' | 'full';
10
+ }): import("react").JSX.Element;
11
+ export declare function NmDialogHeader({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
12
+ export declare function NmDialogTitle({ className, ...props }: DialogPrimitive.Title.Props): import("react").JSX.Element;
13
+ export declare function NmDialogDescription({ className, ...props }: DialogPrimitive.Description.Props): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ export type NmDropdownItem = {
4
+ id: string;
5
+ label?: string;
6
+ detail?: string;
7
+ /** Keyboard hint, such as ⌘K. Display only; the binding lives with the command. */
8
+ shortcut?: string;
9
+ icon?: NmIconId;
10
+ imageSrc?: string;
11
+ leading?: ReactNode;
12
+ separator?: boolean;
13
+ danger?: boolean;
14
+ disabled?: boolean;
15
+ checked?: boolean;
16
+ /** Publish row state. The row stays inactive while busy or live. */
17
+ mark?: 'idle' | 'busy' | 'live';
18
+ children?: readonly NmDropdownItem[];
19
+ };
20
+ export declare function isNmDropdownSeparator(item: NmDropdownItem): boolean;
21
+ export declare function nmDropdownSeparator(id: string): NmDropdownItem;
22
+ export declare function dropdownBranchPath(items: readonly NmDropdownItem[], id: string, trail?: readonly string[]): string[] | null;
23
+ /** Hover and click open this branch. They do not close it again. */
24
+ export declare function openDropdownBranch(items: readonly NmDropdownItem[], id: string): string[];
25
+ /** Opening a branch keeps only that branch and its parents. Closing it keeps the parents. */
26
+ export declare function nextExpandedBranches(items: readonly NmDropdownItem[], expanded: readonly string[], id: string): string[];
@@ -0,0 +1,12 @@
1
+ import { type NmDropdownItem } from './nm-dropdown-item';
2
+ export declare function findDropdownItem(items: readonly NmDropdownItem[], selected?: string | null): NmDropdownItem | undefined;
3
+ export declare function NmDropdownOptions({ items, selected, focusedOptionId, expandedIds, selectionMark, onSelect, onOpenBranch, onCloseBranches, }: {
4
+ items: readonly NmDropdownItem[];
5
+ selected?: string | null;
6
+ focusedOptionId?: string | null;
7
+ expandedIds?: readonly string[];
8
+ selectionMark?: 'check' | 'none';
9
+ onSelect: (id: string) => void;
10
+ onOpenBranch: (id: string) => void;
11
+ onCloseBranches: () => void;
12
+ }): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { type ReactNode, type Ref, type RefObject } from 'react';
2
+ export declare function NmDropdownPanel({ open, placement, className, id, label, panelRef, children, }: {
3
+ open: boolean;
4
+ placement: string;
5
+ className: string;
6
+ id: string;
7
+ label: string;
8
+ panelRef: Ref<HTMLUListElement>;
9
+ children: ReactNode;
10
+ }): ReactNode;
11
+ export declare function NmDropdownBranch({ open, label, anchorRef, children, }: {
12
+ open: boolean;
13
+ label?: string;
14
+ anchorRef: RefObject<HTMLElement | null>;
15
+ children: ReactNode;
16
+ }): ReactNode;
@@ -0,0 +1,55 @@
1
+ import { NM_DROPDOWN_ALIGN } from '../../config/nm-dropdown.ts';
2
+ export type NmDropdownBox = {
3
+ top: number;
4
+ left: number;
5
+ right: number;
6
+ bottom: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export type NmDropdownViewport = {
11
+ width: number;
12
+ height: number;
13
+ };
14
+ export type NmDropdownPlacement = {
15
+ top: number;
16
+ left: number;
17
+ maxHeight?: number;
18
+ };
19
+ /** Scroll cap for a panel anchored at `panelTop`; only needed when content exceeds this. */
20
+ export declare function nmDropdownViewportMaxHeight(input: {
21
+ trigger: Pick<NmDropdownBox, 'top' | 'bottom'>;
22
+ viewport: NmDropdownViewport;
23
+ panelTop: number;
24
+ gap?: number;
25
+ edgePadding?: number;
26
+ }): number;
27
+ export declare function placeNmDropdownPanel({ trigger, panel, viewport, align, gap, }: {
28
+ trigger: NmDropdownBox;
29
+ panel: Pick<NmDropdownBox, 'width' | 'height'>;
30
+ viewport: NmDropdownViewport;
31
+ align: (typeof NM_DROPDOWN_ALIGN)[keyof typeof NM_DROPDOWN_ALIGN];
32
+ gap?: number;
33
+ }): NmDropdownPlacement;
34
+ /** Opens below (or above) a history row; panel width matches the row pill. */
35
+ export declare function placeNmDropdownRowPanel({ row, panel, viewport, gap, }: {
36
+ row: NmDropdownBox;
37
+ panel: Pick<NmDropdownBox, 'height'>;
38
+ viewport: NmDropdownViewport;
39
+ gap?: number;
40
+ }): NmDropdownPlacement & {
41
+ width: number;
42
+ };
43
+ /** Places a submenu beside its parent menu, with the same gap as the trigger. */
44
+ export declare function placeNmDropdownSubpanel({ rowTop, rowBottom, panelLeft, panelRight, submenuWidth, submenuHeight, viewportWidth, viewportHeight, gap, }: {
45
+ rowTop: number;
46
+ rowBottom: number;
47
+ panelLeft: number;
48
+ panelRight: number;
49
+ submenuWidth: number;
50
+ submenuHeight: number;
51
+ viewportWidth: number;
52
+ viewportHeight: number;
53
+ gap?: number;
54
+ }): NmDropdownPlacement;
55
+ export declare function dropdownPortalHost(explicit: HTMLElement | null | undefined, trigger: HTMLElement | null): HTMLElement;
@@ -0,0 +1,31 @@
1
+ import { type ReactNode, type Ref } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { NM_DROPDOWN_ALIGN, NM_DROPDOWN_REVEAL, NM_DROPDOWN_TONE, NM_DROPDOWN_TRIGGER } from '../../config/nm-dropdown.ts';
4
+ import { type NmDropdownItem } from './nm-dropdown-item';
5
+ export type { NmDropdownItem };
6
+ export type NmDropdownProps = {
7
+ label: string;
8
+ items?: readonly NmDropdownItem[];
9
+ selected?: string | null;
10
+ testId?: string;
11
+ trigger?: (typeof NM_DROPDOWN_TRIGGER)[keyof typeof NM_DROPDOWN_TRIGGER];
12
+ tone?: (typeof NM_DROPDOWN_TONE)[keyof typeof NM_DROPDOWN_TONE];
13
+ align?: (typeof NM_DROPDOWN_ALIGN)[keyof typeof NM_DROPDOWN_ALIGN];
14
+ icon?: NmIconId;
15
+ imageSrc?: string;
16
+ displayLabel?: string;
17
+ /** Chip/text triggers show only the lead icon; `label` stays for accessibility. */
18
+ iconOnly?: boolean;
19
+ portal?: boolean;
20
+ portalRoot?: HTMLElement | null;
21
+ disabled?: boolean;
22
+ /** `hover` hides the trigger until the host with `data-nm-menu` is hovered or focused. */
23
+ reveal?: (typeof NM_DROPDOWN_REVEAL)[keyof typeof NM_DROPDOWN_REVEAL];
24
+ open?: boolean;
25
+ triggerClassName?: string;
26
+ triggerRef?: Ref<HTMLButtonElement>;
27
+ onOpenChange?: (open: boolean) => void;
28
+ onSelect?: (id: string) => void;
29
+ onBranchExpand?: (id: string) => void;
30
+ };
31
+ export declare function NmDropdown(props: NmDropdownProps): ReactNode;
@@ -0,0 +1,30 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Menu as MenuPrimitive } from '@base-ui/react/menu';
3
+ /** Base UI Menu, in the shadcn dropdown-menu composition, styled by NIF tokens. */
4
+ export declare function NmDropdownMenu(props: MenuPrimitive.Root.Props): import("react").JSX.Element;
5
+ export declare function NmDropdownMenuTrigger(props: MenuPrimitive.Trigger.Props): import("react").JSX.Element;
6
+ type PositionProps = Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>;
7
+ export declare function NmDropdownMenuContent({ align, alignOffset, side, sideOffset, className, ...props }: MenuPrimitive.Popup.Props & PositionProps): import("react").JSX.Element;
8
+ export declare function NmDropdownMenuGroup(props: MenuPrimitive.Group.Props): import("react").JSX.Element;
9
+ export declare function NmDropdownMenuLabel({ className, ...props }: MenuPrimitive.GroupLabel.Props): import("react").JSX.Element;
10
+ export declare function NmDropdownMenuItem({ className, variant, ...props }: MenuPrimitive.Item.Props & {
11
+ variant?: 'default' | 'destructive';
12
+ }): import("react").JSX.Element;
13
+ export declare function NmDropdownMenuSub(props: MenuPrimitive.SubmenuRoot.Props): import("react").JSX.Element;
14
+ export declare function NmDropdownMenuSubTrigger({ className, children, ...props }: MenuPrimitive.SubmenuTrigger.Props): import("react").JSX.Element;
15
+ export declare function NmDropdownMenuSubContent({ align, alignOffset, side, sideOffset, className, ...props }: MenuPrimitive.Popup.Props & PositionProps): import("react").JSX.Element;
16
+ export declare function NmDropdownMenuCheckboxItem({ className, children, ...props }: MenuPrimitive.CheckboxItem.Props): import("react").JSX.Element;
17
+ export declare function NmDropdownMenuRadioGroup(props: MenuPrimitive.RadioGroup.Props): import("react").JSX.Element;
18
+ export declare function NmDropdownMenuRadioItem({ className, children, ...props }: MenuPrimitive.RadioItem.Props): import("react").JSX.Element;
19
+ export declare function NmDropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props): import("react").JSX.Element;
20
+ export declare function NmDropdownMenuShortcut({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
21
+ /** Two lines in an item: the title, then a quieter description. */
22
+ export declare function NmDropdownMenuText({ title, description }: {
23
+ title: string;
24
+ description?: string;
25
+ }): import("react").JSX.Element;
26
+ /** A status dot at the start of an item. */
27
+ export declare function NmDropdownMenuDot({ status }: {
28
+ status?: 'ok' | 'error';
29
+ }): import("react").JSX.Element;
30
+ export {};
@@ -0,0 +1,52 @@
1
+ import { type KeyboardEventHandler, type ReactNode, type Ref } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ import { NM_FIELD_KINDS, NM_FIELD_LAYOUT, type NmFieldKind, type NmFieldLayout, type NmFieldOption } from '../../config/nm-field.ts';
4
+ import { type NmDropdownItem } from '../nm-dropdown/nm-dropdown.tsx';
5
+ export type NmFieldProps = {
6
+ label: string;
7
+ value: string;
8
+ onChange: (value: string) => void;
9
+ kind?: NmFieldKind;
10
+ layout?: NmFieldLayout;
11
+ caption?: string;
12
+ placeholder?: string;
13
+ icon?: NmIconId;
14
+ /** Mark shown inside the field, before the value. */
15
+ leading?: ReactNode;
16
+ leadingSize?: 'mark' | 'face';
17
+ /** Keeps the value in the primary text color when the field is read-only. */
18
+ emphasis?: boolean;
19
+ trailing?: ReactNode;
20
+ /** Ellipsis menu. Hidden until the field is hovered or focused. */
21
+ menuItems?: readonly NmDropdownItem[];
22
+ menuLabel?: string;
23
+ onMenuSelect?: (id: string) => void;
24
+ options?: readonly NmFieldOption[];
25
+ searchPlaceholder?: string;
26
+ /** What a searchable select says when nothing matches. */
27
+ emptyLabel?: string;
28
+ searchValue?: string;
29
+ onSearchChange?: (value: string) => void;
30
+ onAdd?: () => void;
31
+ addLabel?: string;
32
+ addIcon?: NmIconId;
33
+ testId?: string;
34
+ disabled?: boolean;
35
+ readOnly?: boolean;
36
+ name?: string;
37
+ id?: string;
38
+ autoComplete?: string;
39
+ minLength?: number;
40
+ maxLength?: number;
41
+ className?: string;
42
+ inputRef?: Ref<HTMLInputElement>;
43
+ describedBy?: string;
44
+ invalid?: boolean;
45
+ keyShortcuts?: string;
46
+ onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
47
+ onKeyUp?: KeyboardEventHandler<HTMLInputElement>;
48
+ onFocus?: () => void;
49
+ onBlur?: () => void;
50
+ };
51
+ export declare const NmField: import("react").ForwardRefExoticComponent<NmFieldProps & import("react").RefAttributes<HTMLDivElement>>;
52
+ export { NM_FIELD_KINDS, NM_FIELD_LAYOUT };
@@ -0,0 +1,18 @@
1
+ import type { ComponentProps } from 'react';
2
+ /** The shadcn Field family. NmField is the older all-in-one field. These parts compose any control into a form. */
3
+ export declare function NmFieldSet({ className, ...props }: ComponentProps<'fieldset'>): import("react").JSX.Element;
4
+ export declare function NmFieldLegend({ className, variant, ...props }: ComponentProps<'legend'> & {
5
+ variant?: 'legend' | 'label';
6
+ }): import("react").JSX.Element;
7
+ export declare function NmFieldGroup({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
8
+ export declare function NmFormField({ className, orientation, invalid, disabled, ...props }: ComponentProps<'div'> & {
9
+ orientation?: 'vertical' | 'horizontal';
10
+ invalid?: boolean;
11
+ disabled?: boolean;
12
+ }): import("react").JSX.Element;
13
+ export declare function NmFieldContent({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
14
+ export declare function NmFieldLabel({ className, ...props }: ComponentProps<'label'>): import("react").JSX.Element;
15
+ export declare function NmFieldTitle({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
16
+ export declare function NmFieldDescription({ className, ...props }: ComponentProps<'p'>): import("react").JSX.Element;
17
+ export declare function NmFieldError({ className, children, ...props }: ComponentProps<'div'>): import("react").JSX.Element | null;
18
+ export declare function NmFieldSeparator({ className, children, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ /** Images, or any media, in a grid. Each item is a button, so choosing one opens it, for example in the side panel. */
3
+ export declare function NmGallery({ className, ...props }: ComponentProps<'ul'>): import("react").JSX.Element;
4
+ export declare function NmGalleryItem({ className, label, selected, children, ...props }: Omit<ComponentProps<'button'>, 'children'> & {
5
+ label: string;
6
+ selected?: boolean;
7
+ children: ReactNode;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card';
2
+ /** Base UI Preview Card, in the shadcn hover-card composition, styled by NIF tokens. */
3
+ export declare function NmHoverCard(props: PreviewCardPrimitive.Root.Props): import("react").JSX.Element;
4
+ export declare function NmHoverCardTrigger(props: PreviewCardPrimitive.Trigger.Props): import("react").JSX.Element;
5
+ export declare function NmHoverCardContent({ className, side, sideOffset, align, alignOffset, ...props }: PreviewCardPrimitive.Popup.Props & Pick<PreviewCardPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type NmIconId } from '../../config/nm-icons.ts';
3
+ export type NmIconProps = {
4
+ id: NmIconId;
5
+ className?: string;
6
+ };
7
+ export declare function NmIcon(props: NmIconProps): ReactNode;
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare const NM_LUCIDE_FILLED_IDS: Set<string>;
3
+ export declare function hasNmLucide(id: string): boolean;
4
+ export declare function NmLucide({ id, className }: {
5
+ id: string;
6
+ className?: string;
7
+ }): ReactNode;
@@ -0,0 +1,21 @@
1
+ import type { MouseEvent as ReactMouseEvent, ReactNode, Ref } from 'react';
2
+ import type { NmIconId } from '../../config/nm-icons.ts';
3
+ export type NmIconBorderProps = {
4
+ label: string;
5
+ icon?: NmIconId;
6
+ imageSrc?: string;
7
+ pressed?: boolean;
8
+ checked?: boolean;
9
+ disabled?: boolean;
10
+ ariaDisabled?: boolean;
11
+ busy?: boolean;
12
+ expanded?: boolean;
13
+ popup?: 'listbox';
14
+ controls?: string;
15
+ buttonRef?: Ref<HTMLButtonElement>;
16
+ className?: string;
17
+ children?: ReactNode;
18
+ testId?: string;
19
+ onClick?: (event: ReactMouseEvent<HTMLButtonElement>) => void;
20
+ };
21
+ export declare function NmIconBorder(props: NmIconBorderProps): ReactNode;
@@ -0,0 +1,5 @@
1
+ import { Input as InputPrimitive } from '@base-ui/react/input';
2
+ /** Base UI Input, in the shadcn composition. Text, email, password, number, search, tel, url, date, time and more. */
3
+ export declare function NmInput({ className, type, ...props }: InputPrimitive.Props & {
4
+ type?: string;
5
+ }): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Input as InputPrimitive } from '@base-ui/react/input';
3
+ /** An input with something attached: an icon, a unit, a button. The group draws the frame. */
4
+ export declare function NmInputGroup({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
5
+ export declare function NmInputGroupAddon({ className, align, ...props }: ComponentProps<'div'> & {
6
+ align?: 'inline-start' | 'inline-end';
7
+ }): import("react").JSX.Element;
8
+ export declare function NmInputGroupText({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
9
+ export declare function NmInputGroupInput({ className, ...props }: InputPrimitive.Props): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare function NmLabel({ className, ...props }: ComponentProps<'label'>): import("react").JSX.Element;
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type NmDropdownItem } from '../nm-dropdown/nm-dropdown.tsx';
3
+ export type NmListItemProps = {
4
+ title: string;
5
+ detail?: string;
6
+ /** Brand mark or face shown beside the title. */
7
+ leading?: ReactNode;
8
+ /** `mark` is a 20px app logo. `icon` is a tool glyph. `face` is the companion portrait. */
9
+ leadingSize?: 'mark' | 'icon' | 'face';
10
+ /** Connect or disconnect control. Stays visible; it does not collapse into the menu. */
11
+ action?: ReactNode;
12
+ menuLabel?: string;
13
+ /** Ellipsis menu. The shared dropdown, usually edit and delete. */
14
+ menuItems?: readonly NmDropdownItem[];
15
+ onMenuSelect?: (id: string) => void;
16
+ locked?: boolean;
17
+ /** Lock shown at rest. Hover replaces it with the menu. */
18
+ resting?: 'lock';
19
+ onMenu?: () => void;
20
+ /** Opens the row. The title becomes the control. */
21
+ onOpen?: () => void;
22
+ };
23
+ export declare function NmListItem(props: NmListItemProps): ReactNode;
@@ -0,0 +1,9 @@
1
+ import { Menubar as MenubarPrimitive } from '@base-ui/react/menubar';
2
+ import { Menu as MenuPrimitive } from '@base-ui/react/menu';
3
+ /**
4
+ * Base UI Menubar, in the shadcn composition. A row of menus that open on click and then on hover.
5
+ * Each menu is an NmDropdownMenu, so its content and items are the dropdown parts.
6
+ */
7
+ export declare function NmMenubar({ className, ...props }: MenubarPrimitive.Props): import("react").JSX.Element;
8
+ export declare function NmMenubarMenu(props: MenuPrimitive.Root.Props): import("react").JSX.Element;
9
+ export declare function NmMenubarTrigger({ className, ...props }: MenuPrimitive.Trigger.Props): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ export type NmMessageActionsProps = {
3
+ children: ReactNode;
4
+ testId?: string;
5
+ revealOnHover?: boolean;
6
+ };
7
+ export declare function NmMessageActions(props: NmMessageActionsProps): ReactNode;
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ export type NmMessageMetaProps = {
3
+ label: string;
4
+ testId?: string;
5
+ expandable?: boolean;
6
+ expanded?: boolean;
7
+ onToggle?: () => void;
8
+ live?: boolean;
9
+ };
10
+ export declare function NmMessageMeta(props: NmMessageMetaProps): ReactNode;
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare function NmTextShimmer(props: {
3
+ children: string;
4
+ }): ReactNode;
@@ -0,0 +1,58 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type NmTraceGlyphKind, type NmTraceStatus } from '../../config/nm-message.ts';
3
+ export declare function NmTraceGlyph(props: {
4
+ kind: NmTraceGlyphKind;
5
+ spin?: boolean;
6
+ }): ReactNode;
7
+ export declare function NmTrace(props: {
8
+ children: ReactNode;
9
+ testId?: string;
10
+ ariaLabel?: string;
11
+ role?: 'region' | 'group';
12
+ }): ReactNode;
13
+ export declare function NmTraceCollapsible(props: {
14
+ children: ReactNode;
15
+ open?: boolean;
16
+ defaultOpen?: boolean;
17
+ onOpenChange?: (open: boolean) => void;
18
+ testId?: string;
19
+ }): ReactNode;
20
+ export declare function NmTraceCollapsibleTrigger(props: {
21
+ children: ReactNode;
22
+ ariaLabel?: string;
23
+ action?: ReactNode;
24
+ testId?: string;
25
+ }): ReactNode;
26
+ export declare function NmTraceCollapsibleContent(props: {
27
+ children: ReactNode;
28
+ keepMounted?: boolean;
29
+ asList?: boolean;
30
+ testId?: string;
31
+ }): ReactNode;
32
+ export declare function NmTraceLine(props: {
33
+ children: ReactNode;
34
+ status?: NmTraceStatus;
35
+ as?: 'div' | 'span' | 'li';
36
+ testId?: string;
37
+ role?: 'status';
38
+ ariaLive?: 'polite';
39
+ }): ReactNode;
40
+ export declare function NmTraceIcon(props: {
41
+ children: ReactNode;
42
+ }): ReactNode;
43
+ export declare function NmTraceTitle(props: {
44
+ children: ReactNode;
45
+ shimmer?: boolean;
46
+ }): ReactNode;
47
+ export declare function NmTraceDescription(props: {
48
+ children: ReactNode;
49
+ ariaHidden?: boolean;
50
+ testId?: string;
51
+ }): ReactNode;
52
+ export declare function NmTraceBadges(props: {
53
+ children: ReactNode;
54
+ ariaHidden?: boolean;
55
+ }): ReactNode;
56
+ export declare function NmTraceBadge(props: {
57
+ children: ReactNode;
58
+ }): ReactNode;