@monkey-mini-app/dsh-mini-app 0.1.1 → 0.1.4

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 (312) hide show
  1. package/README.md +29 -27
  2. package/lib/client.js +2024 -783
  3. package/lib/index.d.ts +2 -0
  4. package/lib/index.js +20 -7
  5. package/package.json +10 -9
  6. package/skills/monkey-mini-app/SKILL.md +181 -114
  7. package/skills/monkey-mini-app/references/catalog.md +236 -99
  8. package/skills/monkey-mini-app/references/contracts/accordion.md +30 -0
  9. package/skills/monkey-mini-app/references/contracts/activity-feed.md +12 -2
  10. package/skills/monkey-mini-app/references/contracts/alert-dialog.md +38 -0
  11. package/skills/monkey-mini-app/references/contracts/alert.md +38 -0
  12. package/skills/monkey-mini-app/references/contracts/app-shell.md +2 -2
  13. package/skills/monkey-mini-app/references/contracts/aspect-ratio.md +25 -0
  14. package/skills/monkey-mini-app/references/contracts/attachment-gallery.md +12 -2
  15. package/skills/monkey-mini-app/references/contracts/attachment.md +35 -0
  16. package/skills/monkey-mini-app/references/contracts/autocomplete.md +12 -2
  17. package/skills/monkey-mini-app/references/contracts/avatar.md +24 -0
  18. package/skills/monkey-mini-app/references/contracts/badge.md +26 -0
  19. package/skills/monkey-mini-app/references/contracts/breadcrumb.md +33 -0
  20. package/skills/monkey-mini-app/references/contracts/bubble.md +30 -0
  21. package/skills/monkey-mini-app/references/contracts/button-group.md +36 -0
  22. package/skills/monkey-mini-app/references/contracts/button.md +26 -0
  23. package/skills/monkey-mini-app/references/contracts/calendar.md +20 -0
  24. package/skills/monkey-mini-app/references/contracts/card.md +41 -0
  25. package/skills/monkey-mini-app/references/contracts/cascader.md +12 -2
  26. package/skills/monkey-mini-app/references/contracts/chart.md +32 -0
  27. package/skills/monkey-mini-app/references/contracts/checkbox.md +19 -0
  28. package/skills/monkey-mini-app/references/contracts/code-block.md +20 -2
  29. package/skills/monkey-mini-app/references/contracts/code-editor.md +30 -4
  30. package/skills/monkey-mini-app/references/contracts/collapsible.md +21 -0
  31. package/skills/monkey-mini-app/references/contracts/color-picker.md +12 -2
  32. package/skills/monkey-mini-app/references/contracts/combobox.md +34 -0
  33. package/skills/monkey-mini-app/references/contracts/command.md +41 -0
  34. package/skills/monkey-mini-app/references/contracts/comment-thread.md +12 -2
  35. package/skills/monkey-mini-app/references/contracts/commit-graph.md +50 -0
  36. package/skills/monkey-mini-app/references/contracts/confirm-dialog.md +20 -2
  37. package/skills/monkey-mini-app/references/contracts/context-menu.md +41 -0
  38. package/skills/monkey-mini-app/references/contracts/copyable.md +12 -2
  39. package/skills/monkey-mini-app/references/contracts/currency-input.md +12 -2
  40. package/skills/monkey-mini-app/references/contracts/dashboard-shell.md +41 -0
  41. package/skills/monkey-mini-app/references/contracts/data-grid.md +13 -6
  42. package/skills/monkey-mini-app/references/contracts/date-picker.md +20 -2
  43. package/skills/monkey-mini-app/references/contracts/date-range-picker.md +10 -2
  44. package/skills/monkey-mini-app/references/contracts/date-time-picker.md +20 -2
  45. package/skills/monkey-mini-app/references/contracts/date-time-range-picker.md +20 -2
  46. package/skills/monkey-mini-app/references/contracts/description-list.md +12 -2
  47. package/skills/monkey-mini-app/references/contracts/detail-panel.md +10 -2
  48. package/skills/monkey-mini-app/references/contracts/dialog.md +44 -0
  49. package/skills/monkey-mini-app/references/contracts/diff-viewer.md +21 -2
  50. package/skills/monkey-mini-app/references/contracts/donut-chart.md +12 -2
  51. package/skills/monkey-mini-app/references/contracts/drawer.md +29 -0
  52. package/skills/monkey-mini-app/references/contracts/dropdown-menu.md +49 -0
  53. package/skills/monkey-mini-app/references/contracts/duration-input.md +20 -2
  54. package/skills/monkey-mini-app/references/contracts/empty.md +40 -0
  55. package/skills/monkey-mini-app/references/contracts/env-badge.md +12 -2
  56. package/skills/monkey-mini-app/references/contracts/env-table.md +46 -0
  57. package/skills/monkey-mini-app/references/contracts/event-calendar.md +28 -20
  58. package/skills/monkey-mini-app/references/contracts/field.md +34 -0
  59. package/skills/monkey-mini-app/references/contracts/file-dropzone.md +20 -2
  60. package/skills/monkey-mini-app/references/contracts/file-tree.md +12 -2
  61. package/skills/monkey-mini-app/references/contracts/filter-bar.md +2 -2
  62. package/skills/monkey-mini-app/references/contracts/form-sheet.md +51 -0
  63. package/skills/monkey-mini-app/references/contracts/gantt.md +20 -2
  64. package/skills/monkey-mini-app/references/contracts/gauge.md +12 -2
  65. package/skills/monkey-mini-app/references/contracts/hover-card.md +21 -0
  66. package/skills/monkey-mini-app/references/contracts/input-group.md +24 -0
  67. package/skills/monkey-mini-app/references/contracts/input.md +33 -0
  68. package/skills/monkey-mini-app/references/contracts/item.md +36 -0
  69. package/skills/monkey-mini-app/references/contracts/jira-wiki.md +3 -4
  70. package/skills/monkey-mini-app/references/contracts/jql-input.md +15 -8
  71. package/skills/monkey-mini-app/references/contracts/json-viewer.md +20 -2
  72. package/skills/monkey-mini-app/references/contracts/kanban-issue-panel.md +12 -2
  73. package/skills/monkey-mini-app/references/contracts/kanban.md +10 -2
  74. package/skills/monkey-mini-app/references/contracts/kbd.md +20 -0
  75. package/skills/monkey-mini-app/references/contracts/label.md +33 -0
  76. package/skills/monkey-mini-app/references/contracts/list-detail.md +46 -0
  77. package/skills/monkey-mini-app/references/contracts/log-viewer.md +45 -4
  78. package/skills/monkey-mini-app/references/contracts/markdown-editor.md +20 -2
  79. package/skills/monkey-mini-app/references/contracts/markdown.md +12 -2
  80. package/skills/monkey-mini-app/references/contracts/marker.md +30 -0
  81. package/skills/monkey-mini-app/references/contracts/menubar.md +34 -0
  82. package/skills/monkey-mini-app/references/contracts/message-scroller.md +24 -0
  83. package/skills/monkey-mini-app/references/contracts/message.md +24 -0
  84. package/skills/monkey-mini-app/references/contracts/mini-calendar.md +20 -2
  85. package/skills/monkey-mini-app/references/contracts/native-select.md +21 -0
  86. package/skills/monkey-mini-app/references/contracts/navigation-menu.md +27 -0
  87. package/skills/monkey-mini-app/references/contracts/notification-center.md +12 -2
  88. package/skills/monkey-mini-app/references/contracts/number-field.md +20 -2
  89. package/skills/monkey-mini-app/references/contracts/page-header.md +2 -2
  90. package/skills/monkey-mini-app/references/contracts/pagination.md +33 -0
  91. package/skills/monkey-mini-app/references/contracts/password-field.md +12 -2
  92. package/skills/monkey-mini-app/references/contracts/phone-input.md +12 -2
  93. package/skills/monkey-mini-app/references/contracts/popover.md +32 -0
  94. package/skills/monkey-mini-app/references/contracts/progress-ring.md +12 -2
  95. package/skills/monkey-mini-app/references/contracts/progress.md +39 -0
  96. package/skills/monkey-mini-app/references/contracts/questionnaire.md +33 -0
  97. package/skills/monkey-mini-app/references/contracts/radar-chart.md +12 -2
  98. package/skills/monkey-mini-app/references/contracts/radio-group.md +20 -0
  99. package/skills/monkey-mini-app/references/contracts/rating.md +12 -2
  100. package/skills/monkey-mini-app/references/contracts/relative-date-picker.md +20 -2
  101. package/skills/monkey-mini-app/references/contracts/request-inspector.md +12 -2
  102. package/skills/monkey-mini-app/references/contracts/resizable.md +29 -0
  103. package/skills/monkey-mini-app/references/contracts/reveal.md +31 -0
  104. package/skills/monkey-mini-app/references/contracts/rich-text-editor.md +14 -2
  105. package/skills/monkey-mini-app/references/contracts/run-timeline.md +20 -2
  106. package/skills/monkey-mini-app/references/contracts/scroll-area.md +20 -0
  107. package/skills/monkey-mini-app/references/contracts/scrollspy.md +20 -2
  108. package/skills/monkey-mini-app/references/contracts/search-input.md +12 -2
  109. package/skills/monkey-mini-app/references/contracts/select.md +36 -0
  110. package/skills/monkey-mini-app/references/contracts/separator.md +27 -0
  111. package/skills/monkey-mini-app/references/contracts/settings-split.md +53 -0
  112. package/skills/monkey-mini-app/references/contracts/severity-chip.md +12 -2
  113. package/skills/monkey-mini-app/references/contracts/sheet.md +34 -0
  114. package/skills/monkey-mini-app/references/contracts/sidebar.md +42 -0
  115. package/skills/monkey-mini-app/references/contracts/skeleton.md +33 -0
  116. package/skills/monkey-mini-app/references/contracts/slider-range.md +12 -2
  117. package/skills/monkey-mini-app/references/contracts/slider.md +25 -0
  118. package/skills/monkey-mini-app/references/contracts/sortable-list.md +20 -2
  119. package/skills/monkey-mini-app/references/contracts/sparkline.md +12 -2
  120. package/skills/monkey-mini-app/references/contracts/spinner.md +31 -0
  121. package/skills/monkey-mini-app/references/contracts/stacked-bar-chart.md +16 -2
  122. package/skills/monkey-mini-app/references/contracts/stat-card.md +2 -2
  123. package/skills/monkey-mini-app/references/contracts/status-badge.md +2 -2
  124. package/skills/monkey-mini-app/references/contracts/stepper-item.md +39 -0
  125. package/skills/monkey-mini-app/references/contracts/stepper.md +38 -11
  126. package/skills/monkey-mini-app/references/contracts/switch.md +25 -0
  127. package/skills/monkey-mini-app/references/contracts/table-page.md +41 -0
  128. package/skills/monkey-mini-app/references/contracts/table.md +42 -0
  129. package/skills/monkey-mini-app/references/contracts/tabs.md +31 -0
  130. package/skills/monkey-mini-app/references/contracts/tag-input.md +12 -2
  131. package/skills/monkey-mini-app/references/contracts/terminal.md +13 -2
  132. package/skills/monkey-mini-app/references/contracts/test-step-list.md +12 -2
  133. package/skills/monkey-mini-app/references/contracts/textarea.md +25 -0
  134. package/skills/monkey-mini-app/references/contracts/time-picker.md +18 -2
  135. package/skills/monkey-mini-app/references/contracts/time-range-picker.md +20 -2
  136. package/skills/monkey-mini-app/references/contracts/time-wheel.md +6 -2
  137. package/skills/monkey-mini-app/references/contracts/timeline.md +20 -2
  138. package/skills/monkey-mini-app/references/contracts/timezone-select.md +20 -2
  139. package/skills/monkey-mini-app/references/contracts/toast.md +39 -0
  140. package/skills/monkey-mini-app/references/contracts/toggle-group.md +28 -0
  141. package/skills/monkey-mini-app/references/contracts/toggle.md +26 -0
  142. package/skills/monkey-mini-app/references/contracts/tooltip.md +30 -0
  143. package/skills/monkey-mini-app/references/contracts/transfer.md +12 -2
  144. package/skills/monkey-mini-app/references/contracts/tree-view.md +20 -2
  145. package/skills/monkey-mini-app/references/contracts/trend-card.md +12 -2
  146. package/skills/monkey-mini-app/references/contracts/user-picker.md +12 -2
  147. package/skills/monkey-mini-app/references/contracts/wizard-shell.md +56 -0
  148. package/skills/monkey-mini-app/references/ctx.md +123 -53
  149. package/skills/monkey-mini-app/references/eval.md +115 -0
  150. package/skills/monkey-mini-app/references/examples/alert/alert-01.tsx +17 -0
  151. package/skills/monkey-mini-app/references/examples/aspect-ratio/aspect-ratio-01.tsx +16 -0
  152. package/skills/monkey-mini-app/references/examples/attachment/attachment-01.tsx +19 -0
  153. package/skills/monkey-mini-app/references/examples/breadcrumb/breadcrumb-01.tsx +31 -0
  154. package/skills/monkey-mini-app/references/examples/bubble/bubble-01.tsx +16 -0
  155. package/skills/monkey-mini-app/references/examples/button-group/button-group-01.tsx +23 -0
  156. package/skills/monkey-mini-app/references/examples/card/card-01.tsx +19 -0
  157. package/skills/monkey-mini-app/references/examples/charts-blocks.md +15 -0
  158. package/skills/monkey-mini-app/references/examples/code-block/code-block-01.tsx +14 -0
  159. package/skills/monkey-mini-app/references/examples/code-editor/code-editor-01.tsx +15 -0
  160. package/skills/monkey-mini-app/references/examples/command/command-01.tsx +30 -0
  161. package/skills/monkey-mini-app/references/examples/confirm-dialog/confirm-dialog-01.tsx +33 -0
  162. package/skills/monkey-mini-app/references/examples/context-menu/context-menu-01.tsx +29 -0
  163. package/skills/monkey-mini-app/references/examples/dashboard-shell/dashboard-shell-01.tsx +78 -0
  164. package/skills/monkey-mini-app/references/examples/data-grid/data-grid-01.tsx +34 -0
  165. package/skills/monkey-mini-app/references/examples/data-grid/data-grid-02.tsx +88 -0
  166. package/skills/monkey-mini-app/references/examples/date-picker/date-picker-01.tsx +14 -0
  167. package/skills/monkey-mini-app/references/examples/date-range-picker/date-range-picker-01.tsx +14 -0
  168. package/skills/monkey-mini-app/references/examples/date-time-picker/date-time-picker-01.tsx +16 -0
  169. package/skills/monkey-mini-app/references/examples/date-time-range-picker/date-time-range-picker-01.tsx +15 -0
  170. package/skills/monkey-mini-app/references/examples/detail-panel/detail-panel-01.tsx +21 -0
  171. package/skills/monkey-mini-app/references/examples/dialog/dialog-01.tsx +30 -0
  172. package/skills/monkey-mini-app/references/examples/diff-viewer/diff-viewer-01.tsx +10 -0
  173. package/skills/monkey-mini-app/references/examples/dropdown-menu/dropdown-menu-01.tsx +31 -0
  174. package/skills/monkey-mini-app/references/examples/duration-input/duration-input-01.tsx +20 -0
  175. package/skills/monkey-mini-app/references/examples/editors.md +11 -0
  176. package/skills/monkey-mini-app/references/examples/empty/empty-01.tsx +19 -0
  177. package/skills/monkey-mini-app/references/examples/event-calendar/event-calendar-01.tsx +53 -0
  178. package/skills/monkey-mini-app/references/examples/file-dropzone/file-dropzone-01.tsx +14 -0
  179. package/skills/monkey-mini-app/references/examples/form-sheet/form-sheet-01.tsx +85 -0
  180. package/skills/monkey-mini-app/references/examples/forms.md +16 -0
  181. package/skills/monkey-mini-app/references/examples/gantt/gantt-01.tsx +29 -0
  182. package/skills/monkey-mini-app/references/examples/input/input-01.tsx +10 -0
  183. package/skills/monkey-mini-app/references/examples/item/item-01.tsx +19 -0
  184. package/skills/monkey-mini-app/references/examples/jql-input/jql-input-01.tsx +33 -0
  185. package/skills/monkey-mini-app/references/examples/json-viewer/json-viewer-01.tsx +10 -0
  186. package/skills/monkey-mini-app/references/examples/kanban/kanban-01.tsx +60 -0
  187. package/skills/monkey-mini-app/references/examples/label/label-01.tsx +10 -0
  188. package/skills/monkey-mini-app/references/examples/list-detail/list-detail-01.tsx +117 -0
  189. package/skills/monkey-mini-app/references/examples/log-viewer/log-viewer-01.tsx +20 -0
  190. package/skills/monkey-mini-app/references/examples/markdown-editor/markdown-editor-01.tsx +18 -0
  191. package/skills/monkey-mini-app/references/examples/marker/marker-01.tsx +16 -0
  192. package/skills/monkey-mini-app/references/examples/mini-calendar/mini-calendar-01.tsx +14 -0
  193. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-01.tsx +20 -0
  194. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-02.tsx +32 -0
  195. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-03.tsx +47 -0
  196. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-04.tsx +20 -0
  197. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-05.tsx +24 -0
  198. package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-06.tsx +89 -0
  199. package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-01.tsx +114 -0
  200. package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-02.tsx +33 -0
  201. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-01.tsx +22 -0
  202. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-02.tsx +37 -0
  203. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-03.tsx +42 -0
  204. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-04.tsx +25 -0
  205. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-05.tsx +27 -0
  206. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-06.tsx +33 -0
  207. package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-07.tsx +44 -0
  208. package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-01.tsx +43 -0
  209. package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-02.tsx +38 -0
  210. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-01.tsx +21 -0
  211. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-02.tsx +52 -0
  212. package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-03.tsx +44 -0
  213. package/skills/monkey-mini-app/references/examples/number-field/number-field-01.tsx +22 -0
  214. package/skills/monkey-mini-app/references/examples/overlays.md +11 -0
  215. package/skills/monkey-mini-app/references/examples/pagination/pagination-01.tsx +51 -0
  216. package/skills/monkey-mini-app/references/examples/primitives.md +12 -0
  217. package/skills/monkey-mini-app/references/examples/progress/progress-01.tsx +10 -0
  218. package/skills/monkey-mini-app/references/examples/relative-date-picker/relative-date-picker-01.tsx +19 -0
  219. package/skills/monkey-mini-app/references/examples/rich-text-editor/rich-text-editor-01.tsx +15 -0
  220. package/skills/monkey-mini-app/references/examples/run-timeline/run-timeline-01.tsx +17 -0
  221. package/skills/monkey-mini-app/references/examples/scrollspy/scrollspy-01.tsx +29 -0
  222. package/skills/monkey-mini-app/references/examples/separator/separator-01.tsx +10 -0
  223. package/skills/monkey-mini-app/references/examples/settings-split/settings-split-01.tsx +84 -0
  224. package/skills/monkey-mini-app/references/examples/shared/jira-wiki-sample.ts +38 -0
  225. package/skills/monkey-mini-app/references/examples/skeleton/skeleton-01.tsx +10 -0
  226. package/skills/monkey-mini-app/references/examples/slider/slider-01.tsx +22 -0
  227. package/skills/monkey-mini-app/references/examples/sortable-list/sortable-list-01.tsx +18 -0
  228. package/skills/monkey-mini-app/references/examples/spinner/spinner-01.tsx +10 -0
  229. package/skills/monkey-mini-app/references/examples/stepper/stepper-01.tsx +41 -0
  230. package/skills/monkey-mini-app/references/examples/table/table-01.tsx +25 -0
  231. package/skills/monkey-mini-app/references/examples/table-page/table-page-01.tsx +103 -0
  232. package/skills/monkey-mini-app/references/examples/time-picker/time-picker-01.tsx +19 -0
  233. package/skills/monkey-mini-app/references/examples/time-range-picker/time-range-picker-01.tsx +14 -0
  234. package/skills/monkey-mini-app/references/examples/timeline/timeline-01.tsx +18 -0
  235. package/skills/monkey-mini-app/references/examples/timezone-select/timezone-select-01.tsx +15 -0
  236. package/skills/monkey-mini-app/references/examples/toggle/toggle-01.tsx +20 -0
  237. package/skills/monkey-mini-app/references/examples/toggle-group/toggle-group-01.tsx +22 -0
  238. package/skills/monkey-mini-app/references/examples/tree-view/tree-view-01.tsx +25 -0
  239. package/skills/monkey-mini-app/references/examples/wizard-shell/wizard-shell-01.tsx +58 -0
  240. package/skills/monkey-mini-app/references/history.md +23 -7
  241. package/skills/monkey-mini-app/references/icons.md +99 -69
  242. package/skills/monkey-mini-app/references/llm-json.md +39 -26
  243. package/skills/monkey-mini-app/references/loader.md +47 -20
  244. package/skills/monkey-mini-app/references/looks/aurora-bento.md +88 -0
  245. package/skills/monkey-mini-app/references/looks/desk-split.md +89 -0
  246. package/skills/monkey-mini-app/references/looks/editorial.md +78 -0
  247. package/skills/monkey-mini-app/references/looks/glass-island.md +90 -0
  248. package/skills/monkey-mini-app/references/looks/index.md +18 -0
  249. package/skills/monkey-mini-app/references/looks/signage.md +74 -0
  250. package/skills/monkey-mini-app/references/looks/tape.md +22 -0
  251. package/skills/monkey-mini-app/references/looks/terminal.md +88 -0
  252. package/skills/monkey-mini-app/references/looks/void.md +22 -0
  253. package/skills/monkey-mini-app/references/styling.md +189 -0
  254. package/skills/monkey-mini-app/references/test.md +12 -12
  255. package/skills/monkey-mini-app/references/theme.md +197 -0
  256. package/skills/monkey-mini-app/references/tools.md +12 -12
  257. package/skills/monkey-mini-app/references/troubleshoot.md +165 -12
  258. package/skills/monkey-mini-app/templates/README.md +33 -21
  259. package/skills/monkey-mini-app/templates/{jira → board}/main.api.ts +11 -11
  260. package/skills/monkey-mini-app/templates/board/manifest.json +8 -0
  261. package/skills/monkey-mini-app/templates/board/theme.css +46 -0
  262. package/skills/monkey-mini-app/templates/board/ui.tsx +546 -0
  263. package/skills/monkey-mini-app/templates/chores/main.api.ts +35 -0
  264. package/skills/monkey-mini-app/templates/chores/manifest.json +8 -0
  265. package/skills/monkey-mini-app/templates/chores/theme.css +46 -0
  266. package/skills/monkey-mini-app/templates/chores/ui.tsx +117 -0
  267. package/skills/monkey-mini-app/templates/minimal/main.api.ts +5 -5
  268. package/skills/monkey-mini-app/templates/minimal/manifest.json +1 -2
  269. package/skills/monkey-mini-app/templates/minimal/ui.tsx +17 -8
  270. package/skills/monkey-mini-app/templates/radar/api/scan.ts +79 -0
  271. package/skills/monkey-mini-app/templates/radar/main.api.ts +29 -0
  272. package/skills/monkey-mini-app/templates/radar/manifest.json +8 -0
  273. package/skills/monkey-mini-app/templates/radar/shared/events.ts +25 -0
  274. package/skills/monkey-mini-app/templates/{insights/lib → radar/shared}/sample.ts +1 -1
  275. package/skills/monkey-mini-app/templates/radar/theme.css +47 -0
  276. package/skills/monkey-mini-app/templates/radar/ui/brief.tsx +31 -0
  277. package/skills/monkey-mini-app/templates/radar/ui.tsx +131 -0
  278. package/skills/monkey-mini-app/templates/runner/main.api.ts +91 -0
  279. package/skills/monkey-mini-app/templates/runner/manifest.json +8 -0
  280. package/skills/monkey-mini-app/templates/runner/shared/events.ts +14 -0
  281. package/skills/monkey-mini-app/templates/runner/theme.css +46 -0
  282. package/skills/monkey-mini-app/templates/runner/ui.tsx +213 -0
  283. package/skills/monkey-mini-app/templates/sheets/main.api.ts +276 -0
  284. package/skills/monkey-mini-app/templates/sheets/manifest.json +8 -0
  285. package/skills/monkey-mini-app/templates/sheets/theme.css +46 -0
  286. package/skills/monkey-mini-app/templates/sheets/ui.tsx +419 -0
  287. package/skills/monkey-mini-app/templates/{todo → today}/main.api.ts +8 -8
  288. package/skills/monkey-mini-app/templates/today/manifest.json +8 -0
  289. package/skills/monkey-mini-app/templates/today/theme.css +45 -0
  290. package/skills/monkey-mini-app/templates/today/ui/item-row.tsx +25 -0
  291. package/skills/monkey-mini-app/templates/today/ui.tsx +406 -0
  292. package/skills/monkey-mini-app/templates/{monitor → watch}/main.api.ts +8 -8
  293. package/skills/monkey-mini-app/templates/watch/manifest.json +8 -0
  294. package/skills/monkey-mini-app/templates/watch/ui.tsx +187 -0
  295. package/skills/monkey-mini-app/tsconfig.json +31 -0
  296. package/skills/monkey-mini-app/types/cdn.d.ts +1 -0
  297. package/tsup.config.ts +1 -0
  298. package/skills/monkey-mini-app/templates/agentrun/main.api.ts +0 -78
  299. package/skills/monkey-mini-app/templates/agentrun/manifest.json +0 -9
  300. package/skills/monkey-mini-app/templates/agentrun/ui.tsx +0 -125
  301. package/skills/monkey-mini-app/templates/insights/main.api.ts +0 -101
  302. package/skills/monkey-mini-app/templates/insights/manifest.json +0 -9
  303. package/skills/monkey-mini-app/templates/insights/ui.tsx +0 -138
  304. package/skills/monkey-mini-app/templates/jira/manifest.json +0 -9
  305. package/skills/monkey-mini-app/templates/jira/ui.tsx +0 -318
  306. package/skills/monkey-mini-app/templates/monitor/manifest.json +0 -9
  307. package/skills/monkey-mini-app/templates/monitor/ui.tsx +0 -176
  308. package/skills/monkey-mini-app/templates/review/main.api.ts +0 -68
  309. package/skills/monkey-mini-app/templates/review/manifest.json +0 -9
  310. package/skills/monkey-mini-app/templates/review/ui.tsx +0 -159
  311. package/skills/monkey-mini-app/templates/todo/manifest.json +0 -8
  312. package/skills/monkey-mini-app/templates/todo/ui.tsx +0 -177
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @exampleOf ContextMenu
3
+ * @title ContextMenu
4
+ * @scenario Right-click menu bound to a region (a row, a canvas cell) with grouped items and separators.
5
+ */
6
+ import {
7
+ ContextMenu,
8
+ ContextMenuContent,
9
+ ContextMenuGroup,
10
+ ContextMenuItem,
11
+ ContextMenuTrigger,
12
+ } from "@monkey-mini-app/ui";
13
+
14
+ export default function ContextMenu01Example() {
15
+ return (
16
+ <>
17
+ <ContextMenu>
18
+ <ContextMenuTrigger className="rounded-lg border px-3 py-6 text-sm">
19
+ Right click here
20
+ </ContextMenuTrigger>
21
+ <ContextMenuContent>
22
+ <ContextMenuGroup>
23
+ <ContextMenuItem>Inspect</ContextMenuItem>
24
+ </ContextMenuGroup>
25
+ </ContextMenuContent>
26
+ </ContextMenu>
27
+ </>
28
+ );
29
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @exampleOf DashboardShell
3
+ * @title DashboardShell
4
+ * @scenario Ops overview in a fixed-height panel: the header and KPI strip stay pinned while the charts scroll, and the activity rail scrolls on its own beside them.
5
+ * @hint Scroll the chart column — the numbers stay; narrow the panel and the rail folds underneath
6
+ */
7
+ import {
8
+ ActivityFeed,
9
+ Card,
10
+ CardContent,
11
+ CardHeader,
12
+ CardTitle,
13
+ DashboardShell,
14
+ PageHeader,
15
+ Sparkline,
16
+ StatCard,
17
+ } from "@monkey-mini-app/ui";
18
+
19
+ const series = (seed: number, n = 24) =>
20
+ Array.from({ length: n }, (_, i) => ({
21
+ value: 40 + Math.round(28 * Math.abs(Math.sin((i + seed) / 3))),
22
+ }));
23
+
24
+ const FEED = Array.from({ length: 14 }, (_, i) => ({
25
+ id: `e${i}`,
26
+ title: [
27
+ "node-3 restarted by scheduler",
28
+ "p95 back under 120 ms",
29
+ "queue depth 1.2k → 300",
30
+ "nightly export finished",
31
+ "certificate renews in 6 days",
32
+ ][i % 5],
33
+ time: `${String(23 - (i % 12)).padStart(2, "0")}:${String((i * 7) % 60).padStart(2, "0")}`,
34
+ }));
35
+
36
+ export default function DashboardShell01Example() {
37
+ return (
38
+ <div className="h-[460px]">
39
+ <DashboardShell
40
+ header={<PageHeader title="值班总览" description="每 5 秒刷新 · 头部与指标不会跟着内容滑走" />}
41
+ kpis={
42
+ <div className="grid grid-cols-4 gap-3 px-4 pb-3">
43
+ <StatCard title="Requests" value="18.4k" delta="+6%" trend="up" />
44
+ <StatCard title="p95" value="112 ms" delta="-9 ms" trend="down" />
45
+ <StatCard title="Errors" value="3" trend="flat" />
46
+ <StatCard title="Queue" value="290" delta="-910" trend="down" />
47
+ </div>
48
+ }
49
+ main={
50
+ <div className="flex flex-col gap-3 p-4">
51
+ {[
52
+ ["Throughput", 1],
53
+ ["Latency p95", 5],
54
+ ["Saturated workers", 9],
55
+ ["Retries", 13],
56
+ ["Queue depth", 17],
57
+ ].map(([title, seed]) => (
58
+ <Card key={String(title)}>
59
+ <CardHeader>
60
+ <CardTitle className="text-sm font-normal">{title}</CardTitle>
61
+ </CardHeader>
62
+ <CardContent>
63
+ <Sparkline data={series(Number(seed))} />
64
+ </CardContent>
65
+ </Card>
66
+ ))}
67
+ </div>
68
+ }
69
+ aside={
70
+ <div className="flex flex-col gap-2 p-4">
71
+ <p className="text-muted-foreground text-xs tracking-widest uppercase">Activity</p>
72
+ <ActivityFeed items={FEED} />
73
+ </div>
74
+ }
75
+ />
76
+ </div>
77
+ );
78
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @exampleOf DataGrid
3
+ * @title DataGrid
4
+ * @scenario The default table for anything bigger than a static list: column sort (asc→desc→off), global search box, pagination — all from props, no external state library.
5
+ * @hint Sort cycles asc → desc → none
6
+ */
7
+ import { type ColumnDef, DataGrid, StatusBadge } from "@monkey-mini-app/ui";
8
+
9
+ type Run = { id: string; name: string; owner: string; duration: string; status: string };
10
+
11
+ const runs: Run[] = [
12
+ { id: "1", name: "login-spec", owner: "Ada", duration: "1.2s", status: "pass" },
13
+ { id: "2", name: "checkout-spec", owner: "Lin", duration: "4.8s", status: "fail" },
14
+ { id: "3", name: "search-spec", owner: "Ada", duration: "0.9s", status: "pass" },
15
+ { id: "4", name: "upload-spec", owner: "Kai", duration: "12.0s", status: "blocked" },
16
+ { id: "5", name: "grid-spec", owner: "Lin", duration: "3.1s", status: "flaky" },
17
+ { id: "6", name: "auth-spec", owner: "Kai", duration: "2.0s", status: "running" },
18
+ ];
19
+
20
+ const columns: ColumnDef<Run>[] = [
21
+ { accessorKey: "name", header: "Name", meta: { sort: true, search: "text" } },
22
+ { accessorKey: "owner", header: "Owner", meta: { sort: true, search: "text" } },
23
+ { accessorKey: "duration", header: "Duration", meta: { sort: true, search: "text" } },
24
+ {
25
+ accessorKey: "status",
26
+ header: "Status",
27
+ meta: { sort: true, search: "text" },
28
+ cell: ({ getValue }) => <StatusBadge status={String(getValue())} />,
29
+ },
30
+ ];
31
+
32
+ export default function DataGrid01Example() {
33
+ return <DataGrid columns={columns} data={runs} pageSize={4} searchPlaceholder="Search runs…" />;
34
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @exampleOf DataGrid
3
+ * @title DataGrid · custom cells
4
+ * @scenario Same grid but the columns render rich cells (avatar, progress bar, status badge) via cell renderers — the pattern for 'run list' style screens.
5
+ * @hint Avatar, progress, badges, row expand, selection, CSV
6
+ */
7
+ import { Avatar, AvatarFallback, type ColumnDef, DataGrid, Progress, StatusBadge } from "@monkey-mini-app/ui";
8
+
9
+ type Ticket = {
10
+ id: string;
11
+ key: string;
12
+ title: string;
13
+ owner: string;
14
+ progress: number;
15
+ status: string;
16
+ };
17
+
18
+ const tickets: Ticket[] = [
19
+ { id: "1", key: "TMS-1201", title: "Grid sort reset", owner: "Ada", progress: 80, status: "pass" },
20
+ { id: "2", key: "TMS-1208", title: "Kanban details", owner: "Lin", progress: 45, status: "running" },
21
+ { id: "3", key: "TMS-1210", title: "Calendar views", owner: "Kai", progress: 20, status: "blocked" },
22
+ { id: "4", key: "TMS-1214", title: "Markdown split", owner: "Ada", progress: 100, status: "pass" },
23
+ ];
24
+
25
+ const ticketColumns: ColumnDef<Ticket>[] = [
26
+ {
27
+ accessorKey: "key",
28
+ header: "Key",
29
+ meta: { sort: true, search: "text" },
30
+ cell: ({ getValue }) => (
31
+ <span className="font-mono text-xs text-muted-foreground">{String(getValue())}</span>
32
+ ),
33
+ },
34
+ { accessorKey: "title", header: "Title", meta: { sort: true, search: "text" } },
35
+ {
36
+ accessorKey: "owner",
37
+ header: "Owner",
38
+ meta: { sort: true, search: "text" },
39
+ cell: ({ getValue }) => {
40
+ const name = String(getValue());
41
+ return (
42
+ <span className="inline-flex items-center gap-2">
43
+ <Avatar className="size-5">
44
+ <AvatarFallback className="text-[9px]">{name.slice(0, 2).toUpperCase()}</AvatarFallback>
45
+ </Avatar>
46
+ {name}
47
+ </span>
48
+ );
49
+ },
50
+ },
51
+ {
52
+ accessorKey: "progress",
53
+ header: "Progress",
54
+ meta: { sort: true, search: "none" },
55
+ cell: ({ getValue }) => (
56
+ <div className="w-28">
57
+ <Progress value={Number(getValue())} />
58
+ </div>
59
+ ),
60
+ },
61
+ {
62
+ accessorKey: "status",
63
+ header: "Status",
64
+ meta: { sort: true, search: "text" },
65
+ cell: ({ getValue }) => <StatusBadge status={String(getValue())} />,
66
+ },
67
+ ];
68
+
69
+ export default function DataGrid02Example() {
70
+ return (
71
+ <>
72
+ <DataGrid
73
+ columns={ticketColumns}
74
+ data={tickets}
75
+ pageSize={10}
76
+ features={{ rowSelection: true, csvExport: true }}
77
+ searchPlaceholder="Search tickets…"
78
+ renderExpanded={(row) => (
79
+ <div className="text-sm">
80
+ <span className="font-mono text-muted-foreground">{row.key}</span>
81
+ {" — "}
82
+ {row.title} assigned to {row.owner}
83
+ </div>
84
+ )}
85
+ />
86
+ </>
87
+ );
88
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @exampleOf DatePicker
3
+ * @title DatePicker
4
+ * @scenario Pick a single calendar date; popover trigger shows the formatted value and supports clearing.
5
+ */
6
+ import * as React from "react";
7
+
8
+ import { DatePicker } from "@monkey-mini-app/ui";
9
+
10
+ export default function DatePicker01Example() {
11
+ const [date, setDate] = React.useState<Date | undefined>(new Date("2026-08-26"));
12
+
13
+ return <DatePicker value={date} onChange={setDate} />;
14
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @exampleOf DateRangePicker
3
+ * @title DateRangePicker
4
+ * @scenario Pick from/to as one value — one popover, both endpoints validated together, so you never re-check 'to > from' yourself.
5
+ */
6
+ import * as React from "react";
7
+
8
+ import { type DateRange, DateRangePicker } from "@monkey-mini-app/ui";
9
+
10
+ export default function DateRangePicker01Example() {
11
+ const [range, setRange] = React.useState<DateRange | undefined>();
12
+
13
+ return <DateRangePicker value={range} onChange={setRange} />;
14
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @exampleOf DateTimePicker
3
+ * @title DateTimePicker
4
+ * @scenario Date + time + timezone edited as a single value in one popover, for scheduling where the zone matters (CI triggers, shifts).
5
+ * @hint One popover: calendar + time
6
+ */
7
+ import * as React from "react";
8
+
9
+ import { DateTimePicker } from "@monkey-mini-app/ui";
10
+
11
+ export default function DateTimePicker01Example() {
12
+ const [dt, setDt] = React.useState<Date | undefined>(new Date("2026-08-26T09:15:00"));
13
+ const [zone, setZone] = React.useState("Asia/Shanghai");
14
+
15
+ return <DateTimePicker value={dt} onChange={setDt} timezone={zone} onTimezoneChange={setZone} />;
16
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @exampleOf DateTimeRangePicker
3
+ * @title DateTimeRangePicker
4
+ * @scenario A time span with both endpoints at day+time precision (log/incident investigation windows).
5
+ * @hint Two DateTimePickers; allDay switches to a date range
6
+ */
7
+ import * as React from "react";
8
+
9
+ import { DateTimeRangePicker } from "@monkey-mini-app/ui";
10
+
11
+ export default function DateTimeRangePicker01Example() {
12
+ const [dtRange, setDtRange] = React.useState<{ start?: Date; end?: Date }>({});
13
+
14
+ return <DateTimeRangePicker value={dtRange} onChange={setDtRange} />;
15
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @exampleOf DetailPanel
3
+ * @title DetailPanel
4
+ * @scenario Slide-over for record details that keeps the list visible and scroll position intact — the alternative to navigating away or a Dialog.
5
+ */
6
+ import * as React from "react";
7
+
8
+ import { Button, DetailPanel } from "@monkey-mini-app/ui";
9
+
10
+ export default function DetailPanel01Example() {
11
+ const [open, setOpen] = React.useState(false);
12
+
13
+ return (
14
+ <>
15
+ <Button onClick={() => setOpen(true)}>Open inspector</Button>
16
+ <DetailPanel open={open} onOpenChange={setOpen} title="login-spec" description="Last run">
17
+ Failed at step 2
18
+ </DetailPanel>
19
+ </>
20
+ );
21
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @exampleOf Dialog
3
+ * @title Dialog
4
+ * @scenario Modal flow with trigger/content/header/footer composition and focus trapping; the base for forms that must interrupt the page.
5
+ */
6
+ import {
7
+ Button,
8
+ Dialog,
9
+ DialogContent,
10
+ DialogDescription,
11
+ DialogHeader,
12
+ DialogTitle,
13
+ DialogTrigger,
14
+ } from "@monkey-mini-app/ui";
15
+
16
+ export default function Dialog01Example() {
17
+ return (
18
+ <>
19
+ <Dialog>
20
+ <DialogTrigger render={<Button />}>Open dialog</DialogTrigger>
21
+ <DialogContent>
22
+ <DialogHeader>
23
+ <DialogTitle>Edit run</DialogTitle>
24
+ <DialogDescription>Change metadata and save.</DialogDescription>
25
+ </DialogHeader>
26
+ </DialogContent>
27
+ </Dialog>
28
+ </>
29
+ );
30
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @exampleOf DiffViewer
3
+ * @title DiffViewer
4
+ * @scenario Two strings side by side (unified/split) with added/removed counts — reviewing a config or code change before applying it.
5
+ */
6
+ import { DiffViewer } from "@monkey-mini-app/ui";
7
+
8
+ export default function DiffViewer01Example() {
9
+ return <DiffViewer original={"a\nb\n"} modified={"a\nc\n"} />;
10
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @exampleOf DropdownMenu
3
+ * @title DropdownMenu
4
+ * @scenario Click-to-open action menu on a button, with groups, labels and shortcut hints; for row-level 'more actions'.
5
+ */
6
+ import {
7
+ Button,
8
+ DropdownMenu,
9
+ DropdownMenuContent,
10
+ DropdownMenuGroup,
11
+ DropdownMenuItem,
12
+ DropdownMenuLabel,
13
+ DropdownMenuTrigger,
14
+ } from "@monkey-mini-app/ui";
15
+
16
+ export default function DropdownMenu01Example() {
17
+ return (
18
+ <>
19
+ <DropdownMenu>
20
+ <DropdownMenuTrigger render={<Button variant="outline" />}>Menu</DropdownMenuTrigger>
21
+ <DropdownMenuContent>
22
+ <DropdownMenuGroup>
23
+ <DropdownMenuLabel>Actions</DropdownMenuLabel>
24
+ <DropdownMenuItem>Copy</DropdownMenuItem>
25
+ <DropdownMenuItem>Delete</DropdownMenuItem>
26
+ </DropdownMenuGroup>
27
+ </DropdownMenuContent>
28
+ </DropdownMenu>
29
+ </>
30
+ );
31
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @exampleOf DurationInput
3
+ * @title DurationInput
4
+ * @scenario Enter a length of time (hours + minutes), not a calendar date — timeouts, SLAs, shift lengths.
5
+ * @hint Hours and minutes, not a text box
6
+ */
7
+ import * as React from "react";
8
+
9
+ import { DurationInput } from "@monkey-mini-app/ui";
10
+
11
+ export default function DurationInput01Example() {
12
+ const [duration, setDuration] = React.useState("2h 30m");
13
+
14
+ return (
15
+ <>
16
+ <DurationInput value={duration} onChange={(v) => setDuration(v)} />
17
+ <p className="text-muted-foreground mt-2 text-xs">{duration}</p>
18
+ </>
19
+ );
20
+ }
@@ -0,0 +1,11 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Examples · editors
4
+
5
+ Multi-component demos: layout/pattern recipes with no single subject component.
6
+ Copy the whole file into `ui.tsx` (or split it) — imports are `react` + `@monkey-mini-app/ui` only.
7
+
8
+ | example | what it shows | scenario |
9
+ |---|---|---|
10
+ | [`misc-editors-01.tsx`](./misc-editors/misc-editors-01.tsx) | DiffViewer | DiffViewer driven by app state — switch files and unified/split mode from a toolbar, the shape of a PR review screen. |
11
+ | [`misc-editors-02.tsx`](./misc-editors/misc-editors-02.tsx) | JiraWiki | JiraWiki markup rendered live next to the raw Textarea source (wiki tables, code blocks, colours). |
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @exampleOf Empty
3
+ * @title Empty
4
+ * @scenario First-run / no-results state with illustration slot, title, description and a primary action; use instead of a blank card.
5
+ */
6
+ import { Empty, EmptyDescription, EmptyHeader, EmptyTitle } from "@monkey-mini-app/ui";
7
+
8
+ export default function Empty01Example() {
9
+ return (
10
+ <>
11
+ <Empty>
12
+ <EmptyHeader>
13
+ <EmptyTitle>Nothing here</EmptyTitle>
14
+ <EmptyDescription>Create the first item.</EmptyDescription>
15
+ </EmptyHeader>
16
+ </Empty>
17
+ </>
18
+ );
19
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @exampleOf EventCalendar
3
+ * @title EventCalendar
4
+ * @scenario Month view of events the user can drag/resize, with the model kept in app state via onEventsChange.
5
+ */
6
+ import * as React from "react";
7
+
8
+ import { type CalendarEvent, EventCalendar } from "@monkey-mini-app/ui";
9
+
10
+ const calUser = { id: "u1", name: "Ada", picturePath: null };
11
+
12
+ export default function EventCalendar01Example() {
13
+ const [events, setEvents] = React.useState<CalendarEvent[]>([
14
+ {
15
+ id: 1,
16
+ title: "Release freeze",
17
+ startDate: "2026-08-26T10:00:00",
18
+ endDate: "2026-08-26T11:30:00",
19
+ color: "blue",
20
+ description: "",
21
+ user: calUser,
22
+ },
23
+ {
24
+ id: 2,
25
+ title: "QA sync",
26
+ startDate: "2026-08-26T10:30:00",
27
+ endDate: "2026-08-26T11:00:00",
28
+ color: "orange",
29
+ description: "",
30
+ user: calUser,
31
+ },
32
+ {
33
+ id: 3,
34
+ title: "Oncall",
35
+ startDate: "2026-08-26T00:00:00",
36
+ endDate: "2026-08-28T00:00:00",
37
+ color: "green",
38
+ description: "coverage",
39
+ user: calUser,
40
+ },
41
+ {
42
+ id: 4,
43
+ title: "Design review",
44
+ startDate: "2026-08-27T14:00:00",
45
+ endDate: "2026-08-27T15:00:00",
46
+ color: "purple",
47
+ description: "",
48
+ user: calUser,
49
+ },
50
+ ]);
51
+
52
+ return <EventCalendar events={events} onEventsChange={setEvents} view="month" />;
53
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @exampleOf FileDropzone
3
+ * @title FileDropzone
4
+ * @scenario Drag-drop or click-to-pick file list with per-file name/size and a clear action; the UI half only — upload belongs in main.api.ts.
5
+ */
6
+ import * as React from "react";
7
+
8
+ import { FileDropzone } from "@monkey-mini-app/ui";
9
+
10
+ export default function FileDropzone01Example() {
11
+ const [files, setFiles] = React.useState<File[]>([]);
12
+
13
+ return <FileDropzone files={files} onFiles={setFiles} />;
14
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @exampleOf FormSheet
3
+ * @title FormSheet
4
+ * @scenario Edit a record over the list: title pinned, fields scrolling between the header and the action row, Enter and Save sharing one submit, and closing a dirty sheet asking first.
5
+ * @hint Change a field, then hit Escape — the discard prompt appears; without a change it closes straight away
6
+ */
7
+ import * as React from "react";
8
+
9
+ import { Button, FormSheet, Input, NativeSelect, StatusBadge } from "@monkey-mini-app/ui";
10
+
11
+ export default function FormSheet01Example() {
12
+ const [open, setOpen] = React.useState(true);
13
+ const [summary, setSummary] = React.useState("Nightly export drops the last sheet");
14
+ const [status, setStatus] = React.useState("InProgress");
15
+ const [dirty, setDirty] = React.useState(false);
16
+ const [saved, setSaved] = React.useState(0);
17
+
18
+ const edit = () => setDirty(true);
19
+
20
+ return (
21
+ <div className="text-muted-foreground flex h-[420px] items-center justify-center text-sm">
22
+ <p>The sheet is open — scroll the fields, then press Escape.</p>
23
+
24
+ <FormSheet
25
+ open={open}
26
+ onOpenChange={setOpen}
27
+ title="Edit issue"
28
+ description="OPS-1042 · opened 3 days ago"
29
+ header={
30
+ <div className="mt-2 flex items-center gap-2">
31
+ <StatusBadge status={status} />
32
+ {saved > 0 ? <span className="text-xs">saved {saved}×</span> : null}
33
+ </div>
34
+ }
35
+ dirty={dirty}
36
+ onSubmit={() => {
37
+ setDirty(false);
38
+ setSaved((n) => n + 1);
39
+ setOpen(false);
40
+ }}
41
+ footer={
42
+ <>
43
+ <Button type="submit" disabled={!dirty}>
44
+ Save
45
+ </Button>
46
+ <Button type="button" variant="ghost" onClick={() => setOpen(false)}>
47
+ Cancel
48
+ </Button>
49
+ </>
50
+ }
51
+ >
52
+ <div className="flex flex-col gap-3">
53
+ {Array.from({ length: 8 }, (_, i) => i).map((i) => (
54
+ <label key={i} className="flex flex-col items-start gap-1 text-sm">
55
+ <span className="text-xs">{i === 0 ? "Summary" : `Field ${i + 1}`}</span>
56
+ {i === 0 ? (
57
+ <Input
58
+ value={summary}
59
+ onChange={(e) => {
60
+ setSummary(e.target.value);
61
+ edit();
62
+ }}
63
+ />
64
+ ) : i === 2 ? (
65
+ <NativeSelect
66
+ value={status}
67
+ onChange={(e) => {
68
+ setStatus(e.target.value);
69
+ edit();
70
+ }}
71
+ >
72
+ <option>To Do</option>
73
+ <option>InProgress</option>
74
+ <option>Done</option>
75
+ </NativeSelect>
76
+ ) : (
77
+ <Input defaultValue={`value ${i + 1}`} onChange={edit} />
78
+ )}
79
+ </label>
80
+ ))}
81
+ </div>
82
+ </FormSheet>
83
+ </div>
84
+ );
85
+ }
@@ -0,0 +1,16 @@
1
+ <!-- generated by scripts/gen/skill — do not edit -->
2
+
3
+ # Examples · forms
4
+
5
+ Multi-component demos: layout/pattern recipes with no single subject component.
6
+ Copy the whole file into `ui.tsx` (or split it) — imports are `react` + `@monkey-mini-app/ui` only.
7
+
8
+ | example | what it shows | scenario |
9
+ |---|---|---|
10
+ | [`misc-forms-01.tsx`](./misc-forms/misc-forms-01.tsx) | Input / Textarea | Free-text pair side by side: single-line Input vs multi-line Textarea, both controlled — the baseline before picking a specialised field. |
11
+ | [`misc-forms-02.tsx`](./misc-forms/misc-forms-02.tsx) | Checkbox / Switch / Radio | Three boolean-ish choices compared: Checkbox (agree), Switch (instant-effect setting), RadioGroup (one of N). Pick by semantics, not looks. |
12
+ | [`misc-forms-03.tsx`](./misc-forms/misc-forms-03.tsx) | Select / NativeSelect | Custom styled Select (compound parts, own trigger width) next to NativeSelect, which uses the OS picker — cheaper on mobile and keyboard. |
13
+ | [`misc-forms-04.tsx`](./misc-forms/misc-forms-04.tsx) | Phone / Password / Currency / Copyable | Format-aware text fields that validate while typing: PhoneInput, PasswordField (mask toggle), CurrencyInput, plus Copyable for read-only tokens/ids. |
14
+ | [`misc-forms-05.tsx`](./misc-forms/misc-forms-05.tsx) | SearchInput / Autocomplete | Two ways to narrow a list: SearchInput (free text with clear) vs Autocomplete (suggest from a fixed option list). |
15
+ | [`misc-forms-06.tsx`](./misc-forms/misc-forms-06.tsx) | TagInput / UserPicker / Rating / ColorPicker | Compact pickers that all store their own value shape: TagInput (string[]), UserPicker (user object), Rating (0–5), ColorPicker (hex). |
16
+ | [`misc-forms-07.tsx`](./misc-forms/misc-forms-07.tsx) | Cascader / Transfer | Multi-value selection patterns: Cascader walks a nested option tree, Transfer moves whole items between available/selected lists. |
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @exampleOf Gantt
3
+ * @title Gantt
4
+ * @scenario Time-phased bars for planning (tasks against a date axis) where dependency order and overlap matter more than exact times.
5
+ */
6
+ import { Gantt } from "@monkey-mini-app/ui";
7
+
8
+ export default function Gantt01Example() {
9
+ return (
10
+ <>
11
+ <Gantt
12
+ tasks={[
13
+ {
14
+ id: "t1",
15
+ title: "Grid",
16
+ start: new Date("2026-08-01"),
17
+ end: new Date("2026-08-10"),
18
+ },
19
+ {
20
+ id: "t2",
21
+ title: "Demo",
22
+ start: new Date("2026-08-08"),
23
+ end: new Date("2026-08-20"),
24
+ },
25
+ ]}
26
+ />
27
+ </>
28
+ );
29
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @exampleOf Input
3
+ * @title Input
4
+ * @scenario Plain single-line text bound to state; combine with Label/InputGroup rather than styling the native input.
5
+ */
6
+ import { Input } from "@monkey-mini-app/ui";
7
+
8
+ export default function Input01Example() {
9
+ return <Input id="demo-name" placeholder="Ada" />;
10
+ }