@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moldable-ai/ui",
3
- "version": "0.2.19",
3
+ "version": "0.2.21",
4
4
  "description": "Shared UI components for Moldable applications",
5
5
  "author": "Desiderata LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -26,10 +26,17 @@
26
26
  "import": "./dist/index.js",
27
27
  "require": "./dist/index.js"
28
28
  },
29
+ "./catalog": {
30
+ "types": "./dist/catalog/index.d.ts",
31
+ "import": "./dist/catalog/index.js",
32
+ "require": "./dist/catalog/index.js"
33
+ },
29
34
  "./styles": "./src/styles/index.css"
30
35
  },
31
36
  "files": [
32
37
  "dist",
38
+ "docs",
39
+ "src/components/ui/*.md",
33
40
  "src/styles",
34
41
  "LICENSE"
35
42
  ],
@@ -82,7 +89,6 @@
82
89
  "framer-motion": "^12.15.0",
83
90
  "input-otp": "^1.4.2",
84
91
  "lucide-react": "^0.473.0",
85
- "next-themes": "^0.4.6",
86
92
  "react-day-picker": "^9.13.0",
87
93
  "react-hook-form": "^7.71.1",
88
94
  "react-markdown": "^10.1.0",
@@ -96,7 +102,6 @@
96
102
  "tailwindcss": "^4.1.10",
97
103
  "tw-animate-css": "^1.3.4",
98
104
  "vaul": "^1.1.2",
99
- "virtua": "^0.48.5",
100
105
  "zod": "^4.3.5"
101
106
  },
102
107
  "devDependencies": {
@@ -0,0 +1,31 @@
1
+ # Alert Dialog and Confirm Dialog
2
+
3
+ Use `AlertDialog` when the user must acknowledge a consequential choice. Use the
4
+ composed anatomy for custom content and `ConfirmDialog` for the common
5
+ promise-aware confirmation path.
6
+
7
+ ```tsx
8
+ <ConfirmDialog
9
+ trigger={<Button variant="destructive">Delete recording</Button>}
10
+ title="Delete recording?"
11
+ description="This removes the local audio and transcript."
12
+ confirmLabel="Delete"
13
+ pendingLabel="Deleting…"
14
+ variant="destructive"
15
+ onConfirm={() => deleteRecording()}
16
+ />
17
+ ```
18
+
19
+ `ConfirmDialog` prevents duplicate submission, disables cancellation while the
20
+ operation is pending, closes only after success, and keeps failures in the
21
+ dialog. Pass `getErrorMessage` when a safe, actionable domain error can be
22
+ shown. The default error deliberately avoids exposing internal details.
23
+
24
+ `AlertDialogContent` supports `sm`, `default`, and `lg` and stays within the
25
+ host safe area. Use `AlertDialogBody` when explanation or affected-item content
26
+ can grow. Keep the consequence visible while the action is pending.
27
+
28
+ Use concrete labels such as “Delete recording,” not “OK.” Put the safe,
29
+ reversible action first in keyboard order and the confirming action last. Do
30
+ not use an alert dialog for ordinary navigation, long forms, or success
31
+ messages.
@@ -0,0 +1,77 @@
1
+ # Alert
2
+
3
+ ## Purpose
4
+
5
+ `Alert` presents a persistent inline callout that belongs to the current
6
+ surface. Use it for recoverable errors, permission or connection problems, and
7
+ information the user should notice before continuing.
8
+
9
+ Use `AlertDialog` when the user must confirm an action. Use `Empty` for the normal absence of data. Use a toast for brief feedback that does not need to remain in the layout.
10
+
11
+ ## Usage patterns
12
+
13
+ ```tsx
14
+ import { CircleAlert } from 'lucide-react'
15
+ import { Alert, AlertDescription, AlertTitle } from '@moldable-ai/ui'
16
+
17
+ ;<Alert tone="danger">
18
+ <CircleAlert />
19
+ <AlertTitle>Could not save</AlertTitle>
20
+ <AlertDescription>
21
+ The file changed on disk. Reload it, then try again.
22
+ </AlertDescription>
23
+ <AlertActions>
24
+ <Button size="sm">Reload</Button>
25
+ </AlertActions>
26
+ </Alert>
27
+ ```
28
+
29
+ Dismissible informational callouts may use `AlertDismiss`. Dismissal state is
30
+ owned by the caller:
31
+
32
+ ```tsx
33
+ <Alert tone="info">
34
+ <InfoIcon />
35
+ <AlertTitle>Local-only data</AlertTitle>
36
+ <AlertDescription>This workspace has not been synced.</AlertDescription>
37
+ <AlertDismiss label="Dismiss local-only notice" onClick={dismiss} />
38
+ </Alert>
39
+ ```
40
+
41
+ ## API summary
42
+
43
+ - `tone`: `neutral`, `info`, `success`, `warning`, or `danger`.
44
+ - `density`: `compact` or `default`.
45
+ - Neutral through warning tones default to `role="status"`; danger defaults to
46
+ `role="alert"`. The native `role` prop can override that choice.
47
+ - `variant="default"` and `variant="destructive"` remain compatibility aliases.
48
+ - `AlertTitle`: the short, emphasized heading.
49
+ - `AlertDescription`: muted supporting content; supports nested paragraphs and controls.
50
+ - `AlertActions`: a compact action row.
51
+ - `AlertDismiss`: an icon action with a required accessible `label`; the caller
52
+ owns dismissal.
53
+ - All parts accept the native props for their rendered element and a `className`.
54
+ - A direct icon child on `Alert` receives the component’s grid placement and sizing.
55
+
56
+ ## Do
57
+
58
+ - State what failed or what is blocked in a short title.
59
+ - Include the specific message and a retry action when recovery is possible.
60
+ - Keep technical details available through logs or a disclosure, not in the primary message.
61
+ - Use an icon only when it improves recognition.
62
+ - Keep the alert close to the field, pane, or operation it describes.
63
+
64
+ ## Don't
65
+
66
+ - Do not use an alert as decorative introductory copy.
67
+ - Do not show stack traces, raw exceptions, or secret values.
68
+ - Do not use `danger` for neutral notices.
69
+ - Do not rely on the icon or color alone for meaning.
70
+ - Do not use `Alert` as a confirmation surface.
71
+ - Do not use an alert for brief success feedback that should be a toast.
72
+
73
+ ## Moldable considerations
74
+
75
+ Alerts inside a scrollable pane must participate in that pane’s chat-safe bottom spacing. Long-lived errors should not be covered by a fixed dock or desktop chat overlay.
76
+
77
+ Copy should be calm and literal: “Could not load messages” is better than “Something went wrong!”. For authentication and permission states, name the blocked capability and offer exactly one primary next action. If the alert includes buttons, follow the standard button accessibility and density rules.
@@ -0,0 +1,38 @@
1
+ # App frame
2
+
3
+ The top-level shell for an app that can run in its own window or inside a host
4
+ surface.
5
+
6
+ ```tsx
7
+ <AppFrame>
8
+ <AppFrameTitlebar>
9
+ <AppFrameToolbar>
10
+ <strong>Calendar</strong>
11
+ <div className="ml-auto">{/* compact actions */}</div>
12
+ </AppFrameToolbar>
13
+ </AppFrameTitlebar>
14
+ <AppFrameContent>{/* the app-owned canvas */}</AppFrameContent>
15
+ <AppFrameStatusbar>Saved locally</AppFrameStatusbar>
16
+ </AppFrame>
17
+ ```
18
+
19
+ ## Rules
20
+
21
+ - Let the host render real window controls. Never draw imitation traffic lights.
22
+ - Make the app's primary canvas the visual focus; titlebars and status bars are
23
+ supporting structure.
24
+ - Titlebars and status bars use `material="regular"` by default. Use
25
+ `material="clear"` only when compact chrome overlays a rich canvas, or
26
+ `material="none"` when the composition supplies an opaque surface.
27
+ - The app frame does not make the outer window draggable. A decorated native
28
+ titlebar or host-owned drag region must provide that behavior.
29
+ - The host owns the `--window-*` inset variables. The component only consumes
30
+ them.
31
+ - `AppFrameContent` applies the shared chat-safe padding by default. The value is
32
+ zero in a standalone window and is updated by the embedded host lifecycle.
33
+ - Use `mode="embedded"` or `mode="window"` only for deterministic previews and
34
+ tests. Runtime apps should normally use `mode="auto"`; a future host context
35
+ may set `data-moldable-display-mode` before render when a window still uses an
36
+ app iframe.
37
+ - Material samples only renderer content. Native behind-window material remains
38
+ host-owned.
@@ -0,0 +1,57 @@
1
+ # Badge
2
+
3
+ ## Purpose
4
+
5
+ `Badge` is a compact, non-primary label for status, category, count, or metadata. It helps a user scan rows and objects without becoming another action surface.
6
+
7
+ Use a button or toggle when the element changes state. Use plain muted text when the metadata does not need a bounded shape.
8
+
9
+ ## Usage patterns
10
+
11
+ ```tsx
12
+ import { Badge } from '@moldable-ai/ui'
13
+
14
+ <Badge variant="secondary">Draft</Badge>
15
+ <Badge variant="outline">3 selected</Badge>
16
+ <Badge variant="destructive">Failed</Badge>
17
+ ```
18
+
19
+ Badges work best at the edge of list rows, in compact inspector metadata, or beside a title. Keep the content short enough to scan without wrapping.
20
+
21
+ When a badge is interactive, give the child its correct semantics:
22
+
23
+ ```tsx
24
+ <Badge asChild variant="outline">
25
+ <a href="/jobs/running">Running</a>
26
+ </Badge>
27
+ ```
28
+
29
+ ## API summary
30
+
31
+ - `variant`: `default`, `secondary`, `destructive`, `outline`, `ghost`, or `link`. Defaults to `default`.
32
+ - `asChild`: renders a Radix `Slot` and applies badge styling to its child.
33
+ - Accepts native `span` props.
34
+ - `badgeVariants` is exported for composing the same variants elsewhere.
35
+ - Icons placed directly inside are normalized to a compact size.
36
+
37
+ ## Do
38
+
39
+ - Use one or two words, a short number, or a concise state.
40
+ - Prefer `secondary` or `outline` for ordinary metadata.
41
+ - Use `destructive` only for a failure, blocked state, or serious warning.
42
+ - Pair a colored state with clear text or an icon so meaning is not color-only.
43
+ - Use `tabular-nums` through `className` for counts that update in place.
44
+
45
+ ## Don't
46
+
47
+ - Do not turn every property into a badge.
48
+ - Do not use badges as a substitute for primary buttons, tabs, or filters.
49
+ - Do not place long explanations or sentences inside.
50
+ - Do not invent raw category colors; use semantic variants unless a small, meaningful object color is required.
51
+ - Do not show “AI” as a decorative badge when no actionable distinction exists.
52
+
53
+ ## Moldable considerations
54
+
55
+ Moldable surfaces are intentionally dense, so badges should preserve horizontal scan order. In rows, keep the badge `shrink-0` and make the main text column `min-w-0`. Prefer a small status marker plus text over multiple adjacent badges.
56
+
57
+ For background activity, use a precise state such as “Syncing” or “Queued”; remove the badge when the state no longer helps. A badge is not a notification and should not replace a useful Today item, alert, or progress indicator.
@@ -0,0 +1,76 @@
1
+ # Button
2
+
3
+ ## Purpose
4
+
5
+ `Button` starts an immediate action or, with `asChild`, gives button styling and behavior to another interactive element. Use it for commands such as save, run, refresh, connect, archive, and open.
6
+
7
+ Use a link for navigation. Use `Toggle` when the control represents an on/off view state, and `ToggleGroup` when the user chooses among a small set of modes.
8
+
9
+ ## Usage patterns
10
+
11
+ ```tsx
12
+ import { Button } from '@moldable-ai/ui'
13
+ import { RefreshCw } from 'lucide-react'
14
+
15
+ <Button type="button" size="sm" className="cursor-pointer">
16
+ Save changes
17
+ </Button>
18
+
19
+ <Button
20
+ type="button"
21
+ variant="ghost"
22
+ size="icon-sm"
23
+ className="cursor-pointer"
24
+ aria-label="Refresh results"
25
+ >
26
+ <RefreshCw />
27
+ </Button>
28
+ ```
29
+
30
+ Keep toolbar actions compact (`xs`, `sm`, `icon-xs`, or `icon-sm`). Reserve `default` or `lg` for the primary action in a form, setup state, or focused control dock. While an async action is running, disable the button, preserve its width, and show a small spinner beside a short status label.
31
+
32
+ For links that should look like buttons:
33
+
34
+ ```tsx
35
+ <Button asChild variant="outline" size="sm">
36
+ <a href="/settings">Open settings</a>
37
+ </Button>
38
+ ```
39
+
40
+ ## API summary
41
+
42
+ - `variant`: `default`, `destructive`, `outline`, `secondary`, `ghost`, or `link`. Defaults to `default`.
43
+ - `size`: `default`, `xs`, `sm`, `lg`, `icon`, `icon-xs`, `icon-sm`, or `icon-lg`. Defaults to `default`.
44
+ - `asChild`: renders a Radix `Slot` so the child owns the element and semantics.
45
+ - Accepts native button props, including `type`, `disabled`, `aria-*`, and event handlers.
46
+ - `buttonVariants` is exported for cases that need the same visual treatment on another component.
47
+
48
+ ## Do
49
+
50
+ - Set `type="button"` unless the control intentionally submits a form.
51
+ - Add `cursor-pointer`; use the real `disabled` attribute for unavailable or busy actions.
52
+ - Give icon-only buttons an `aria-label` and a tooltip.
53
+ - Use a specific Lucide icon that names the action.
54
+ - Put one visually primary action in a local action group.
55
+ - Keep labels literal and verb-led: “Save query”, “Connect account”, “Move to trash”.
56
+
57
+ ## Don't
58
+
59
+ - Do not use a button for ordinary navigation without link semantics.
60
+ - Do not rely on color alone to explain a destructive or selected action.
61
+ - Do not use raw color classes, decorative gradients, or oversized call-to-action styling.
62
+ - Do not use `Sparkles` as a generic AI marker.
63
+ - Do not leave a busy button clickable or allow repeated submission.
64
+ - Do not hide essential actions behind hover-only icon buttons.
65
+
66
+ ## Moldable considerations
67
+
68
+ Buttons in a fixed bottom dock must remain above the desktop chat:
69
+
70
+ ```tsx
71
+ <div style={{ bottom: 'calc(var(--chat-safe-padding, 0px) + 1.5rem)' }}>
72
+ <Button className="cursor-pointer">Apply changes</Button>
73
+ </div>
74
+ ```
75
+
76
+ Keep fixed groups within `max-w-[calc(100vw-2rem)]`. Toolbar buttons should normally fit an `h-8` or `h-9` bar. Important actions should also be exposed through app commands when useful. Do not add an app-local prompt or chat button when the action belongs to Moldable’s desktop chat.
@@ -0,0 +1,52 @@
1
+ # Collapsible
2
+
3
+ `Collapsible` exposes the unstyled Radix disclosure primitive.
4
+ `CollapsibleSection` adds a consistent section trigger, state-aware chevron,
5
+ border, and content spacing.
6
+
7
+ ```tsx
8
+ <CollapsibleSection defaultOpen>
9
+ <CollapsibleSectionTrigger>Advanced options</CollapsibleSectionTrigger>
10
+ <CollapsibleSectionContent>
11
+ Controls that are useful less often.
12
+ </CollapsibleSectionContent>
13
+ </CollapsibleSection>
14
+ ```
15
+
16
+ ## When to use
17
+
18
+ Use a collapsible section for one independently disclosed region. Use
19
+ `Accordion` when several peer sections need coordinated one-at-a-time or
20
+ multi-section behavior.
21
+
22
+ ## API
23
+
24
+ The base `Collapsible`, `CollapsibleTrigger`, and `CollapsibleContent` expose
25
+ the Radix props directly.
26
+
27
+ The section helpers add:
28
+
29
+ - `CollapsibleSection`: bordered section root.
30
+ - `CollapsibleSectionTrigger`: full-width trigger with a chevron driven by the
31
+ root `data-state`.
32
+ - `CollapsibleSectionContent`: standard inset content.
33
+ - `motion`: `default` or `none`.
34
+ - `contentClassName`: styles the inset inner content without changing the
35
+ animated viewport.
36
+
37
+ ## Keyboard and accessibility
38
+
39
+ The trigger is a button with `aria-expanded` and `aria-controls` managed by
40
+ Radix. Space and Enter toggle it. The chevron is decorative.
41
+
42
+ ## Motion
43
+
44
+ Motion is brief and uses the shared reduced-motion behavior. Set
45
+ `motion="none"` for content where movement would distract or when a parent owns
46
+ the transition.
47
+
48
+ ## Don't
49
+
50
+ - Do not put another interactive control inside the trigger.
51
+ - Do not hide required validation errors or primary actions by default.
52
+ - Do not use a disclosure solely to make a sparse layout look busier.
@@ -0,0 +1,11 @@
1
+ # ColorWell
2
+
3
+ Compact color selection or read-only swatch.
4
+
5
+ ```tsx
6
+ <ColorWell aria-label="Project color" value={color} onValueChange={setColor} />
7
+ ```
8
+
9
+ Use the browser color input as the renderer fallback. `readOnly` presents the
10
+ value without implying interactivity. Never make color the only representation
11
+ of a status or category.
@@ -0,0 +1,42 @@
1
+ # Combobox
2
+
3
+ Searchable single- or multi-value selection for longer option sets.
4
+
5
+ ## When to use
6
+
7
+ Use `Combobox` when users need to filter options, create values, or manage
8
+ multiple selections. Use `Select` for a short fixed list, `Command` for actions,
9
+ and `Input` for unconstrained text.
10
+
11
+ ## Anatomy
12
+
13
+ Compose the root with `ComboboxInput`, `ComboboxContent`, `ComboboxList`, and
14
+ `ComboboxItem`. Optional parts include groups, labels, separators, an empty
15
+ state, clear/trigger controls, and the chips family for multi-value input.
16
+
17
+ ```tsx
18
+ <Combobox items={projects}>
19
+ <ComboboxInput placeholder="Choose a project" />
20
+ <ComboboxContent>
21
+ <ComboboxEmpty>No matching projects.</ComboboxEmpty>
22
+ <ComboboxList>
23
+ {(project) => (
24
+ <ComboboxItem key={project.id} value={project}>
25
+ {project.name}
26
+ </ComboboxItem>
27
+ )}
28
+ </ComboboxList>
29
+ </ComboboxContent>
30
+ </Combobox>
31
+ ```
32
+
33
+ ## Design and behavior
34
+
35
+ - Keep option labels concise and place distinguishing metadata after the name.
36
+ - Show a real loading state for remote results; “no matches” is not a loading
37
+ state.
38
+ - Preserve Base UI keyboard navigation, focus, active-descendant, and
39
+ selection behavior.
40
+ - Label the input visibly or with an accessible name.
41
+ - Do not deep-import the implementation; `Combobox` is exported from the
42
+ package root.
@@ -0,0 +1,54 @@
1
+ # Command
2
+
3
+ `Command` renders searchable, keyboard-driven actions and local choices.
4
+
5
+ ## When to use
6
+
7
+ Use `CommandDialog` for an app-local command palette or picker with enough
8
+ options to benefit from search. Use the item anatomy helpers when a result has
9
+ supporting text or metadata.
10
+
11
+ ```tsx
12
+ <CommandItem value="Open project">
13
+ <CommandItemIcon>
14
+ <FolderIcon />
15
+ </CommandItemIcon>
16
+ <CommandItemContent>
17
+ <CommandItemTitle>Open project</CommandItemTitle>
18
+ <CommandItemDescription>Choose a local folder</CommandItemDescription>
19
+ </CommandItemContent>
20
+ <CommandShortcut>⌘O</CommandShortcut>
21
+ </CommandItem>
22
+ ```
23
+
24
+ ## Anatomy
25
+
26
+ - `Command`, `CommandInput`, and `CommandList` own filtering and navigation.
27
+ - `CommandGroup`, `CommandEmpty`, and `CommandSeparator` organize results.
28
+ - `CommandItem` is the interactive cmdk option.
29
+ - `CommandItemIcon`, `CommandItemContent`, `CommandItemTitle`, and
30
+ `CommandItemDescription` provide consistent row alignment.
31
+ - `CommandShortcut` displays a trailing shortcut hint; it does not install the
32
+ shortcut.
33
+
34
+ Use `NotificationDot`, `Status`, or `Spinner` as a trailing child when a result
35
+ needs an indicator. Keep those states semantic instead of adding decoration to
36
+ the row anatomy.
37
+
38
+ ## Keyboard and accessibility
39
+
40
+ cmdk owns arrow-key navigation, selection, and filtering. Give icon-only
41
+ information an accessible text equivalent. `CommandItemIcon` is decorative by
42
+ default because the adjacent title should name the command.
43
+
44
+ ## Platform behavior
45
+
46
+ This is a portable renderer component. An app-local palette does not replace
47
+ the host command surface. Register host-visible commands through the Moldable
48
+ command API and use this component only for commands owned by the current app.
49
+
50
+ ## Don't
51
+
52
+ - Do not create a second interactive row inside `CommandItem`.
53
+ - Do not install keyboard shortcuts from `CommandShortcut`.
54
+ - Do not use a command palette for a small fixed set that fits in a menu.
@@ -0,0 +1,32 @@
1
+ # Date Field
2
+
3
+ ## Purpose
4
+
5
+ `DateField` provides a styled native HTML date input. It keeps platform parsing, keyboard entry, validation, locale-aware presentation, and the browser’s native picker rather than implementing a look-alike calendar.
6
+
7
+ ## Usage
8
+
9
+ ```tsx
10
+ import { DateField } from '@moldable-ai/ui'
11
+
12
+ ;<DateField
13
+ aria-label="Due date"
14
+ value={dueDate}
15
+ min="2026-01-01"
16
+ onValueChange={setDueDate}
17
+ clearable
18
+ />
19
+ ```
20
+
21
+ Values use the native timezone-free `YYYY-MM-DD` form. Use `value`/`onValueChange` for a controlled field or `defaultValue` for an uncontrolled field. Native attributes such as `min`, `max`, `step`, `required`, `disabled`, and `aria-invalid` pass through. `variant` is `default` or `filled`; `density` is `compact`, `default`, or `comfortable`.
22
+
23
+ ## Quality bar
24
+
25
+ - Associate the input with a visible label or an accessible `aria-label`.
26
+ - Store the returned value as a calendar date; do not pass it through a UTC timestamp just to format it.
27
+ - Use native constraints and show validation text close to the field.
28
+ - Allow clearing only when an empty date is valid.
29
+ - Use a calendar popover only for workflows that require richer range, availability, or event selection.
30
+ - Do not replace the native picker to imitate a desktop control.
31
+
32
+ A host may later provide a native date capability. Keep that behind an explicit cross-client contract and preserve this web implementation as the portable fallback.
@@ -0,0 +1,55 @@
1
+ # DatePicker
2
+
3
+ `DatePicker` is a portable, date-only calendar popover. Its value is an ISO
4
+ calendar date (`YYYY-MM-DD`), so app storage does not introduce timezone
5
+ conversion.
6
+
7
+ ```tsx
8
+ <DatePicker
9
+ aria-label="Due date"
10
+ value={dueDate}
11
+ onValueChange={setDueDate}
12
+ min="2026-01-01"
13
+ clearable
14
+ />
15
+ ```
16
+
17
+ ## DatePicker or DateField
18
+
19
+ - Use `DatePicker` when a predictable renderer-owned calendar is important.
20
+ - Use `DateField` when compact keyboard entry and the browser's date control
21
+ are preferable.
22
+ - Use the standalone `Calendar` for ranges, multiple dates, or an always
23
+ visible month.
24
+
25
+ ## API
26
+
27
+ - `value`, `defaultValue`: ISO `YYYY-MM-DD` or an empty string.
28
+ - `onValueChange`: receives the next ISO date or an empty string.
29
+ - `min`, `max`: inclusive ISO date limits.
30
+ - `placeholder`: trigger copy when empty.
31
+ - `locale`: the `react-day-picker` locale used by the calendar and display.
32
+ - `formatValue`: custom trigger rendering for the ISO value.
33
+ - `clearable`, `clearLabel`: optional clear action inside the popover.
34
+ - `density`: `compact`, `default`, or `comfortable`.
35
+ - `open`, `defaultOpen`, `onOpenChange`: controlled or uncontrolled popover.
36
+ - Remaining button props apply to the trigger.
37
+
38
+ ## Keyboard and accessibility
39
+
40
+ Label the trigger through visible form text, `aria-labelledby`, or
41
+ `aria-label`. The trigger opens with Enter or Space. The calendar owns arrow,
42
+ Home, End, Page Up, and Page Down behavior. Selection closes the popover and
43
+ focus returns to the trigger.
44
+
45
+ ## Platform behavior
46
+
47
+ This component is portable and uses no host API. A future native date or time
48
+ control must be introduced through a shared host capability with this
49
+ renderer-owned control as its fallback.
50
+
51
+ ## Don't
52
+
53
+ - Do not put timestamps or UTC instants in this date-only value.
54
+ - Do not use this component for time, date-time, or date-range selection.
55
+ - Do not manually convert the selected value through `Date.toISOString()`.
@@ -0,0 +1,40 @@
1
+ # Dialog
2
+
3
+ Use `Dialog` for focused work that temporarily blocks the current surface. Use
4
+ `AlertDialog` or `ConfirmDialog` for consequential confirmation, `Popover` for
5
+ small anchored controls, and `Sheet` for a secondary region that should retain
6
+ spatial context.
7
+
8
+ ## Anatomy
9
+
10
+ ```tsx
11
+ <Dialog>
12
+ <DialogTrigger asChild>
13
+ <Button>Edit details</Button>
14
+ </DialogTrigger>
15
+ <DialogContent size="lg">
16
+ <DialogHeader>
17
+ <DialogTitle>Edit details</DialogTitle>
18
+ <DialogDescription>Update the selected record.</DialogDescription>
19
+ </DialogHeader>
20
+ <DialogBody>{/* the only scrolling region */}</DialogBody>
21
+ <DialogFooter>{/* actions remain reachable */}</DialogFooter>
22
+ </DialogContent>
23
+ </Dialog>
24
+ ```
25
+
26
+ `DialogContent` supports `sm`, `default`, `lg`, and `full`. It limits itself to
27
+ the host-provided window and chat-safe insets. `DialogBody` owns vertical
28
+ scrolling; do not put overflow on both the content and body.
29
+
30
+ Keep dialogs opaque and visually stable. Translucent material belongs on small
31
+ temporary control overlays where seeing the underlying context is useful.
32
+
33
+ For async actions, keep the dialog controlled, disable duplicate submission,
34
+ preserve the action label width, show inline field errors, and close only after
35
+ success. Use `ConfirmDialog` when that is the entire workflow.
36
+
37
+ Every dialog needs a `DialogTitle`. Add `DialogDescription` when the outcome or
38
+ scope is not obvious. Escape, outside dismissal, initial focus, and focus return
39
+ come from the Radix primitive; do not replace them with manual document event
40
+ handlers.
@@ -0,0 +1,7 @@
1
+ # EdgeFade
2
+
3
+ A non-interactive gradient cue that content continues beneath an edge.
4
+
5
+ Place it inside a relatively positioned scroll container and select the
6
+ matching `edge`. It never replaces a visible scrollbar or keyboard scrolling.
7
+ Keep the fade subtle and omit it when content boundaries are already obvious.