@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,14 @@
1
+ export const NM_LIST_ITEM_CLASSES = {
2
+ root: 'nm-list-item',
3
+ marked: 'nm-list-item--marked',
4
+ icon: 'nm-list-item--icon',
5
+ face: 'nm-list-item--face',
6
+ identity: 'nm-list-item__identity',
7
+ lead: 'nm-list-item__lead',
8
+ title: 'nm-list-item__title',
9
+ open: 'nm-list-item__open',
10
+ detail: 'nm-list-item__detail',
11
+ action: 'nm-list-item__action',
12
+ menu: 'nm-list-item__menu',
13
+ rest: 'nm-list-item__rest',
14
+ } as const;
@@ -0,0 +1,106 @@
1
+ import type { NmIconId } from './nm-icons.ts';
2
+
3
+ export const NM_MESSAGE_ICON_IDS = [
4
+ 'chevron',
5
+ 'volume',
6
+ 'copy',
7
+ 'folder-in',
8
+ 'fork',
9
+ 'refresh',
10
+ ] as const;
11
+
12
+ export type NmMessageIconId = (typeof NM_MESSAGE_ICON_IDS)[number];
13
+
14
+ export const NM_MESSAGE_ICON_GLYPH = {
15
+ chevron: 'chevron',
16
+ volume: 'volume',
17
+ copy: 'copy',
18
+ 'folder-in': 'folder-in',
19
+ fork: 'fork',
20
+ refresh: 'reload',
21
+ } as const satisfies Record<NmMessageIconId, NmIconId>;
22
+
23
+ export const NM_MESSAGE_ICON_SRC = {
24
+ chevron: '/interface/message/chevron.svg',
25
+ volume: '/interface/message/volume.svg',
26
+ copy: '/interface/message/copy.svg',
27
+ 'folder-in': '/interface/header/folder.svg',
28
+ fork: '/interface/message/fork.svg',
29
+ refresh: '/interface/message/refresh.svg',
30
+ } as const satisfies Record<NmMessageIconId, string>;
31
+
32
+ export const NM_TRACE_STATUSES = ['running', 'error', 'pending'] as const;
33
+
34
+ export type NmTraceStatus = (typeof NM_TRACE_STATUSES)[number];
35
+
36
+ export const NM_TRACE_GLYPH_PATHS = {
37
+ read: 'M4 2.5h6l2 2V13.5H4zM6 7.5h4M6 10h3',
38
+ write: 'M11.5 2.5l2 2L6 12H4v-2z',
39
+ command: 'M3 5l3 3-3 3M8 12h5',
40
+ search: 'M7 3.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7zM10 10l3 3',
41
+ browse:
42
+ 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zM2.5 8h11M8 2.5c1.4 1.6 2 3.4 2 5.5s-.6 3.9-2 5.5c-1.4-1.6-2-3.4-2-5.5s.6-3.9 2-5.5z',
43
+ preview: 'M4 3.5v9l8-4.5z',
44
+ skill: 'M4 2.5h6l2 2V13.5H4zM6 7h4M6 9.5h3',
45
+ tool: 'M9.5 2.5a2.5 2.5 0 0 0-2 4L3 11l2 2 4.5-4.5a2.5 2.5 0 1 0 0-6z',
46
+ plan: 'M3.5 4.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM12.5 8.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM5 6h4.5a2 2 0 0 1 2 2v0a2 2 0 0 1-2 2H6.5a2 2 0 0 0-2 2v0a2 2 0 0 0 2 2H11',
47
+ todo: 'M3.5 4.5h9M3.5 8h9M3.5 11.5h6',
48
+ completed: 'M3 5l1.5 1.5L7.5 3.5M9.5 5h4M3 10.5l1.5 1.5 3-3M9.5 10.5h4',
49
+ source:
50
+ 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zM2.5 8h11M8 2.5c1.4 1.6 2 3.4 2 5.5s-.6 3.9-2 5.5c-1.4-1.6-2-3.4-2-5.5s.6-3.9 2-5.5z',
51
+ external: 'M5 11L11 5M6.5 5H11v4.5',
52
+ check: 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zM5.6 8.1l1.6 1.6 3.4-3.4',
53
+ dot: 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zM8 6.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z',
54
+ circle: 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11z',
55
+ alert: 'M8 2.5a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zM8 5.2v3.3M8 10.8h.01',
56
+ loader: 'M13.5 8a5.5 5.5 0 1 1-1.61-3.89',
57
+ } as const;
58
+
59
+ export type NmTraceGlyphKind = keyof typeof NM_TRACE_GLYPH_PATHS;
60
+
61
+ export const NM_MESSAGE_CLASSES = {
62
+ root: 'nm-message',
63
+ user: 'nm-message--user',
64
+ assistant: 'nm-message--assistant',
65
+ stack: 'nm-message__stack',
66
+ stackUser: 'nm-message__stack--user',
67
+ bubble: 'nm-message__bubble',
68
+ body: 'nm-message__body',
69
+ flow: 'nm-message__flow',
70
+ status: 'nm-message__status',
71
+ tools: 'nm-message__tools',
72
+ toolLine: 'nm-message__tool-line',
73
+ toolsBody: 'nm-message__tools-body',
74
+ trace: 'nm-trace',
75
+ traceCollapsible: 'nm-trace__collapsible',
76
+ traceHeader: 'nm-trace__header',
77
+ traceTrigger: 'nm-trace__trigger',
78
+ traceContent: 'nm-trace__content',
79
+ traceLine: 'nm-trace__line',
80
+ traceIcon: 'nm-trace__icon',
81
+ traceIconSpin: 'nm-trace__icon--spin',
82
+ traceTitle: 'nm-trace__title',
83
+ traceDescription: 'nm-trace__description',
84
+ traceBadges: 'nm-trace__badges',
85
+ traceBadge: 'nm-trace__badge',
86
+ traceLink: 'nm-trace__link',
87
+ traceAction: 'nm-trace__action',
88
+ think: 'nm-message__think',
89
+ work: 'nm-message__work',
90
+ workItem: 'nm-message__work-item',
91
+ workError: 'nm-message__work-error',
92
+ previewCard: 'nm-preview-card',
93
+ previewBuilding: 'nm-preview-card--building',
94
+ previewBar: 'nm-preview-card__bar',
95
+ previewTitle: 'nm-preview-card__title',
96
+ previewStage: 'nm-preview-card__stage',
97
+ previewFrame: 'nm-preview-card__frame',
98
+ meta: 'nm-message-meta',
99
+ metaLabel: 'nm-message-meta__label',
100
+ metaChevron: 'nm-message-meta__chevron',
101
+ shimmer: 'nm-text-shimmer',
102
+ icon: 'nm-message-icon',
103
+ actions: 'nm-message-actions',
104
+ actionsReveal: 'nm-message-actions--reveal',
105
+ approval: 'nm-approval',
106
+ } as const;
@@ -0,0 +1,76 @@
1
+ export const NM_MODAL_TITLE = {
2
+ section: 'section',
3
+ page: 'page',
4
+ } as const;
5
+
6
+ export type NmModalTitleSize = (typeof NM_MODAL_TITLE)[keyof typeof NM_MODAL_TITLE];
7
+
8
+ export const NM_MODAL_SIZE = {
9
+ simple: 'simple',
10
+ menu: 'menu',
11
+ wide: 'wide',
12
+ } as const;
13
+
14
+ export type NmModalSize = (typeof NM_MODAL_SIZE)[keyof typeof NM_MODAL_SIZE];
15
+
16
+ export const NM_MODAL_FOOTER = {
17
+ modal: 'modal',
18
+ pane: 'pane',
19
+ } as const;
20
+
21
+ export type NmModalFooter = (typeof NM_MODAL_FOOTER)[keyof typeof NM_MODAL_FOOTER];
22
+
23
+ export const NM_MODAL_ACTION = {
24
+ quiet: 'quiet',
25
+ primary: 'primary',
26
+ } as const;
27
+
28
+ export type NmModalActionTone = (typeof NM_MODAL_ACTION)[keyof typeof NM_MODAL_ACTION];
29
+
30
+ /** Matches `--nm-rail-scroll-idle` (`--reveal` × 3). The thumb hides again after this rest. */
31
+ export const NM_MODAL_SCROLL_IDLE_MS = 750;
32
+
33
+ export const NM_MODAL_CLASSES = {
34
+ layer: 'nm-modal-layer',
35
+ root: 'nm-modal',
36
+ simple: 'nm-modal--simple',
37
+ menu: 'nm-modal--menu',
38
+ wide: 'nm-modal--wide',
39
+ backdrop: 'nm-modal__backdrop',
40
+ title: 'nm-modal__title',
41
+ titlePage: 'nm-modal__title--page',
42
+ titleBar: 'nm-modal__title-bar',
43
+ layout: 'nm-modal__layout',
44
+ nav: 'nm-modal__menu',
45
+ list: 'nm-modal__list',
46
+ item: 'nm-modal__item',
47
+ main: 'nm-modal__main',
48
+ body: 'nm-modal__body',
49
+ paneTitle: 'nm-modal__pane-title',
50
+ paneBack: 'nm-modal__pane-back',
51
+ form: 'nm-modal__form',
52
+ heading: 'nm-modal__heading',
53
+ groups: 'nm-modal__groups',
54
+ group: 'nm-modal__group',
55
+ listLoose: 'nm-modal__list--loose',
56
+ field: 'nm-modal__field',
57
+ label: 'nm-modal__label',
58
+ control: 'nm-modal__control',
59
+ search: 'nm-modal__search',
60
+ toolbar: 'nm-modal__toolbar',
61
+ add: 'nm-modal__add',
62
+ row: 'nm-modal__row',
63
+ rowDetail: 'nm-modal__row-detail',
64
+ rowMenu: 'nm-modal__row-menu',
65
+ help: 'nm-modal__help',
66
+ footer: 'nm-modal__footer',
67
+ footerPane: 'nm-modal__footer--pane',
68
+ actions: 'nm-modal__actions',
69
+ actionsSplit: 'nm-modal__actions--split',
70
+ actionsEnd: 'nm-modal__actions-end',
71
+ action: 'nm-modal__action',
72
+ actionIcon: 'nm-modal__action--icon',
73
+ actionQuiet: 'nm-modal__action--quiet',
74
+ actionPrimary: 'nm-modal__action--primary',
75
+ tabs: 'nm-modal__tabs',
76
+ } as const;
@@ -0,0 +1,11 @@
1
+ export const NM_PANEL_BAR_LAYOUT = {
2
+ icons: 'icons',
3
+ } as const;
4
+
5
+ export type NmPanelBarLayout = (typeof NM_PANEL_BAR_LAYOUT)[keyof typeof NM_PANEL_BAR_LAYOUT];
6
+
7
+ export const NM_PANEL_BAR_CLASSES = {
8
+ root: 'nm-panel-bar',
9
+ icons: 'nm-panel-bar--icons',
10
+ actions: 'nm-panel-bar__actions',
11
+ } as const;
@@ -0,0 +1,53 @@
1
+ /** Questionnaire: an agent asks one or more questions and the person answers them in steps. */
2
+ export const NM_QUESTIONNAIRE_SHORTCUTS = ['none', 'letters', 'numbers'] as const;
3
+ export type NmQuestionnaireShortcuts = (typeof NM_QUESTIONNAIRE_SHORTCUTS)[number];
4
+
5
+ export const NM_QUESTIONNAIRE_VARIANTS = ['card', 'plain'] as const;
6
+ export type NmQuestionnaireVariant = (typeof NM_QUESTIONNAIRE_VARIANTS)[number];
7
+
8
+ export type NmQuestionChoice = { value: string; label: string; description?: string };
9
+
10
+ export type NmQuestion = {
11
+ name: string;
12
+ title: string;
13
+ description?: string;
14
+ choices: readonly NmQuestionChoice[];
15
+ multiple?: boolean;
16
+ required?: boolean;
17
+ /** A freeform answer beside the fixed choices. It needs a visible label. */
18
+ input?: { label: string; placeholder?: string };
19
+ };
20
+
21
+ export type NmQuestionAnswer = { values: readonly string[]; text: string };
22
+ export type NmQuestionnaireAnswers = Readonly<Record<string, NmQuestionAnswer>>;
23
+
24
+ export const NM_QUESTIONNAIRE_COPY = {
25
+ previous: 'Previous',
26
+ next: 'Next',
27
+ skip: 'Skip',
28
+ submit: 'Submit',
29
+ required: 'Choose an answer to continue.',
30
+ progress: (index: number, total: number) => `Question ${index + 1} of ${total}`,
31
+ skipped: 'Skipped',
32
+ } as const;
33
+
34
+ export const NM_QUESTIONNAIRE_CLASSES = {
35
+ root: 'nm-questionnaire',
36
+ card: 'nm-questionnaire--card',
37
+ progress: 'nm-questionnaire__progress',
38
+ progressLabel: 'nm-questionnaire__progress-label',
39
+ item: 'nm-questionnaire__item',
40
+ title: 'nm-questionnaire__title',
41
+ description: 'nm-questionnaire__description',
42
+ choices: 'nm-questionnaire__choices',
43
+ choice: 'nm-questionnaire__choice',
44
+ input: 'nm-questionnaire__input',
45
+ choiceBody: 'nm-questionnaire__choice-body',
46
+ choiceLabel: 'nm-questionnaire__choice-label',
47
+ choiceDescription: 'nm-questionnaire__choice-description',
48
+ mark: 'nm-questionnaire__mark',
49
+ key: 'nm-questionnaire__key',
50
+ error: 'nm-questionnaire__error',
51
+ actions: 'nm-questionnaire__actions',
52
+ summary: 'nm-questionnaire__summary',
53
+ } as const;
@@ -0,0 +1,56 @@
1
+ /** Border-radius SSOT — authoritative CSS lives in `styles/tokens.css` (after `--nm-icon-control`). */
2
+
3
+ export const NM_RADIUS_SCALE_VAR = '--nm-radius-scale' as const;
4
+
5
+ export const NM_RADIUS_PRIMITIVE_PX = {
6
+ sm: 4,
7
+ md: 8,
8
+ lg: 12,
9
+ } as const;
10
+
11
+ /** Space steps added to smart control radius for larger surfaces (rulebook §6). */
12
+ export const NM_RADIUS_SEMANTIC_OFFSET_SPACE = {
13
+ row: '--nm-space-4',
14
+ menu: '--nm-space-8',
15
+ field: '--nm-space-12',
16
+ composer: '--nm-space-24',
17
+ } as const;
18
+
19
+ export const NM_RADIUS_CSS_VARS = {
20
+ sm: '--nm-radius-sm',
21
+ md: '--nm-radius-md',
22
+ lg: '--nm-radius-lg',
23
+ control: '--nm-control-radius',
24
+ composer: '--nm-composer-radius',
25
+ field: '--nm-field-radius',
26
+ menu: '--nm-menu-radius',
27
+ row: '--nm-row-radius',
28
+ } as const;
29
+
30
+ /** Must match `tokens.css` — validated by `nm-radius.test.ts`. */
31
+ export const NM_RADIUS_FORMULAS = {
32
+ control: 'calc(var(--nm-icon-control) / 2 * var(--nm-radius-scale))',
33
+ composer: 'var(--nm-radius-lg)',
34
+ field: 'var(--nm-control-r)',
35
+ menu: 'var(--nm-radius-lg)',
36
+ row: 'var(--nm-control-r)',
37
+ } as const;
38
+
39
+ export const NM_RADIUS_PRIMITIVE_FORMULAS = {
40
+ sm: 'calc(4px * var(--nm-radius-scale))',
41
+ md: 'calc(8px * var(--nm-radius-scale))',
42
+ lg: 'calc(12px * var(--nm-radius-scale))',
43
+ } as const;
44
+
45
+ /** A control and the menu it opens share one radius rule. Defined in `tokens.css`. */
46
+ export const NM_CONTROL_MENU_CSS_VARS = {
47
+ pad: '--nm-menu-pad',
48
+ menuRadius: '--nm-control-menu-radius',
49
+ optionRadius: '--nm-control-option-radius',
50
+ inset: '--nm-control-inset',
51
+ optionInset: '--nm-control-option-inset',
52
+ panelPad: '--nm-panel-pad',
53
+ panelItemRadius: '--nm-panel-item-radius',
54
+ rowInline: '--nm-row-inline',
55
+ rowInlineEnd: '--nm-row-inline-end',
56
+ } as const;
@@ -0,0 +1,27 @@
1
+ export const NM_RAIL_ICON_IDS = [
2
+ 'plus',
3
+ 'folder',
4
+ 'chats',
5
+ 'bot',
6
+ 'app',
7
+ 'spreadsheet',
8
+ 'library',
9
+ 'settings',
10
+ 'search',
11
+ 'plusSm',
12
+ ] as const;
13
+
14
+ export type NmRailIconId = (typeof NM_RAIL_ICON_IDS)[number];
15
+
16
+ export const NM_RAIL_ICON_SRC = {
17
+ plus: '/interface/rail/plus.svg',
18
+ folder: '/interface/rail/folder.svg',
19
+ chats: '/interface/rail/chats.svg',
20
+ bot: '/interface/rail/bot.svg',
21
+ app: '/interface/rail/app.svg',
22
+ spreadsheet: '/interface/rail/spreadsheet.svg',
23
+ library: '/interface/rail/library.svg',
24
+ settings: '/interface/rail/settings.svg',
25
+ search: '/interface/rail/search.svg',
26
+ plusSm: '/interface/rail/plus-sm.svg',
27
+ } as const satisfies Record<NmRailIconId, string>;
@@ -0,0 +1,19 @@
1
+ export const NM_SEGMENTED_TONES = {
2
+ fill: 'fill',
3
+ line: 'line',
4
+ pills: 'pills',
5
+ track: 'track',
6
+ } as const;
7
+
8
+ export type NmSegmentedTone = (typeof NM_SEGMENTED_TONES)[keyof typeof NM_SEGMENTED_TONES];
9
+
10
+ export const NM_SEGMENTED_CLASSES = {
11
+ root: 'nm-segmented',
12
+ fill: 'nm-segmented--fill',
13
+ line: 'nm-segmented--line',
14
+ pills: 'nm-segmented--pills',
15
+ track: 'nm-segmented--track',
16
+ item: 'nm-segmented__item',
17
+ itemIcon: 'nm-segmented__item--icon',
18
+ icon: 'nm-segmented__icon',
19
+ } as const;
@@ -0,0 +1,16 @@
1
+ import type { NmIconId } from './nm-icons.ts';
2
+
3
+ /** What the side panel can show. Each kind has an icon, so a toolbar can open it. */
4
+ export const NM_SIDE_PANEL_KINDS = [
5
+ { id: 'app', label: 'App', icon: 'app' },
6
+ { id: 'code', label: 'Code', icon: 'code' },
7
+ { id: 'files', label: 'Files', icon: 'folder' },
8
+ { id: 'artifact', label: 'Artifact', icon: 'layers' },
9
+ { id: 'media', label: 'Media', icon: 'image' },
10
+ { id: 'docs', label: 'Docs', icon: 'file-text' },
11
+ { id: 'markdown', label: 'Markdown', icon: 'file-code' },
12
+ ] as const satisfies readonly { id: string; label: string; icon: NmIconId }[];
13
+
14
+ export type NmSidePanelKind = (typeof NM_SIDE_PANEL_KINDS)[number]['id'];
15
+ export const NM_SIDE_PANEL_SIZES = ['narrow', 'default', 'wide'] as const;
16
+ export type NmSidePanelSize = (typeof NM_SIDE_PANEL_SIZES)[number];
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The website palette in `assets/tokens.css`, for code that writes colours inline or into iframes
3
+ * and cannot read a stylesheet. `nm-site-palette.spec.ts` fails if the two differ.
4
+ */
5
+ export const NM_SITE_PALETTE = {
6
+ dark: {
7
+ canvas: '#000000',
8
+ fg: '#ededed',
9
+ muted: '#a1a1a1',
10
+ subtle: '#a1a1a1',
11
+ stroke: '#707070',
12
+ line: '#1f1f1f',
13
+ lineStrong: '#2e2e2e',
14
+ panel: '#1a1a1a',
15
+ raised: '#0a0a0a',
16
+ inset: '#1a1a1a',
17
+ },
18
+ light: {
19
+ canvas: '#ffffff',
20
+ fg: '#171717',
21
+ muted: '#666666',
22
+ subtle: '#666666',
23
+ stroke: '#666666',
24
+ line: '#ebebeb',
25
+ lineStrong: '#e0e0e0',
26
+ panel: '#f2f2f2',
27
+ raised: '#fafafa',
28
+ inset: '#f2f2f2',
29
+ },
30
+ } as const;
@@ -0,0 +1,17 @@
1
+ import { NM_ICON_BUTTON_CLASSES, NM_ICON_BUTTON_TONES } from './nm-icon-button.ts';
2
+
3
+ export const NM_SMALL_ICON_BUTTON_TONES = {
4
+ solid: 'solid',
5
+ quiet: 'quiet',
6
+ } as const;
7
+
8
+ export type NmSmallIconButtonTone =
9
+ (typeof NM_SMALL_ICON_BUTTON_TONES)[keyof typeof NM_SMALL_ICON_BUTTON_TONES];
10
+
11
+ /** Class names of the shared icon button. Quiet and solid are tones of that button. */
12
+ export const NM_SMALL_ICON_BUTTON_CLASSES = {
13
+ root: NM_ICON_BUTTON_CLASSES.root,
14
+ solid: NM_ICON_BUTTON_CLASSES[NM_ICON_BUTTON_TONES.solid],
15
+ quiet: NM_ICON_BUTTON_CLASSES[NM_ICON_BUTTON_TONES.quiet],
16
+ active: NM_ICON_BUTTON_CLASSES.active,
17
+ } as const;
@@ -0,0 +1,9 @@
1
+ export const NM_TABS_CLASSES = {
2
+ root: 'nm-tabs',
3
+ item: 'nm-tabs__item',
4
+ } as const;
5
+
6
+ export type NmTabItem = {
7
+ id: string;
8
+ label: string;
9
+ };
@@ -0,0 +1,4 @@
1
+ export const NM_TOP_BAR_CLASSES = {
2
+ root: 'nm-header',
3
+ end: 'nm-header__end',
4
+ } as const;
@@ -0,0 +1,14 @@
1
+ export const NORDMAN_CHROME_ICON_IDS = ['plus', 'user'] as const;
2
+
3
+ export type NordmanChromeIconId = (typeof NORDMAN_CHROME_ICON_IDS)[number];
4
+
5
+ export const NORDMAN_CHROME_ICONS = {
6
+ plus: {
7
+ viewBox: '0 0 20 20',
8
+ path: 'M4.16667 10H15.8333M10 4.16667V15.8333',
9
+ },
10
+ user: {
11
+ viewBox: '0 0 20 20',
12
+ path: 'M15.8333 17.5V15.8333C15.8333 14.9493 15.4821 14.1014 14.857 13.4763C14.2319 12.8512 13.3841 12.5 12.5 12.5H7.5C6.61594 12.5 5.7681 12.8512 5.14298 13.4763C4.51786 14.1014 4.16667 14.9493 4.16667 15.8333V17.5M13.3333 5.83333C13.3333 7.67428 11.8409 9.16667 10 9.16667C8.15905 9.16667 6.66667 7.67428 6.66667 5.83333C6.66667 3.99238 8.15905 2.5 10 2.5C11.8409 2.5 13.3333 3.99238 13.3333 5.83333Z',
13
+ },
14
+ } as const satisfies Record<NordmanChromeIconId, { viewBox: string; path: string }>;
@@ -0,0 +1,28 @@
1
+ export const NORDMAN_LOGIN_VIEWS = {
2
+ signIn: 'signIn',
3
+ register: 'register',
4
+ forgot: 'forgot',
5
+ reset: 'reset',
6
+ } as const;
7
+
8
+ export type NordmanLoginView = (typeof NORDMAN_LOGIN_VIEWS)[keyof typeof NORDMAN_LOGIN_VIEWS];
9
+
10
+ export const NORDMAN_LOGIN_FORM_ID = 'nm-login-form';
11
+
12
+ export const NORDMAN_LOGIN_FIELDS = {
13
+ username: 'username',
14
+ password: 'password',
15
+ displayName: 'displayName',
16
+ registerUsername: 'register-username',
17
+ registerPassword: 'register-password',
18
+ confirmPassword: 'confirm-password',
19
+ resetPassword: 'reset-password',
20
+ } as const;
21
+
22
+ export const NORDMAN_LOGIN_REVEAL = {
23
+ viewBox: '0 0 24 24',
24
+ show: 'M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z',
25
+ hide: 'M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z',
26
+ } as const;
27
+
28
+ export const NORDMAN_LOGIN_INTERFACE = 'nordman';
@@ -0,0 +1,5 @@
1
+ import { getNordmanUiLocale, isEnglishNordmanLocale } from '../lib/nordman-ui-locale.ts';
2
+
3
+ export function nmModalSavedLabel(): string {
4
+ return isEnglishNordmanLocale(getNordmanUiLocale()) ? 'Saved' : 'Sparat';
5
+ }
@@ -0,0 +1,85 @@
1
+ import { getNordmanUiLocale, isEnglishNordmanLocale } from '../lib/nordman-ui-locale.ts';
2
+
3
+ const nordmanLoginCopySv = {
4
+ skip: 'Hoppa till innehållet',
5
+ identifier: 'Email',
6
+ identifierPlaceholder: 'name@mail.com',
7
+ password: 'Lösenord',
8
+ passwordPlaceholder: '••••',
9
+ confirmPassword: 'Bekräfta lösenord',
10
+ forgot: 'Glömt lösenord?',
11
+ forgotSubmit: 'Skicka länk',
12
+ forgotPending: 'Skickar…',
13
+ forgotSent: 'Om kontot finns skickar vi en länk för att välja ett nytt lösenord.',
14
+ showPassword: 'Visa lösenord',
15
+ hidePassword: 'Dölj lösenord',
16
+ submit: 'Logga in',
17
+ pending: 'Loggar in…',
18
+ continueWithGoogle: 'Fortsätt med Google',
19
+ googlePending: 'Öppnar Google…',
20
+ registerPrompt: 'Inget konto?',
21
+ registerAction: 'Skapa konto',
22
+ signInPrompt: 'Har du redan konto?',
23
+ signInAction: 'Logga in',
24
+ displayName: 'Visningsnamn',
25
+ registerSubmit: 'Skapa konto',
26
+ registerPending: 'Skapar konto…',
27
+ resetSubmit: 'Spara nytt lösenord',
28
+ resetPending: 'Sparar…',
29
+ resetDone: 'Lösenordet är uppdaterat. Logga in.',
30
+ mismatch: 'Lösenorden matchar inte.',
31
+ mail: 'Kunde inte skicka mejlet just nu.',
32
+ resetInvalid: 'Länken är ogiltig eller har gått ut.',
33
+ registerEmailInUse: 'Det finns redan ett konto med den här e-postadressen.',
34
+ registerDone: 'Kolla mejlet för att bekräfta kontot.',
35
+ registerDoneReady: 'Kontot är skapat. Logga in.',
36
+ } as const;
37
+
38
+ const nordmanLoginCopyEn: Record<keyof typeof nordmanLoginCopySv, string> = {
39
+ skip: 'Skip to content',
40
+ identifier: 'Email',
41
+ identifierPlaceholder: 'name@mail.com',
42
+ password: 'Password',
43
+ passwordPlaceholder: '••••',
44
+ confirmPassword: 'Confirm password',
45
+ forgot: 'Forgot password?',
46
+ forgotSubmit: 'Send link',
47
+ forgotPending: 'Sending…',
48
+ forgotSent: 'If the account exists we will send a link to choose a new password.',
49
+ showPassword: 'Show password',
50
+ hidePassword: 'Hide password',
51
+ submit: 'Log in',
52
+ pending: 'Logging in…',
53
+ continueWithGoogle: 'Continue with Google',
54
+ googlePending: 'Opening Google…',
55
+ registerPrompt: 'No account?',
56
+ registerAction: 'Create account',
57
+ signInPrompt: 'Already have an account?',
58
+ signInAction: 'Log in',
59
+ displayName: 'Display name',
60
+ registerSubmit: 'Create account',
61
+ registerPending: 'Creating account…',
62
+ resetSubmit: 'Save new password',
63
+ resetPending: 'Saving…',
64
+ resetDone: 'The password is updated. Log in.',
65
+ mismatch: 'The passwords do not match.',
66
+ mail: 'Could not send the email right now.',
67
+ resetInvalid: 'The link is invalid or has expired.',
68
+ registerEmailInUse: 'An account with this email already exists.',
69
+ registerDone: 'Check your email to confirm the account.',
70
+ registerDoneReady: 'The account is created. Log in.',
71
+ };
72
+
73
+ export type NordmanLoginCopy = Record<keyof typeof nordmanLoginCopySv, string>;
74
+
75
+ export function getNordmanLoginCopy(locale?: string | null): NordmanLoginCopy {
76
+ return isEnglishNordmanLocale(locale ?? getNordmanUiLocale())
77
+ ? nordmanLoginCopyEn
78
+ : nordmanLoginCopySv;
79
+ }
80
+
81
+ export const nordmanLoginCopy: NordmanLoginCopy = new Proxy({} as NordmanLoginCopy, {
82
+ get(_target, prop) {
83
+ return getNordmanLoginCopy()[prop as keyof NordmanLoginCopy];
84
+ },
85
+ });
@@ -0,0 +1 @@
1
+ export { createLogger } from './lib/logger.ts';