@monkey-mini-app/dsh-mini-app 0.1.0 → 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.
- package/README.md +59 -0
- package/assets/apps-list.png +0 -0
- package/assets/complex-demo-app.png +0 -0
- package/assets/demo-app.png +0 -0
- package/assets/home.png +0 -0
- package/assets/sidebar-mode.png +0 -0
- package/lib/client.js +2024 -783
- package/lib/index.d.ts +5 -2
- package/lib/index.js +29 -16
- package/package.json +12 -10
- package/skills/monkey-mini-app/SKILL.md +182 -106
- package/skills/monkey-mini-app/references/catalog.md +236 -99
- package/skills/monkey-mini-app/references/contracts/accordion.md +30 -0
- package/skills/monkey-mini-app/references/contracts/activity-feed.md +12 -2
- package/skills/monkey-mini-app/references/contracts/alert-dialog.md +38 -0
- package/skills/monkey-mini-app/references/contracts/alert.md +38 -0
- package/skills/monkey-mini-app/references/contracts/app-shell.md +2 -2
- package/skills/monkey-mini-app/references/contracts/aspect-ratio.md +25 -0
- package/skills/monkey-mini-app/references/contracts/attachment-gallery.md +12 -2
- package/skills/monkey-mini-app/references/contracts/attachment.md +35 -0
- package/skills/monkey-mini-app/references/contracts/autocomplete.md +12 -2
- package/skills/monkey-mini-app/references/contracts/avatar.md +24 -0
- package/skills/monkey-mini-app/references/contracts/badge.md +26 -0
- package/skills/monkey-mini-app/references/contracts/breadcrumb.md +33 -0
- package/skills/monkey-mini-app/references/contracts/bubble.md +30 -0
- package/skills/monkey-mini-app/references/contracts/button-group.md +36 -0
- package/skills/monkey-mini-app/references/contracts/button.md +26 -0
- package/skills/monkey-mini-app/references/contracts/calendar.md +20 -0
- package/skills/monkey-mini-app/references/contracts/card.md +41 -0
- package/skills/monkey-mini-app/references/contracts/cascader.md +12 -2
- package/skills/monkey-mini-app/references/contracts/chart.md +32 -0
- package/skills/monkey-mini-app/references/contracts/checkbox.md +19 -0
- package/skills/monkey-mini-app/references/contracts/code-block.md +20 -2
- package/skills/monkey-mini-app/references/contracts/code-editor.md +30 -4
- package/skills/monkey-mini-app/references/contracts/collapsible.md +21 -0
- package/skills/monkey-mini-app/references/contracts/color-picker.md +12 -2
- package/skills/monkey-mini-app/references/contracts/combobox.md +34 -0
- package/skills/monkey-mini-app/references/contracts/command.md +41 -0
- package/skills/monkey-mini-app/references/contracts/comment-thread.md +12 -2
- package/skills/monkey-mini-app/references/contracts/commit-graph.md +50 -0
- package/skills/monkey-mini-app/references/contracts/confirm-dialog.md +20 -2
- package/skills/monkey-mini-app/references/contracts/context-menu.md +41 -0
- package/skills/monkey-mini-app/references/contracts/copyable.md +12 -2
- package/skills/monkey-mini-app/references/contracts/currency-input.md +12 -2
- package/skills/monkey-mini-app/references/contracts/dashboard-shell.md +41 -0
- package/skills/monkey-mini-app/references/contracts/data-grid.md +13 -6
- package/skills/monkey-mini-app/references/contracts/date-picker.md +20 -2
- package/skills/monkey-mini-app/references/contracts/date-range-picker.md +10 -2
- package/skills/monkey-mini-app/references/contracts/date-time-picker.md +20 -2
- package/skills/monkey-mini-app/references/contracts/date-time-range-picker.md +20 -2
- package/skills/monkey-mini-app/references/contracts/description-list.md +12 -2
- package/skills/monkey-mini-app/references/contracts/detail-panel.md +10 -2
- package/skills/monkey-mini-app/references/contracts/dialog.md +44 -0
- package/skills/monkey-mini-app/references/contracts/diff-viewer.md +21 -2
- package/skills/monkey-mini-app/references/contracts/donut-chart.md +14 -2
- package/skills/monkey-mini-app/references/contracts/drawer.md +29 -0
- package/skills/monkey-mini-app/references/contracts/dropdown-menu.md +49 -0
- package/skills/monkey-mini-app/references/contracts/duration-input.md +20 -2
- package/skills/monkey-mini-app/references/contracts/empty.md +40 -0
- package/skills/monkey-mini-app/references/contracts/env-badge.md +12 -2
- package/skills/monkey-mini-app/references/contracts/env-table.md +46 -0
- package/skills/monkey-mini-app/references/contracts/event-calendar.md +28 -20
- package/skills/monkey-mini-app/references/contracts/field.md +34 -0
- package/skills/monkey-mini-app/references/contracts/file-dropzone.md +20 -2
- package/skills/monkey-mini-app/references/contracts/file-tree.md +12 -2
- package/skills/monkey-mini-app/references/contracts/filter-bar.md +2 -2
- package/skills/monkey-mini-app/references/contracts/form-sheet.md +51 -0
- package/skills/monkey-mini-app/references/contracts/gantt.md +20 -2
- package/skills/monkey-mini-app/references/contracts/gauge.md +14 -2
- package/skills/monkey-mini-app/references/contracts/hover-card.md +21 -0
- package/skills/monkey-mini-app/references/contracts/input-group.md +24 -0
- package/skills/monkey-mini-app/references/contracts/input.md +33 -0
- package/skills/monkey-mini-app/references/contracts/item.md +36 -0
- package/skills/monkey-mini-app/references/contracts/jira-wiki.md +3 -4
- package/skills/monkey-mini-app/references/contracts/jql-input.md +15 -8
- package/skills/monkey-mini-app/references/contracts/json-viewer.md +20 -2
- package/skills/monkey-mini-app/references/contracts/kanban-issue-panel.md +12 -2
- package/skills/monkey-mini-app/references/contracts/kanban.md +10 -2
- package/skills/monkey-mini-app/references/contracts/kbd.md +20 -0
- package/skills/monkey-mini-app/references/contracts/label.md +33 -0
- package/skills/monkey-mini-app/references/contracts/list-detail.md +46 -0
- package/skills/monkey-mini-app/references/contracts/log-viewer.md +45 -4
- package/skills/monkey-mini-app/references/contracts/markdown-editor.md +20 -2
- package/skills/monkey-mini-app/references/contracts/markdown.md +12 -2
- package/skills/monkey-mini-app/references/contracts/marker.md +30 -0
- package/skills/monkey-mini-app/references/contracts/menubar.md +34 -0
- package/skills/monkey-mini-app/references/contracts/message-scroller.md +24 -0
- package/skills/monkey-mini-app/references/contracts/message.md +24 -0
- package/skills/monkey-mini-app/references/contracts/mini-calendar.md +20 -2
- package/skills/monkey-mini-app/references/contracts/native-select.md +21 -0
- package/skills/monkey-mini-app/references/contracts/navigation-menu.md +27 -0
- package/skills/monkey-mini-app/references/contracts/notification-center.md +12 -2
- package/skills/monkey-mini-app/references/contracts/number-field.md +20 -2
- package/skills/monkey-mini-app/references/contracts/page-header.md +2 -2
- package/skills/monkey-mini-app/references/contracts/pagination.md +33 -0
- package/skills/monkey-mini-app/references/contracts/password-field.md +12 -2
- package/skills/monkey-mini-app/references/contracts/phone-input.md +12 -2
- package/skills/monkey-mini-app/references/contracts/popover.md +32 -0
- package/skills/monkey-mini-app/references/contracts/progress-ring.md +14 -2
- package/skills/monkey-mini-app/references/contracts/progress.md +39 -0
- package/skills/monkey-mini-app/references/contracts/questionnaire.md +33 -0
- package/skills/monkey-mini-app/references/contracts/radar-chart.md +14 -2
- package/skills/monkey-mini-app/references/contracts/radio-group.md +20 -0
- package/skills/monkey-mini-app/references/contracts/rating.md +12 -2
- package/skills/monkey-mini-app/references/contracts/relative-date-picker.md +20 -2
- package/skills/monkey-mini-app/references/contracts/request-inspector.md +12 -2
- package/skills/monkey-mini-app/references/contracts/resizable.md +29 -0
- package/skills/monkey-mini-app/references/contracts/reveal.md +31 -0
- package/skills/monkey-mini-app/references/contracts/rich-text-editor.md +14 -2
- package/skills/monkey-mini-app/references/contracts/run-timeline.md +20 -2
- package/skills/monkey-mini-app/references/contracts/scroll-area.md +20 -0
- package/skills/monkey-mini-app/references/contracts/scrollspy.md +20 -2
- package/skills/monkey-mini-app/references/contracts/search-input.md +12 -2
- package/skills/monkey-mini-app/references/contracts/select.md +36 -0
- package/skills/monkey-mini-app/references/contracts/separator.md +27 -0
- package/skills/monkey-mini-app/references/contracts/settings-split.md +53 -0
- package/skills/monkey-mini-app/references/contracts/severity-chip.md +12 -2
- package/skills/monkey-mini-app/references/contracts/sheet.md +34 -0
- package/skills/monkey-mini-app/references/contracts/sidebar.md +42 -0
- package/skills/monkey-mini-app/references/contracts/skeleton.md +33 -0
- package/skills/monkey-mini-app/references/contracts/slider-range.md +12 -2
- package/skills/monkey-mini-app/references/contracts/slider.md +25 -0
- package/skills/monkey-mini-app/references/contracts/sortable-list.md +20 -2
- package/skills/monkey-mini-app/references/contracts/sparkline.md +13 -2
- package/skills/monkey-mini-app/references/contracts/spinner.md +31 -0
- package/skills/monkey-mini-app/references/contracts/stacked-bar-chart.md +17 -2
- package/skills/monkey-mini-app/references/contracts/stat-card.md +2 -2
- package/skills/monkey-mini-app/references/contracts/status-badge.md +2 -2
- package/skills/monkey-mini-app/references/contracts/stepper-item.md +39 -0
- package/skills/monkey-mini-app/references/contracts/stepper.md +38 -11
- package/skills/monkey-mini-app/references/contracts/switch.md +25 -0
- package/skills/monkey-mini-app/references/contracts/table-page.md +41 -0
- package/skills/monkey-mini-app/references/contracts/table.md +42 -0
- package/skills/monkey-mini-app/references/contracts/tabs.md +31 -0
- package/skills/monkey-mini-app/references/contracts/tag-input.md +12 -2
- package/skills/monkey-mini-app/references/contracts/terminal.md +13 -2
- package/skills/monkey-mini-app/references/contracts/test-step-list.md +12 -2
- package/skills/monkey-mini-app/references/contracts/textarea.md +25 -0
- package/skills/monkey-mini-app/references/contracts/time-picker.md +18 -2
- package/skills/monkey-mini-app/references/contracts/time-range-picker.md +20 -2
- package/skills/monkey-mini-app/references/contracts/time-wheel.md +6 -2
- package/skills/monkey-mini-app/references/contracts/timeline.md +20 -2
- package/skills/monkey-mini-app/references/contracts/timezone-select.md +20 -2
- package/skills/monkey-mini-app/references/contracts/toast.md +39 -0
- package/skills/monkey-mini-app/references/contracts/toggle-group.md +28 -0
- package/skills/monkey-mini-app/references/contracts/toggle.md +26 -0
- package/skills/monkey-mini-app/references/contracts/tooltip.md +30 -0
- package/skills/monkey-mini-app/references/contracts/transfer.md +12 -2
- package/skills/monkey-mini-app/references/contracts/tree-view.md +20 -2
- package/skills/monkey-mini-app/references/contracts/trend-card.md +12 -2
- package/skills/monkey-mini-app/references/contracts/user-picker.md +12 -2
- package/skills/monkey-mini-app/references/contracts/wizard-shell.md +56 -0
- package/skills/monkey-mini-app/references/ctx.md +123 -53
- package/skills/monkey-mini-app/references/eval.md +115 -0
- package/skills/monkey-mini-app/references/examples/alert/alert-01.tsx +17 -0
- package/skills/monkey-mini-app/references/examples/aspect-ratio/aspect-ratio-01.tsx +16 -0
- package/skills/monkey-mini-app/references/examples/attachment/attachment-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/breadcrumb/breadcrumb-01.tsx +31 -0
- package/skills/monkey-mini-app/references/examples/bubble/bubble-01.tsx +16 -0
- package/skills/monkey-mini-app/references/examples/button-group/button-group-01.tsx +23 -0
- package/skills/monkey-mini-app/references/examples/card/card-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/charts-blocks.md +15 -0
- package/skills/monkey-mini-app/references/examples/code-block/code-block-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/code-editor/code-editor-01.tsx +15 -0
- package/skills/monkey-mini-app/references/examples/command/command-01.tsx +30 -0
- package/skills/monkey-mini-app/references/examples/confirm-dialog/confirm-dialog-01.tsx +33 -0
- package/skills/monkey-mini-app/references/examples/context-menu/context-menu-01.tsx +29 -0
- package/skills/monkey-mini-app/references/examples/dashboard-shell/dashboard-shell-01.tsx +78 -0
- package/skills/monkey-mini-app/references/examples/data-grid/data-grid-01.tsx +34 -0
- package/skills/monkey-mini-app/references/examples/data-grid/data-grid-02.tsx +88 -0
- package/skills/monkey-mini-app/references/examples/date-picker/date-picker-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/date-range-picker/date-range-picker-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/date-time-picker/date-time-picker-01.tsx +16 -0
- package/skills/monkey-mini-app/references/examples/date-time-range-picker/date-time-range-picker-01.tsx +15 -0
- package/skills/monkey-mini-app/references/examples/detail-panel/detail-panel-01.tsx +21 -0
- package/skills/monkey-mini-app/references/examples/dialog/dialog-01.tsx +30 -0
- package/skills/monkey-mini-app/references/examples/diff-viewer/diff-viewer-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/dropdown-menu/dropdown-menu-01.tsx +31 -0
- package/skills/monkey-mini-app/references/examples/duration-input/duration-input-01.tsx +20 -0
- package/skills/monkey-mini-app/references/examples/editors.md +11 -0
- package/skills/monkey-mini-app/references/examples/empty/empty-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/event-calendar/event-calendar-01.tsx +53 -0
- package/skills/monkey-mini-app/references/examples/file-dropzone/file-dropzone-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/form-sheet/form-sheet-01.tsx +85 -0
- package/skills/monkey-mini-app/references/examples/forms.md +16 -0
- package/skills/monkey-mini-app/references/examples/gantt/gantt-01.tsx +29 -0
- package/skills/monkey-mini-app/references/examples/input/input-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/item/item-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/jql-input/jql-input-01.tsx +33 -0
- package/skills/monkey-mini-app/references/examples/json-viewer/json-viewer-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/kanban/kanban-01.tsx +60 -0
- package/skills/monkey-mini-app/references/examples/label/label-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/list-detail/list-detail-01.tsx +117 -0
- package/skills/monkey-mini-app/references/examples/log-viewer/log-viewer-01.tsx +20 -0
- package/skills/monkey-mini-app/references/examples/markdown-editor/markdown-editor-01.tsx +18 -0
- package/skills/monkey-mini-app/references/examples/marker/marker-01.tsx +16 -0
- package/skills/monkey-mini-app/references/examples/mini-calendar/mini-calendar-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-01.tsx +20 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-02.tsx +32 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-03.tsx +47 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-04.tsx +20 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-05.tsx +24 -0
- package/skills/monkey-mini-app/references/examples/misc-charts-blocks/misc-charts-blocks-06.tsx +89 -0
- package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-01.tsx +114 -0
- package/skills/monkey-mini-app/references/examples/misc-editors/misc-editors-02.tsx +33 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-01.tsx +22 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-02.tsx +37 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-03.tsx +42 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-04.tsx +25 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-05.tsx +27 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-06.tsx +33 -0
- package/skills/monkey-mini-app/references/examples/misc-forms/misc-forms-07.tsx +44 -0
- package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-01.tsx +43 -0
- package/skills/monkey-mini-app/references/examples/misc-overlays/misc-overlays-02.tsx +38 -0
- package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-01.tsx +21 -0
- package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-02.tsx +52 -0
- package/skills/monkey-mini-app/references/examples/misc-primitives/misc-primitives-03.tsx +44 -0
- package/skills/monkey-mini-app/references/examples/number-field/number-field-01.tsx +22 -0
- package/skills/monkey-mini-app/references/examples/overlays.md +11 -0
- package/skills/monkey-mini-app/references/examples/pagination/pagination-01.tsx +51 -0
- package/skills/monkey-mini-app/references/examples/primitives.md +12 -0
- package/skills/monkey-mini-app/references/examples/progress/progress-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/relative-date-picker/relative-date-picker-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/rich-text-editor/rich-text-editor-01.tsx +15 -0
- package/skills/monkey-mini-app/references/examples/run-timeline/run-timeline-01.tsx +17 -0
- package/skills/monkey-mini-app/references/examples/scrollspy/scrollspy-01.tsx +29 -0
- package/skills/monkey-mini-app/references/examples/separator/separator-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/settings-split/settings-split-01.tsx +84 -0
- package/skills/monkey-mini-app/references/examples/shared/jira-wiki-sample.ts +38 -0
- package/skills/monkey-mini-app/references/examples/skeleton/skeleton-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/slider/slider-01.tsx +22 -0
- package/skills/monkey-mini-app/references/examples/sortable-list/sortable-list-01.tsx +18 -0
- package/skills/monkey-mini-app/references/examples/spinner/spinner-01.tsx +10 -0
- package/skills/monkey-mini-app/references/examples/stepper/stepper-01.tsx +41 -0
- package/skills/monkey-mini-app/references/examples/table/table-01.tsx +25 -0
- package/skills/monkey-mini-app/references/examples/table-page/table-page-01.tsx +103 -0
- package/skills/monkey-mini-app/references/examples/time-picker/time-picker-01.tsx +19 -0
- package/skills/monkey-mini-app/references/examples/time-range-picker/time-range-picker-01.tsx +14 -0
- package/skills/monkey-mini-app/references/examples/timeline/timeline-01.tsx +18 -0
- package/skills/monkey-mini-app/references/examples/timezone-select/timezone-select-01.tsx +15 -0
- package/skills/monkey-mini-app/references/examples/toggle/toggle-01.tsx +20 -0
- package/skills/monkey-mini-app/references/examples/toggle-group/toggle-group-01.tsx +22 -0
- package/skills/monkey-mini-app/references/examples/tree-view/tree-view-01.tsx +25 -0
- package/skills/monkey-mini-app/references/examples/wizard-shell/wizard-shell-01.tsx +58 -0
- package/skills/monkey-mini-app/references/history.md +23 -7
- package/skills/monkey-mini-app/references/icons.md +99 -69
- package/skills/monkey-mini-app/references/llm-json.md +39 -26
- package/skills/monkey-mini-app/references/loader.md +47 -20
- package/skills/monkey-mini-app/references/looks/aurora-bento.md +88 -0
- package/skills/monkey-mini-app/references/looks/desk-split.md +89 -0
- package/skills/monkey-mini-app/references/looks/editorial.md +78 -0
- package/skills/monkey-mini-app/references/looks/glass-island.md +90 -0
- package/skills/monkey-mini-app/references/looks/index.md +18 -0
- package/skills/monkey-mini-app/references/looks/signage.md +74 -0
- package/skills/monkey-mini-app/references/looks/tape.md +22 -0
- package/skills/monkey-mini-app/references/looks/terminal.md +88 -0
- package/skills/monkey-mini-app/references/looks/void.md +22 -0
- package/skills/monkey-mini-app/references/styling.md +189 -0
- package/skills/monkey-mini-app/references/test.md +12 -12
- package/skills/monkey-mini-app/references/theme.md +197 -0
- package/skills/monkey-mini-app/references/tools.md +12 -12
- package/skills/monkey-mini-app/references/troubleshoot.md +165 -12
- package/skills/monkey-mini-app/templates/README.md +33 -21
- package/skills/monkey-mini-app/templates/{jira → board}/main.api.ts +11 -11
- package/skills/monkey-mini-app/templates/board/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/board/theme.css +46 -0
- package/skills/monkey-mini-app/templates/board/ui.tsx +546 -0
- package/skills/monkey-mini-app/templates/chores/main.api.ts +35 -0
- package/skills/monkey-mini-app/templates/chores/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/chores/theme.css +46 -0
- package/skills/monkey-mini-app/templates/chores/ui.tsx +117 -0
- package/skills/monkey-mini-app/templates/minimal/main.api.ts +5 -5
- package/skills/monkey-mini-app/templates/minimal/manifest.json +1 -2
- package/skills/monkey-mini-app/templates/minimal/ui.tsx +17 -8
- package/skills/monkey-mini-app/templates/radar/api/scan.ts +79 -0
- package/skills/monkey-mini-app/templates/radar/main.api.ts +29 -0
- package/skills/monkey-mini-app/templates/radar/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/radar/shared/events.ts +25 -0
- package/skills/monkey-mini-app/templates/{insights/lib → radar/shared}/sample.ts +1 -1
- package/skills/monkey-mini-app/templates/radar/theme.css +47 -0
- package/skills/monkey-mini-app/templates/radar/ui/brief.tsx +31 -0
- package/skills/monkey-mini-app/templates/radar/ui.tsx +131 -0
- package/skills/monkey-mini-app/templates/runner/main.api.ts +91 -0
- package/skills/monkey-mini-app/templates/runner/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/runner/shared/events.ts +14 -0
- package/skills/monkey-mini-app/templates/runner/theme.css +46 -0
- package/skills/monkey-mini-app/templates/runner/ui.tsx +213 -0
- package/skills/monkey-mini-app/templates/sheets/main.api.ts +276 -0
- package/skills/monkey-mini-app/templates/sheets/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/sheets/theme.css +46 -0
- package/skills/monkey-mini-app/templates/sheets/ui.tsx +419 -0
- package/skills/monkey-mini-app/templates/{todo → today}/main.api.ts +8 -8
- package/skills/monkey-mini-app/templates/today/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/today/theme.css +45 -0
- package/skills/monkey-mini-app/templates/today/ui/item-row.tsx +25 -0
- package/skills/monkey-mini-app/templates/today/ui.tsx +406 -0
- package/skills/monkey-mini-app/templates/{monitor → watch}/main.api.ts +8 -8
- package/skills/monkey-mini-app/templates/watch/manifest.json +8 -0
- package/skills/monkey-mini-app/templates/watch/ui.tsx +187 -0
- package/skills/monkey-mini-app/tsconfig.json +31 -0
- package/skills/monkey-mini-app/types/cdn.d.ts +1 -0
- package/tsup.config.ts +1 -0
- package/skills/monkey-mini-app/templates/agentrun/main.api.ts +0 -78
- package/skills/monkey-mini-app/templates/agentrun/manifest.json +0 -9
- package/skills/monkey-mini-app/templates/agentrun/ui.tsx +0 -125
- package/skills/monkey-mini-app/templates/insights/main.api.ts +0 -101
- package/skills/monkey-mini-app/templates/insights/manifest.json +0 -9
- package/skills/monkey-mini-app/templates/insights/ui.tsx +0 -138
- package/skills/monkey-mini-app/templates/jira/manifest.json +0 -9
- package/skills/monkey-mini-app/templates/jira/ui.tsx +0 -318
- package/skills/monkey-mini-app/templates/monitor/manifest.json +0 -9
- package/skills/monkey-mini-app/templates/monitor/ui.tsx +0 -176
- package/skills/monkey-mini-app/templates/review/main.api.ts +0 -68
- package/skills/monkey-mini-app/templates/review/manifest.json +0 -9
- package/skills/monkey-mini-app/templates/review/ui.tsx +0 -159
- package/skills/monkey-mini-app/templates/todo/manifest.json +0 -8
- package/skills/monkey-mini-app/templates/todo/ui.tsx +0 -177
|
@@ -1,83 +1,113 @@
|
|
|
1
1
|
# Icons
|
|
2
2
|
|
|
3
|
-
`import { Icon } from "@monkey-mini-app/ui"` —
|
|
3
|
+
`import { Icon } from "@monkey-mini-app/ui"` — a single `Icon` namespace (lucide). `Icon.<Name>` accepts **any lucide React component name** (PascalCase). Below is a **curated subset**, grouped by purpose with a one-line note on when to reach for it; anything not listed still works by lucide's naming rule (`Icon.IconName`).
|
|
4
4
|
|
|
5
5
|
```tsx
|
|
6
6
|
import { Icon } from "@monkey-mini-app/ui";
|
|
7
7
|
<Icon.Search size={16} strokeWidth={2} />
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Icon-only buttons must carry an accessible name: `<Button size="icon" aria-label="Refresh"><Icon.RefreshCw /></Button>`.
|
|
11
|
+
|
|
12
|
+
## Actions
|
|
13
|
+
|
|
14
|
+
| Name | Use for |
|
|
12
15
|
|---|---|
|
|
13
|
-
| `Plus` / `Minus` |
|
|
14
|
-
| `X` |
|
|
15
|
-
| `Check` / `CheckCircle2` |
|
|
16
|
-
| `Trash2` |
|
|
17
|
-
| `Pencil` / `PenLine` |
|
|
18
|
-
| `Copy` / `Clipboard` |
|
|
19
|
-
| `Download` / `Upload` |
|
|
20
|
-
| `RefreshCw` |
|
|
21
|
-
| `Send` |
|
|
22
|
-
| `ExternalLink` |
|
|
23
|
-
| `Link` |
|
|
24
|
-
|
|
25
|
-
##
|
|
26
|
-
|
|
16
|
+
| `Plus` / `Minus` | Add / remove |
|
|
17
|
+
| `X` | Close, clear |
|
|
18
|
+
| `Check` / `CheckCircle2` | Done, success |
|
|
19
|
+
| `Trash2` | Delete |
|
|
20
|
+
| `Pencil` / `PenLine` | Edit, rename |
|
|
21
|
+
| `Copy` / `Clipboard` | Copy |
|
|
22
|
+
| `Download` / `Upload` | Download / upload |
|
|
23
|
+
| `RefreshCw` | Refresh, re-fetch |
|
|
24
|
+
| `Send` | Submit, send |
|
|
25
|
+
| `ExternalLink` | Open in a new window |
|
|
26
|
+
| `Link` | Copy link |
|
|
27
|
+
|
|
28
|
+
## Navigation
|
|
29
|
+
|
|
30
|
+
| Name | Use for |
|
|
27
31
|
|---|---|
|
|
28
|
-
| `ChevronRight` / `ChevronLeft` |
|
|
29
|
-
| `ChevronDown` / `ChevronUp` |
|
|
30
|
-
| `ChevronsUpDown` |
|
|
31
|
-
| `ArrowUpRight` |
|
|
32
|
-
| `ArrowLeftRight` / `ArrowUpDown` |
|
|
33
|
-
| `MoreHorizontal` |
|
|
34
|
-
|
|
35
|
-
##
|
|
36
|
-
|
|
32
|
+
| `ChevronRight` / `ChevronLeft` | Enter / expand, or back |
|
|
33
|
+
| `ChevronDown` / `ChevronUp` | Collapse / expand |
|
|
34
|
+
| `ChevronsUpDown` | Sortable column |
|
|
35
|
+
| `ArrowUpRight` | External link, score went up |
|
|
36
|
+
| `ArrowLeftRight` / `ArrowUpDown` | Swap, transfer |
|
|
37
|
+
| `MoreHorizontal` | Overflow menu |
|
|
38
|
+
|
|
39
|
+
## Status
|
|
40
|
+
|
|
41
|
+
| Name | Use for |
|
|
37
42
|
|---|---|
|
|
38
|
-
| `Bell` / `BellOff` |
|
|
39
|
-
| `Eye` / `EyeOff` |
|
|
40
|
-
| `Info` |
|
|
41
|
-
| `AlertCircle` / `TriangleAlert` |
|
|
42
|
-
| `Loader2` / `LoaderCircle` |
|
|
43
|
-
| `HelpCircle` |
|
|
44
|
-
| `BadgeCheck` |
|
|
45
|
-
| `Star` / `Heart` |
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
|
|
43
|
+
| `Bell` / `BellOff` | Notifications / muted |
|
|
44
|
+
| `Eye` / `EyeOff` | Show / hide a secret |
|
|
45
|
+
| `Info` | Informational hint |
|
|
46
|
+
| `AlertCircle` / `TriangleAlert` | Warning |
|
|
47
|
+
| `Loader2` / `LoaderCircle` | In progress (pair with an animate class) |
|
|
48
|
+
| `HelpCircle` | Help |
|
|
49
|
+
| `BadgeCheck` | Verified, passed |
|
|
50
|
+
| `Star` / `Heart` | Favourite / like |
|
|
51
|
+
|
|
52
|
+
## Content & input
|
|
53
|
+
|
|
54
|
+
| Name | Use for |
|
|
49
55
|
|---|---|
|
|
50
|
-
| `Search` |
|
|
51
|
-
| `Filter` |
|
|
52
|
-
| `SlidersHorizontal` |
|
|
53
|
-
| `CalendarDays` |
|
|
54
|
-
| `Clock` / `History` |
|
|
55
|
-
| `Tag` |
|
|
56
|
-
| `File` / `FileText` |
|
|
57
|
-
| `Folder` / `FolderOpen` |
|
|
58
|
-
| `Image` |
|
|
59
|
-
| `List` / `ListOrdered` |
|
|
60
|
-
| `Hash` |
|
|
61
|
-
| `Code2` / `Terminal` |
|
|
62
|
-
|
|
63
|
-
##
|
|
64
|
-
|
|
56
|
+
| `Search` | Search box |
|
|
57
|
+
| `Filter` | Filter |
|
|
58
|
+
| `SlidersHorizontal` | Advanced filter, tuning parameters |
|
|
59
|
+
| `CalendarDays` | Date |
|
|
60
|
+
| `Clock` / `History` | Time / history |
|
|
61
|
+
| `Tag` | Label, category |
|
|
62
|
+
| `File` / `FileText` | File / document |
|
|
63
|
+
| `Folder` / `FolderOpen` | Directory |
|
|
64
|
+
| `Image` | Image |
|
|
65
|
+
| `List` / `ListOrdered` | List / ordered list |
|
|
66
|
+
| `Hash` | Identifier, topic |
|
|
67
|
+
| `Code2` / `Terminal` | Code / command line |
|
|
68
|
+
|
|
69
|
+
## System & monitoring
|
|
70
|
+
|
|
71
|
+
| Name | Use for |
|
|
65
72
|
|---|---|
|
|
66
|
-
| `Activity` / `Zap` |
|
|
67
|
-
| `Gauge` / `BarChart3` |
|
|
68
|
-
| `Server` / `Database` |
|
|
69
|
-
| `HardDrive` / `Cpu` / `MemoryStick` |
|
|
70
|
-
| `Cloud` / `Network` / `Globe` / `Wifi` |
|
|
71
|
-
| `TrendingUp` / `TrendingDown` |
|
|
72
|
-
| `GitBranch` / `GitMerge` / `GitPullRequest` |
|
|
73
|
-
| `Rocket` |
|
|
74
|
-
|
|
75
|
-
##
|
|
76
|
-
|
|
73
|
+
| `Activity` / `Zap` | Live activity, performance |
|
|
74
|
+
| `Gauge` / `BarChart3` | Metrics, overview |
|
|
75
|
+
| `Server` / `Database` | Service, storage |
|
|
76
|
+
| `HardDrive` / `Cpu` / `MemoryStick` | Disk / CPU / memory |
|
|
77
|
+
| `Cloud` / `Network` / `Globe` / `Wifi` | Network, cloud, external services |
|
|
78
|
+
| `TrendingUp` / `TrendingDown` | Up / down |
|
|
79
|
+
| `GitBranch` / `GitMerge` / `GitPullRequest` | Git branch, merge, PR |
|
|
80
|
+
| `Rocket` | Release, ship |
|
|
81
|
+
|
|
82
|
+
## Media / user / settings
|
|
83
|
+
|
|
84
|
+
| Name | Use for |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `Play` / `Pause` | Play / pause |
|
|
87
|
+
| `Music2` / `Video` / `Mic` / `Camera` | Audio, video |
|
|
88
|
+
| `Settings` / `Settings2` | Settings |
|
|
89
|
+
| `Mail` / `MessageSquare` | Mail / comment |
|
|
90
|
+
| `Lock` / `Unlock` / `KeyRound` | Permission, secret |
|
|
91
|
+
| `Home` | Home |
|
|
92
|
+
|
|
93
|
+
## Empty-state illustrations (`Illu*`)
|
|
94
|
+
|
|
95
|
+
**Exactly these 10 names** (unDraw sources, tokenised so they follow `--primary` / `--muted`). Unlike lucide, these cannot be guessed — if a name is not in this list, fall back to an `Icon` plus text.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { IlluEmpty } from "@monkey-mini-app/ui";
|
|
99
|
+
<IlluEmpty className="mx-auto w-40" />
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
| Name | Use for |
|
|
77
103
|
|---|---|
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
104
|
+
| `IlluEmpty` | Generic empty list / first run with no data |
|
|
105
|
+
| `IlluNoData` | A filter is applied and the result is empty |
|
|
106
|
+
| `IlluSearch` | Search returned nothing |
|
|
107
|
+
| `IlluLoading` | First load / placeholder |
|
|
108
|
+
| `IlluServerStatus` | Service unavailable, fetch failed |
|
|
109
|
+
| `IlluAccessDenied` | No permission / secret missing |
|
|
110
|
+
| `IlluPageNotFound` | Target missing, stale id |
|
|
111
|
+
| `IlluDataProcessing` | Background job running (pair with `scanStatus`) |
|
|
112
|
+
| `IlluBugFixing` | Error state, empty failure detail |
|
|
113
|
+
| `IlluCodeReview` | Diff / review empty state |
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Structured JSON (`ctx.llm` / `ctx.agent` + `opts.schema`)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
When you need an object or an array, use this path — do not experiment with "please output JSON only" phrasings.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Contract (identical for llm and agent)
|
|
6
6
|
|
|
7
|
-
| |
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
7
|
+
| | |
|
|
8
|
+
|--|--|
|
|
9
|
+
| Entry | `ctx.llm(prompt, { schema })` **or** `ctx.agent(goal, { schema })` |
|
|
10
|
+
| Returns | **Always a string that `JSON.parse` accepts** — the host asks for JSON only, strips fences/preambles, retries what a retry can fix, and raises if nothing parses |
|
|
11
|
+
| In your app | `JSON.parse(raw)`; it is not a question of *whether* the text is JSON, only of whether the fields match — validate those yourself |
|
|
12
|
+
| It is not | Provider-native JSON mode, and **not** full schema validation: the host checks that the answer *parses*, plus nothing about your `required` / `type` / enum shape |
|
|
13
13
|
|
|
14
|
-
`schema`
|
|
14
|
+
`schema` is a plain JSON Schema object (at least `type` + `properties` / `items`). Keep the prompt short: state the task, put the constraints in `schema` instead of stacking "no explanation" lines.
|
|
15
15
|
|
|
16
|
-
## `ctx.llm`
|
|
16
|
+
## `ctx.llm` example
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Full RSS + `./lib` + schema in `templates/radar/`.
|
|
19
19
|
|
|
20
20
|
```ts
|
|
21
21
|
const SCHEMA = {
|
|
@@ -27,15 +27,15 @@ const SCHEMA = {
|
|
|
27
27
|
required: ["headline", "bullets"],
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
const raw = await ctx.llm("
|
|
30
|
+
const raw = await ctx.llm("One headline and exactly 3 bullets, in the user's language. No preamble.", {
|
|
31
31
|
schema: SCHEMA,
|
|
32
32
|
});
|
|
33
33
|
const digest = JSON.parse(raw);
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
## `ctx.agent`
|
|
36
|
+
## `ctx.agent` example
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
For "reason / use tools over several steps, then return a structured result". Still a string. Need the process timeline too? Add `onEvent` to the same call (shapes in [ctx.md](ctx.md)).
|
|
39
39
|
|
|
40
40
|
```ts
|
|
41
41
|
const INSIGHT_SCHEMA = {
|
|
@@ -49,7 +49,7 @@ const INSIGHT_SCHEMA = {
|
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
const raw = await ctx.agent(
|
|
52
|
-
"
|
|
52
|
+
"From the material below, give insights for an independent developer: risks + a next step.\n" + materials,
|
|
53
53
|
{ schema: INSIGHT_SCHEMA },
|
|
54
54
|
);
|
|
55
55
|
const insight = JSON.parse(raw);
|
|
@@ -57,13 +57,26 @@ await ctx.storage.set("insight", insight);
|
|
|
57
57
|
return insight;
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
##
|
|
63
|
-
|
|
64
|
-
1. `withJsonInstruction
|
|
65
|
-
2.
|
|
66
|
-
3. `coerceSchemaJson
|
|
67
|
-
4.
|
|
68
|
-
|
|
69
|
-
|
|
60
|
+
Same as llm: `schema` is optional, and for a natural-language final answer you do not pass one.
|
|
61
|
+
|
|
62
|
+
## What the host actually does
|
|
63
|
+
|
|
64
|
+
1. `withJsonInstruction`: writes the schema into the constraints (llm → the stream's `system`; agent → the one-shot follow-up text)
|
|
65
|
+
2. The model generates
|
|
66
|
+
3. `coerceSchemaJson`: drops ```` ```json ```` fences / preambles and extracts `{…}` / `[…]` as well as it can
|
|
67
|
+
4. Your app calls `JSON.parse`
|
|
68
|
+
|
|
69
|
+
## What the host guarantees, and what it costs
|
|
70
|
+
|
|
71
|
+
- `ctx.llm` tries up to **`retryTimes`** times (default 3 total). A retry happens only for
|
|
72
|
+
something retrying can fix: the call failed / answered nothing, or the answer did not parse.
|
|
73
|
+
- From the second try on, the model is shown *why* the previous answer was rejected, including the
|
|
74
|
+
start of it — a blind re-roll just reproduces the same truncated object.
|
|
75
|
+
- If nothing parses, you get `HostError` `code: "LLM_JSON_INVALID"` (or `LLM_RETRY_EXHAUSTED` if
|
|
76
|
+
the model never answered at all). Its message lists every attempt; `err.attempts` carries them
|
|
77
|
+
structured (`kind`, `error`, `bytes`, `head`). Nothing about the model's output is hidden — the
|
|
78
|
+
rejected samples are in there, which is what lets you fix the prompt instead of guessing.
|
|
79
|
+
- Output is capped at **`maxTokens` (default 4096)**. A schema asking for many items can still be
|
|
80
|
+
truncated at the ceiling, so for wide arrays set it yourself rather than widening the schema.
|
|
81
|
+
- `ctx.agent` defaults to **1 attempt**, because a turn may already have posted a comment or pushed
|
|
82
|
+
a build — replaying it repeats that. Pass `retryTimes` only when your steps are idempotent.
|
|
@@ -1,30 +1,57 @@
|
|
|
1
1
|
# Loader
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The host compiles on the fly, server side: the **backend** (`main.api.ts` + its relative imports) goes through sucrase; the **UI** (`ui.tsx` + its relative imports) is bundled to a single ESM file with esbuild (tree-shaken, so only the components you use are included).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Layout
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
```
|
|
8
|
+
manifest.json
|
|
9
|
+
ui.tsx UI entry
|
|
10
|
+
main.api.ts backend entry
|
|
11
|
+
ui/ components / hooks / view helpers — UI only
|
|
12
|
+
api/ backend helpers — backend only
|
|
13
|
+
shared/ pure isomorphic code — both sides
|
|
14
|
+
```
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
The three folders are the convention that keeps the two runtimes from reaching into each
|
|
17
|
+
other's code; a trivial app with no helpers needs none of them. **`ui/` and `api/` are
|
|
18
|
+
enforced at compile time**, not style advice:
|
|
14
19
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- `import { foo } from "./lib/foo"` —— 相对 app 内文件,随 bundle 一起打包
|
|
19
|
-
- 布局用 Tailwind classes(`flex flex-col gap-3` 等)
|
|
20
|
+
- UI importing `./api/**` → compile error
|
|
21
|
+
- backend importing `./ui/**` → load error
|
|
22
|
+
- either side importing outside the app dir (`../…`) → error
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
Anything that both sides need belongs in `shared/` — which means pure code: no React, no
|
|
25
|
+
DOM, no `ctx`, no Node builtins.
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
- Node 内置:`fs`、`http`、`path`…
|
|
25
|
-
- 逃出 app 目录的 `../` 出界(前端 `./lib` 同理)
|
|
26
|
-
- UI `import main.api.ts`(要数据走 `call`)
|
|
27
|
+
## Backend (`main.api.ts`, `api/**`, `shared/**`)
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
- `import { defineApp } from "@monkey-mini-app/api"`; the host injects the runtime `defineApp` when it loads the file, so nothing React-ish is pulled into the backend
|
|
30
|
+
- `import { groupBy, debounce } from "lodash"` (or `lodash-es`) — full lodash, host-injected; same module as the UI vendor bundle
|
|
31
|
+
- A Node library this app genuinely needs: `mini_app_install({ appId, packages: [{ name: "exceljs" }] })` first, then `import ExcelJS from "exceljs"`. It lands in **this app's** `node_modules` (`--ignore-scripts`, lockfile committed, `node_modules` not). `package.json` in the app dir is owned by that tool — do not hand-write it. Anything outside the app's own `node_modules` (the plugin's, the repo's) is refused.
|
|
32
|
+
- `import { parseFeed } from "./api/feed"`, `import { SAMPLE } from "./shared/sample"` — any relative path inside the app dir; subfolder names beyond the convention above are up to you
|
|
33
|
+
- TypeScript freely (sucrase: parameter types, `{ title: string }`, `catch (e: any)` all fine)
|
|
34
|
+
- `export default defineApp(...)`
|
|
35
|
+
- In helper modules: `export function` / `export const` / `export async function`
|
|
29
36
|
|
|
30
|
-
|
|
37
|
+
## Frontend (`ui.tsx`, `ui/**`, `shared/**`)
|
|
38
|
+
|
|
39
|
+
- `import { useApp, Button, DataGrid, cn, ... } from "@monkey-mini-app/ui"` — components, `useApp`, `cn`, `Icon`, `Illu*` all come from here (icon/chart/editor dependencies are already inside; never add an npm import)
|
|
40
|
+
- `import { useState } from "react"` — React 19, injected by the host (`/mma/runtime.js`)
|
|
41
|
+
- `import { groupBy, debounce } from "lodash"` — platform vendor (`/mma/vendors/lodash.js`); not a kit re-export
|
|
42
|
+
- `import { fmt } from "./shared/format"` — app-relative, bundled with the UI
|
|
43
|
+
- Layout via Tailwind classes (`flex flex-col gap-3`, …)
|
|
44
|
+
|
|
45
|
+
UI: `@monkey-mini-app/ui` + `react` + `lodash`. Backend: `@monkey-mini-app/api` + `lodash` + packages installed by `mini_app_install`. Nothing else resolves — pre-unification names fail to compile. Rewrite them; do not work around them.
|
|
46
|
+
|
|
47
|
+
## Forbidden (compile error — do not work around it)
|
|
48
|
+
|
|
49
|
+
- npm packages: `recharts`, `lucide-react`, `rss-parser`, `openai`, `node-fetch`, `axios`, `ramda`, `dayjs`, … in `ui.tsx` (`lodash` is the exception — platform vendor, full API; backend-only libs go through `mini_app_install`)
|
|
50
|
+
- Node builtins: `fs`, `http`, `path`, …
|
|
51
|
+
- `../` escaping the app directory (both sides)
|
|
52
|
+
- UI ↔ `api/**`, backend ↔ `ui/**` (see Layout)
|
|
53
|
+
- UI importing `main.api.ts` (fetch data with `call`)
|
|
54
|
+
|
|
55
|
+
Fetch web content with `ctx.http("https://…", { timeout: 8000 })` and inspect `r.ok` / `r.text` / `r.json`; keep parsing in `api/`. Local machine commands use `ctx.bash`.
|
|
56
|
+
|
|
57
|
+
Editing `ui.tsx` / `main.api.ts` or any helper module under the app dir triggers a recompile by mtime. A full RSS + `shared/` example lives in `templates/radar/`.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<!-- generated by scripts/gen/skill — do not edit -->
|
|
2
|
+
|
|
3
|
+
# Aurora Bento
|
|
4
|
+
|
|
5
|
+
Also known as `极光便当` (sample product copy).
|
|
6
|
+
|
|
7
|
+
id: `aurora-bento` · grammar: `tessellation`
|
|
8
|
+
|
|
9
|
+
**When:** Launcher / overview. The page is a 6×3 tessellation, every cell a destination.
|
|
10
|
+
|
|
11
|
+
**Not:** A lock-screen home. No sky, no poster layer.
|
|
12
|
+
|
|
13
|
+
**How to copy it:** A flat `bg-muted` ground turns this into an admin dashboard — the aurora IS the look. Three hue pools mixed out of the palette's own primary (toward --foreground for depth, toward --destructive for a warm drift) so no colour literal appears in ui.tsx, and they stay TIGHT (40-50% radii) so they read as light sources rather than a wallpaper wash. Cap the grid (`max-w-5xl mx-auto`) and gap it: an edge-to-edge tile wall hides the field, and the field is the look. Write spans out (`col-span-2`), never `sm:col-span-*` — the panel width is user-dragged. Tiles are OPAQUE and raised (contact + lift shadow): translucent tiles would collide with glass-island. The hero tile inverts to `bg-foreground text-background`. Every tile is a destination, never a stat readout. Light and dark may carry different hue families — this look's palette is indigo-violet by day, aurora green by night.
|
|
14
|
+
|
|
15
|
+
## Style (inline — Tailwind drops multi-layer shadows)
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
const GLASS = {
|
|
19
|
+
"ground": "tight radial pools: --primary 92% (top-left), --primary mixed --foreground (top-right), --primary mixed --destructive (bottom) — token-derived, no literals",
|
|
20
|
+
"RAISED": {
|
|
21
|
+
"boxShadow": "0 1px 2px color-mix(in oklch, var(--foreground) 14%, transparent), 0 14px 30px -14px var(--shadow)"
|
|
22
|
+
}
|
|
23
|
+
} as const;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Classes (copy literals)
|
|
27
|
+
|
|
28
|
+
- `root`: `mx-auto grid w-full max-w-5xl grid-cols-6 gap-2.5 (spans written out, no sm:)`
|
|
29
|
+
- `tile`: `bg-card relative rounded-2xl p-3 overflow-hidden + style={RAISED}`
|
|
30
|
+
- `hero`: `bg-foreground text-background col-span-2 row-span-2 rounded-2xl p-4`
|
|
31
|
+
|
|
32
|
+
## Palette (optional `theme.css` in the app dir)
|
|
33
|
+
|
|
34
|
+
This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
|
|
35
|
+
makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
|
|
36
|
+
pick a host palette. Omit the file to follow the host palette instead.
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
/* name: 极光便当 */
|
|
40
|
+
/* Look-owned palette: the ground is an aurora, so the hue IS the identity. Light is the
|
|
41
|
+
indigo-violet field (A1), dark the graphite aurora-green (A2) — the lab picked the best
|
|
42
|
+
side of each; a palette file has two blocks, so that is legal and reads intentional. */
|
|
43
|
+
:root[data-mode="light"] {
|
|
44
|
+
--bg: #c9cdf1;
|
|
45
|
+
--fg: #20213a;
|
|
46
|
+
--surface: #ffffff;
|
|
47
|
+
--surface-fg: #20213a;
|
|
48
|
+
--border: #c2c6e8;
|
|
49
|
+
--muted: #dfe2f5;
|
|
50
|
+
--muted-fg: #565a7e;
|
|
51
|
+
--primary: #6d5ae0;
|
|
52
|
+
--primary-fg: #ffffff;
|
|
53
|
+
--secondary: #e2e4f6;
|
|
54
|
+
--secondary-fg: #20213a;
|
|
55
|
+
--accent: #e9e3fb;
|
|
56
|
+
--accent-fg: #20213a;
|
|
57
|
+
--destructive: #c0392b;
|
|
58
|
+
--destructive-fg: #ffffff;
|
|
59
|
+
--ring: #6d5ae0;
|
|
60
|
+
--input: #c2c6e8;
|
|
61
|
+
--radius: 16px;
|
|
62
|
+
--shadow: rgba(35, 30, 90, 0.35);
|
|
63
|
+
}
|
|
64
|
+
:root[data-mode="dark"] {
|
|
65
|
+
--bg: #0e1512;
|
|
66
|
+
--fg: #dff2e8;
|
|
67
|
+
--surface: #141d19;
|
|
68
|
+
--surface-fg: #dff2e8;
|
|
69
|
+
--border: #1e2c25;
|
|
70
|
+
--muted: #101f19;
|
|
71
|
+
--muted-fg: #6f9784;
|
|
72
|
+
--primary: #3ee39a;
|
|
73
|
+
--primary-fg: #06140d;
|
|
74
|
+
--secondary: #16241d;
|
|
75
|
+
--secondary-fg: #dff2e8;
|
|
76
|
+
--accent: #13281f;
|
|
77
|
+
--accent-fg: #dff2e8;
|
|
78
|
+
--destructive: #ff6b5e;
|
|
79
|
+
--destructive-fg: #14060a;
|
|
80
|
+
--ring: #3ee39a;
|
|
81
|
+
--input: #1e2c25;
|
|
82
|
+
--radius: 16px;
|
|
83
|
+
--shadow: rgba(0, 0, 0, 0.55);
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<!-- generated by scripts/gen/skill — do not edit -->
|
|
2
|
+
|
|
3
|
+
# Desk Split
|
|
4
|
+
|
|
5
|
+
Also known as `精致分栏` (sample product copy).
|
|
6
|
+
|
|
7
|
+
id: `desk-split` · grammar: `list-detail`
|
|
8
|
+
|
|
9
|
+
**When:** CRUD, tickets, contacts, ledgers. Two panes, hairline, dense toolbar.
|
|
10
|
+
|
|
11
|
+
**Not:** Marketing pages, lock-screen homes.
|
|
12
|
+
|
|
13
|
+
**How to copy it:** The desk IS the palette: walnut `bg-background`, cream papers (`bg-card`) in BOTH modes — lamp-lit paper on a dark desk is the look; dark papers on wood read as mud. All ink (`foreground`) is dark in both modes and only ever lands on paper: chrome text (headers, captions) goes inside a paper strip, never directly on the wood. Wood grain = repeating stripe bands; one warm lamp pool from `--primary`; titles in ui-serif for the desk feel.
|
|
14
|
+
|
|
15
|
+
## Style (inline — Tailwind drops multi-layer shadows)
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
const GLASS = {
|
|
19
|
+
"backgroundImage": "repeating-linear-gradient(90deg, fg 5% 2px stripes / 96px bands), radial lamp pool from --primary at top-left, vignette at bottom",
|
|
20
|
+
"paper": {
|
|
21
|
+
"backgroundColor": "var(--card)",
|
|
22
|
+
"boxShadow": "0 1px 2px fg/24, 0 18px 44px -18px var(--shadow), inset 0 1px 0 card/72",
|
|
23
|
+
"borderColor": "fg/12"
|
|
24
|
+
}
|
|
25
|
+
} as const;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Classes (copy literals)
|
|
29
|
+
|
|
30
|
+
- `root`: `relative h-full min-h-0 bg-background (walnut wood, DESK wash overlay)`
|
|
31
|
+
- `pane`: `cream paper: bg-card, hairline edge, contact + lift shadow, top highlight (PAPER)`
|
|
32
|
+
|
|
33
|
+
## Palette (optional `theme.css` in the app dir)
|
|
34
|
+
|
|
35
|
+
This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
|
|
36
|
+
makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
|
|
37
|
+
pick a host palette. Omit the file to follow the host palette instead.
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
/* name: 桌面分栏 */
|
|
41
|
+
/* Look-owned palette: walnut desk + amber desk-lamp. The papers are cream in BOTH modes —
|
|
42
|
+
a dark desk with lamp-lit paper is the desk; dark papers would read as mud. All ink is
|
|
43
|
+
dark in both modes for the same reason, so `--foreground` is never painted on the wood. */
|
|
44
|
+
:root[data-mode="light"] {
|
|
45
|
+
--bg: #8a6845;
|
|
46
|
+
--fg: #33260f;
|
|
47
|
+
--surface: #faf5ea;
|
|
48
|
+
--surface-fg: #33260f;
|
|
49
|
+
--border: #6b4f2c;
|
|
50
|
+
--muted: #ebdfc6;
|
|
51
|
+
--muted-fg: #74603f;
|
|
52
|
+
--primary: #a8741c;
|
|
53
|
+
--primary-fg: #fdf6e7;
|
|
54
|
+
--secondary: #efe3c8;
|
|
55
|
+
--secondary-fg: #33260f;
|
|
56
|
+
--accent: #e9d9b4;
|
|
57
|
+
--accent-fg: #33260f;
|
|
58
|
+
--destructive: #a13d2d;
|
|
59
|
+
--destructive-fg: #fff8ee;
|
|
60
|
+
--ring: #c98f2e;
|
|
61
|
+
--input: #c7ab7d;
|
|
62
|
+
--radius: 12px;
|
|
63
|
+
--shadow: rgba(48, 32, 12, 0.42);
|
|
64
|
+
}
|
|
65
|
+
:root[data-mode="dark"] {
|
|
66
|
+
--bg: #2f2311;
|
|
67
|
+
--fg: #2e2113;
|
|
68
|
+
--surface: #f0e6cf;
|
|
69
|
+
--surface-fg: #2e2113;
|
|
70
|
+
--border: #7a5a30;
|
|
71
|
+
--muted: #e2d5b8;
|
|
72
|
+
--muted-fg: #5f4d30;
|
|
73
|
+
--primary: #a8741c;
|
|
74
|
+
--primary-fg: #fdf6e7;
|
|
75
|
+
--secondary: #e6d9b6;
|
|
76
|
+
--secondary-fg: #2e2113;
|
|
77
|
+
--accent: #dfcf9f;
|
|
78
|
+
--accent-fg: #2e2113;
|
|
79
|
+
--destructive: #b04938;
|
|
80
|
+
--destructive-fg: #fff3ec;
|
|
81
|
+
--ring: #d9a643;
|
|
82
|
+
--input: #e2d3ae;
|
|
83
|
+
--radius: 12px;
|
|
84
|
+
--shadow: rgba(8, 5, 1, 0.6);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<!-- generated by scripts/gen/skill — do not edit -->
|
|
2
|
+
|
|
3
|
+
# Editorial
|
|
4
|
+
|
|
5
|
+
Also known as `编辑排版` (sample product copy).
|
|
6
|
+
|
|
7
|
+
id: `editorial` · grammar: `prose-measure`
|
|
8
|
+
|
|
9
|
+
**When:** Weekly digest, insights, runbook, help. Type hierarchy, hairline rules, almost no cards.
|
|
10
|
+
|
|
11
|
+
**Not:** Monitor walls, dense tables.
|
|
12
|
+
|
|
13
|
+
**How to copy it:** Paper and ink are the identity: under the default palette this look is just text on white and reads unfinished, so it ships a theme.css (newsprint + vermilion by day, cool night-reading stock + ultramarine by night). Keep the measure near 65ch, use hairlines (`border` / `Separator`) instead of cards, one accent only for links and emphasis, `font-serif` for display, and `first-letter:` for a drop cap. Radius stays small — this look is type and rules, not tiles.
|
|
14
|
+
|
|
15
|
+
## Classes (copy literals)
|
|
16
|
+
|
|
17
|
+
- `root`: `mx-auto max-w-2xl px-6 py-8`
|
|
18
|
+
- `kicker`: `text-xs tracking-[0.2em] uppercase text-muted-foreground`
|
|
19
|
+
- `display`: `font-serif text-3xl font-bold tracking-tight`
|
|
20
|
+
|
|
21
|
+
## Palette (optional `theme.css` in the app dir)
|
|
22
|
+
|
|
23
|
+
This look's identity depends on hue, so it ships a palette. Writing it to `theme.css`
|
|
24
|
+
makes the app use it by default (ThemePop lists it as the row tagged **`本应用`**); the user can still
|
|
25
|
+
pick a host palette. Omit the file to follow the host palette instead.
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
/* name: 编辑排版 */
|
|
29
|
+
/* Look-owned palette: paper and ink are the identity — under the default kit palette the
|
|
30
|
+
page is just text and reads as "unfinished". Light is newsprint with vermilion (E1),
|
|
31
|
+
dark is cool night-reading stock with ultramarine (E2). Radius is small: this look is
|
|
32
|
+
rules and type, not cards. */
|
|
33
|
+
:root[data-mode="light"] {
|
|
34
|
+
--bg: #f6f2e9;
|
|
35
|
+
--fg: #1c1a16;
|
|
36
|
+
--surface: #fffdf7;
|
|
37
|
+
--surface-fg: #1c1a16;
|
|
38
|
+
--border: #e0d9c9;
|
|
39
|
+
--muted: #ece5d6;
|
|
40
|
+
--muted-fg: #6d675c;
|
|
41
|
+
--primary: #c0402a;
|
|
42
|
+
--primary-fg: #fff8f5;
|
|
43
|
+
--secondary: #efe8da;
|
|
44
|
+
--secondary-fg: #1c1a16;
|
|
45
|
+
--accent: #f1e9d9;
|
|
46
|
+
--accent-fg: #1c1a16;
|
|
47
|
+
--destructive: #8f2d22;
|
|
48
|
+
--destructive-fg: #fff4f1;
|
|
49
|
+
--ring: #c0402a;
|
|
50
|
+
--input: #d9d2c2;
|
|
51
|
+
--radius: 6px;
|
|
52
|
+
--shadow: rgba(60, 50, 30, 0.18);
|
|
53
|
+
}
|
|
54
|
+
:root[data-mode="dark"] {
|
|
55
|
+
--bg: #14161a;
|
|
56
|
+
--fg: #e8eaee;
|
|
57
|
+
--surface: #191c22;
|
|
58
|
+
--surface-fg: #e8eaee;
|
|
59
|
+
--border: #262a31;
|
|
60
|
+
--muted: #1d2128;
|
|
61
|
+
--muted-fg: #9aa0aa;
|
|
62
|
+
--primary: #7f95f5;
|
|
63
|
+
--primary-fg: #0f1216;
|
|
64
|
+
--secondary: #1d2128;
|
|
65
|
+
--secondary-fg: #e8eaee;
|
|
66
|
+
--accent: #1a2030;
|
|
67
|
+
--accent-fg: #e8eaee;
|
|
68
|
+
--destructive: #ff6b63;
|
|
69
|
+
--destructive-fg: #14060a;
|
|
70
|
+
--ring: #7f95f5;
|
|
71
|
+
--input: #2a2d31;
|
|
72
|
+
--radius: 6px;
|
|
73
|
+
--shadow: rgba(0, 0, 0, 0.5);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Tokens only — no hex in `ui.tsx`. Light and dark must both read. Optional `data-look` on a root is a recipe, not a platform attribute.
|