@moldable-ai/ui 0.2.19 → 0.2.21

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 (464) hide show
  1. package/dist/catalog/catalog-coverage.d.ts +15 -0
  2. package/dist/catalog/catalog-coverage.d.ts.map +1 -0
  3. package/dist/catalog/catalog-coverage.js +44 -0
  4. package/dist/catalog/catalog-manifest.d.ts +6 -0
  5. package/dist/catalog/catalog-manifest.d.ts.map +1 -0
  6. package/dist/catalog/catalog-manifest.js +117 -0
  7. package/dist/catalog/catalog-types.d.ts +64 -0
  8. package/dist/catalog/catalog-types.d.ts.map +1 -0
  9. package/dist/catalog/catalog-types.js +20 -0
  10. package/dist/catalog/component-catalog.d.ts +14 -0
  11. package/dist/catalog/component-catalog.d.ts.map +1 -0
  12. package/dist/catalog/component-catalog.js +49 -0
  13. package/dist/catalog/core-catalog-exclusions.d.ts +8 -0
  14. package/dist/catalog/core-catalog-exclusions.d.ts.map +1 -0
  15. package/dist/catalog/core-catalog-exclusions.js +151 -0
  16. package/dist/catalog/core-catalog.d.ts +2 -0
  17. package/dist/catalog/core-catalog.d.ts.map +1 -0
  18. package/dist/catalog/core-catalog.js +19 -0
  19. package/dist/catalog/core-collection-stories.d.ts +3 -0
  20. package/dist/catalog/core-collection-stories.d.ts.map +1 -0
  21. package/dist/catalog/core-collection-stories.js +42 -0
  22. package/dist/catalog/core-control-stories.d.ts +3 -0
  23. package/dist/catalog/core-control-stories.d.ts.map +1 -0
  24. package/dist/catalog/core-control-stories.js +94 -0
  25. package/dist/catalog/core-feedback-stories.d.ts +3 -0
  26. package/dist/catalog/core-feedback-stories.d.ts.map +1 -0
  27. package/dist/catalog/core-feedback-stories.js +50 -0
  28. package/dist/catalog/core-foundation-stories.d.ts +3 -0
  29. package/dist/catalog/core-foundation-stories.d.ts.map +1 -0
  30. package/dist/catalog/core-foundation-stories.js +53 -0
  31. package/dist/catalog/core-navigation-stories.d.ts +3 -0
  32. package/dist/catalog/core-navigation-stories.d.ts.map +1 -0
  33. package/dist/catalog/core-navigation-stories.js +25 -0
  34. package/dist/catalog/core-overlay-stories.d.ts +3 -0
  35. package/dist/catalog/core-overlay-stories.d.ts.map +1 -0
  36. package/dist/catalog/core-overlay-stories.js +20 -0
  37. package/dist/catalog/index.d.ts +7 -0
  38. package/dist/catalog/index.d.ts.map +1 -0
  39. package/dist/catalog/index.js +6 -0
  40. package/dist/components/app-error-boundary.d.ts +1 -0
  41. package/dist/components/app-error-boundary.d.ts.map +1 -1
  42. package/dist/components/app-error-boundary.js +13 -0
  43. package/dist/components/chat/chat-image-lightbox.d.ts +9 -0
  44. package/dist/components/chat/chat-image-lightbox.d.ts.map +1 -0
  45. package/dist/components/chat/chat-image-lightbox.js +9 -0
  46. package/dist/components/chat/chat-message.d.ts +19 -1
  47. package/dist/components/chat/chat-message.d.ts.map +1 -1
  48. package/dist/components/chat/chat-message.js +66 -16
  49. package/dist/components/chat/chat-messages.d.ts +5 -2
  50. package/dist/components/chat/chat-messages.d.ts.map +1 -1
  51. package/dist/components/chat/chat-messages.js +61 -6
  52. package/dist/components/chat/chat-panel.d.ts +49 -6
  53. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  54. package/dist/components/chat/chat-panel.js +196 -163
  55. package/dist/components/chat/conversation-history.d.ts +39 -5
  56. package/dist/components/chat/conversation-history.d.ts.map +1 -1
  57. package/dist/components/chat/conversation-history.js +192 -26
  58. package/dist/components/chat/index.d.ts +2 -2
  59. package/dist/components/chat/index.d.ts.map +1 -1
  60. package/dist/components/chat/index.js +1 -1
  61. package/dist/components/chat/tool-handlers.d.ts.map +1 -1
  62. package/dist/components/chat/tool-handlers.js +40 -2
  63. package/dist/components/chat/vertical-scroll-fade.d.ts +6 -0
  64. package/dist/components/chat/vertical-scroll-fade.d.ts.map +1 -0
  65. package/dist/components/chat/vertical-scroll-fade.js +12 -0
  66. package/dist/components/native-capabilities/bluetooth-panel-helpers.d.ts +9 -0
  67. package/dist/components/native-capabilities/bluetooth-panel-helpers.d.ts.map +1 -0
  68. package/dist/components/native-capabilities/bluetooth-panel-helpers.js +37 -0
  69. package/dist/components/native-capabilities/bluetooth-panel.d.ts +56 -0
  70. package/dist/components/native-capabilities/bluetooth-panel.d.ts.map +1 -0
  71. package/dist/components/native-capabilities/bluetooth-panel.js +470 -0
  72. package/dist/components/native-capabilities/camera-preview.d.ts +39 -0
  73. package/dist/components/native-capabilities/camera-preview.d.ts.map +1 -0
  74. package/dist/components/native-capabilities/camera-preview.js +228 -0
  75. package/dist/components/native-capabilities/capability-badge.d.ts +23 -0
  76. package/dist/components/native-capabilities/capability-badge.d.ts.map +1 -0
  77. package/dist/components/native-capabilities/capability-badge.js +39 -0
  78. package/dist/components/native-capabilities/capability-matrix.d.ts +14 -0
  79. package/dist/components/native-capabilities/capability-matrix.d.ts.map +1 -0
  80. package/dist/components/native-capabilities/capability-matrix.js +97 -0
  81. package/dist/components/native-capabilities/clipboard-button.d.ts +26 -0
  82. package/dist/components/native-capabilities/clipboard-button.d.ts.map +1 -0
  83. package/dist/components/native-capabilities/clipboard-button.js +99 -0
  84. package/dist/components/native-capabilities/device-io-controls.d.ts +4 -0
  85. package/dist/components/native-capabilities/device-io-controls.d.ts.map +1 -0
  86. package/dist/components/native-capabilities/device-io-controls.js +28 -0
  87. package/dist/components/native-capabilities/device-list.d.ts +20 -0
  88. package/dist/components/native-capabilities/device-list.d.ts.map +1 -0
  89. package/dist/components/native-capabilities/device-list.js +14 -0
  90. package/dist/components/native-capabilities/display-map.d.ts +23 -0
  91. package/dist/components/native-capabilities/display-map.d.ts.map +1 -0
  92. package/dist/components/native-capabilities/display-map.js +114 -0
  93. package/dist/components/native-capabilities/haptic-button.d.ts +26 -0
  94. package/dist/components/native-capabilities/haptic-button.d.ts.map +1 -0
  95. package/dist/components/native-capabilities/haptic-button.js +94 -0
  96. package/dist/components/native-capabilities/hid-panel.d.ts +40 -0
  97. package/dist/components/native-capabilities/hid-panel.d.ts.map +1 -0
  98. package/dist/components/native-capabilities/hid-panel.js +373 -0
  99. package/dist/components/native-capabilities/index.d.ts +27 -0
  100. package/dist/components/native-capabilities/index.d.ts.map +1 -0
  101. package/dist/components/native-capabilities/index.js +26 -0
  102. package/dist/components/native-capabilities/live-indicator.d.ts +15 -0
  103. package/dist/components/native-capabilities/live-indicator.d.ts.map +1 -0
  104. package/dist/components/native-capabilities/live-indicator.js +26 -0
  105. package/dist/components/native-capabilities/local-auth-button.d.ts +33 -0
  106. package/dist/components/native-capabilities/local-auth-button.d.ts.map +1 -0
  107. package/dist/components/native-capabilities/local-auth-button.js +115 -0
  108. package/dist/components/native-capabilities/location-panel.d.ts +29 -0
  109. package/dist/components/native-capabilities/location-panel.d.ts.map +1 -0
  110. package/dist/components/native-capabilities/location-panel.js +146 -0
  111. package/dist/components/native-capabilities/microphone-meter.d.ts +35 -0
  112. package/dist/components/native-capabilities/microphone-meter.d.ts.map +1 -0
  113. package/dist/components/native-capabilities/microphone-meter.js +244 -0
  114. package/dist/components/native-capabilities/midi-monitor.d.ts +54 -0
  115. package/dist/components/native-capabilities/midi-monitor.d.ts.map +1 -0
  116. package/dist/components/native-capabilities/midi-monitor.js +534 -0
  117. package/dist/components/native-capabilities/native-capability-panel.d.ts +11 -0
  118. package/dist/components/native-capabilities/native-capability-panel.d.ts.map +1 -0
  119. package/dist/components/native-capabilities/native-capability-panel.js +28 -0
  120. package/dist/components/native-capabilities/notification-panel.d.ts +24 -0
  121. package/dist/components/native-capabilities/notification-panel.d.ts.map +1 -0
  122. package/dist/components/native-capabilities/notification-panel.js +124 -0
  123. package/dist/components/native-capabilities/power-blocker-controller.d.ts +19 -0
  124. package/dist/components/native-capabilities/power-blocker-controller.d.ts.map +1 -0
  125. package/dist/components/native-capabilities/power-blocker-controller.js +83 -0
  126. package/dist/components/native-capabilities/power-panel.d.ts +67 -0
  127. package/dist/components/native-capabilities/power-panel.d.ts.map +1 -0
  128. package/dist/components/native-capabilities/power-panel.js +309 -0
  129. package/dist/components/native-capabilities/readout.d.ts +10 -0
  130. package/dist/components/native-capabilities/readout.d.ts.map +1 -0
  131. package/dist/components/native-capabilities/readout.js +11 -0
  132. package/dist/components/native-capabilities/screen-share-preview.d.ts +36 -0
  133. package/dist/components/native-capabilities/screen-share-preview.d.ts.map +1 -0
  134. package/dist/components/native-capabilities/screen-share-preview.js +191 -0
  135. package/dist/components/native-capabilities/secure-storage-panel.d.ts +36 -0
  136. package/dist/components/native-capabilities/secure-storage-panel.d.ts.map +1 -0
  137. package/dist/components/native-capabilities/secure-storage-panel.js +193 -0
  138. package/dist/components/native-capabilities/serial-console.d.ts +64 -0
  139. package/dist/components/native-capabilities/serial-console.d.ts.map +1 -0
  140. package/dist/components/native-capabilities/serial-console.js +399 -0
  141. package/dist/components/native-capabilities/shortcut-recorder.d.ts +35 -0
  142. package/dist/components/native-capabilities/shortcut-recorder.d.ts.map +1 -0
  143. package/dist/components/native-capabilities/shortcut-recorder.js +217 -0
  144. package/dist/components/native-capabilities/stream-log.d.ts +35 -0
  145. package/dist/components/native-capabilities/stream-log.d.ts.map +1 -0
  146. package/dist/components/native-capabilities/stream-log.js +65 -0
  147. package/dist/components/native-capabilities/system-audio-monitor.d.ts +34 -0
  148. package/dist/components/native-capabilities/system-audio-monitor.d.ts.map +1 -0
  149. package/dist/components/native-capabilities/system-audio-monitor.js +275 -0
  150. package/dist/components/native-capabilities/usb-panel.d.ts +54 -0
  151. package/dist/components/native-capabilities/usb-panel.d.ts.map +1 -0
  152. package/dist/components/native-capabilities/usb-panel.js +363 -0
  153. package/dist/components/native-capabilities/use-capability.d.ts +20 -0
  154. package/dist/components/native-capabilities/use-capability.d.ts.map +1 -0
  155. package/dist/components/native-capabilities/use-capability.js +61 -0
  156. package/dist/components/ui/alert-dialog.d.ts +7 -3
  157. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  158. package/dist/components/ui/alert-dialog.js +9 -5
  159. package/dist/components/ui/alert.d.ts +19 -3
  160. package/dist/components/ui/alert.d.ts.map +1 -1
  161. package/dist/components/ui/alert.js +25 -8
  162. package/dist/components/ui/app-frame.d.ts +28 -0
  163. package/dist/components/ui/app-frame.d.ts.map +1 -0
  164. package/dist/components/ui/app-frame.js +95 -0
  165. package/dist/components/ui/button-group.d.ts +1 -1
  166. package/dist/components/ui/button.js +1 -1
  167. package/dist/components/ui/collapsible.d.ts +9 -1
  168. package/dist/components/ui/collapsible.d.ts.map +1 -1
  169. package/dist/components/ui/collapsible.js +13 -2
  170. package/dist/components/ui/collection-navigation.d.ts +8 -0
  171. package/dist/components/ui/collection-navigation.d.ts.map +1 -0
  172. package/dist/components/ui/collection-navigation.js +19 -0
  173. package/dist/components/ui/color-well.d.ts +13 -0
  174. package/dist/components/ui/color-well.d.ts.map +1 -0
  175. package/dist/components/ui/color-well.js +30 -0
  176. package/dist/components/ui/command.d.ts +5 -1
  177. package/dist/components/ui/command.d.ts.map +1 -1
  178. package/dist/components/ui/command.js +13 -1
  179. package/dist/components/ui/confirm-dialog.d.ts +19 -0
  180. package/dist/components/ui/confirm-dialog.d.ts.map +1 -0
  181. package/dist/components/ui/confirm-dialog.js +45 -0
  182. package/dist/components/ui/date-field.d.ts +19 -0
  183. package/dist/components/ui/date-field.d.ts.map +1 -0
  184. package/dist/components/ui/date-field.js +54 -0
  185. package/dist/components/ui/date-picker.d.ts +24 -0
  186. package/dist/components/ui/date-picker.d.ts.map +1 -0
  187. package/dist/components/ui/date-picker.js +92 -0
  188. package/dist/components/ui/dialog.d.ts +4 -2
  189. package/dist/components/ui/dialog.d.ts.map +1 -1
  190. package/dist/components/ui/dialog.js +8 -5
  191. package/dist/components/ui/edge-fade.d.ts +11 -0
  192. package/dist/components/ui/edge-fade.d.ts.map +1 -0
  193. package/dist/components/ui/edge-fade.js +41 -0
  194. package/dist/components/ui/empty.d.ts +7 -2
  195. package/dist/components/ui/empty.d.ts.map +1 -1
  196. package/dist/components/ui/empty.js +20 -7
  197. package/dist/components/ui/field.d.ts +1 -1
  198. package/dist/components/ui/grid.d.ts +24 -0
  199. package/dist/components/ui/grid.d.ts.map +1 -0
  200. package/dist/components/ui/grid.js +258 -0
  201. package/dist/components/ui/icon-button.d.ts +15 -0
  202. package/dist/components/ui/icon-button.d.ts.map +1 -0
  203. package/dist/components/ui/icon-button.js +15 -0
  204. package/dist/components/ui/index.d.ts +23 -0
  205. package/dist/components/ui/index.d.ts.map +1 -1
  206. package/dist/components/ui/index.js +23 -0
  207. package/dist/components/ui/input-group.d.ts +1 -1
  208. package/dist/components/ui/inspector.d.ts +15 -0
  209. package/dist/components/ui/inspector.d.ts.map +1 -0
  210. package/dist/components/ui/inspector.js +26 -0
  211. package/dist/components/ui/kbd.d.ts +1 -1
  212. package/dist/components/ui/list.d.ts +28 -0
  213. package/dist/components/ui/list.d.ts.map +1 -0
  214. package/dist/components/ui/list.js +235 -0
  215. package/dist/components/ui/material.d.ts +34 -0
  216. package/dist/components/ui/material.d.ts.map +1 -0
  217. package/dist/components/ui/material.js +34 -0
  218. package/dist/components/ui/message-scroller-controller.d.ts +162 -0
  219. package/dist/components/ui/message-scroller-controller.d.ts.map +1 -0
  220. package/dist/components/ui/message-scroller-controller.js +888 -0
  221. package/dist/components/ui/message-scroller-layout-stability.d.ts +33 -0
  222. package/dist/components/ui/message-scroller-layout-stability.d.ts.map +1 -0
  223. package/dist/components/ui/message-scroller-layout-stability.js +153 -0
  224. package/dist/components/ui/message-scroller-policy.d.ts +74 -0
  225. package/dist/components/ui/message-scroller-policy.d.ts.map +1 -0
  226. package/dist/components/ui/message-scroller-policy.js +129 -0
  227. package/dist/components/ui/message-scroller-primitive.d.ts +55 -0
  228. package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -0
  229. package/dist/components/ui/message-scroller-primitive.js +226 -0
  230. package/dist/components/ui/message-scroller.d.ts +11 -0
  231. package/dist/components/ui/message-scroller.d.ts.map +1 -0
  232. package/dist/components/ui/message-scroller.js +25 -0
  233. package/dist/components/ui/navigation-button-group.d.ts +16 -0
  234. package/dist/components/ui/navigation-button-group.d.ts.map +1 -0
  235. package/dist/components/ui/navigation-button-group.js +9 -0
  236. package/dist/components/ui/notification-dot.d.ts +4 -0
  237. package/dist/components/ui/notification-dot.d.ts.map +1 -0
  238. package/dist/components/ui/notification-dot.js +7 -0
  239. package/dist/components/ui/number-input.d.ts +16 -0
  240. package/dist/components/ui/number-input.d.ts.map +1 -0
  241. package/dist/components/ui/number-input.js +56 -0
  242. package/dist/components/ui/panel.d.ts +18 -0
  243. package/dist/components/ui/panel.d.ts.map +1 -0
  244. package/dist/components/ui/panel.js +40 -0
  245. package/dist/components/ui/popover.d.ts +9 -2
  246. package/dist/components/ui/popover.d.ts.map +1 -1
  247. package/dist/components/ui/popover.js +14 -4
  248. package/dist/components/ui/scroll-area.d.ts +8 -2
  249. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  250. package/dist/components/ui/scroll-area.js +6 -3
  251. package/dist/components/ui/search-field.d.ts +19 -0
  252. package/dist/components/ui/search-field.d.ts.map +1 -0
  253. package/dist/components/ui/search-field.js +64 -0
  254. package/dist/components/ui/segmented-control.d.ts +21 -0
  255. package/dist/components/ui/segmented-control.d.ts.map +1 -0
  256. package/dist/components/ui/segmented-control.js +62 -0
  257. package/dist/components/ui/sheet.d.ts +4 -2
  258. package/dist/components/ui/sheet.d.ts.map +1 -1
  259. package/dist/components/ui/sheet.js +12 -9
  260. package/dist/components/ui/sidebar.js +1 -1
  261. package/dist/components/ui/sonner.d.ts +4 -3
  262. package/dist/components/ui/sonner.d.ts.map +1 -1
  263. package/dist/components/ui/sonner.js +7 -6
  264. package/dist/components/ui/split-view.d.ts +11 -0
  265. package/dist/components/ui/split-view.d.ts.map +1 -0
  266. package/dist/components/ui/split-view.js +13 -0
  267. package/dist/components/ui/status.d.ts +13 -0
  268. package/dist/components/ui/status.d.ts.map +1 -0
  269. package/dist/components/ui/status.js +36 -0
  270. package/dist/components/ui/table.d.ts +11 -2
  271. package/dist/components/ui/table.d.ts.map +1 -1
  272. package/dist/components/ui/table.js +33 -6
  273. package/dist/components/ui/text.d.ts +17 -0
  274. package/dist/components/ui/text.d.ts.map +1 -0
  275. package/dist/components/ui/text.js +55 -0
  276. package/dist/components/ui/toggle.d.ts +12 -4
  277. package/dist/components/ui/toggle.d.ts.map +1 -1
  278. package/dist/components/ui/toggle.js +13 -2
  279. package/dist/components/ui/toolbar.d.ts +27 -0
  280. package/dist/components/ui/toolbar.d.ts.map +1 -0
  281. package/dist/components/ui/toolbar.js +71 -0
  282. package/dist/components/ui/tooltip.d.ts +8 -3
  283. package/dist/components/ui/tooltip.d.ts.map +1 -1
  284. package/dist/components/ui/tooltip.js +11 -6
  285. package/dist/index.d.ts +2 -2
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +4 -4
  288. package/dist/lib/frame-lifecycle.d.ts +29 -0
  289. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  290. package/dist/lib/frame-lifecycle.js +85 -0
  291. package/dist/lib/native-capabilities/access.d.ts +13 -0
  292. package/dist/lib/native-capabilities/access.d.ts.map +1 -0
  293. package/dist/lib/native-capabilities/access.js +53 -0
  294. package/dist/lib/native-capabilities/bluetooth-access.d.ts +14 -0
  295. package/dist/lib/native-capabilities/bluetooth-access.d.ts.map +1 -0
  296. package/dist/lib/native-capabilities/bluetooth-access.js +43 -0
  297. package/dist/lib/native-capabilities/bluetooth-connection.d.ts +19 -0
  298. package/dist/lib/native-capabilities/bluetooth-connection.d.ts.map +1 -0
  299. package/dist/lib/native-capabilities/bluetooth-connection.js +88 -0
  300. package/dist/lib/native-capabilities/bluetooth-gatt.d.ts +7 -0
  301. package/dist/lib/native-capabilities/bluetooth-gatt.d.ts.map +1 -0
  302. package/dist/lib/native-capabilities/bluetooth-gatt.js +77 -0
  303. package/dist/lib/native-capabilities/bluetooth-internal.d.ts +10 -0
  304. package/dist/lib/native-capabilities/bluetooth-internal.d.ts.map +1 -0
  305. package/dist/lib/native-capabilities/bluetooth-internal.js +105 -0
  306. package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts +33 -0
  307. package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts.map +1 -0
  308. package/dist/lib/native-capabilities/bluetooth-native-fallback.js +214 -0
  309. package/dist/lib/native-capabilities/bluetooth-types.d.ts +85 -0
  310. package/dist/lib/native-capabilities/bluetooth-types.d.ts.map +1 -0
  311. package/dist/lib/native-capabilities/bluetooth-types.js +2 -0
  312. package/dist/lib/native-capabilities/bluetooth.d.ts +7 -0
  313. package/dist/lib/native-capabilities/bluetooth.d.ts.map +1 -0
  314. package/dist/lib/native-capabilities/bluetooth.js +4 -0
  315. package/dist/lib/native-capabilities/bridge.d.ts +23 -0
  316. package/dist/lib/native-capabilities/bridge.d.ts.map +1 -0
  317. package/dist/lib/native-capabilities/bridge.js +266 -0
  318. package/dist/lib/native-capabilities/capabilities.d.ts +7 -0
  319. package/dist/lib/native-capabilities/capabilities.d.ts.map +1 -0
  320. package/dist/lib/native-capabilities/capabilities.js +95 -0
  321. package/dist/lib/native-capabilities/clipboard.d.ts +11 -0
  322. package/dist/lib/native-capabilities/clipboard.d.ts.map +1 -0
  323. package/dist/lib/native-capabilities/clipboard.js +58 -0
  324. package/dist/lib/native-capabilities/device-io-errors.d.ts +11 -0
  325. package/dist/lib/native-capabilities/device-io-errors.d.ts.map +1 -0
  326. package/dist/lib/native-capabilities/device-io-errors.js +82 -0
  327. package/dist/lib/native-capabilities/displays.d.ts +38 -0
  328. package/dist/lib/native-capabilities/displays.d.ts.map +1 -0
  329. package/dist/lib/native-capabilities/displays.js +12 -0
  330. package/dist/lib/native-capabilities/global-shortcuts.d.ts +86 -0
  331. package/dist/lib/native-capabilities/global-shortcuts.d.ts.map +1 -0
  332. package/dist/lib/native-capabilities/global-shortcuts.js +351 -0
  333. package/dist/lib/native-capabilities/haptics.d.ts +25 -0
  334. package/dist/lib/native-capabilities/haptics.d.ts.map +1 -0
  335. package/dist/lib/native-capabilities/haptics.js +18 -0
  336. package/dist/lib/native-capabilities/hid-native.d.ts +26 -0
  337. package/dist/lib/native-capabilities/hid-native.d.ts.map +1 -0
  338. package/dist/lib/native-capabilities/hid-native.js +229 -0
  339. package/dist/lib/native-capabilities/hid.d.ts +52 -0
  340. package/dist/lib/native-capabilities/hid.d.ts.map +1 -0
  341. package/dist/lib/native-capabilities/hid.js +163 -0
  342. package/dist/lib/native-capabilities/index.d.ts +40 -0
  343. package/dist/lib/native-capabilities/index.d.ts.map +1 -0
  344. package/dist/lib/native-capabilities/index.js +21 -0
  345. package/dist/lib/native-capabilities/local-authentication.d.ts +32 -0
  346. package/dist/lib/native-capabilities/local-authentication.d.ts.map +1 -0
  347. package/dist/lib/native-capabilities/local-authentication.js +46 -0
  348. package/dist/lib/native-capabilities/location.d.ts +49 -0
  349. package/dist/lib/native-capabilities/location.d.ts.map +1 -0
  350. package/dist/lib/native-capabilities/location.js +114 -0
  351. package/dist/lib/native-capabilities/media-permissions.d.ts +28 -0
  352. package/dist/lib/native-capabilities/media-permissions.d.ts.map +1 -0
  353. package/dist/lib/native-capabilities/media-permissions.js +37 -0
  354. package/dist/lib/native-capabilities/media.d.ts +17 -0
  355. package/dist/lib/native-capabilities/media.d.ts.map +1 -0
  356. package/dist/lib/native-capabilities/media.js +104 -0
  357. package/dist/lib/native-capabilities/midi-access.d.ts +13 -0
  358. package/dist/lib/native-capabilities/midi-access.d.ts.map +1 -0
  359. package/dist/lib/native-capabilities/midi-access.js +68 -0
  360. package/dist/lib/native-capabilities/midi-internal.d.ts +12 -0
  361. package/dist/lib/native-capabilities/midi-internal.d.ts.map +1 -0
  362. package/dist/lib/native-capabilities/midi-internal.js +88 -0
  363. package/dist/lib/native-capabilities/midi-native-fallback.d.ts +27 -0
  364. package/dist/lib/native-capabilities/midi-native-fallback.d.ts.map +1 -0
  365. package/dist/lib/native-capabilities/midi-native-fallback.js +127 -0
  366. package/dist/lib/native-capabilities/midi-ports.d.ts +6 -0
  367. package/dist/lib/native-capabilities/midi-ports.d.ts.map +1 -0
  368. package/dist/lib/native-capabilities/midi-ports.js +115 -0
  369. package/dist/lib/native-capabilities/midi-types.d.ts +25 -0
  370. package/dist/lib/native-capabilities/midi-types.d.ts.map +1 -0
  371. package/dist/lib/native-capabilities/midi-types.js +1 -0
  372. package/dist/lib/native-capabilities/midi.d.ts +6 -0
  373. package/dist/lib/native-capabilities/midi.d.ts.map +1 -0
  374. package/dist/lib/native-capabilities/midi.js +3 -0
  375. package/dist/lib/native-capabilities/native-device-io.d.ts +28 -0
  376. package/dist/lib/native-capabilities/native-device-io.d.ts.map +1 -0
  377. package/dist/lib/native-capabilities/native-device-io.js +91 -0
  378. package/dist/lib/native-capabilities/native-device-lifecycle.d.ts +13 -0
  379. package/dist/lib/native-capabilities/native-device-lifecycle.d.ts.map +1 -0
  380. package/dist/lib/native-capabilities/native-device-lifecycle.js +40 -0
  381. package/dist/lib/native-capabilities/notifications.d.ts +38 -0
  382. package/dist/lib/native-capabilities/notifications.d.ts.map +1 -0
  383. package/dist/lib/native-capabilities/notifications.js +50 -0
  384. package/dist/lib/native-capabilities/power-session.d.ts +113 -0
  385. package/dist/lib/native-capabilities/power-session.d.ts.map +1 -0
  386. package/dist/lib/native-capabilities/power-session.js +264 -0
  387. package/dist/lib/native-capabilities/secure-storage.d.ts +36 -0
  388. package/dist/lib/native-capabilities/secure-storage.d.ts.map +1 -0
  389. package/dist/lib/native-capabilities/secure-storage.js +64 -0
  390. package/dist/lib/native-capabilities/serial-native.d.ts +23 -0
  391. package/dist/lib/native-capabilities/serial-native.d.ts.map +1 -0
  392. package/dist/lib/native-capabilities/serial-native.js +181 -0
  393. package/dist/lib/native-capabilities/serial.d.ts +76 -0
  394. package/dist/lib/native-capabilities/serial.d.ts.map +1 -0
  395. package/dist/lib/native-capabilities/serial.js +215 -0
  396. package/dist/lib/native-capabilities/system-audio.d.ts +127 -0
  397. package/dist/lib/native-capabilities/system-audio.d.ts.map +1 -0
  398. package/dist/lib/native-capabilities/system-audio.js +330 -0
  399. package/dist/lib/native-capabilities/types.d.ts +62 -0
  400. package/dist/lib/native-capabilities/types.d.ts.map +1 -0
  401. package/dist/lib/native-capabilities/types.js +27 -0
  402. package/dist/lib/native-capabilities/usb-native.d.ts +39 -0
  403. package/dist/lib/native-capabilities/usb-native.d.ts.map +1 -0
  404. package/dist/lib/native-capabilities/usb-native.js +217 -0
  405. package/dist/lib/native-capabilities/usb.d.ts +85 -0
  406. package/dist/lib/native-capabilities/usb.d.ts.map +1 -0
  407. package/dist/lib/native-capabilities/usb.js +225 -0
  408. package/dist/lib/theme.d.ts.map +1 -1
  409. package/dist/lib/theme.js +2 -1
  410. package/docs/README.md +39 -0
  411. package/docs/accessibility.md +32 -0
  412. package/docs/adaptive-materials.md +79 -0
  413. package/docs/app-anatomy.md +74 -0
  414. package/docs/component-catalog.md +82 -0
  415. package/docs/component-guide-template.md +37 -0
  416. package/docs/design-tokens.md +185 -0
  417. package/docs/foundations.md +58 -0
  418. package/docs/native-integration.md +33 -0
  419. package/docs/standalone-app-windows.md +136 -0
  420. package/package.json +8 -3
  421. package/src/components/ui/alert-dialog.md +31 -0
  422. package/src/components/ui/alert.md +77 -0
  423. package/src/components/ui/app-frame.md +38 -0
  424. package/src/components/ui/badge.md +57 -0
  425. package/src/components/ui/button.md +76 -0
  426. package/src/components/ui/collapsible.md +52 -0
  427. package/src/components/ui/color-well.md +11 -0
  428. package/src/components/ui/combobox.md +42 -0
  429. package/src/components/ui/command.md +54 -0
  430. package/src/components/ui/date-field.md +32 -0
  431. package/src/components/ui/date-picker.md +55 -0
  432. package/src/components/ui/dialog.md +40 -0
  433. package/src/components/ui/edge-fade.md +7 -0
  434. package/src/components/ui/empty.md +87 -0
  435. package/src/components/ui/field.md +77 -0
  436. package/src/components/ui/grid.md +109 -0
  437. package/src/components/ui/icon-button.md +36 -0
  438. package/src/components/ui/inspector.md +11 -0
  439. package/src/components/ui/item.md +87 -0
  440. package/src/components/ui/list.md +140 -0
  441. package/src/components/ui/material.md +51 -0
  442. package/src/components/ui/navigation-button-group.md +46 -0
  443. package/src/components/ui/notification-dot.md +7 -0
  444. package/src/components/ui/number-input.md +19 -0
  445. package/src/components/ui/panel.md +11 -0
  446. package/src/components/ui/popover.md +31 -0
  447. package/src/components/ui/resizable.md +66 -0
  448. package/src/components/ui/scroll-area.md +72 -0
  449. package/src/components/ui/search-field.md +33 -0
  450. package/src/components/ui/segmented-control.md +36 -0
  451. package/src/components/ui/sheet.md +30 -0
  452. package/src/components/ui/sidebar.md +113 -0
  453. package/src/components/ui/sonner.md +37 -0
  454. package/src/components/ui/split-view.md +15 -0
  455. package/src/components/ui/status.md +12 -0
  456. package/src/components/ui/table.md +37 -0
  457. package/src/components/ui/tabs.md +66 -0
  458. package/src/components/ui/text.md +17 -0
  459. package/src/components/ui/toggle-button.md +48 -0
  460. package/src/components/ui/toggle-group.md +80 -0
  461. package/src/components/ui/toggle.md +73 -0
  462. package/src/components/ui/toolbar.md +26 -0
  463. package/src/components/ui/tooltip.md +31 -0
  464. package/src/styles/index.css +704 -3
@@ -0,0 +1,87 @@
1
+ # Empty
2
+
3
+ ## Purpose
4
+
5
+ `Empty` describes a normal absence of content or a blocked first-run state. It gives the user a quiet explanation and, when needed, one clear next action.
6
+
7
+ Use `Alert` when an operation failed. Use `Skeleton` or `Spinner` while data is still loading. Do not render an empty state before the initial query has resolved.
8
+
9
+ ## Usage patterns
10
+
11
+ ```tsx
12
+ import { Database } from 'lucide-react'
13
+ import {
14
+ Button,
15
+ Empty,
16
+ EmptyContent,
17
+ EmptyDescription,
18
+ EmptyHeader,
19
+ EmptyMedia,
20
+ EmptyTitle,
21
+ } from '@moldable-ai/ui'
22
+
23
+ ;<Empty variant="pane" safeBottom>
24
+ <EmptyHeader>
25
+ <EmptyMedia variant="icon">
26
+ <Database />
27
+ </EmptyMedia>
28
+ <EmptyTitle>Choose a connection</EmptyTitle>
29
+ <EmptyDescription>
30
+ Select a saved connection to browse its tables.
31
+ </EmptyDescription>
32
+ </EmptyHeader>
33
+ <EmptyContent>
34
+ <Button type="button" size="sm" className="cursor-pointer">
35
+ Add connection
36
+ </Button>
37
+ </EmptyContent>
38
+ </Empty>
39
+ ```
40
+
41
+ For a successful zero state, omit the action when there is nothing useful to do:
42
+
43
+ ```tsx
44
+ <Empty>
45
+ <EmptyHeader>
46
+ <EmptyTitle>Inbox clear</EmptyTitle>
47
+ <EmptyDescription>No messages need your attention.</EmptyDescription>
48
+ </EmptyHeader>
49
+ </Empty>
50
+ ```
51
+
52
+ ## API summary
53
+
54
+ - `Empty`: centered flex container for the complete state.
55
+ - `Empty variant`: `compact`, `pane`, or `full`; defaults to `pane`.
56
+ - `Empty safeBottom`: adds host-provided chat clearance. Do not enable it when
57
+ an owning `AppFrameContent` or parent scroll region already applies clearance.
58
+ - `EmptyHeader`: groups media, title, and description.
59
+ - `EmptyMedia`: `variant="default"` or `variant="icon"`.
60
+ - `EmptyTitle`: primary label.
61
+ - `EmptyDescription`: supporting text with styled inline links.
62
+ - `EmptyContent`: optional actions or secondary controls.
63
+ - All parts accept native props for their rendered element and a `className`.
64
+
65
+ ## Do
66
+
67
+ - Use a one-to-four-word title and at most one sentence of description.
68
+ - Show one primary setup action when the state is blocked.
69
+ - Distinguish first-run, filtered-zero, permission, and successful-zero states.
70
+ - Keep the app’s normal shell or pane structure visible.
71
+ - Use `safeBottom` when the empty state itself owns a pane that reaches the bottom.
72
+
73
+ ## Don't
74
+
75
+ - Do not use welcome-page copy, feature grids, or marketing language.
76
+ - Do not explain obvious controls.
77
+ - Do not add an illustration only to fill space.
78
+ - Do not show a creation action when silence or completion is the correct state.
79
+ - Do not make the empty state a giant nested card.
80
+
81
+ ## Moldable considerations
82
+
83
+ An empty state should feel like part of a local instrument, not a landing page. Keep it visually small even when centered. If the desktop chat can resolve the state, provide specific app context or an explicit “Ask Moldable about this” affordance that prefills desktop chat; do not add another chat box.
84
+
85
+ For scrollable panes, prefer `safeBottom` on the owning `ScrollArea`. Apply it
86
+ to `Empty` only when the empty state is the owner, so nested states do not add
87
+ the same safe area twice.
@@ -0,0 +1,77 @@
1
+ # Field
2
+
3
+ ## Purpose
4
+
5
+ The field primitives compose accessible, consistent form rows. Use them to connect labels, controls, descriptions, validation messages, and related groups without wrapping every input in a card.
6
+
7
+ ## Usage patterns
8
+
9
+ ```tsx
10
+ import {
11
+ Field,
12
+ FieldDescription,
13
+ FieldError,
14
+ FieldGroup,
15
+ FieldLabel,
16
+ Input,
17
+ } from '@moldable-ai/ui'
18
+
19
+ ;<FieldGroup>
20
+ <Field data-invalid={Boolean(error)}>
21
+ <FieldLabel htmlFor="connection-name">Connection name</FieldLabel>
22
+ <Input
23
+ id="connection-name"
24
+ aria-invalid={Boolean(error)}
25
+ aria-describedby={
26
+ error ? 'connection-name-error' : 'connection-name-help'
27
+ }
28
+ />
29
+ <FieldDescription id="connection-name-help">
30
+ Used only to identify this connection.
31
+ </FieldDescription>
32
+ <FieldError
33
+ id="connection-name-error"
34
+ errors={error ? [{ message: error }] : []}
35
+ />
36
+ </Field>
37
+ </FieldGroup>
38
+ ```
39
+
40
+ Use `orientation="horizontal"` for compact checkbox/radio rows and `orientation="responsive"` when the label and control should align horizontally only when the field-group container is wide enough.
41
+
42
+ ## API summary
43
+
44
+ - `FieldSet`: semantic `fieldset` for related controls.
45
+ - `FieldLegend`: `variant="legend"` or `"label"` for fieldset headings.
46
+ - `FieldGroup`: container-query-aware vertical group.
47
+ - `Field`: `role="group"` with `orientation="vertical"`, `"horizontal"`, or `"responsive"`.
48
+ - `FieldLabel`: wraps `Label`; supports `htmlFor`.
49
+ - `FieldTitle`: non-label heading for composite controls.
50
+ - `FieldContent`: groups a control with its description and error.
51
+ - `FieldDescription`: supporting text with styled inline links.
52
+ - `FieldError`: accepts `children` or `errors?: Array<{ message?: string } | undefined>`; duplicate messages are removed and multiple messages render as a list.
53
+ - `FieldSeparator`: divider with optional centered text.
54
+ - Each part accepts its native element props and `className`.
55
+
56
+ ## Do
57
+
58
+ - Give every control a visible label or an accessible name.
59
+ - Connect labels and descriptions with `htmlFor`, `id`, and `aria-describedby`.
60
+ - Set both `data-invalid` on `Field` and `aria-invalid` on the control.
61
+ - Use real `disabled` state and reflect it on the field group when styling needs it.
62
+ - Place validation directly after the affected control.
63
+ - Group related checkbox or radio controls in `FieldSet` with `FieldLegend`.
64
+
65
+ ## Don't
66
+
67
+ - Do not use placeholder text as the only label.
68
+ - Do not show validation only by changing border color.
69
+ - Do not wait until submission to reveal formatting requirements the user needs beforehand.
70
+ - Do not use horizontal fields when labels or values will be cramped.
71
+ - Do not store secrets in ordinary app state when they belong in aivault.
72
+
73
+ ## Moldable considerations
74
+
75
+ Forms should be compact and bounded. Use dialogs for small setup or edit workflows, with their body scrolling internally above `--chat-safe-padding`. Put advanced options behind a secondary disclosure.
76
+
77
+ Use plain `Input` or `Textarea` for short values only. Use `MarkdownEditor` for structured prose and Monaco for code, SQL, JSON, or configuration. Async validation and save states should stay local to the field or submit button and must prevent duplicate actions.
@@ -0,0 +1,109 @@
1
+ # Grid
2
+
3
+ ## Purpose
4
+
5
+ `Grid` is a keyboard-aware, selectable tile collection for artifacts, projects, media, templates, and other visual libraries. It provides two-dimensional arrow navigation, selection, activation, disabled-item behavior, and ARIA grid structure.
6
+
7
+ Use `List` when rows are primarily textual or the container is narrow. Use CSS Grid directly for non-interactive page layout.
8
+
9
+ ## Basic usage
10
+
11
+ ```tsx
12
+ import {
13
+ Grid,
14
+ GridItem,
15
+ GridItemContent,
16
+ GridItemDescription,
17
+ GridItemMedia,
18
+ GridItemTitle,
19
+ } from '@moldable-ai/ui'
20
+
21
+ ;<Grid
22
+ aria-label="Artifacts"
23
+ columns={3}
24
+ selectionMode="single"
25
+ onAction={(value) => openArtifact(value)}
26
+ >
27
+ {artifacts.map((artifact) => (
28
+ <GridItem key={artifact.id} value={artifact.id}>
29
+ <GridItemMedia>
30
+ <img src={artifact.previewUrl} alt="" />
31
+ </GridItemMedia>
32
+ <GridItemContent>
33
+ <GridItemTitle>{artifact.title}</GridItemTitle>
34
+ <GridItemDescription>{artifact.summary}</GridItemDescription>
35
+ </GridItemContent>
36
+ </GridItem>
37
+ ))}
38
+ </Grid>
39
+ ```
40
+
41
+ `GridItem` elements must be direct children. `Grid` groups them into semantic rows according to `columns`.
42
+
43
+ ## Responsive columns
44
+
45
+ Keep the `columns` value aligned with the rendered column count because it drives both layout and keyboard movement:
46
+
47
+ ```tsx
48
+ const columns = useCompactWindow() ? 1 : 3
49
+
50
+ <Grid columns={columns} aria-label="Projects">
51
+ {/* direct GridItem children */}
52
+ </Grid>
53
+ ```
54
+
55
+ Prefer changing this value at deliberate window breakpoints. A smaller window should normally reduce the number of columns before shrinking card content below its useful size.
56
+
57
+ ## Interaction contract
58
+
59
+ - Arrow Left/Right moves within the current row and stops at its edge.
60
+ - Arrow Up/Down moves within the current column and stops at its edge.
61
+ - Home and End move to the first and last available tile in the current row.
62
+ - Control/Command + Home and End move to the first and last available tile in
63
+ the entire grid.
64
+ - Space changes selection.
65
+ - Enter changes selection and invokes `onAction`.
66
+ - A single pointer click changes selection. A double click invokes `onAction`.
67
+ - Disabled tiles are skipped.
68
+ - Buttons and links inside a tile preserve their own pointer behavior.
69
+ - When the grid first mounts, the first selected, enabled tile receives the
70
+ roving tab stop. If nothing is selected, the first enabled tile receives it.
71
+
72
+ ## API summary
73
+
74
+ ### `Grid`
75
+
76
+ - `columns`: positive integer used for layout, row semantics, and vertical navigation. Defaults to `1`.
77
+ - `selectionMode`: `none`, `single`, or `multiple`. Defaults to `none`.
78
+ - `selectedValues` / `defaultSelectedValues`: controlled or initial selected keys.
79
+ - `onSelectionChange(values)`: receives a new read-only `Set`.
80
+ - `onAction(value)`: invoked by Enter or a double click.
81
+ - `loop`: wraps directional navigation. Defaults to `false`.
82
+ - `disabled`: disables the entire collection.
83
+
84
+ ### `GridItem`
85
+
86
+ - `value`: stable application key.
87
+ - `disabled`: removes the tile from focus, selection, and activation.
88
+
89
+ `GridItemMedia`, `GridItemContent`, `GridItemTitle`, and `GridItemDescription` provide a consistent preview-card anatomy.
90
+
91
+ ## Do
92
+
93
+ - Provide a collection label.
94
+ - Keep every preview at a consistent aspect ratio within one grid.
95
+ - Preserve titles and essential state at narrow widths; remove decorative metadata first.
96
+ - Use an empty state outside the grid when there are no items.
97
+ - Lazy-load large preview images and provide useful image alternative text when the image conveys information not already in the title.
98
+
99
+ ## Don't
100
+
101
+ - Do not use `Grid` as a general page-layout primitive.
102
+ - Do not hide essential actions behind hover alone.
103
+ - Do not make every tile independently tabbable.
104
+ - Do not let visual CSS columns disagree with the `columns` prop.
105
+ - Do not nest interactive tiles.
106
+
107
+ ## Window and canvas guidance
108
+
109
+ Give visual grids room to breathe in a primary canvas, but keep their controls in a compact toolbar. Prefer one to three columns in narrow app windows and denser layouts only when previews remain legible. A standalone app window should own its loading, empty, selection, and error states; do not assume a surrounding desktop shell supplies them.
@@ -0,0 +1,36 @@
1
+ # Icon Button
2
+
3
+ ## Purpose
4
+
5
+ `IconButton` is the shared recipe for a compact action represented by one icon. It builds on `Button`, requires an accessible `label`, and standardizes icon sizing, busy state, shape, and density.
6
+
7
+ ## Usage
8
+
9
+ ```tsx
10
+ import { RefreshCw } from 'lucide-react'
11
+ import { IconButton } from '@moldable-ai/ui'
12
+
13
+ ;<IconButton
14
+ label="Refresh events"
15
+ tooltip
16
+ size="sm"
17
+ variant="ghost"
18
+ loading={refreshing}
19
+ onClick={refresh}
20
+ >
21
+ <RefreshCw />
22
+ </IconButton>
23
+ ```
24
+
25
+ `size` is `xs`, `sm`, `default`, or `lg`. `shape` is `rounded` or `circle`. `loading` disables the control, exposes `aria-busy`, and replaces the icon with a progress indicator. `tooltip` may be `true` to reuse the label as a native hint or a specific string.
26
+
27
+ ## Quality bar
28
+
29
+ - Use an explicit verb-led label, even when the icon seems obvious.
30
+ - Prefer `xs` or `sm` in compact toolbars and inspectors.
31
+ - Use the same icon for the same action throughout an app.
32
+ - Pair unfamiliar actions with the shared `Tooltip`; a native title is only a lightweight fallback.
33
+ - Keep destructive actions visually and textually clear.
34
+ - Do not place text inside `IconButton`, suppress its accessible name, or make an unavailable action appear enabled.
35
+
36
+ The component represents an app action only. Window close, minimize, zoom, sharing, and host menus remain host-owned capabilities.
@@ -0,0 +1,11 @@
1
+ # Inspector
2
+
3
+ Secondary property controls for the current selection.
4
+
5
+ Compose `Inspector`, `InspectorHeader`, `InspectorContent`,
6
+ `InspectorSection`, and aligned `InspectorRow` pairs. Controls should usually
7
+ use compact sizes.
8
+
9
+ The inspector must remain subordinate to the primary pane. Collapse it when
10
+ width is constrained, group related properties, and avoid placing primary
11
+ workflow actions inside it.
@@ -0,0 +1,87 @@
1
+ # Item
2
+
3
+ ## Purpose
4
+
5
+ The item primitives compose dense, scannable object rows with optional media, metadata, actions, and secondary regions. Use them for messages, files, meetings, tasks, records, and settings rows.
6
+
7
+ Use `Table` for strongly tabular data and `Card` only when each object genuinely needs independent framing.
8
+
9
+ ## Usage patterns
10
+
11
+ ```tsx
12
+ import { FileText, MoreHorizontal } from 'lucide-react'
13
+ import {
14
+ Button,
15
+ Item,
16
+ ItemActions,
17
+ ItemContent,
18
+ ItemDescription,
19
+ ItemGroup,
20
+ ItemMedia,
21
+ ItemSeparator,
22
+ ItemTitle,
23
+ } from '@moldable-ai/ui'
24
+
25
+ ;<ItemGroup>
26
+ <Item size="sm">
27
+ <ItemMedia variant="icon">
28
+ <FileText />
29
+ </ItemMedia>
30
+ <ItemContent className="min-w-0">
31
+ <ItemTitle className="max-w-full truncate">Project notes.md</ItemTitle>
32
+ <ItemDescription className="truncate">
33
+ Edited 8 minutes ago
34
+ </ItemDescription>
35
+ </ItemContent>
36
+ <ItemActions>
37
+ <Button
38
+ type="button"
39
+ variant="ghost"
40
+ size="icon-xs"
41
+ className="cursor-pointer"
42
+ aria-label="More actions"
43
+ >
44
+ <MoreHorizontal />
45
+ </Button>
46
+ </ItemActions>
47
+ </Item>
48
+ <ItemSeparator />
49
+ </ItemGroup>
50
+ ```
51
+
52
+ Use `asChild` when the whole item is a link or another interactive primitive. Avoid putting nested interactive controls inside an item whose entire surface is already a link.
53
+
54
+ ## API summary
55
+
56
+ - `ItemGroup`: `role="list"` container.
57
+ - `Item`: `variant="default"`, `"outline"`, or `"muted"`; `size="default"` or `"sm"`; optional `asChild`.
58
+ - `ItemMedia`: `variant="default"`, `"icon"`, or `"image"`.
59
+ - `ItemContent`: flexible title/description column.
60
+ - `ItemTitle`, `ItemDescription`: primary and secondary text.
61
+ - `ItemActions`: trailing controls.
62
+ - `ItemHeader`, `ItemFooter`: full-width secondary rows.
63
+ - `ItemSeparator`: horizontal `Separator`.
64
+ - All components accept native props for their rendered element and `className`.
65
+
66
+ ## Do
67
+
68
+ - Keep a stable left-middle-right scan order.
69
+ - Add `min-w-0` to flexible content and truncate or line-clamp unpredictable text.
70
+ - Keep times, counts, and status controls `shrink-0`.
71
+ - Make selected state visible with more than color when practical.
72
+ - Expose hover actions on focus and through a menu or app command.
73
+ - Use separators or a shared group surface for rhythm instead of one floating card per row.
74
+
75
+ ## Don't
76
+
77
+ - Do not nest links or buttons inside a whole-row link.
78
+ - Do not let badges and actions push the primary label out of view.
79
+ - Do not make every row tall enough to look like a marketing card.
80
+ - Do not hide the only route to an action behind hover.
81
+ - Do not place unbounded text in a fixed-height row.
82
+
83
+ ## Moldable considerations
84
+
85
+ For repeated object browsers, `size="sm"` is the useful baseline; tune row height toward the app archetype rather than adding padding for decoration. A scrolling item group should clear chat with `pb-[calc(var(--chat-safe-padding,0px)+1rem)]`, or more when a bottom dock is present.
86
+
87
+ Use the selected item to update desktop chat instructions with specific object context. Important row actions should be available through Cmd+K or a contextual menu, especially when the visual action is compact or hover-revealed.
@@ -0,0 +1,140 @@
1
+ # List
2
+
3
+ ## Purpose
4
+
5
+ `List` is a keyboard-aware collection for compact rows such as files, sessions, workspaces, commands, and inspector results. It owns roving focus, optional selection, disabled-item behavior, and activation without forcing an app-specific data model.
6
+
7
+ Use `ItemGroup` for a static group that does not need collection interaction. Use `Command` for filtering and executing a command palette.
8
+
9
+ ## Basic usage
10
+
11
+ ```tsx
12
+ import {
13
+ List,
14
+ ListItem,
15
+ ListItemContent,
16
+ ListItemDescription,
17
+ ListItemTitle,
18
+ } from '@moldable-ai/ui'
19
+
20
+ ;<List
21
+ aria-label="Documents"
22
+ selectionMode="single"
23
+ defaultSelectedValues={['brief']}
24
+ onAction={(value) => openDocument(value)}
25
+ >
26
+ <ListItem value="brief">
27
+ <ListItemContent>
28
+ <ListItemTitle>Project brief</ListItemTitle>
29
+ <ListItemDescription>Edited 8 minutes ago</ListItemDescription>
30
+ </ListItemContent>
31
+ </ListItem>
32
+ <ListItem value="archive" disabled>
33
+ <ListItemContent>
34
+ <ListItemTitle>Archive</ListItemTitle>
35
+ <ListItemDescription>Unavailable offline</ListItemDescription>
36
+ </ListItemContent>
37
+ </ListItem>
38
+ </List>
39
+ ```
40
+
41
+ ## Sections
42
+
43
+ Group related options with `ListSection` and give every section an accessible
44
+ name. `ListSectionHeader` automatically labels its containing section:
45
+
46
+ ```tsx
47
+ <List aria-label="Documents" selectionMode="single">
48
+ <ListSection>
49
+ <ListSectionHeader>Recent</ListSectionHeader>
50
+ <ListItem value="brief">Project brief</ListItem>
51
+ <ListItem value="notes">Research notes</ListItem>
52
+ </ListSection>
53
+ <ListSection aria-label="Archived documents">
54
+ <ListItem value="archive">Archive</ListItem>
55
+ </ListSection>
56
+ </List>
57
+ ```
58
+
59
+ Use either `ListSectionHeader`, `aria-label`, or an explicit
60
+ `aria-labelledby` value for each section. Keyboard movement follows the
61
+ rendered DOM order across section boundaries.
62
+
63
+ For controlled selection, pass an iterable to `selectedValues` and replace it when `onSelectionChange` fires:
64
+
65
+ ```tsx
66
+ const [selected, setSelected] = useState<ReadonlySet<string>>(
67
+ () => new Set(['inbox']),
68
+ )
69
+
70
+ <List
71
+ aria-label="Mailboxes"
72
+ selectionMode="multiple"
73
+ selectedValues={selected}
74
+ onSelectionChange={setSelected}
75
+ >
76
+ {/* ListItem children */}
77
+ </List>
78
+ ```
79
+
80
+ ## Interaction contract
81
+
82
+ - Arrow Up/Down moves through a vertical list; Arrow Left/Right moves through a horizontal list.
83
+ - Home and End move to the first and last available item.
84
+ - Space changes selection.
85
+ - Enter changes selection and invokes `onAction`.
86
+ - A single pointer click changes selection. A double click invokes `onAction`.
87
+ - Disabled items are skipped during keyboard navigation and cannot be selected or activated.
88
+ - Interactive descendants such as buttons and links keep their own pointer behavior. They do not select or activate the containing item.
89
+ - Focus uses a roving `tabIndex`, so the collection contributes one stop to the tab order.
90
+ - When the list first mounts, the first selected, enabled item receives the roving tab stop. If nothing is selected, the first enabled item receives it.
91
+
92
+ ## API summary
93
+
94
+ ### `List`
95
+
96
+ - `selectionMode`: `none`, `single`, or `multiple`. Defaults to `none`.
97
+ - `selectedValues` / `defaultSelectedValues`: controlled or initial selected keys.
98
+ - `onSelectionChange(values)`: receives a new read-only `Set`.
99
+ - `onAction(value)`: invoked by Enter or a double click.
100
+ - `orientation`: `vertical` or `horizontal`. Defaults to `vertical`.
101
+ - `loop`: wraps arrow navigation at collection boundaries. Defaults to `false`.
102
+ - `disabled`: disables the entire collection.
103
+
104
+ ### `ListItem`
105
+
106
+ - `value`: stable application key; required and independent of React's `key`.
107
+ - `disabled`: removes the row from focus, selection, and activation.
108
+ - Native `div` props and event handlers are composed before collection behavior. Call `event.preventDefault()` to cancel the built-in response.
109
+
110
+ `ListItemContent`, `ListItemTitle`, `ListItemDescription`, and `ListItemActions` provide compact row layout without changing semantics.
111
+
112
+ ### `ListSection`
113
+
114
+ - Groups related items with `role="group"`.
115
+ - Use `ListSectionHeader` for an automatically connected visible label.
116
+ - Alternatively, provide `aria-label` or `aria-labelledby`.
117
+
118
+ ## Do
119
+
120
+ - Give every collection a visible label or `aria-label`.
121
+ - Give every section an accessible label.
122
+ - Keep values stable when filtering or reordering.
123
+ - Put the primary row identity in `ListItemTitle` and secondary metadata in `ListItemDescription`.
124
+ - Use selection to represent durable collection state and action to open or execute.
125
+ - Keep row actions keyboard reachable; label icon-only controls.
126
+
127
+ ## Don't
128
+
129
+ - Do not put a `List` inside another list item.
130
+ - Do not use array indexes as values when rows can reorder.
131
+ - Do not put buttons, links, or other interactive controls inside selectable
132
+ listbox items. Put independent actions outside the listbox or use a pattern
133
+ whose child-interaction model supports them.
134
+ - Do not rely on double click as the only way to perform an important action.
135
+ - Do not add a second manual arrow-key handler to the same collection.
136
+ - Do not visually mark focus and selection as if they were the same state.
137
+
138
+ ## Window and pane guidance
139
+
140
+ Lists should stay compact in sidebars and inspectors. Let the surrounding pane own its border and material; add a list background only when the list is itself a distinct surface. In narrow windows, preserve the row title and move secondary actions into a menu before truncating the primary label.
@@ -0,0 +1,51 @@
1
+ # Material
2
+
3
+ Adaptive material for navigation and control chrome.
4
+
5
+ ```tsx
6
+ <Material asChild variant="regular" elevation="none">
7
+ <Toolbar>{/* context and actions */}</Toolbar>
8
+ </Material>
9
+
10
+ <MaterialGroup variant="regular" shape="capsule" spacing="compact">
11
+ <IconButton label="Previous" variant="ghost">
12
+ <ChevronLeft />
13
+ </IconButton>
14
+ <IconButton label="Next" variant="ghost">
15
+ <ChevronRight />
16
+ </IconButton>
17
+ </MaterialGroup>
18
+ ```
19
+
20
+ ## Variants
21
+
22
+ - `regular` provides a frosted, legible control or navigation layer.
23
+ - `clear` is less frosted and is only for compact controls floating over
24
+ photos, maps, video, or another richly colored canvas.
25
+
26
+ Both variants start with an opaque fallback. Backdrop sampling is enabled only
27
+ when the renderer supports it. Reduced transparency and forced colors keep the
28
+ fallback opaque.
29
+
30
+ ## Grouping
31
+
32
+ `MaterialGroup` creates one sampled layer for a related cluster. Put ordinary
33
+ ghost or transparent controls inside it. Do not wrap each child in another
34
+ `Material`; nested sampling creates muddy, inconsistent results.
35
+
36
+ Use separate `Material` instances only when controls are spatially detached and
37
+ do not read as one group.
38
+
39
+ ## Rules
40
+
41
+ - Use material for toolbars, compact floating controls, menus, and other
42
+ temporary control layers.
43
+ - Keep documents, calendars, tables, forms, cards, sheets, and primary content
44
+ canvases opaque.
45
+ - Prefer `regular`. A `clear` surface needs stable contrast across every part
46
+ of the media behind it.
47
+ - Use `interactive` only when the material surface itself is the control.
48
+ - Do not animate blur or saturation. Shared motion tokens provide restrained
49
+ press feedback and remove it when reduced motion is requested.
50
+ - CSS material samples content inside the renderer. Native behind-window
51
+ material remains owned by the host.
@@ -0,0 +1,46 @@
1
+ # NavigationButtonGroup
2
+
3
+ `NavigationButtonGroup` presents paired back and forward actions with one
4
+ consistent compact treatment.
5
+
6
+ ```tsx
7
+ <NavigationButtonGroup
8
+ canGoBack={historyIndex > 0}
9
+ canGoForward={historyIndex < history.length - 1}
10
+ onBack={goBack}
11
+ onForward={goForward}
12
+ />
13
+ ```
14
+
15
+ ## API
16
+
17
+ - `canGoBack` and `canGoForward` disable unavailable directions.
18
+ - `onBack` and `onForward` perform caller-owned navigation.
19
+ - `backLabel` and `forwardLabel` customize accessible names.
20
+ - `size` accepts the `IconButton` size scale.
21
+ - `variant` is `ghost` or `outline`.
22
+ - Native `ButtonGroup` props apply to the group.
23
+
24
+ ## Keyboard and accessibility
25
+
26
+ The root has `role="group"` and the default accessible name “Navigation”.
27
+ Each icon button has a stable accessible name and participates in normal Tab
28
+ order. The component does not install global keyboard shortcuts.
29
+
30
+ ## Platform behavior
31
+
32
+ This component is portable. It does not own browser history, Moldable
33
+ navigation state, or native window history. Connect it to the navigation owner
34
+ for the current surface.
35
+
36
+ ## Do
37
+
38
+ - Put it in a leading toolbar group.
39
+ - Disable unavailable directions.
40
+ - Keep back and forward behavior scoped to the visible pane or app.
41
+
42
+ ## Don't
43
+
44
+ - Do not render a fake forward action when no forward history exists.
45
+ - Do not use it for undo and redo.
46
+ - Do not add a second tooltip around its buttons.
@@ -0,0 +1,7 @@
1
+ # NotificationDot
2
+
3
+ A tiny, decorative unread or changed-state marker.
4
+
5
+ Pair the dot with adjacent accessible text or an accessible label on its
6
+ container. The dot is intentionally hidden from assistive technology.
7
+ Use `Status` when the state needs a spoken label or semantic tone.
@@ -0,0 +1,19 @@
1
+ # NumberInput
2
+
3
+ Compact numeric entry with optional unit and stepper actions.
4
+
5
+ ```tsx
6
+ <NumberInput
7
+ aria-label="Opacity"
8
+ min={0}
9
+ max={100}
10
+ unit="%"
11
+ value={opacity}
12
+ onValueChange={setOpacity}
13
+ />
14
+ ```
15
+
16
+ Use in inspectors and settings where the numeric value matters. Use `Slider`
17
+ when relative adjustment matters more than exact entry. Always supply a visible
18
+ label or `aria-label`. Treat `null` as empty input and validate domain-specific
19
+ constraints outside the component.