@mohou/ui 1.0.20

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 (604) hide show
  1. package/README.md +10 -0
  2. package/lib/types/blocks/activity-feed.d.ts +12 -0
  3. package/lib/types/blocks/activity-feed.d.ts.map +1 -0
  4. package/lib/types/blocks/app-shell.d.ts +17 -0
  5. package/lib/types/blocks/app-shell.d.ts.map +1 -0
  6. package/lib/types/blocks/attachment-gallery.d.ts +15 -0
  7. package/lib/types/blocks/attachment-gallery.d.ts.map +1 -0
  8. package/lib/types/blocks/bar-chart.d.ts +19 -0
  9. package/lib/types/blocks/bar-chart.d.ts.map +1 -0
  10. package/lib/types/blocks/comment-thread.d.ts +17 -0
  11. package/lib/types/blocks/comment-thread.d.ts.map +1 -0
  12. package/lib/types/blocks/dashboard-shell.d.ts +35 -0
  13. package/lib/types/blocks/dashboard-shell.d.ts.map +1 -0
  14. package/lib/types/blocks/description-list.d.ts +14 -0
  15. package/lib/types/blocks/description-list.d.ts.map +1 -0
  16. package/lib/types/blocks/detail-panel.d.ts +16 -0
  17. package/lib/types/blocks/detail-panel.d.ts.map +1 -0
  18. package/lib/types/blocks/donut-chart.d.ts +21 -0
  19. package/lib/types/blocks/donut-chart.d.ts.map +1 -0
  20. package/lib/types/blocks/env-badge.d.ts +11 -0
  21. package/lib/types/blocks/env-badge.d.ts.map +1 -0
  22. package/lib/types/blocks/env-table.d.ts +29 -0
  23. package/lib/types/blocks/env-table.d.ts.map +1 -0
  24. package/lib/types/blocks/file-tree.d.ts +12 -0
  25. package/lib/types/blocks/file-tree.d.ts.map +1 -0
  26. package/lib/types/blocks/filter-bar.d.ts +15 -0
  27. package/lib/types/blocks/filter-bar.d.ts.map +1 -0
  28. package/lib/types/blocks/form-sheet.d.ts +47 -0
  29. package/lib/types/blocks/form-sheet.d.ts.map +1 -0
  30. package/lib/types/blocks/gauge.d.ts +14 -0
  31. package/lib/types/blocks/gauge.d.ts.map +1 -0
  32. package/lib/types/blocks/list-detail.d.ts +42 -0
  33. package/lib/types/blocks/list-detail.d.ts.map +1 -0
  34. package/lib/types/blocks/notification-center.d.ts +16 -0
  35. package/lib/types/blocks/notification-center.d.ts.map +1 -0
  36. package/lib/types/blocks/page-header.d.ts +15 -0
  37. package/lib/types/blocks/page-header.d.ts.map +1 -0
  38. package/lib/types/blocks/progress-ring.d.ts +13 -0
  39. package/lib/types/blocks/progress-ring.d.ts.map +1 -0
  40. package/lib/types/blocks/radar-chart.d.ts +19 -0
  41. package/lib/types/blocks/radar-chart.d.ts.map +1 -0
  42. package/lib/types/blocks/request-inspector.d.ts +14 -0
  43. package/lib/types/blocks/request-inspector.d.ts.map +1 -0
  44. package/lib/types/blocks/reveal.d.ts +30 -0
  45. package/lib/types/blocks/reveal.d.ts.map +1 -0
  46. package/lib/types/blocks/run-timeline.d.ts +12 -0
  47. package/lib/types/blocks/run-timeline.d.ts.map +1 -0
  48. package/lib/types/blocks/scrollspy.d.ts +15 -0
  49. package/lib/types/blocks/scrollspy.d.ts.map +1 -0
  50. package/lib/types/blocks/settings-split.d.ts +47 -0
  51. package/lib/types/blocks/settings-split.d.ts.map +1 -0
  52. package/lib/types/blocks/severity-chip.d.ts +23 -0
  53. package/lib/types/blocks/severity-chip.d.ts.map +1 -0
  54. package/lib/types/blocks/sparkline.d.ts +14 -0
  55. package/lib/types/blocks/sparkline.d.ts.map +1 -0
  56. package/lib/types/blocks/stat-card.d.ts +17 -0
  57. package/lib/types/blocks/stat-card.d.ts.map +1 -0
  58. package/lib/types/blocks/status-badge.d.ts +21 -0
  59. package/lib/types/blocks/status-badge.d.ts.map +1 -0
  60. package/lib/types/blocks/table-page.d.ts +35 -0
  61. package/lib/types/blocks/table-page.d.ts.map +1 -0
  62. package/lib/types/blocks/terminal.d.ts +12 -0
  63. package/lib/types/blocks/terminal.d.ts.map +1 -0
  64. package/lib/types/blocks/test-step-list.d.ts +17 -0
  65. package/lib/types/blocks/test-step-list.d.ts.map +1 -0
  66. package/lib/types/blocks/trend-card.d.ts +20 -0
  67. package/lib/types/blocks/trend-card.d.ts.map +1 -0
  68. package/lib/types/blocks/wizard-shell.d.ts +47 -0
  69. package/lib/types/blocks/wizard-shell.d.ts.map +1 -0
  70. package/lib/types/components/accordion.d.ts +14 -0
  71. package/lib/types/components/accordion.d.ts.map +1 -0
  72. package/lib/types/components/alert-dialog.d.ts +26 -0
  73. package/lib/types/components/alert-dialog.d.ts.map +1 -0
  74. package/lib/types/components/alert.d.ts +18 -0
  75. package/lib/types/components/alert.d.ts.map +1 -0
  76. package/lib/types/components/aspect-ratio.d.ts +9 -0
  77. package/lib/types/components/aspect-ratio.d.ts.map +1 -0
  78. package/lib/types/components/attachment.d.ts +28 -0
  79. package/lib/types/components/attachment.d.ts.map +1 -0
  80. package/lib/types/components/avatar.d.ts +16 -0
  81. package/lib/types/components/avatar.d.ts.map +1 -0
  82. package/lib/types/components/badge.d.ts +15 -0
  83. package/lib/types/components/badge.d.ts.map +1 -0
  84. package/lib/types/components/breadcrumb.d.ts +15 -0
  85. package/lib/types/components/breadcrumb.d.ts.map +1 -0
  86. package/lib/types/components/bubble.d.ts +21 -0
  87. package/lib/types/components/bubble.d.ts.map +1 -0
  88. package/lib/types/components/button-group.d.ts +17 -0
  89. package/lib/types/components/button-group.d.ts.map +1 -0
  90. package/lib/types/components/button.d.ts +16 -0
  91. package/lib/types/components/button.d.ts.map +1 -0
  92. package/lib/types/components/calendar.d.ts +15 -0
  93. package/lib/types/components/calendar.d.ts.map +1 -0
  94. package/lib/types/components/card.d.ts +19 -0
  95. package/lib/types/components/card.d.ts.map +1 -0
  96. package/lib/types/components/chart.d.ts +52 -0
  97. package/lib/types/components/chart.d.ts.map +1 -0
  98. package/lib/types/components/checkbox.d.ts +9 -0
  99. package/lib/types/components/checkbox.d.ts.map +1 -0
  100. package/lib/types/components/collapsible.d.ts +10 -0
  101. package/lib/types/components/collapsible.d.ts.map +1 -0
  102. package/lib/types/components/combobox.d.ts +29 -0
  103. package/lib/types/components/combobox.d.ts.map +1 -0
  104. package/lib/types/components/command.d.ts +26 -0
  105. package/lib/types/components/command.d.ts.map +1 -0
  106. package/lib/types/components/context-menu.d.ts +34 -0
  107. package/lib/types/components/context-menu.d.ts.map +1 -0
  108. package/lib/types/components/dialog.d.ts +30 -0
  109. package/lib/types/components/dialog.d.ts.map +1 -0
  110. package/lib/types/components/drawer.d.ts +21 -0
  111. package/lib/types/components/drawer.d.ts.map +1 -0
  112. package/lib/types/components/dropdown-menu.d.ts +37 -0
  113. package/lib/types/components/dropdown-menu.d.ts.map +1 -0
  114. package/lib/types/components/empty.d.ts +24 -0
  115. package/lib/types/components/empty.d.ts.map +1 -0
  116. package/lib/types/components/field.d.ts +31 -0
  117. package/lib/types/components/field.d.ts.map +1 -0
  118. package/lib/types/components/hover-card.d.ts +10 -0
  119. package/lib/types/components/hover-card.d.ts.map +1 -0
  120. package/lib/types/components/input-group.d.ts +23 -0
  121. package/lib/types/components/input-group.d.ts.map +1 -0
  122. package/lib/types/components/input.d.ts +11 -0
  123. package/lib/types/components/input.d.ts.map +1 -0
  124. package/lib/types/components/item.d.ts +27 -0
  125. package/lib/types/components/item.d.ts.map +1 -0
  126. package/lib/types/components/kbd.d.ts +8 -0
  127. package/lib/types/components/kbd.d.ts.map +1 -0
  128. package/lib/types/components/label.d.ts +11 -0
  129. package/lib/types/components/label.d.ts.map +1 -0
  130. package/lib/types/components/marker.d.ts +15 -0
  131. package/lib/types/components/marker.d.ts.map +1 -0
  132. package/lib/types/components/menubar.d.ts +34 -0
  133. package/lib/types/components/menubar.d.ts.map +1 -0
  134. package/lib/types/components/message-scroller.d.ts +15 -0
  135. package/lib/types/components/message-scroller.d.ts.map +1 -0
  136. package/lib/types/components/message.d.ts +15 -0
  137. package/lib/types/components/message.d.ts.map +1 -0
  138. package/lib/types/components/native-select.d.ts +13 -0
  139. package/lib/types/components/native-select.d.ts.map +1 -0
  140. package/lib/types/components/navigation-menu.d.ts +16 -0
  141. package/lib/types/components/navigation-menu.d.ts.map +1 -0
  142. package/lib/types/components/pagination.d.ts +22 -0
  143. package/lib/types/components/pagination.d.ts.map +1 -0
  144. package/lib/types/components/popover.d.ts +17 -0
  145. package/lib/types/components/popover.d.ts.map +1 -0
  146. package/lib/types/components/progress.d.ts +15 -0
  147. package/lib/types/components/progress.d.ts.map +1 -0
  148. package/lib/types/components/questionnaire.d.ts +24 -0
  149. package/lib/types/components/questionnaire.d.ts.map +1 -0
  150. package/lib/types/components/radio-group.d.ts +10 -0
  151. package/lib/types/components/radio-group.d.ts.map +1 -0
  152. package/lib/types/components/resizable.d.ts +15 -0
  153. package/lib/types/components/resizable.d.ts.map +1 -0
  154. package/lib/types/components/scroll-area.d.ts +9 -0
  155. package/lib/types/components/scroll-area.d.ts.map +1 -0
  156. package/lib/types/components/select.d.ts +23 -0
  157. package/lib/types/components/select.d.ts.map +1 -0
  158. package/lib/types/components/separator.d.ts +9 -0
  159. package/lib/types/components/separator.d.ts.map +1 -0
  160. package/lib/types/components/sheet.d.ts +28 -0
  161. package/lib/types/components/sheet.d.ts.map +1 -0
  162. package/lib/types/components/sidebar.d.ts +68 -0
  163. package/lib/types/components/sidebar.d.ts.map +1 -0
  164. package/lib/types/components/skeleton.d.ts +10 -0
  165. package/lib/types/components/skeleton.d.ts.map +1 -0
  166. package/lib/types/components/slider.d.ts +8 -0
  167. package/lib/types/components/slider.d.ts.map +1 -0
  168. package/lib/types/components/spinner.d.ts +9 -0
  169. package/lib/types/components/spinner.d.ts.map +1 -0
  170. package/lib/types/components/switch.d.ts +13 -0
  171. package/lib/types/components/switch.d.ts.map +1 -0
  172. package/lib/types/components/table.d.ts +18 -0
  173. package/lib/types/components/table.d.ts.map +1 -0
  174. package/lib/types/components/tabs.d.ts +18 -0
  175. package/lib/types/components/tabs.d.ts.map +1 -0
  176. package/lib/types/components/textarea.d.ts +11 -0
  177. package/lib/types/components/textarea.d.ts.map +1 -0
  178. package/lib/types/components/toast.d.ts +35 -0
  179. package/lib/types/components/toast.d.ts.map +1 -0
  180. package/lib/types/components/toggle-group.d.ts +16 -0
  181. package/lib/types/components/toggle-group.d.ts.map +1 -0
  182. package/lib/types/components/toggle.d.ts +13 -0
  183. package/lib/types/components/toggle.d.ts.map +1 -0
  184. package/lib/types/components/tooltip.d.ts +14 -0
  185. package/lib/types/components/tooltip.d.ts.map +1 -0
  186. package/lib/types/composites/autocomplete.d.ts +15 -0
  187. package/lib/types/composites/autocomplete.d.ts.map +1 -0
  188. package/lib/types/composites/cascader.d.ts +18 -0
  189. package/lib/types/composites/cascader.d.ts.map +1 -0
  190. package/lib/types/composites/color-picker.d.ts +12 -0
  191. package/lib/types/composites/color-picker.d.ts.map +1 -0
  192. package/lib/types/composites/confirm-dialog.d.ts +17 -0
  193. package/lib/types/composites/confirm-dialog.d.ts.map +1 -0
  194. package/lib/types/composites/copyable.d.ts +12 -0
  195. package/lib/types/composites/copyable.d.ts.map +1 -0
  196. package/lib/types/composites/currency-input.d.ts +13 -0
  197. package/lib/types/composites/currency-input.d.ts.map +1 -0
  198. package/lib/types/composites/date-chrome.d.ts +8 -0
  199. package/lib/types/composites/date-chrome.d.ts.map +1 -0
  200. package/lib/types/composites/date-picker.d.ts +17 -0
  201. package/lib/types/composites/date-picker.d.ts.map +1 -0
  202. package/lib/types/composites/date-range-picker.d.ts +18 -0
  203. package/lib/types/composites/date-range-picker.d.ts.map +1 -0
  204. package/lib/types/composites/date-time-picker.d.ts +18 -0
  205. package/lib/types/composites/date-time-picker.d.ts.map +1 -0
  206. package/lib/types/composites/date-time-range-picker.d.ts +17 -0
  207. package/lib/types/composites/date-time-range-picker.d.ts.map +1 -0
  208. package/lib/types/composites/duration-input.d.ts +14 -0
  209. package/lib/types/composites/duration-input.d.ts.map +1 -0
  210. package/lib/types/composites/live-refresh.d.ts +46 -0
  211. package/lib/types/composites/live-refresh.d.ts.map +1 -0
  212. package/lib/types/composites/mini-calendar.d.ts +13 -0
  213. package/lib/types/composites/mini-calendar.d.ts.map +1 -0
  214. package/lib/types/composites/number-field.d.ts +15 -0
  215. package/lib/types/composites/number-field.d.ts.map +1 -0
  216. package/lib/types/composites/password-field.d.ts +13 -0
  217. package/lib/types/composites/password-field.d.ts.map +1 -0
  218. package/lib/types/composites/phone-input.d.ts +12 -0
  219. package/lib/types/composites/phone-input.d.ts.map +1 -0
  220. package/lib/types/composites/rating.d.ts +13 -0
  221. package/lib/types/composites/rating.d.ts.map +1 -0
  222. package/lib/types/composites/relative-date-picker.d.ts +16 -0
  223. package/lib/types/composites/relative-date-picker.d.ts.map +1 -0
  224. package/lib/types/composites/search-input.d.ts +16 -0
  225. package/lib/types/composites/search-input.d.ts.map +1 -0
  226. package/lib/types/composites/slider-range.d.ts +14 -0
  227. package/lib/types/composites/slider-range.d.ts.map +1 -0
  228. package/lib/types/composites/tag-input.d.ts +14 -0
  229. package/lib/types/composites/tag-input.d.ts.map +1 -0
  230. package/lib/types/composites/time-picker.d.ts +28 -0
  231. package/lib/types/composites/time-picker.d.ts.map +1 -0
  232. package/lib/types/composites/time-range-picker.d.ts +16 -0
  233. package/lib/types/composites/time-range-picker.d.ts.map +1 -0
  234. package/lib/types/composites/timezone-select.d.ts +22 -0
  235. package/lib/types/composites/timezone-select.d.ts.map +1 -0
  236. package/lib/types/composites/transfer.d.ts +17 -0
  237. package/lib/types/composites/transfer.d.ts.map +1 -0
  238. package/lib/types/composites/user-picker.d.ts +17 -0
  239. package/lib/types/composites/user-picker.d.ts.map +1 -0
  240. package/lib/types/hooks/use-html-dark.d.ts +4 -0
  241. package/lib/types/hooks/use-html-dark.d.ts.map +1 -0
  242. package/lib/types/hooks/use-mobile.d.ts +2 -0
  243. package/lib/types/hooks/use-mobile.d.ts.map +1 -0
  244. package/lib/types/i18n/context.d.ts +310 -0
  245. package/lib/types/i18n/context.d.ts.map +1 -0
  246. package/lib/types/i18n/en.d.ts +290 -0
  247. package/lib/types/i18n/en.d.ts.map +1 -0
  248. package/lib/types/i18n/zh.d.ts +3 -0
  249. package/lib/types/i18n/zh.d.ts.map +1 -0
  250. package/lib/types/index.d.ts +151 -0
  251. package/lib/types/index.d.ts.map +1 -0
  252. package/lib/types/lib/clipboard.d.ts +3 -0
  253. package/lib/types/lib/clipboard.d.ts.map +1 -0
  254. package/lib/types/lib/defined.d.ts +3 -0
  255. package/lib/types/lib/defined.d.ts.map +1 -0
  256. package/lib/types/lib/icons.d.ts +16 -0
  257. package/lib/types/lib/icons.d.ts.map +1 -0
  258. package/lib/types/lib/illustrations.d.ts +18 -0
  259. package/lib/types/lib/illustrations.d.ts.map +1 -0
  260. package/lib/types/lib/utils.d.ts +3 -0
  261. package/lib/types/lib/utils.d.ts.map +1 -0
  262. package/lib/types/products/cells.d.ts +13 -0
  263. package/lib/types/products/cells.d.ts.map +1 -0
  264. package/lib/types/products/code-block.d.ts +14 -0
  265. package/lib/types/products/code-block.d.ts.map +1 -0
  266. package/lib/types/products/code-editor.d.ts +21 -0
  267. package/lib/types/products/code-editor.d.ts.map +1 -0
  268. package/lib/types/products/commit-graph.d.ts +38 -0
  269. package/lib/types/products/commit-graph.d.ts.map +1 -0
  270. package/lib/types/products/data-grid.d.ts +79 -0
  271. package/lib/types/products/data-grid.d.ts.map +1 -0
  272. package/lib/types/products/diff-viewer.d.ts +15 -0
  273. package/lib/types/products/diff-viewer.d.ts.map +1 -0
  274. package/lib/types/products/event-calendar.d.ts +23 -0
  275. package/lib/types/products/event-calendar.d.ts.map +1 -0
  276. package/lib/types/products/export-csv.d.ts +2 -0
  277. package/lib/types/products/export-csv.d.ts.map +1 -0
  278. package/lib/types/products/file-dropzone.d.ts +12 -0
  279. package/lib/types/products/file-dropzone.d.ts.map +1 -0
  280. package/lib/types/products/full-calendar/animations.d.ts +12 -0
  281. package/lib/types/products/full-calendar/animations.d.ts.map +1 -0
  282. package/lib/types/products/full-calendar/calendar-body.d.ts +2 -0
  283. package/lib/types/products/full-calendar/calendar-body.d.ts.map +1 -0
  284. package/lib/types/products/full-calendar/constants.d.ts +3 -0
  285. package/lib/types/products/full-calendar/constants.d.ts.map +1 -0
  286. package/lib/types/products/full-calendar/contexts/calendar-context.d.ts +42 -0
  287. package/lib/types/products/full-calendar/contexts/calendar-context.d.ts.map +1 -0
  288. package/lib/types/products/full-calendar/contexts/dnd-context.d.ts +16 -0
  289. package/lib/types/products/full-calendar/contexts/dnd-context.d.ts.map +1 -0
  290. package/lib/types/products/full-calendar/dialogs/add-edit-event-dialog.d.ts +21 -0
  291. package/lib/types/products/full-calendar/dialogs/add-edit-event-dialog.d.ts.map +1 -0
  292. package/lib/types/products/full-calendar/dialogs/delete-event-dialog.d.ts +4 -0
  293. package/lib/types/products/full-calendar/dialogs/delete-event-dialog.d.ts.map +1 -0
  294. package/lib/types/products/full-calendar/dialogs/event-details-dialog.d.ts +7 -0
  295. package/lib/types/products/full-calendar/dialogs/event-details-dialog.d.ts.map +1 -0
  296. package/lib/types/products/full-calendar/dialogs/events-list-dialog.d.ts +9 -0
  297. package/lib/types/products/full-calendar/dialogs/events-list-dialog.d.ts.map +1 -0
  298. package/lib/types/products/full-calendar/dnd/draggable-event.d.ts +11 -0
  299. package/lib/types/products/full-calendar/dnd/draggable-event.d.ts.map +1 -0
  300. package/lib/types/products/full-calendar/dnd/droppable-area.d.ts +11 -0
  301. package/lib/types/products/full-calendar/dnd/droppable-area.d.ts.map +1 -0
  302. package/lib/types/products/full-calendar/dnd/resizable-event.d.ts +10 -0
  303. package/lib/types/products/full-calendar/dnd/resizable-event.d.ts.map +1 -0
  304. package/lib/types/products/full-calendar/header/calendar-header.d.ts +2 -0
  305. package/lib/types/products/full-calendar/header/calendar-header.d.ts.map +1 -0
  306. package/lib/types/products/full-calendar/header/date-navigator.d.ts +9 -0
  307. package/lib/types/products/full-calendar/header/date-navigator.d.ts.map +1 -0
  308. package/lib/types/products/full-calendar/header/filter.d.ts +2 -0
  309. package/lib/types/products/full-calendar/header/filter.d.ts.map +1 -0
  310. package/lib/types/products/full-calendar/header/today-button.d.ts +2 -0
  311. package/lib/types/products/full-calendar/header/today-button.d.ts.map +1 -0
  312. package/lib/types/products/full-calendar/header/user-select.d.ts +2 -0
  313. package/lib/types/products/full-calendar/header/user-select.d.ts.map +1 -0
  314. package/lib/types/products/full-calendar/header/view-tabs.d.ts +4 -0
  315. package/lib/types/products/full-calendar/header/view-tabs.d.ts.map +1 -0
  316. package/lib/types/products/full-calendar/helpers.d.ts +42 -0
  317. package/lib/types/products/full-calendar/helpers.d.ts.map +1 -0
  318. package/lib/types/products/full-calendar/hooks/use-time-range-create.d.ts +25 -0
  319. package/lib/types/products/full-calendar/hooks/use-time-range-create.d.ts.map +1 -0
  320. package/lib/types/products/full-calendar/hooks.d.ts +11 -0
  321. package/lib/types/products/full-calendar/hooks.d.ts.map +1 -0
  322. package/lib/types/products/full-calendar/interfaces.d.ts +21 -0
  323. package/lib/types/products/full-calendar/interfaces.d.ts.map +1 -0
  324. package/lib/types/products/full-calendar/settings/settings.d.ts +2 -0
  325. package/lib/types/products/full-calendar/settings/settings.d.ts.map +1 -0
  326. package/lib/types/products/full-calendar/shims/avatar-group.d.ts +7 -0
  327. package/lib/types/products/full-calendar/shims/avatar-group.d.ts.map +1 -0
  328. package/lib/types/products/full-calendar/shims/day-picker.d.ts +2 -0
  329. package/lib/types/products/full-calendar/shims/day-picker.d.ts.map +1 -0
  330. package/lib/types/products/full-calendar/shims/motion.d.ts +32 -0
  331. package/lib/types/products/full-calendar/shims/motion.d.ts.map +1 -0
  332. package/lib/types/products/full-calendar/shims/next-themes.d.ts +5 -0
  333. package/lib/types/products/full-calendar/shims/next-themes.d.ts.map +1 -0
  334. package/lib/types/products/full-calendar/shims/re-resizable.d.ts +19 -0
  335. package/lib/types/products/full-calendar/shims/re-resizable.d.ts.map +1 -0
  336. package/lib/types/products/full-calendar/shims/sonner.d.ts +5 -0
  337. package/lib/types/products/full-calendar/shims/sonner.d.ts.map +1 -0
  338. package/lib/types/products/full-calendar/types.d.ts +3 -0
  339. package/lib/types/products/full-calendar/types.d.ts.map +1 -0
  340. package/lib/types/products/full-calendar/views/agenda-view/agenda-events.d.ts +3 -0
  341. package/lib/types/products/full-calendar/views/agenda-view/agenda-events.d.ts.map +1 -0
  342. package/lib/types/products/full-calendar/views/month-view/calendar-month-view.d.ts +8 -0
  343. package/lib/types/products/full-calendar/views/month-view/calendar-month-view.d.ts.map +1 -0
  344. package/lib/types/products/full-calendar/views/month-view/day-cell.d.ts +12 -0
  345. package/lib/types/products/full-calendar/views/month-view/day-cell.d.ts.map +1 -0
  346. package/lib/types/products/full-calendar/views/month-view/event-bullet.d.ts +6 -0
  347. package/lib/types/products/full-calendar/views/month-view/event-bullet.d.ts.map +1 -0
  348. package/lib/types/products/full-calendar/views/month-view/month-event-badge.d.ts +17 -0
  349. package/lib/types/products/full-calendar/views/month-view/month-event-badge.d.ts.map +1 -0
  350. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-day-view.d.ts +8 -0
  351. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-day-view.d.ts.map +1 -0
  352. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-time-line.d.ts +2 -0
  353. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-time-line.d.ts.map +1 -0
  354. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-week-view.d.ts +8 -0
  355. package/lib/types/products/full-calendar/views/week-and-day-view/calendar-week-view.d.ts.map +1 -0
  356. package/lib/types/products/full-calendar/views/week-and-day-view/day-view-multi-day-events-row.d.ts +8 -0
  357. package/lib/types/products/full-calendar/views/week-and-day-view/day-view-multi-day-events-row.d.ts.map +1 -0
  358. package/lib/types/products/full-calendar/views/week-and-day-view/event-block.d.ts +12 -0
  359. package/lib/types/products/full-calendar/views/week-and-day-view/event-block.d.ts.map +1 -0
  360. package/lib/types/products/full-calendar/views/week-and-day-view/render-grouped-events.d.ts +8 -0
  361. package/lib/types/products/full-calendar/views/week-and-day-view/render-grouped-events.d.ts.map +1 -0
  362. package/lib/types/products/full-calendar/views/week-and-day-view/week-view-multi-day-events-row.d.ts +8 -0
  363. package/lib/types/products/full-calendar/views/week-and-day-view/week-view-multi-day-events-row.d.ts.map +1 -0
  364. package/lib/types/products/full-calendar/views/year-view/calendar-year-view.d.ts +8 -0
  365. package/lib/types/products/full-calendar/views/year-view/calendar-year-view.d.ts.map +1 -0
  366. package/lib/types/products/gantt.d.ts +17 -0
  367. package/lib/types/products/gantt.d.ts.map +1 -0
  368. package/lib/types/products/jira-wiki-parse.d.ts +55 -0
  369. package/lib/types/products/jira-wiki-parse.d.ts.map +1 -0
  370. package/lib/types/products/jira-wiki.d.ts +39 -0
  371. package/lib/types/products/jira-wiki.d.ts.map +1 -0
  372. package/lib/types/products/jql-input.d.ts +22 -0
  373. package/lib/types/products/jql-input.d.ts.map +1 -0
  374. package/lib/types/products/json-viewer.d.ts +12 -0
  375. package/lib/types/products/json-viewer.d.ts.map +1 -0
  376. package/lib/types/products/kanban-issue-panel.d.ts +15 -0
  377. package/lib/types/products/kanban-issue-panel.d.ts.map +1 -0
  378. package/lib/types/products/kanban.d.ts +43 -0
  379. package/lib/types/products/kanban.d.ts.map +1 -0
  380. package/lib/types/products/log-viewer.d.ts +25 -0
  381. package/lib/types/products/log-viewer.d.ts.map +1 -0
  382. package/lib/types/products/markdown-editor.d.ts +16 -0
  383. package/lib/types/products/markdown-editor.d.ts.map +1 -0
  384. package/lib/types/products/markdown.d.ts +13 -0
  385. package/lib/types/products/markdown.d.ts.map +1 -0
  386. package/lib/types/products/rich-text-editor.d.ts +13 -0
  387. package/lib/types/products/rich-text-editor.d.ts.map +1 -0
  388. package/lib/types/products/sortable-list.d.ts +16 -0
  389. package/lib/types/products/sortable-list.d.ts.map +1 -0
  390. package/lib/types/products/stepper.d.ts +39 -0
  391. package/lib/types/products/stepper.d.ts.map +1 -0
  392. package/lib/types/products/timeline.d.ts +17 -0
  393. package/lib/types/products/timeline.d.ts.map +1 -0
  394. package/lib/types/products/tree-view.d.ts +17 -0
  395. package/lib/types/products/tree-view.d.ts.map +1 -0
  396. package/lib/types/sdk/app-error-boundary.d.ts +33 -0
  397. package/lib/types/sdk/app-error-boundary.d.ts.map +1 -0
  398. package/lib/types/sdk/app-id.d.ts +6 -0
  399. package/lib/types/sdk/app-id.d.ts.map +1 -0
  400. package/lib/types/sdk/use-app.d.ts +32 -0
  401. package/lib/types/sdk/use-app.d.ts.map +1 -0
  402. package/package.json +67 -0
  403. package/src/blocks/activity-feed.tsx +16 -0
  404. package/src/blocks/app-shell.tsx +38 -0
  405. package/src/blocks/attachment-gallery.tsx +36 -0
  406. package/src/blocks/bar-chart.tsx +46 -0
  407. package/src/blocks/comment-thread.tsx +37 -0
  408. package/src/blocks/dashboard-shell.tsx +108 -0
  409. package/src/blocks/description-list.tsx +23 -0
  410. package/src/blocks/detail-panel.tsx +43 -0
  411. package/src/blocks/donut-chart.tsx +54 -0
  412. package/src/blocks/env-badge.tsx +30 -0
  413. package/src/blocks/env-table.tsx +315 -0
  414. package/src/blocks/file-tree.tsx +12 -0
  415. package/src/blocks/filter-bar.tsx +22 -0
  416. package/src/blocks/form-sheet.tsx +159 -0
  417. package/src/blocks/gauge.tsx +36 -0
  418. package/src/blocks/list-detail.tsx +120 -0
  419. package/src/blocks/notification-center.tsx +29 -0
  420. package/src/blocks/page-header.tsx +31 -0
  421. package/src/blocks/progress-ring.tsx +43 -0
  422. package/src/blocks/radar-chart.tsx +47 -0
  423. package/src/blocks/request-inspector.tsx +41 -0
  424. package/src/blocks/reveal.tsx +56 -0
  425. package/src/blocks/run-timeline.tsx +12 -0
  426. package/src/blocks/scrollspy.tsx +48 -0
  427. package/src/blocks/settings-split.tsx +153 -0
  428. package/src/blocks/severity-chip.tsx +34 -0
  429. package/src/blocks/sparkline.tsx +27 -0
  430. package/src/blocks/stat-card.tsx +50 -0
  431. package/src/blocks/status-badge.tsx +40 -0
  432. package/src/blocks/table-page.tsx +82 -0
  433. package/src/blocks/terminal.tsx +28 -0
  434. package/src/blocks/test-step-list.tsx +26 -0
  435. package/src/blocks/trend-card.tsx +57 -0
  436. package/src/blocks/wizard-shell.tsx +131 -0
  437. package/src/cdn-modules.d.ts +5 -0
  438. package/src/components/accordion.tsx +79 -0
  439. package/src/components/alert-dialog.tsx +192 -0
  440. package/src/components/alert.tsx +83 -0
  441. package/src/components/aspect-ratio.tsx +26 -0
  442. package/src/components/attachment.tsx +211 -0
  443. package/src/components/avatar.tsx +111 -0
  444. package/src/components/badge.tsx +59 -0
  445. package/src/components/breadcrumb.tsx +129 -0
  446. package/src/components/bubble.tsx +132 -0
  447. package/src/components/button-group.tsx +93 -0
  448. package/src/components/button.tsx +65 -0
  449. package/src/components/calendar.tsx +224 -0
  450. package/src/components/card.tsx +110 -0
  451. package/src/components/chart.tsx +378 -0
  452. package/src/components/checkbox.tsx +33 -0
  453. package/src/components/collapsible.tsx +23 -0
  454. package/src/components/combobox.tsx +299 -0
  455. package/src/components/command.tsx +201 -0
  456. package/src/components/context-menu.tsx +274 -0
  457. package/src/components/dialog.tsx +179 -0
  458. package/src/components/drawer.tsx +230 -0
  459. package/src/components/dropdown-menu.tsx +274 -0
  460. package/src/components/empty.tsx +130 -0
  461. package/src/components/field.tsx +242 -0
  462. package/src/components/hover-card.tsx +53 -0
  463. package/src/components/input-group.tsx +161 -0
  464. package/src/components/input.tsx +27 -0
  465. package/src/components/item.tsx +205 -0
  466. package/src/components/kbd.tsx +30 -0
  467. package/src/components/label.tsx +26 -0
  468. package/src/components/marker.tsx +75 -0
  469. package/src/components/menubar.tsx +283 -0
  470. package/src/components/message-scroller.tsx +133 -0
  471. package/src/components/message.tsx +96 -0
  472. package/src/components/native-select.tsx +65 -0
  473. package/src/components/navigation-menu.tsx +172 -0
  474. package/src/components/pagination.tsx +138 -0
  475. package/src/components/popover.tsx +95 -0
  476. package/src/components/progress.tsx +89 -0
  477. package/src/components/questionnaire.tsx +332 -0
  478. package/src/components/radio-group.tsx +40 -0
  479. package/src/components/resizable.tsx +56 -0
  480. package/src/components/scroll-area.tsx +56 -0
  481. package/src/components/select.tsx +207 -0
  482. package/src/components/separator.tsx +28 -0
  483. package/src/components/sheet.tsx +158 -0
  484. package/src/components/sidebar.tsx +725 -0
  485. package/src/components/skeleton.tsx +20 -0
  486. package/src/components/slider.tsx +56 -0
  487. package/src/components/spinner.tsx +16 -0
  488. package/src/components/switch.tsx +38 -0
  489. package/src/components/table.tsx +121 -0
  490. package/src/components/tabs.tsx +88 -0
  491. package/src/components/textarea.tsx +25 -0
  492. package/src/components/toast.tsx +273 -0
  493. package/src/components/toggle-group.tsx +92 -0
  494. package/src/components/toggle.tsx +47 -0
  495. package/src/components/tooltip.tsx +72 -0
  496. package/src/composites/autocomplete.tsx +61 -0
  497. package/src/composites/cascader.tsx +52 -0
  498. package/src/composites/color-picker.tsx +25 -0
  499. package/src/composites/confirm-dialog.tsx +62 -0
  500. package/src/composites/copyable.tsx +44 -0
  501. package/src/composites/currency-input.tsx +37 -0
  502. package/src/composites/date-chrome.tsx +156 -0
  503. package/src/composites/date-picker.tsx +97 -0
  504. package/src/composites/date-range-picker.tsx +99 -0
  505. package/src/composites/date-time-picker.tsx +121 -0
  506. package/src/composites/date-time-range-picker.tsx +57 -0
  507. package/src/composites/duration-input.tsx +128 -0
  508. package/src/composites/live-refresh.tsx +348 -0
  509. package/src/composites/mini-calendar.tsx +30 -0
  510. package/src/composites/number-field.tsx +59 -0
  511. package/src/composites/password-field.tsx +50 -0
  512. package/src/composites/phone-input.tsx +28 -0
  513. package/src/composites/rating.tsx +45 -0
  514. package/src/composites/relative-date-picker.tsx +68 -0
  515. package/src/composites/search-input.tsx +55 -0
  516. package/src/composites/slider-range.tsx +36 -0
  517. package/src/composites/tag-input.tsx +62 -0
  518. package/src/composites/time-picker.tsx +208 -0
  519. package/src/composites/time-range-picker.tsx +31 -0
  520. package/src/composites/timezone-select.tsx +257 -0
  521. package/src/composites/transfer.tsx +58 -0
  522. package/src/composites/user-picker.tsx +46 -0
  523. package/src/hooks/use-html-dark.ts +36 -0
  524. package/src/hooks/use-mobile.ts +22 -0
  525. package/src/i18n/context.tsx +71 -0
  526. package/src/i18n/en.ts +308 -0
  527. package/src/i18n/zh.ts +290 -0
  528. package/src/index.ts +151 -0
  529. package/src/lib/clipboard.ts +10 -0
  530. package/src/lib/defined.ts +8 -0
  531. package/src/lib/icons.tsx +16 -0
  532. package/src/lib/illustrations.tsx +573 -0
  533. package/src/lib/utils.ts +6 -0
  534. package/src/products/cells.tsx +18 -0
  535. package/src/products/code-block.tsx +91 -0
  536. package/src/products/code-editor.tsx +271 -0
  537. package/src/products/column-meta.d.ts +9 -0
  538. package/src/products/commit-graph.tsx +643 -0
  539. package/src/products/data-grid.tsx +692 -0
  540. package/src/products/diff-viewer.tsx +224 -0
  541. package/src/products/event-calendar.tsx +49 -0
  542. package/src/products/export-csv.ts +26 -0
  543. package/src/products/file-dropzone.tsx +47 -0
  544. package/src/products/full-calendar/animations.ts +38 -0
  545. package/src/products/full-calendar/calendar-body.tsx +76 -0
  546. package/src/products/full-calendar/constants.ts +10 -0
  547. package/src/products/full-calendar/contexts/calendar-context.tsx +254 -0
  548. package/src/products/full-calendar/contexts/dnd-context.tsx +156 -0
  549. package/src/products/full-calendar/dialogs/add-edit-event-dialog.tsx +186 -0
  550. package/src/products/full-calendar/dialogs/delete-event-dialog.tsx +39 -0
  551. package/src/products/full-calendar/dialogs/event-details-dialog.tsx +99 -0
  552. package/src/products/full-calendar/dialogs/events-list-dialog.tsx +86 -0
  553. package/src/products/full-calendar/dnd/draggable-event.tsx +45 -0
  554. package/src/products/full-calendar/dnd/droppable-area.tsx +45 -0
  555. package/src/products/full-calendar/dnd/resizable-event.tsx +178 -0
  556. package/src/products/full-calendar/header/calendar-header.tsx +64 -0
  557. package/src/products/full-calendar/header/date-navigator.tsx +110 -0
  558. package/src/products/full-calendar/header/filter.tsx +58 -0
  559. package/src/products/full-calendar/header/today-button.tsx +45 -0
  560. package/src/products/full-calendar/header/user-select.tsx +64 -0
  561. package/src/products/full-calendar/header/view-tabs.tsx +36 -0
  562. package/src/products/full-calendar/helpers.ts +463 -0
  563. package/src/products/full-calendar/hooks/use-time-range-create.ts +152 -0
  564. package/src/products/full-calendar/hooks.ts +70 -0
  565. package/src/products/full-calendar/interfaces.ts +23 -0
  566. package/src/products/full-calendar/settings/settings.tsx +80 -0
  567. package/src/products/full-calendar/shims/avatar-group.tsx +16 -0
  568. package/src/products/full-calendar/shims/day-picker.tsx +1 -0
  569. package/src/products/full-calendar/shims/motion.tsx +97 -0
  570. package/src/products/full-calendar/shims/next-themes.ts +6 -0
  571. package/src/products/full-calendar/shims/re-resizable.tsx +25 -0
  572. package/src/products/full-calendar/shims/sonner.ts +4 -0
  573. package/src/products/full-calendar/types.ts +8 -0
  574. package/src/products/full-calendar/views/agenda-view/agenda-events.tsx +140 -0
  575. package/src/products/full-calendar/views/month-view/calendar-month-view.tsx +69 -0
  576. package/src/products/full-calendar/views/month-view/day-cell.tsx +200 -0
  577. package/src/products/full-calendar/views/month-view/event-bullet.tsx +40 -0
  578. package/src/products/full-calendar/views/month-view/month-event-badge.tsx +143 -0
  579. package/src/products/full-calendar/views/week-and-day-view/calendar-day-view.tsx +295 -0
  580. package/src/products/full-calendar/views/week-and-day-view/calendar-time-line.tsx +35 -0
  581. package/src/products/full-calendar/views/week-and-day-view/calendar-week-view.tsx +251 -0
  582. package/src/products/full-calendar/views/week-and-day-view/day-view-multi-day-events-row.tsx +73 -0
  583. package/src/products/full-calendar/views/week-and-day-view/event-block.tsx +114 -0
  584. package/src/products/full-calendar/views/week-and-day-view/render-grouped-events.tsx +49 -0
  585. package/src/products/full-calendar/views/week-and-day-view/week-view-multi-day-events-row.tsx +145 -0
  586. package/src/products/full-calendar/views/year-view/calendar-year-view.tsx +161 -0
  587. package/src/products/gantt.tsx +47 -0
  588. package/src/products/jira-wiki-parse.ts +197 -0
  589. package/src/products/jira-wiki.tsx +287 -0
  590. package/src/products/jql-input.tsx +391 -0
  591. package/src/products/json-viewer.tsx +43 -0
  592. package/src/products/kanban-issue-panel.tsx +104 -0
  593. package/src/products/kanban.tsx +245 -0
  594. package/src/products/log-viewer.tsx +404 -0
  595. package/src/products/markdown-editor.tsx +77 -0
  596. package/src/products/markdown.tsx +50 -0
  597. package/src/products/rich-text-editor.tsx +89 -0
  598. package/src/products/sortable-list.tsx +67 -0
  599. package/src/products/stepper.tsx +237 -0
  600. package/src/products/timeline.tsx +39 -0
  601. package/src/products/tree-view.tsx +62 -0
  602. package/src/sdk/app-error-boundary.tsx +240 -0
  603. package/src/sdk/app-id.ts +7 -0
  604. package/src/sdk/use-app.ts +43 -0
@@ -0,0 +1,16 @@
1
+ export type SortableItem = {
2
+ id: string;
3
+ label: string;
4
+ };
5
+ /**
6
+ * Drag-to-reorder list.
7
+ * @when Priority queues / column order. Read-only ordered events → `Timeline`.
8
+ * @example
9
+ * <SortableList items={items} onChange={(next) => set(next)} />
10
+ * @family Data & tables
11
+ */
12
+ export declare function SortableList({ items, onChange, }: {
13
+ items: SortableItem[];
14
+ onChange?: (items: SortableItem[]) => void;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=sortable-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortable-list.d.ts","sourceRoot":"","sources":["../../../src/products/sortable-list.tsx"],"names":[],"mappings":"AAeA,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAmBxD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,CAAA;CAC3C,+BAmBA"}
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ export type StepStatus = 'default' | 'active' | 'completed';
3
+ export interface StepperProps {
4
+ /** StepperItem elements. */
5
+ children: React.ReactNode;
6
+ /** Layout direction. Defaults to "vertical". */
7
+ orientation?: 'vertical' | 'horizontal' | undefined;
8
+ className?: string | undefined;
9
+ }
10
+ export interface StepperItemProps {
11
+ /** Step heading text. */
12
+ title: string;
13
+ /** Optional description below the title. */
14
+ description?: string | undefined;
15
+ /** Override the auto-incremented step number. */
16
+ step?: number | undefined;
17
+ /** Visual status of this step. Defaults to "default". */
18
+ status?: StepStatus | undefined;
19
+ /** Custom icon to replace the step number circle. */
20
+ icon?: React.ReactNode | undefined;
21
+ /** Content rendered below the step header (code blocks, text, etc.). */
22
+ children?: React.ReactNode | undefined;
23
+ className?: string | undefined;
24
+ }
25
+ /**
26
+ * One step inside `Stepper` (title, description, status).
27
+ * @family Feedback & status
28
+ * @when As a child of `Stepper` only — status is `default | active | completed` (lowercase).
29
+ */
30
+ export declare function StepperItem({ title, description, step, status, icon, children, className, }: StepperItemProps): React.JSX.Element;
31
+ /**
32
+ * Numbered steps with status; children are `StepperItem`.
33
+ * @family Feedback & status
34
+ * @when Wizard/progress of an ordered process. Time axis → `RunTimeline`.
35
+ * @example
36
+ * <Stepper><StepperItem title="上传" status="pass" /><StepperItem title="校验" status="running" /></Stepper>
37
+ */
38
+ export declare function Stepper({ children, orientation, className, }: StepperProps): React.JSX.Element;
39
+ //# sourceMappingURL=stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../src/products/stepper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,gDAAgD;IAChD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAA;IACnD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,yDAAyD;IACzD,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC/B,qDAAqD;IACrD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;IAClC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,IAAI,EACJ,MAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,qBAwDlB;AAqHD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,WAAwB,EACxB,SAAS,GACV,EAAE,YAAY,qBAOd"}
@@ -0,0 +1,17 @@
1
+ export type TimelineItem = {
2
+ id: string;
3
+ title: string;
4
+ description?: string;
5
+ time?: string;
6
+ };
7
+ /**
8
+ * Vertical ordered events.
9
+ * @when Statuses/history without durations. Durations → `RunTimeline`.
10
+ * @example
11
+ * <Timeline items={[{ id: "1", title: "已创建", time: "09:00" }]} />
12
+ * @family Realtime
13
+ */
14
+ export declare function Timeline({ items }: {
15
+ items: TimelineItem[];
16
+ }): import("react").JSX.Element;
17
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/products/timeline.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,YAAY,EAAE,CAAA;CAAE,+BAsB5D"}
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+ export type TreeNode = {
3
+ id: string;
4
+ label: string;
5
+ children?: TreeNode[];
6
+ };
7
+ /**
8
+ * Generic expandable node list.
9
+ * @when Any hierarchy without file semantics. Files → `FileTree`.
10
+ * @example
11
+ * <TreeView nodes={[{ id: "a", label: "华东" }]} />
12
+ * @family Data & tables
13
+ */
14
+ export declare function TreeView({ nodes }: {
15
+ nodes: TreeNode[];
16
+ }): React.JSX.Element;
17
+ //# sourceMappingURL=tree-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../../../src/products/tree-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAA;CACtB,CAAA;AAoCD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,qBAQxD"}
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ /** Where a captured failure came from — drives the hint the human sees. */
3
+ export type AppErrorKind = 'render' | 'module' | 'uncaught' | 'async';
4
+ export type ReportedAppError = {
5
+ kind: AppErrorKind;
6
+ message: string;
7
+ file?: string | undefined;
8
+ line?: number | undefined;
9
+ column?: number | undefined;
10
+ stack?: string | undefined;
11
+ componentStack?: string | undefined;
12
+ };
13
+ /**
14
+ * Hand an error to the host so `mini_app_errors` can see it.
15
+ *
16
+ * The app iframe is same-origin with the host, but the panel embedding it is not — so the
17
+ * only channel that works in both directions is the iframe POSTing to its own host. This
18
+ * is deliberately fire-and-forget: a diagnostic path must never be able to break the app
19
+ * that is reporting through it.
20
+ */
21
+ export declare function reportAppError(appId: string, err: ReportedAppError): void;
22
+ /**
23
+ * Runtime crash guard for a mini-app UI. The host injects this around the app entry when
24
+ * it compiles `ui.tsx`, so authors never have to add it — and an app that throws during
25
+ * render shows a real message instead of a blank iframe.
26
+ *
27
+ * @when Not used from mini-app code: it is already wrapped around your `ui.tsx` by the host.
28
+ * @family Feedback & status
29
+ */
30
+ export declare function AppErrorBoundary(props: {
31
+ children: React.ReactNode;
32
+ }): React.JSX.Element;
33
+ //# sourceMappingURL=app-error-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-error-boundary.d.ts","sourceRoot":"","sources":["../../../src/sdk/app-error-boundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAmBzE;AAuLD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAGpE"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * App id injected by `<AppRuntime>`. Its own module so the error boundary can read it
3
+ * without importing `use-app` (which would make the two mutually dependent).
4
+ */
5
+ export declare const AppIdContext: import("react").Context<string>;
6
+ //# sourceMappingURL=app-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-id.d.ts","sourceRoot":"","sources":["../../../src/sdk/app-id.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,YAAY,iCAAoB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { AppAgentEvent, AppLlmEvent } from '@mohou/contract';
2
+ import { agentEventType, eventType, llmEventType } from '@mohou/contract/event-type';
3
+ import { type ReactNode } from 'react';
4
+ export type AppEvent = {
5
+ name: string;
6
+ data: unknown;
7
+ };
8
+ export { agentEventType, eventType, llmEventType };
9
+ /** `ctx.llm` observation. Same union the host writes. */
10
+ export type LlmEvent = AppLlmEvent;
11
+ /** `ctx.agent` observation. Same union the host writes. */
12
+ export type AgentEvent = AppAgentEvent;
13
+ export interface AppHandle {
14
+ call: (method: string, args?: unknown) => Promise<unknown>;
15
+ /** Yields what the method yields. Awaiting the same object is the method return. */
16
+ streamCall: (method: string, args?: unknown) => AsyncIterable<unknown> & Promise<unknown>;
17
+ on: (name: string, cb: (data: unknown) => void) => () => void;
18
+ onAny: (cb: (event: AppEvent) => void) => () => void;
19
+ /** URL for a file under `assets/`. Throws `asset-invalid` when the path is not that tree. */
20
+ resolveAssetUrl: (path: string) => string;
21
+ }
22
+ /** Host runner still wraps the tree. Authors do not construct this. */
23
+ export declare function AppRuntime(props: {
24
+ appId: string;
25
+ children: ReactNode;
26
+ }): import("react").FunctionComponentElement<import("react").ProviderProps<string>>;
27
+ /**
28
+ * App UI handle. `call` throws outside the host wrapper.
29
+ * The wrapper installs the live handle on `globalThis.miniAppHost`.
30
+ */
31
+ export declare function useApp(): AppHandle;
32
+ //# sourceMappingURL=use-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-app.d.ts","sourceRoot":"","sources":["../../../src/sdk/use-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIrD,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;AAElD,yDAAyD;AACzD,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAA;AAElC,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG,aAAa,CAAA;AAEtC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,oFAAoF;IACpF,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzF,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IAC7D,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACpD,6FAA6F;IAC7F,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAC1C;AAID,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,mFAEvE;AAED;;;GAGG;AACH,wBAAgB,MAAM,IAAI,SAAS,CAKlC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@mohou/ui",
3
+ "version": "1.0.20",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": "^22.19.0 || >=24.0.0"
8
+ },
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "files": [
13
+ "src",
14
+ "lib/types",
15
+ "README.md",
16
+ "!**/*.tsbuildinfo"
17
+ ],
18
+ "main": "./src/index.ts",
19
+ "types": "./lib/types/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./lib/types/index.d.ts",
23
+ "default": "./src/index.ts"
24
+ },
25
+ "./*": "./src/*",
26
+ "./src/*": "./src/*",
27
+ "./package.json": "./package.json"
28
+ },
29
+ "dependencies": {
30
+ "@base-ui/react": "^1.7.0",
31
+ "@dnd-kit/core": "^6.3.1",
32
+ "@dnd-kit/sortable": "^10.0.0",
33
+ "@dnd-kit/utilities": "^3.2.2",
34
+ "@shadcn/react": "^0.3.1",
35
+ "@tanstack/react-table": "^8.21.3",
36
+ "@tanstack/react-virtual": "^3.13.12",
37
+ "class-variance-authority": "^0.7.1",
38
+ "clsx": "^2.1.1",
39
+ "cmdk": "^1.1.1",
40
+ "date-fns": "^4.1.0",
41
+ "diff": "^9.0.0",
42
+ "lodash-es": "^4.18.1",
43
+ "lucide-react": "^0.544.0",
44
+ "motion": "^12.23.12",
45
+ "react": "^19.2.0",
46
+ "react-day-picker": "^10.0.1",
47
+ "react-dom": "^19.2.0",
48
+ "react-is": "^19.2.0",
49
+ "react-dropzone": "^20.1.1",
50
+ "react-markdown": "^10.1.0",
51
+ "react-resizable-panels": "^4.12.3",
52
+ "recharts": "^3.8.0",
53
+ "remark-gfm": "^4.0.1",
54
+ "tailwind-merge": "^3.6.0",
55
+ "zod": "^4.4.3",
56
+ "@mohou/app-view": "^1.0.20",
57
+ "@mohou/contract": "^1.0.20"
58
+ },
59
+ "devDependencies": {
60
+ "@testing-library/jest-dom": "^6.8.0",
61
+ "@testing-library/react": "^16.3.0",
62
+ "@testing-library/user-event": "^14.6.1",
63
+ "@types/diff": "^8.0.0",
64
+ "@types/react": "^19.2.0",
65
+ "@types/react-dom": "^19.2.0"
66
+ }
67
+ }
@@ -0,0 +1,16 @@
1
+ import { Timeline, type TimelineItem } from '@mohou/ui/products/timeline'
2
+
3
+ /**
4
+ * Chronological activity list (avatar + text + time).
5
+ * @when Read-only “who did what when” — commits, deploys, agent runs. For steps with status use `RunTimeline`.
6
+ * @example
7
+ * <ActivityFeed items={[{ id: "1", title: "部署完成", time: "10:24" }]} />
8
+ * @family Realtime
9
+ */
10
+ export function ActivityFeed({ items }: { items: TimelineItem[] }) {
11
+ return (
12
+ <div data-testid="activity-feed">
13
+ <Timeline items={items} />
14
+ </div>
15
+ )
16
+ }
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { cn } from '@mohou/ui/lib/utils'
4
+
5
+ /**
6
+ * App frame: optional sidebar + header + main.
7
+ * @when Root layout for a mini-app page
8
+ * @example
9
+ * <AppShell sidebar={<nav />} header={<PageHeader title="Home" />}>
10
+ * {children}
11
+ * </AppShell>
12
+ * @family Layout & structure
13
+ */
14
+ export function AppShell({
15
+ sidebar,
16
+ header,
17
+ children,
18
+ className,
19
+ }: {
20
+ sidebar?: ReactNode
21
+ header?: ReactNode
22
+ children: ReactNode
23
+ className?: string
24
+ }) {
25
+ return (
26
+ <div className={cn('flex min-h-svh w-full', className)} data-testid="app-shell">
27
+ {sidebar ? (
28
+ <aside className="w-56 shrink-0 border-r bg-background p-3">{sidebar}</aside>
29
+ ) : null}
30
+ <div className="flex min-w-0 flex-1 flex-col">
31
+ {header ? (
32
+ <header className="border-b px-4 py-3">{header}</header>
33
+ ) : null}
34
+ <main className="flex-1 p-4">{children}</main>
35
+ </div>
36
+ </div>
37
+ )
38
+ }
@@ -0,0 +1,36 @@
1
+
2
+ import {
3
+ Attachment,
4
+ AttachmentContent,
5
+ AttachmentGroup,
6
+ AttachmentMedia,
7
+ AttachmentTitle,
8
+ } from '@mohou/ui/components/attachment'
9
+
10
+ export type GalleryFile = { name: string; url?: string }
11
+
12
+ /**
13
+ * Thumbnail grid of files with open/copy.
14
+ * @when A record has N files/images and you show them as tiles, not a table.
15
+ * @example
16
+ * <AttachmentGallery files={[{ name: "log.txt", url: "https://…" }]} />
17
+ * @family Discovery & inspect
18
+ */
19
+ export function AttachmentGallery({ files }: { files: GalleryFile[] }) {
20
+ return (
21
+ <AttachmentGroup data-testid="attachment-gallery">
22
+ {files.map(file => (
23
+ <Attachment key={file.name}>
24
+ {file.url ? (
25
+ <AttachmentMedia>
26
+ <img src={file.url} alt={file.name} className="size-10 object-cover" />
27
+ </AttachmentMedia>
28
+ ) : null}
29
+ <AttachmentContent>
30
+ <AttachmentTitle>{file.name}</AttachmentTitle>
31
+ </AttachmentContent>
32
+ </Attachment>
33
+ ))}
34
+ </AttachmentGroup>
35
+ )
36
+ }
@@ -0,0 +1,46 @@
1
+
2
+ import { Bar, BarChart as ReBar, CartesianGrid, XAxis } from 'recharts'
3
+
4
+ import {
5
+ ChartContainer,
6
+ ChartTooltip,
7
+ ChartTooltipContent,
8
+ type ChartConfig,
9
+ } from '@mohou/ui/components/chart'
10
+ import { cn } from '@mohou/ui/lib/utils'
11
+
12
+ /**
13
+ * Stacked bar chart over flat rows.
14
+ * @family Chart & data
15
+ * @when Comparing several series across categories (pass/fail per day). Single ratio → `DonutChart`; trend → `Sparkline`.
16
+ * @example
17
+ * <StackedBarChart
18
+ * data={[{ label: "09-01", ok: 12, fail: 2 }]}
19
+ * keys={["ok", "fail"]}
20
+ * config={{ ok: { label: "通过", color: "var(--primary)" }, fail: { label: "失败", color: "var(--destructive)" } }}
21
+ * />
22
+ */
23
+ export function StackedBarChart({
24
+ data,
25
+ config,
26
+ keys,
27
+ className,
28
+ }: {
29
+ data: Record<string, string | number>[]
30
+ config: ChartConfig
31
+ keys: string[]
32
+ className?: string
33
+ }) {
34
+ return (
35
+ <ChartContainer config={config} className={cn('aspect-video w-full', className)} data-testid="bar-chart">
36
+ <ReBar accessibilityLayer data={data}>
37
+ <CartesianGrid vertical={false} />
38
+ <XAxis dataKey="label" tickLine={false} axisLine={false} />
39
+ <ChartTooltip content={<ChartTooltipContent />} />
40
+ {keys.map(key => (
41
+ <Bar key={key} dataKey={key} stackId="a" fill={`var(--color-${key})`} />
42
+ ))}
43
+ </ReBar>
44
+ </ChartContainer>
45
+ )
46
+ }
@@ -0,0 +1,37 @@
1
+ import { Avatar, AvatarFallback } from '@mohou/ui/components/avatar'
2
+
3
+ export type Comment = { id: string; author: string; body: string; time?: string | undefined }
4
+
5
+ /**
6
+ * Nested comments with author + time.
7
+ * @when Issue/ticket discussion, review comments. Editing a comment is your job, not the component's.
8
+ * @example
9
+ * <CommentThread comments={[{ id: "c1", author: "P.Wang", text: "这里再确认下" }]} />
10
+ * @family Realtime
11
+ */
12
+ export function CommentThread({ comments }: { comments: Comment[] }) {
13
+ return (
14
+ <div className="flex flex-col gap-3" data-testid="comment-thread">
15
+ {comments.map(comment => (
16
+ <div key={comment.id} className="flex gap-2">
17
+ <Avatar className="size-7">
18
+ <AvatarFallback className="text-[10px]">
19
+ {comment.author.slice(0, 2).toUpperCase()}
20
+ </AvatarFallback>
21
+ </Avatar>
22
+ <div>
23
+ <div className="text-sm font-medium">
24
+ {comment.author}
25
+ {comment.time ? (
26
+ <span className="text-muted-foreground ml-2 text-xs font-normal">
27
+ {comment.time}
28
+ </span>
29
+ ) : null}
30
+ </div>
31
+ <p className="text-sm">{comment.body}</p>
32
+ </div>
33
+ </div>
34
+ ))}
35
+ </div>
36
+ )
37
+ }
@@ -0,0 +1,108 @@
1
+
2
+ import type { ReactNode } from 'react';
3
+
4
+ import { useIsMobile } from '@mohou/ui/hooks/use-mobile';
5
+ import { cn } from '@mohou/ui/lib/utils';
6
+
7
+ export type DashboardShellProps = {
8
+ /** Title row / `PageHeader`. Pinned: it stays while the content scrolls under it. */
9
+ header?: ReactNode
10
+ /** KPI strip. Pinned with the header — the point of a dashboard is that the numbers hold. */
11
+ kpis?: ReactNode
12
+ /** Charts and tables. The scrolling body. */
13
+ main: ReactNode
14
+ /** Activity feed / top offenders. Sits beside `main` on wide screens, stacks under it when narrow. */
15
+ aside?: ReactNode
16
+ /** Aside width in px on wide screens. Default 320. */
17
+ asideWidth?: number
18
+ className?: string
19
+ }
20
+
21
+ /**
22
+ * Overview page with a pinned header + KPI strip and exactly one scrolling body.
23
+ *
24
+ * The failure this exists for: the page is a plain column, `overflow-auto` ends up on the
25
+ * outermost div, and the first chart the user scrolls past takes the header and the KPI row
26
+ * with it — a dashboard whose numbers scroll away is not a dashboard. The aside gets its own
27
+ * scroller when there is room for two, and folds under `main` into the single body scroller
28
+ * when there is not, rather than becoming a third half-height pane.
29
+ *
30
+ * @when Page shape: metrics up top, charts below, optional activity rail — ops overviews, monitor walls
31
+ * @example
32
+ * <DashboardShell
33
+ * header={<PageHeader title="值班" description="每 5 秒" />}
34
+ * kpis={<div className="grid grid-cols-4 gap-3">{cards}</div>}
35
+ * main={<Charts />}
36
+ * aside={<ActivityFeed items={items} />}
37
+ * />
38
+ * @family Layout & structure
39
+ */
40
+ export function DashboardShell({
41
+ header,
42
+ kpis,
43
+ main,
44
+ aside,
45
+ asideWidth = 320,
46
+ className,
47
+ }: DashboardShellProps) {
48
+ const isNarrow = useIsMobile()
49
+
50
+ const pinned = (
51
+ <>
52
+ {header ? (
53
+ <div className="shrink-0" data-testid="dashboard-header">
54
+ {header}
55
+ </div>
56
+ ) : null}
57
+ {kpis ? (
58
+ <div className="shrink-0" data-testid="dashboard-kpis">
59
+ {kpis}
60
+ </div>
61
+ ) : null}
62
+ </>
63
+ )
64
+
65
+ return (
66
+ <div
67
+ className={cn('flex h-full min-h-0 w-full flex-col', className)}
68
+ data-testid="dashboard-shell"
69
+ >
70
+ {pinned}
71
+
72
+ {aside && !isNarrow ? (
73
+ // Room for two panes: each scrolls on its own, neither can push the other.
74
+ <div className="flex min-h-0 flex-1" data-testid="dashboard-body">
75
+ <div
76
+ className="min-h-0 flex-1 overflow-y-auto"
77
+ data-testid="dashboard-main"
78
+ >
79
+ {main}
80
+ </div>
81
+ <div
82
+ className="border-border bg-muted/30 min-h-0 shrink-0 overflow-y-auto border-l"
83
+ data-testid="dashboard-aside"
84
+ style={{ width: asideWidth }}
85
+ >
86
+ {aside}
87
+ </div>
88
+ </div>
89
+ ) : (
90
+ // One body scroller; the aside folds to the bottom of it instead of a squeezed pane.
91
+ <div
92
+ className="min-h-0 flex-1 overflow-y-auto"
93
+ data-testid="dashboard-body"
94
+ >
95
+ <div data-testid="dashboard-main">{main}</div>
96
+ {aside ? (
97
+ <div
98
+ className="border-border border-t px-4 py-4"
99
+ data-testid="dashboard-aside"
100
+ >
101
+ {aside}
102
+ </div>
103
+ ) : null}
104
+ </div>
105
+ )}
106
+ </div>
107
+ )
108
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Label/value pairs, two columns.
3
+ * @when Detail/inspector panel of a selected row — the default “show one record” view.
4
+ * @example
5
+ * <DescriptionList items={[{ label: "状态", value: "运行中" }]} />
6
+ * @family Layout & structure
7
+ */
8
+ export function DescriptionList({
9
+ items,
10
+ }: {
11
+ items: { label: string; value: string }[]
12
+ }) {
13
+ return (
14
+ <dl className="grid grid-cols-[8rem_1fr] gap-x-3 gap-y-2 text-sm" data-testid="description-list">
15
+ {items.map(item => (
16
+ <div key={item.label} className="contents">
17
+ <dt className="text-muted-foreground">{item.label}</dt>
18
+ <dd>{item.value}</dd>
19
+ </div>
20
+ ))}
21
+ </dl>
22
+ )
23
+ }
@@ -0,0 +1,43 @@
1
+
2
+ import type { ReactNode } from 'react'
3
+
4
+ import {
5
+ Sheet,
6
+ SheetContent,
7
+ SheetDescription,
8
+ SheetHeader,
9
+ SheetTitle,
10
+ } from '@mohou/ui/components/sheet'
11
+
12
+ /**
13
+ * Right-side inspector Sheet for a selected row/entity.
14
+ * @when Master-detail after row/card click
15
+ * @example
16
+ * <DetailPanel open={!!id} onOpenChange={() => setId(null)} title="Run #12">{body}</DetailPanel>
17
+ * @family Surface
18
+ */
19
+ export function DetailPanel({
20
+ open,
21
+ onOpenChange,
22
+ title,
23
+ description,
24
+ children,
25
+ }: {
26
+ open: boolean
27
+ onOpenChange: (open: boolean) => void
28
+ title: string
29
+ description?: string
30
+ children?: ReactNode
31
+ }) {
32
+ return (
33
+ <Sheet open={open} onOpenChange={onOpenChange}>
34
+ <SheetContent data-testid="detail-panel">
35
+ <SheetHeader>
36
+ <SheetTitle>{title}</SheetTitle>
37
+ {description ? <SheetDescription>{description}</SheetDescription> : null}
38
+ </SheetHeader>
39
+ <div className="px-4 pb-4">{children}</div>
40
+ </SheetContent>
41
+ </Sheet>
42
+ )
43
+ }