even-toolkit 0.4.0 → 1.0.0
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 +113 -71
- package/dist/glasses/action-bar.d.ts.map +1 -0
- package/dist/glasses/action-bar.js.map +1 -0
- package/dist/glasses/action-map.d.ts.map +1 -0
- package/dist/glasses/action-map.js.map +1 -0
- package/dist/{bridge.d.ts → glasses/bridge.d.ts} +16 -2
- package/dist/glasses/bridge.d.ts.map +1 -0
- package/dist/{bridge.js → glasses/bridge.js} +14 -13
- package/dist/glasses/bridge.js.map +1 -0
- package/dist/glasses/canvas-renderer.d.ts.map +1 -0
- package/dist/glasses/canvas-renderer.js.map +1 -0
- package/dist/glasses/composer.d.ts.map +1 -0
- package/dist/glasses/composer.js.map +1 -0
- package/dist/glasses/gestures.d.ts.map +1 -0
- package/dist/glasses/gestures.js.map +1 -0
- package/dist/{index.d.ts → glasses/index.d.ts} +2 -0
- package/dist/glasses/index.d.ts.map +1 -0
- package/dist/{index.js → glasses/index.js} +2 -0
- package/dist/glasses/index.js.map +1 -0
- package/dist/glasses/keep-alive.d.ts.map +1 -0
- package/dist/glasses/keep-alive.js.map +1 -0
- package/dist/glasses/keyboard.d.ts.map +1 -0
- package/dist/glasses/keyboard.js.map +1 -0
- package/dist/glasses/layout.d.ts.map +1 -0
- package/dist/glasses/layout.js.map +1 -0
- package/dist/glasses/paginate-text.d.ts +41 -0
- package/dist/glasses/paginate-text.d.ts.map +1 -0
- package/dist/glasses/paginate-text.js +83 -0
- package/dist/glasses/paginate-text.js.map +1 -0
- package/dist/glasses/png-utils.d.ts.map +1 -0
- package/dist/glasses/png-utils.js.map +1 -0
- package/dist/{splash.d.ts → glasses/splash.d.ts} +25 -3
- package/dist/glasses/splash.d.ts.map +1 -0
- package/dist/{splash.js → glasses/splash.js} +38 -8
- package/dist/glasses/splash.js.map +1 -0
- package/dist/glasses/text-clean.d.ts +22 -0
- package/dist/glasses/text-clean.d.ts.map +1 -0
- package/dist/glasses/text-clean.js +35 -0
- package/dist/glasses/text-clean.js.map +1 -0
- package/dist/glasses/text-utils.d.ts.map +1 -0
- package/dist/glasses/text-utils.js.map +1 -0
- package/dist/glasses/timer-display.d.ts.map +1 -0
- package/dist/glasses/timer-display.js.map +1 -0
- package/dist/glasses/types.d.ts.map +1 -0
- package/dist/glasses/types.js.map +1 -0
- package/dist/glasses/useFlashPhase.d.ts.map +1 -0
- package/dist/glasses/useFlashPhase.js.map +1 -0
- package/dist/{useGlasses.d.ts → glasses/useGlasses.d.ts} +4 -0
- package/dist/glasses/useGlasses.d.ts.map +1 -0
- package/dist/{useGlasses.js → glasses/useGlasses.js} +32 -36
- package/dist/glasses/useGlasses.js.map +1 -0
- package/dist/web/components/app-shell.d.ts +15 -0
- package/dist/web/components/app-shell.d.ts.map +1 -0
- package/dist/web/components/app-shell.js +11 -0
- package/dist/web/components/app-shell.js.map +1 -0
- package/dist/web/components/audio-player.d.ts +9 -0
- package/dist/web/components/audio-player.d.ts.map +1 -0
- package/dist/web/components/audio-player.js +54 -0
- package/dist/web/components/audio-player.js.map +1 -0
- package/dist/web/components/badge.d.ts +11 -0
- package/dist/web/components/badge.d.ts.map +1 -0
- package/dist/web/components/badge.js +21 -0
- package/dist/web/components/badge.js.map +1 -0
- package/dist/web/components/bottom-sheet.d.ts +11 -0
- package/dist/web/components/bottom-sheet.d.ts.map +1 -0
- package/dist/web/components/bottom-sheet.js +33 -0
- package/dist/web/components/bottom-sheet.js.map +1 -0
- package/dist/web/components/button.d.ts +12 -0
- package/dist/web/components/button.d.ts.map +1 -0
- package/dist/web/components/button.js +29 -0
- package/dist/web/components/button.js.map +1 -0
- package/dist/web/components/calendar.d.ts +48 -0
- package/dist/web/components/calendar.d.ts.map +1 -0
- package/dist/web/components/calendar.js +86 -0
- package/dist/web/components/calendar.js.map +1 -0
- package/dist/web/components/card.d.ts +12 -0
- package/dist/web/components/card.d.ts.map +1 -0
- package/dist/web/components/card.js +27 -0
- package/dist/web/components/card.js.map +1 -0
- package/dist/web/components/category-filter.d.ts +10 -0
- package/dist/web/components/category-filter.d.ts.map +1 -0
- package/dist/web/components/category-filter.js +9 -0
- package/dist/web/components/category-filter.js.map +1 -0
- package/dist/web/components/chart.d.ts +65 -0
- package/dist/web/components/chart.d.ts.map +1 -0
- package/dist/web/components/chart.js +62 -0
- package/dist/web/components/chart.js.map +1 -0
- package/dist/web/components/chat.d.ts +79 -0
- package/dist/web/components/chat.d.ts.map +1 -0
- package/dist/web/components/chat.js +166 -0
- package/dist/web/components/chat.js.map +1 -0
- package/dist/web/components/checkbox.d.ts +11 -0
- package/dist/web/components/checkbox.d.ts.map +1 -0
- package/dist/web/components/checkbox.js +7 -0
- package/dist/web/components/checkbox.js.map +1 -0
- package/dist/web/components/confirm-dialog.d.ts +14 -0
- package/dist/web/components/confirm-dialog.d.ts.map +1 -0
- package/dist/web/components/confirm-dialog.js +37 -0
- package/dist/web/components/confirm-dialog.js.map +1 -0
- package/dist/web/components/cta-group.d.ts +16 -0
- package/dist/web/components/cta-group.d.ts.map +1 -0
- package/dist/web/components/cta-group.js +22 -0
- package/dist/web/components/cta-group.js.map +1 -0
- package/dist/web/components/dialog.d.ts +19 -0
- package/dist/web/components/dialog.d.ts.map +1 -0
- package/dist/web/components/dialog.js +35 -0
- package/dist/web/components/dialog.js.map +1 -0
- package/dist/web/components/divider.d.ts +11 -0
- package/dist/web/components/divider.d.ts.map +1 -0
- package/dist/web/components/divider.js +19 -0
- package/dist/web/components/divider.js.map +1 -0
- package/dist/web/components/empty-state.d.ts +15 -0
- package/dist/web/components/empty-state.d.ts.map +1 -0
- package/dist/web/components/empty-state.js +7 -0
- package/dist/web/components/empty-state.js.map +1 -0
- package/dist/web/components/file-upload.d.ts +12 -0
- package/dist/web/components/file-upload.d.ts.map +1 -0
- package/dist/web/components/file-upload.js +38 -0
- package/dist/web/components/file-upload.js.map +1 -0
- package/dist/web/components/image-viewer.d.ts +23 -0
- package/dist/web/components/image-viewer.d.ts.map +1 -0
- package/dist/web/components/image-viewer.js +29 -0
- package/dist/web/components/image-viewer.js.map +1 -0
- package/dist/web/components/indicator.d.ts +15 -0
- package/dist/web/components/indicator.d.ts.map +1 -0
- package/dist/web/components/indicator.js +12 -0
- package/dist/web/components/indicator.js.map +1 -0
- package/dist/web/components/input-group.d.ts +9 -0
- package/dist/web/components/input-group.d.ts.map +1 -0
- package/dist/web/components/input-group.js +27 -0
- package/dist/web/components/input-group.js.map +1 -0
- package/dist/web/components/input.d.ts +7 -0
- package/dist/web/components/input.d.ts.map +1 -0
- package/dist/web/components/input.js +7 -0
- package/dist/web/components/input.js.map +1 -0
- package/dist/web/components/kbd.d.ts +9 -0
- package/dist/web/components/kbd.d.ts.map +1 -0
- package/dist/web/components/kbd.js +7 -0
- package/dist/web/components/kbd.js.map +1 -0
- package/dist/web/components/list-item.d.ts +14 -0
- package/dist/web/components/list-item.d.ts.map +1 -0
- package/dist/web/components/list-item.js +57 -0
- package/dist/web/components/list-item.js.map +1 -0
- package/dist/web/components/loading.d.ts +8 -0
- package/dist/web/components/loading.d.ts.map +1 -0
- package/dist/web/components/loading.js +41 -0
- package/dist/web/components/loading.js.map +1 -0
- package/dist/web/components/nav-bar.d.ts +14 -0
- package/dist/web/components/nav-bar.d.ts.map +1 -0
- package/dist/web/components/nav-bar.js +9 -0
- package/dist/web/components/nav-bar.js.map +1 -0
- package/dist/web/components/nav-header.d.ts +11 -0
- package/dist/web/components/nav-header.d.ts.map +1 -0
- package/dist/web/components/nav-header.js +7 -0
- package/dist/web/components/nav-header.js.map +1 -0
- package/dist/web/components/page.d.ts +9 -0
- package/dist/web/components/page.d.ts.map +1 -0
- package/dist/web/components/page.js +7 -0
- package/dist/web/components/page.js.map +1 -0
- package/dist/web/components/pill.d.ts +9 -0
- package/dist/web/components/pill.d.ts.map +1 -0
- package/dist/web/components/pill.js +7 -0
- package/dist/web/components/pill.js.map +1 -0
- package/dist/web/components/progress.d.ts +8 -0
- package/dist/web/components/progress.d.ts.map +1 -0
- package/dist/web/components/progress.js +7 -0
- package/dist/web/components/progress.js.map +1 -0
- package/dist/web/components/radio-group.d.ts +16 -0
- package/dist/web/components/radio-group.d.ts.map +1 -0
- package/dist/web/components/radio-group.js +10 -0
- package/dist/web/components/radio-group.js.map +1 -0
- package/dist/web/components/screen-header.d.ts +11 -0
- package/dist/web/components/screen-header.d.ts.map +1 -0
- package/dist/web/components/screen-header.js +7 -0
- package/dist/web/components/screen-header.js.map +1 -0
- package/dist/web/components/scroll-picker.d.ts +66 -0
- package/dist/web/components/scroll-picker.d.ts.map +1 -0
- package/dist/web/components/scroll-picker.js +243 -0
- package/dist/web/components/scroll-picker.js.map +1 -0
- package/dist/web/components/search-bar.d.ts +9 -0
- package/dist/web/components/search-bar.d.ts.map +1 -0
- package/dist/web/components/search-bar.js +8 -0
- package/dist/web/components/search-bar.js.map +1 -0
- package/dist/web/components/section-header.d.ts +10 -0
- package/dist/web/components/section-header.d.ts.map +1 -0
- package/dist/web/components/section-header.js +7 -0
- package/dist/web/components/section-header.js.map +1 -0
- package/dist/web/components/segmented-control.d.ts +15 -0
- package/dist/web/components/segmented-control.d.ts.map +1 -0
- package/dist/web/components/segmented-control.js +9 -0
- package/dist/web/components/segmented-control.js.map +1 -0
- package/dist/web/components/select.d.ts +13 -0
- package/dist/web/components/select.d.ts.map +1 -0
- package/dist/web/components/select.js +7 -0
- package/dist/web/components/select.js.map +1 -0
- package/dist/web/components/settings-group.d.ts +10 -0
- package/dist/web/components/settings-group.d.ts.map +1 -0
- package/dist/web/components/settings-group.js +7 -0
- package/dist/web/components/settings-group.js.map +1 -0
- package/dist/web/components/skeleton.d.ts +13 -0
- package/dist/web/components/skeleton.d.ts.map +1 -0
- package/dist/web/components/skeleton.js +23 -0
- package/dist/web/components/skeleton.js.map +1 -0
- package/dist/web/components/slider.d.ts +16 -0
- package/dist/web/components/slider.d.ts.map +1 -0
- package/dist/web/components/slider.js +8 -0
- package/dist/web/components/slider.js.map +1 -0
- package/dist/web/components/stat-grid.d.ts +14 -0
- package/dist/web/components/stat-grid.d.ts.map +1 -0
- package/dist/web/components/stat-grid.js +7 -0
- package/dist/web/components/stat-grid.js.map +1 -0
- package/dist/web/components/status-dot.d.ts +8 -0
- package/dist/web/components/status-dot.d.ts.map +1 -0
- package/dist/web/components/status-dot.js +7 -0
- package/dist/web/components/status-dot.js.map +1 -0
- package/dist/web/components/status-progress.d.ts +13 -0
- package/dist/web/components/status-progress.d.ts.map +1 -0
- package/dist/web/components/status-progress.js +7 -0
- package/dist/web/components/status-progress.js.map +1 -0
- package/dist/web/components/step-indicator.d.ts +13 -0
- package/dist/web/components/step-indicator.d.ts.map +1 -0
- package/dist/web/components/step-indicator.js +10 -0
- package/dist/web/components/step-indicator.js.map +1 -0
- package/dist/web/components/table.d.ts +9 -0
- package/dist/web/components/table.d.ts.map +1 -0
- package/dist/web/components/table.js +17 -0
- package/dist/web/components/table.js.map +1 -0
- package/dist/web/components/tag.d.ts +25 -0
- package/dist/web/components/tag.d.ts.map +1 -0
- package/dist/web/components/tag.js +15 -0
- package/dist/web/components/tag.js.map +1 -0
- package/dist/web/components/textarea.d.ts +7 -0
- package/dist/web/components/textarea.d.ts.map +1 -0
- package/dist/web/components/textarea.js +7 -0
- package/dist/web/components/textarea.js.map +1 -0
- package/dist/web/components/timeline.d.ts +17 -0
- package/dist/web/components/timeline.d.ts.map +1 -0
- package/dist/web/components/timeline.js +7 -0
- package/dist/web/components/timeline.js.map +1 -0
- package/dist/web/components/timer-ring.d.ts +12 -0
- package/dist/web/components/timer-ring.d.ts.map +1 -0
- package/dist/web/components/timer-ring.js +15 -0
- package/dist/web/components/timer-ring.js.map +1 -0
- package/dist/web/components/toast.d.ts +14 -0
- package/dist/web/components/toast.d.ts.map +1 -0
- package/dist/web/components/toast.js +21 -0
- package/dist/web/components/toast.js.map +1 -0
- package/dist/web/components/toggle.d.ts +10 -0
- package/dist/web/components/toggle.d.ts.map +1 -0
- package/dist/web/components/toggle.js +21 -0
- package/dist/web/components/toggle.js.map +1 -0
- package/dist/web/components/voice-input.d.ts +17 -0
- package/dist/web/components/voice-input.d.ts.map +1 -0
- package/dist/web/components/voice-input.js +60 -0
- package/dist/web/components/voice-input.js.map +1 -0
- package/dist/web/icons/index.d.ts +29 -0
- package/dist/web/icons/index.d.ts.map +1 -0
- package/dist/web/icons/index.js +47 -0
- package/dist/web/icons/index.js.map +1 -0
- package/dist/web/icons/svg-catalog.d.ts +7 -0
- package/dist/web/icons/svg-catalog.d.ts.map +1 -0
- package/dist/web/icons/svg-catalog.js +1389 -0
- package/dist/web/icons/svg-catalog.js.map +1 -0
- package/dist/web/icons/svg-icons.d.ts +207 -0
- package/dist/web/icons/svg-icons.d.ts.map +1 -0
- package/dist/web/icons/svg-icons.js +398 -0
- package/dist/web/icons/svg-icons.js.map +1 -0
- package/dist/web/index.d.ts +107 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +69 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/utils/cn.d.ts +3 -0
- package/dist/web/utils/cn.d.ts.map +1 -0
- package/dist/web/utils/cn.js +6 -0
- package/dist/web/utils/cn.js.map +1 -0
- package/package.json +299 -44
- package/web/components/app-shell.tsx +29 -0
- package/web/components/audio-player.tsx +117 -0
- package/web/components/badge.tsx +39 -0
- package/web/components/bottom-sheet.tsx +61 -0
- package/web/components/button.tsx +48 -0
- package/web/components/calendar.tsx +333 -0
- package/web/components/card.tsx +42 -0
- package/web/components/category-filter.tsx +33 -0
- package/web/components/chart.tsx +411 -0
- package/web/components/chat.tsx +494 -0
- package/web/components/checkbox.tsx +52 -0
- package/web/components/confirm-dialog.tsx +100 -0
- package/web/components/cta-group.tsx +85 -0
- package/web/components/dialog.tsx +94 -0
- package/web/components/divider.tsx +25 -0
- package/web/components/empty-state.tsx +32 -0
- package/web/components/file-upload.tsx +100 -0
- package/web/components/image-viewer.tsx +131 -0
- package/web/components/indicator.tsx +50 -0
- package/web/components/input-group.tsx +39 -0
- package/web/components/input.tsx +23 -0
- package/web/components/kbd.tsx +22 -0
- package/web/components/list-item.tsx +106 -0
- package/web/components/loading.tsx +79 -0
- package/web/components/nav-bar.tsx +43 -0
- package/web/components/nav-header.tsx +24 -0
- package/web/components/page.tsx +14 -0
- package/web/components/pill.tsx +32 -0
- package/web/components/progress.tsx +26 -0
- package/web/components/radio-group.tsx +59 -0
- package/web/components/screen-header.tsx +26 -0
- package/web/components/scroll-picker.tsx +508 -0
- package/web/components/search-bar.tsx +28 -0
- package/web/components/section-header.tsx +20 -0
- package/web/components/segmented-control.tsx +50 -0
- package/web/components/select.tsx +37 -0
- package/web/components/settings-group.tsx +22 -0
- package/web/components/skeleton.tsx +36 -0
- package/web/components/slider.tsx +69 -0
- package/web/components/stat-grid.tsx +40 -0
- package/web/components/status-dot.tsx +21 -0
- package/web/components/status-progress.tsx +56 -0
- package/web/components/step-indicator.tsx +52 -0
- package/web/components/table.tsx +70 -0
- package/web/components/tag.tsx +72 -0
- package/web/components/textarea.tsx +23 -0
- package/web/components/timeline.tsx +52 -0
- package/web/components/timer-ring.tsx +69 -0
- package/web/components/toast.tsx +38 -0
- package/web/components/toggle.tsx +58 -0
- package/web/components/voice-input.tsx +165 -0
- package/web/icons/README.md +38 -0
- package/web/icons/index.ts +61 -0
- package/web/icons/svg/edit-add.svg +13 -0
- package/web/icons/svg/edit-checklist.svg +3 -0
- package/web/icons/svg/edit-copy.svg +12 -0
- package/web/icons/svg/edit-cross-small.svg +10 -0
- package/web/icons/svg/edit-cross.svg +10 -0
- package/web/icons/svg/edit-cut.svg +10 -0
- package/web/icons/svg/edit-display-adj.svg +3 -0
- package/web/icons/svg/edit-dist-adj.svg +3 -0
- package/web/icons/svg/edit-dot-lists.svg +3 -0
- package/web/icons/svg/edit-edit.svg +3 -0
- package/web/icons/svg/edit-hight-adj.svg +3 -0
- package/web/icons/svg/edit-import.svg +10 -0
- package/web/icons/svg/edit-layout-settings.svg +10 -0
- package/web/icons/svg/edit-multi-selection.svg +10 -0
- package/web/icons/svg/edit-new.svg +3 -0
- package/web/icons/svg/edit-number-list.svg +3 -0
- package/web/icons/svg/edit-options.svg +10 -0
- package/web/icons/svg/edit-paste.svg +10 -0
- package/web/icons/svg/edit-pause.svg +10 -0
- package/web/icons/svg/edit-pin.svg +10 -0
- package/web/icons/svg/edit-play.svg +10 -0
- package/web/icons/svg/edit-redo.svg +10 -0
- package/web/icons/svg/edit-restore.svg +10 -0
- package/web/icons/svg/edit-settings.svg +3 -0
- package/web/icons/svg/edit-share.svg +3 -0
- package/web/icons/svg/edit-sweep.svg +10 -0
- package/web/icons/svg/edit-switch.svg +3 -0
- package/web/icons/svg/edit-trash.svg +10 -0
- package/web/icons/svg/edit-undo.svg +10 -0
- package/web/icons/svg/edit-unpin.svg +3 -0
- package/web/icons/svg/edit-upload-to-cloud.svg +3 -0
- package/web/icons/svg/edit-width.svg +3 -0
- package/web/icons/svg/feat-access-control.svg +10 -0
- package/web/icons/svg/feat-account.svg +10 -0
- package/web/icons/svg/feat-calendar.svg +3 -0
- package/web/icons/svg/feat-camera.svg +3 -0
- package/web/icons/svg/feat-direct-push.svg +3 -0
- package/web/icons/svg/feat-eis.svg +10 -0
- package/web/icons/svg/feat-email.svg +10 -0
- package/web/icons/svg/feat-even-ai.svg +3 -0
- package/web/icons/svg/feat-facial-scan.svg +3 -0
- package/web/icons/svg/feat-feedback.svg +3 -0
- package/web/icons/svg/feat-headup-angle.svg +10 -0
- package/web/icons/svg/feat-inbox.svg +10 -0
- package/web/icons/svg/feat-interface-settings.svg +3 -0
- package/web/icons/svg/feat-languages.svg +10 -0
- package/web/icons/svg/feat-learn-explore.svg +3 -0
- package/web/icons/svg/feat-menu.svg +3 -0
- package/web/icons/svg/feat-message.svg +10 -0
- package/web/icons/svg/feat-navigate.svg +10 -0
- package/web/icons/svg/feat-news.svg +10 -0
- package/web/icons/svg/feat-notification.svg +10 -0
- package/web/icons/svg/feat-personal-info.svg +10 -0
- package/web/icons/svg/feat-phone-call.svg +10 -0
- package/web/icons/svg/feat-phone-voice-input.svg +3 -0
- package/web/icons/svg/feat-privacy.svg +3 -0
- package/web/icons/svg/feat-qr-code.svg +3 -0
- package/web/icons/svg/feat-quick-note.svg +3 -0
- package/web/icons/svg/feat-scan.svg +3 -0
- package/web/icons/svg/feat-screen-off.svg +16 -0
- package/web/icons/svg/feat-services.svg +3 -0
- package/web/icons/svg/feat-stocks.svg +10 -0
- package/web/icons/svg/feat-study.svg +10 -0
- package/web/icons/svg/feat-teleprompt.svg +3 -0
- package/web/icons/svg/feat-theme.svg +10 -0
- package/web/icons/svg/feat-time-counting.svg +10 -0
- package/web/icons/svg/feat-transcribe.svg +3 -0
- package/web/icons/svg/feat-translate.svg +3 -0
- package/web/icons/svg/feat-voice-print.svg +10 -0
- package/web/icons/svg/feat-wear-detect.svg +3 -0
- package/web/icons/svg/feat-weather.svg +10 -0
- package/web/icons/svg/feat-wiki.svg +3 -0
- package/web/icons/svg/guide-back.svg +10 -0
- package/web/icons/svg/guide-chevron-drill-back.svg +10 -0
- package/web/icons/svg/guide-chevron-drill-down.svg +10 -0
- package/web/icons/svg/guide-chevron-drill-up.svg +10 -0
- package/web/icons/svg/guide-chevron-small-back.svg +10 -0
- package/web/icons/svg/guide-chevron-small-drill-back.svg +3 -0
- package/web/icons/svg/guide-chevron-small-drill-down.svg +10 -0
- package/web/icons/svg/guide-chevron-small-drill-in.svg +3 -0
- package/web/icons/svg/guide-chevron-small-drill-up.svg +10 -0
- package/web/icons/svg/guide-double-tap.svg +3 -0
- package/web/icons/svg/guide-go.svg +10 -0
- package/web/icons/svg/guide-long-press.svg +3 -0
- package/web/icons/svg/guide-maximize-card.svg +10 -0
- package/web/icons/svg/guide-maximize.svg +10 -0
- package/web/icons/svg/guide-minimize-card.svg +10 -0
- package/web/icons/svg/guide-minimize.svg +3 -0
- package/web/icons/svg/guide-search.svg +3 -0
- package/web/icons/svg/guide-shift-to-top.svg +10 -0
- package/web/icons/svg/guide-single-tap.svg +3 -0
- package/web/icons/svg/guide-swip.svg +3 -0
- package/web/icons/svg/health-HRV.svg +3 -0
- package/web/icons/svg/health-heart-rate.svg +3 -0
- package/web/icons/svg/health-lift-2.svg +3 -0
- package/web/icons/svg/health-lift-3.svg +3 -0
- package/web/icons/svg/health-lift.svg +3 -0
- package/web/icons/svg/health-run.svg +3 -0
- package/web/icons/svg/health-sleep.svg +10 -0
- package/web/icons/svg/health-spo2.svg +7 -0
- package/web/icons/svg/health-stand.svg +3 -0
- package/web/icons/svg/health-steps.svg +10 -0
- package/web/icons/svg/health-temperature.svg +3 -0
- package/web/icons/svg/health-walk.svg +3 -0
- package/web/icons/svg/menu-even-hub-highlighted.svg +10 -0
- package/web/icons/svg/menu-even-hub.svg +10 -0
- package/web/icons/svg/menu-gear-highlighted.svg +10 -0
- package/web/icons/svg/menu-gear.svg +10 -0
- package/web/icons/svg/menu-healt-highlighted.svg +10 -0
- package/web/icons/svg/menu-healt.svg +10 -0
- package/web/icons/svg/menu-home-highlighted.svg +10 -0
- package/web/icons/svg/menu-home.svg +10 -0
- package/web/icons/svg/nav-bicycle.svg +10 -0
- package/web/icons/svg/nav-bus.svg +10 -0
- package/web/icons/svg/nav-business.svg +10 -0
- package/web/icons/svg/nav-cloth-shop.svg +10 -0
- package/web/icons/svg/nav-coffee-shop.svg +10 -0
- package/web/icons/svg/nav-compass.svg +3 -0
- package/web/icons/svg/nav-crown.svg +3 -0
- package/web/icons/svg/nav-direction.svg +10 -0
- package/web/icons/svg/nav-end-location.svg +3 -0
- package/web/icons/svg/nav-flag.svg +3 -0
- package/web/icons/svg/nav-gift.svg +3 -0
- package/web/icons/svg/nav-groceries.svg +10 -0
- package/web/icons/svg/nav-home-address.svg +10 -0
- package/web/icons/svg/nav-hotel.svg +10 -0
- package/web/icons/svg/nav-location.svg +3 -0
- package/web/icons/svg/nav-office-address.svg +10 -0
- package/web/icons/svg/nav-relocate.svg +10 -0
- package/web/icons/svg/nav-restaurant.svg +10 -0
- package/web/icons/svg/nav-shopping.svg +3 -0
- package/web/icons/svg/nav-train.svg +10 -0
- package/web/icons/svg/nav-walk.svg +3 -0
- package/web/icons/svg/nav-zoom-in.svg +3 -0
- package/web/icons/svg/nav-zoom-out.svg +3 -0
- package/web/icons/svg/status-alert.svg +5 -0
- package/web/icons/svg/status-archived-file.svg +3 -0
- package/web/icons/svg/status-bad-pressed.svg +23 -0
- package/web/icons/svg/status-bad.svg +20 -0
- package/web/icons/svg/status-battery-50.svg +10 -0
- package/web/icons/svg/status-battery-75.svg +10 -0
- package/web/icons/svg/status-battery-dying.svg +15 -0
- package/web/icons/svg/status-battery-full.svg +10 -0
- package/web/icons/svg/status-battery-low.svg +10 -0
- package/web/icons/svg/status-bluetooth-disconnected.svg +3 -0
- package/web/icons/svg/status-bluetooth.svg +10 -0
- package/web/icons/svg/status-brightness-auto.svg +3 -0
- package/web/icons/svg/status-brightness.svg +3 -0
- package/web/icons/svg/status-case-battery.svg +3 -0
- package/web/icons/svg/status-case-charging.svg +14 -0
- package/web/icons/svg/status-case.svg +3 -0
- package/web/icons/svg/status-checkbox.svg +3 -0
- package/web/icons/svg/status-checkmark.svg +3 -0
- package/web/icons/svg/status-clickbox.svg +3 -0
- package/web/icons/svg/status-complete.svg +10 -0
- package/web/icons/svg/status-disconnected.svg +10 -0
- package/web/icons/svg/status-display-adj-off.svg +11 -0
- package/web/icons/svg/status-dot.svg +10 -0
- package/web/icons/svg/status-eye-closed.svg +3 -0
- package/web/icons/svg/status-eye-open.svg +3 -0
- package/web/icons/svg/status-faqs.svg +10 -0
- package/web/icons/svg/status-fast.svg +3 -0
- package/web/icons/svg/status-fav.svg +29 -0
- package/web/icons/svg/status-file.svg +10 -0
- package/web/icons/svg/status-first-floor.svg +3 -0
- package/web/icons/svg/status-glasses-battery.svg +3 -0
- package/web/icons/svg/status-glasses-charging.svg +17 -0
- package/web/icons/svg/status-glasses.svg +3 -0
- package/web/icons/svg/status-good-pressed.svg +29 -0
- package/web/icons/svg/status-good.svg +20 -0
- package/web/icons/svg/status-grabber.svg +10 -0
- package/web/icons/svg/status-head-up.svg +3 -0
- package/web/icons/svg/status-hint.svg +14 -0
- package/web/icons/svg/status-info.svg +10 -0
- package/web/icons/svg/status-login.svg +10 -0
- package/web/icons/svg/status-logout.svg +10 -0
- package/web/icons/svg/status-more.svg +3 -0
- package/web/icons/svg/status-network-error.svg +3 -0
- package/web/icons/svg/status-reset.svg +3 -0
- package/web/icons/svg/status-saved.svg +10 -0
- package/web/icons/svg/status-second-floor.svg +3 -0
- package/web/icons/svg/status-sele.svg +3 -0
- package/web/icons/svg/status-selected-box.svg +3 -0
- package/web/icons/svg/status-selected.svg +3 -0
- package/web/icons/svg/status-slow.svg +3 -0
- package/web/icons/svg/status-speaker-off.svg +3 -0
- package/web/icons/svg/status-speaker-on.svg +3 -0
- package/web/icons/svg/status-text-sizing.svg +3 -0
- package/web/icons/svg/status-unbind.svg +10 -0
- package/web/icons/svg/status-undisturb.svg +10 -0
- package/web/icons/svg/status-unfav.svg +3 -0
- package/web/icons/svg-catalog.ts +1390 -0
- package/web/icons/svg-icons.tsx +2166 -0
- package/web/index.ts +172 -0
- package/web/theme/tokens-dark.css +46 -0
- package/web/theme/tokens-light.css +46 -0
- package/web/theme/typography.css +57 -0
- package/web/theme/utilities.css +46 -0
- package/web/utils/cn.ts +6 -0
- package/dist/action-bar.d.ts.map +0 -1
- package/dist/action-bar.js.map +0 -1
- package/dist/action-map.d.ts.map +0 -1
- package/dist/action-map.js.map +0 -1
- package/dist/bridge.d.ts.map +0 -1
- package/dist/bridge.js.map +0 -1
- package/dist/canvas-renderer.d.ts.map +0 -1
- package/dist/canvas-renderer.js.map +0 -1
- package/dist/composer.d.ts.map +0 -1
- package/dist/composer.js.map +0 -1
- package/dist/gestures.d.ts.map +0 -1
- package/dist/gestures.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/keep-alive.d.ts.map +0 -1
- package/dist/keep-alive.js.map +0 -1
- package/dist/keyboard.d.ts.map +0 -1
- package/dist/keyboard.js.map +0 -1
- package/dist/layout.d.ts.map +0 -1
- package/dist/layout.js.map +0 -1
- package/dist/png-utils.d.ts.map +0 -1
- package/dist/png-utils.js.map +0 -1
- package/dist/splash.d.ts.map +0 -1
- package/dist/splash.js.map +0 -1
- package/dist/text-utils.d.ts.map +0 -1
- package/dist/text-utils.js.map +0 -1
- package/dist/timer-display.d.ts.map +0 -1
- package/dist/timer-display.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/useFlashPhase.d.ts.map +0 -1
- package/dist/useFlashPhase.js.map +0 -1
- package/dist/useGlasses.d.ts.map +0 -1
- package/dist/useGlasses.js.map +0 -1
- /package/dist/{action-bar.d.ts → glasses/action-bar.d.ts} +0 -0
- /package/dist/{action-bar.js → glasses/action-bar.js} +0 -0
- /package/dist/{action-map.d.ts → glasses/action-map.d.ts} +0 -0
- /package/dist/{action-map.js → glasses/action-map.js} +0 -0
- /package/dist/{canvas-renderer.d.ts → glasses/canvas-renderer.d.ts} +0 -0
- /package/dist/{canvas-renderer.js → glasses/canvas-renderer.js} +0 -0
- /package/dist/{composer.d.ts → glasses/composer.d.ts} +0 -0
- /package/dist/{composer.js → glasses/composer.js} +0 -0
- /package/dist/{gestures.d.ts → glasses/gestures.d.ts} +0 -0
- /package/dist/{gestures.js → glasses/gestures.js} +0 -0
- /package/dist/{keep-alive.d.ts → glasses/keep-alive.d.ts} +0 -0
- /package/dist/{keep-alive.js → glasses/keep-alive.js} +0 -0
- /package/dist/{keyboard.d.ts → glasses/keyboard.d.ts} +0 -0
- /package/dist/{keyboard.js → glasses/keyboard.js} +0 -0
- /package/dist/{layout.d.ts → glasses/layout.d.ts} +0 -0
- /package/dist/{layout.js → glasses/layout.js} +0 -0
- /package/dist/{png-utils.d.ts → glasses/png-utils.d.ts} +0 -0
- /package/dist/{png-utils.js → glasses/png-utils.js} +0 -0
- /package/dist/{text-utils.d.ts → glasses/text-utils.d.ts} +0 -0
- /package/dist/{text-utils.js → glasses/text-utils.js} +0 -0
- /package/dist/{timer-display.d.ts → glasses/timer-display.d.ts} +0 -0
- /package/dist/{timer-display.js → glasses/timer-display.js} +0 -0
- /package/dist/{types.d.ts → glasses/types.d.ts} +0 -0
- /package/dist/{types.js → glasses/types.js} +0 -0
- /package/dist/{useFlashPhase.d.ts → glasses/useFlashPhase.d.ts} +0 -0
- /package/dist/{useFlashPhase.js → glasses/useFlashPhase.js} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
function BottomSheet({ open, onClose, children, className }) {
|
|
5
|
+
const [visible, setVisible] = React.useState(false);
|
|
6
|
+
const [closing, setClosing] = React.useState(false);
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
if (open) {
|
|
9
|
+
setVisible(true);
|
|
10
|
+
setClosing(false);
|
|
11
|
+
}
|
|
12
|
+
else if (visible) {
|
|
13
|
+
setClosing(true);
|
|
14
|
+
const timer = setTimeout(() => { setVisible(false); setClosing(false); }, 200);
|
|
15
|
+
return () => clearTimeout(timer);
|
|
16
|
+
}
|
|
17
|
+
}, [open]);
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
if (!visible)
|
|
20
|
+
return;
|
|
21
|
+
const handler = (e) => {
|
|
22
|
+
if (e.key === 'Escape')
|
|
23
|
+
onClose();
|
|
24
|
+
};
|
|
25
|
+
document.addEventListener('keydown', handler);
|
|
26
|
+
return () => document.removeEventListener('keydown', handler);
|
|
27
|
+
}, [visible, onClose]);
|
|
28
|
+
if (!visible)
|
|
29
|
+
return null;
|
|
30
|
+
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-end justify-center", style: { animation: closing ? 'fadeOut 200ms ease forwards' : 'fadeIn 200ms ease' }, children: [_jsx("div", { className: "absolute inset-0 bg-overlay", onClick: onClose }), _jsxs("div", { className: cn('relative z-10 w-full max-w-[393px] bg-bg rounded-t-[6px] shadow-[0px_-4px_12px_0px_rgba(0,0,0,0.12)] pt-3', className), style: { animation: closing ? 'slideDown 200ms ease forwards' : 'slideUp 250ms ease' }, children: [children, _jsx("div", { className: "flex items-center justify-center h-[42px]", children: _jsx("div", { className: "w-[139px] h-[5px] rounded-full bg-text" }) })] })] }));
|
|
31
|
+
}
|
|
32
|
+
export { BottomSheet };
|
|
33
|
+
//# sourceMappingURL=bottom-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottom-sheet.js","sourceRoot":"","sources":["../../../web/components/bottom-sheet.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;IAC3E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/E,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,eACE,SAAS,EAAC,kDAAkD,EAC5D,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,EAAE,aAEnF,cAAK,SAAS,EAAC,6BAA6B,EAAC,OAAO,EAAE,OAAO,GAAI,EACjE,eACE,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,EAAE,aAErF,QAAQ,EACT,cAAK,SAAS,EAAC,2CAA2C,YACxD,cAAK,SAAS,EAAC,wCAAwC,GAAG,GACtD,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
declare const buttonVariants: (props?: ({
|
|
4
|
+
variant?: "highlight" | "default" | "ghost" | "danger" | "secondary" | null | undefined;
|
|
5
|
+
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
|
+
}
|
|
9
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
10
|
+
export { Button, buttonVariants };
|
|
11
|
+
export type { ButtonProps };
|
|
12
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../web/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,cAAc;;;8EAuBnB,CAAC;AAEF,UAAU,WACR,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;CAAG;AAE1C,QAAA,MAAM,MAAM,uFASX,CAAC;AAIF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../utils/cn';
|
|
5
|
+
const buttonVariants = cva('inline-flex items-center justify-center gap-4 rounded-[6px] font-normal transition-colors cursor-pointer disabled:opacity-50 disabled:pointer-events-none text-[17px] tracking-[-0.17px]', {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
highlight: 'bg-accent text-text-highlight hover:opacity-90',
|
|
9
|
+
default: 'bg-surface text-text hover:bg-surface-light',
|
|
10
|
+
ghost: 'text-text-dim hover:text-text hover:bg-surface-light',
|
|
11
|
+
danger: 'bg-surface text-negative hover:bg-surface-light',
|
|
12
|
+
secondary: 'bg-surface-light text-text-dim hover:text-text hover:bg-surface-lighter',
|
|
13
|
+
},
|
|
14
|
+
size: {
|
|
15
|
+
sm: 'h-9 px-4 text-[15px] tracking-[-0.15px]',
|
|
16
|
+
default: 'h-12 px-4',
|
|
17
|
+
lg: 'h-12 px-6',
|
|
18
|
+
icon: 'h-9 w-9 text-[15px]',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: 'highlight',
|
|
23
|
+
size: 'default',
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const Button = React.forwardRef(({ className, variant, size, type = 'button', ...props }, ref) => (_jsx("button", { ref: ref, type: type, className: cn(buttonVariants({ variant, size, className })), ...props })));
|
|
27
|
+
Button.displayName = 'Button';
|
|
28
|
+
export { Button, buttonVariants };
|
|
29
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../web/components/button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,cAAc,GAAG,GAAG,CACxB,0LAA0L,EAC1L;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,SAAS,EAAE,gDAAgD;YAC3D,OAAO,EAAE,6CAA6C;YACtD,KAAK,EAAE,sDAAsD;YAC7D,MAAM,EAAE,iDAAiD;YACzD,SAAS,EAAE,yEAAyE;SACrF;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,yCAAyC;YAC7C,OAAO,EAAE,WAAW;YACpB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAMF,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChE,iBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KACvD,KAAK,GACT,CACH,CACF,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface CalendarEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
title: string;
|
|
4
|
+
start: Date;
|
|
5
|
+
end: Date;
|
|
6
|
+
color?: string;
|
|
7
|
+
location?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
type CalendarView = 'month' | 'week' | 'day';
|
|
11
|
+
interface CalendarHeaderProps {
|
|
12
|
+
date: Date;
|
|
13
|
+
view: CalendarView;
|
|
14
|
+
onViewChange: (v: CalendarView) => void;
|
|
15
|
+
onPrev: () => void;
|
|
16
|
+
onNext: () => void;
|
|
17
|
+
onToday: () => void;
|
|
18
|
+
}
|
|
19
|
+
declare function CalendarHeader({ date, view, onViewChange, onPrev, onNext, onToday }: CalendarHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function MonthView({ date, events, onDateClick, onEventClick }: {
|
|
21
|
+
date: Date;
|
|
22
|
+
events: CalendarEvent[];
|
|
23
|
+
onDateClick?: (d: Date) => void;
|
|
24
|
+
onEventClick?: (e: CalendarEvent) => void;
|
|
25
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare function WeekView({ date, events, onEventClick }: {
|
|
27
|
+
date: Date;
|
|
28
|
+
events: CalendarEvent[];
|
|
29
|
+
onEventClick?: (e: CalendarEvent) => void;
|
|
30
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
declare function DayView({ date, events, onEventClick }: {
|
|
32
|
+
date: Date;
|
|
33
|
+
events: CalendarEvent[];
|
|
34
|
+
onEventClick?: (e: CalendarEvent) => void;
|
|
35
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
interface CalendarProps {
|
|
37
|
+
events?: CalendarEvent[];
|
|
38
|
+
view?: CalendarView;
|
|
39
|
+
onViewChange?: (v: CalendarView) => void;
|
|
40
|
+
selectedDate?: Date;
|
|
41
|
+
onDateChange?: (d: Date) => void;
|
|
42
|
+
onEventClick?: (e: CalendarEvent) => void;
|
|
43
|
+
className?: string;
|
|
44
|
+
}
|
|
45
|
+
declare function Calendar({ events, view: controlledView, onViewChange, selectedDate: controlledDate, onDateChange, onEventClick, className, }: CalendarProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
export { Calendar, CalendarHeader, MonthView, WeekView, DayView };
|
|
47
|
+
export type { CalendarProps, CalendarView };
|
|
48
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../web/components/calendar.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAqC7C,UAAU,mBAAmB;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,iBAAS,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CAoCjG;AAID,iBAAS,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;IAC9D,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAuDA;AAID,iBAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;IAChD,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAmDA;AAID,iBAAS,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;IAC/C,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAyCA;AAID,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,QAAQ,CAAC,EAChB,MAAW,EACX,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,YAAY,EAAE,cAAc,EAC5B,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,EAAE,aAAa,2CAsCf;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
// ─── Date helpers ───────────────────────────────────────────────
|
|
5
|
+
function startOfDay(d) { const r = new Date(d); r.setHours(0, 0, 0, 0); return r; }
|
|
6
|
+
function isSameDay(a, b) { return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate(); }
|
|
7
|
+
function isToday(d) { return isSameDay(d, new Date()); }
|
|
8
|
+
function addDays(d, n) { const r = new Date(d); r.setDate(r.getDate() + n); return r; }
|
|
9
|
+
function getMonthGrid(year, month) {
|
|
10
|
+
const first = new Date(year, month, 1);
|
|
11
|
+
const startDay = first.getDay(); // 0=Sun
|
|
12
|
+
const start = addDays(first, -startDay);
|
|
13
|
+
const days = [];
|
|
14
|
+
for (let i = 0; i < 42; i++)
|
|
15
|
+
days.push(addDays(start, i));
|
|
16
|
+
return days;
|
|
17
|
+
}
|
|
18
|
+
function getWeekDays(date) {
|
|
19
|
+
const day = date.getDay();
|
|
20
|
+
const start = addDays(date, -day);
|
|
21
|
+
return Array.from({ length: 7 }, (_, i) => addDays(start, i));
|
|
22
|
+
}
|
|
23
|
+
function formatMonth(d) {
|
|
24
|
+
return d.toLocaleDateString(undefined, { month: 'long', year: 'numeric' });
|
|
25
|
+
}
|
|
26
|
+
function formatTime(d) {
|
|
27
|
+
return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
|
28
|
+
}
|
|
29
|
+
const DAY_LABELS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
30
|
+
const HOURS = Array.from({ length: 24 }, (_, i) => i);
|
|
31
|
+
function CalendarHeader({ date, view, onViewChange, onPrev, onNext, onToday }) {
|
|
32
|
+
return (_jsxs("div", { className: "flex flex-col gap-2 mb-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: onPrev, className: "w-8 h-8 rounded-[6px] bg-surface-light flex items-center justify-center cursor-pointer text-text-dim hover:text-text transition-colors shrink-0", children: _jsxs("svg", { viewBox: "0 0 24 24", className: "w-4 h-4", children: [_jsx("rect", { x: 14, y: 4, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 6, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 8, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 8, y: 10, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 12, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 14, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 14, y: 16, width: 2, height: 2, fill: "currentColor" })] }) }), _jsx("button", { type: "button", onClick: onNext, className: "w-8 h-8 rounded-[6px] bg-surface-light flex items-center justify-center cursor-pointer text-text-dim hover:text-text transition-colors shrink-0", children: _jsxs("svg", { viewBox: "0 0 24 24", className: "w-4 h-4", children: [_jsx("rect", { x: 8, y: 4, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 6, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 8, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 14, y: 10, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 12, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 14, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 8, y: 16, width: 2, height: 2, fill: "currentColor" })] }) }), _jsx("span", { className: "text-[15px] tracking-[-0.15px] font-normal ml-1 truncate", children: formatMonth(date) })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: onToday, className: "h-8 px-3 rounded-[6px] bg-surface-light text-[13px] tracking-[-0.13px] text-text-dim hover:text-text cursor-pointer transition-colors shrink-0", children: "Today" }), _jsx("div", { className: "inline-flex rounded-[6px] bg-surface-lighter overflow-visible h-8", children: ['month', 'week', 'day'].map((v) => (_jsx("button", { type: "button", onClick: () => onViewChange(v), className: cn('px-3 text-[13px] tracking-[-0.13px] cursor-pointer rounded-[6px] transition-colors capitalize', view === v ? 'bg-surface text-text shadow-sm' : 'text-text-dim hover:text-text'), children: v }, v))) })] })] }));
|
|
33
|
+
}
|
|
34
|
+
// ─── MonthView ──────────────────────────────────────────────────
|
|
35
|
+
function MonthView({ date, events, onDateClick, onEventClick }) {
|
|
36
|
+
const grid = getMonthGrid(date.getFullYear(), date.getMonth());
|
|
37
|
+
const currentMonth = date.getMonth();
|
|
38
|
+
const eventsOnDay = (d) => events.filter((e) => isSameDay(new Date(e.start), d));
|
|
39
|
+
return (_jsxs("div", { children: [_jsx("div", { className: "grid grid-cols-7 mb-1", children: DAY_LABELS.map((l) => (_jsx("div", { className: "text-center text-[11px] tracking-[-0.11px] text-text-muted py-1", children: l }, l))) }), _jsx("div", { className: "grid grid-cols-7", children: grid.map((d, i) => {
|
|
40
|
+
const dayEvents = eventsOnDay(d);
|
|
41
|
+
const inMonth = d.getMonth() === currentMonth;
|
|
42
|
+
const today = isToday(d);
|
|
43
|
+
return (_jsxs("button", { type: "button", onClick: () => onDateClick?.(d), className: cn('flex flex-col items-center py-1.5 cursor-pointer rounded-[6px] transition-colors hover:bg-surface-light min-h-[48px]', !inMonth && 'opacity-40'), children: [_jsx("span", { className: cn('w-7 h-7 flex items-center justify-center rounded-full text-[13px] tracking-[-0.13px]', today && 'bg-accent text-text-highlight'), children: d.getDate() }), dayEvents.length > 0 && (_jsxs("div", { className: "flex gap-0.5 mt-0.5", children: [dayEvents.slice(0, 3).map((e) => (_jsx("span", { className: "w-1 h-1 rounded-full", style: { backgroundColor: e.color ?? 'var(--color-accent)' }, onClick: (ev) => { ev.stopPropagation(); onEventClick?.(e); } }, e.id))), dayEvents.length > 3 && (_jsxs("span", { className: "text-[9px] text-text-muted", children: ["+", dayEvents.length - 3] }))] }))] }, i));
|
|
44
|
+
}) })] }));
|
|
45
|
+
}
|
|
46
|
+
// ─── WeekView ───────────────────────────────────────────────────
|
|
47
|
+
function WeekView({ date, events, onEventClick }) {
|
|
48
|
+
const weekDays = getWeekDays(date);
|
|
49
|
+
return (_jsxs("div", { className: "overflow-y-auto max-h-[500px]", children: [_jsxs("div", { className: "grid grid-cols-[48px_repeat(7,1fr)] sticky top-0 bg-bg z-10", children: [_jsx("div", {}), weekDays.map((d, i) => (_jsxs("div", { className: "text-center py-2", children: [_jsx("div", { className: "text-[11px] tracking-[-0.11px] text-text-muted", children: DAY_LABELS[i] }), _jsx("div", { className: cn('w-7 h-7 mx-auto flex items-center justify-center rounded-full text-[13px] tracking-[-0.13px]', isToday(d) && 'bg-accent text-text-highlight'), children: d.getDate() })] }, i)))] }), HOURS.map((h) => (_jsxs("div", { className: "grid grid-cols-[48px_repeat(7,1fr)] border-t border-border/30 min-h-[40px]", children: [_jsx("div", { className: "text-[11px] tracking-[-0.11px] text-text-muted pr-2 text-right py-1", children: h === 0 ? '12 AM' : h < 12 ? `${h} AM` : h === 12 ? '12 PM' : `${h - 12} PM` }), weekDays.map((d, di) => {
|
|
50
|
+
const cellEvents = events.filter((e) => {
|
|
51
|
+
const s = new Date(e.start);
|
|
52
|
+
return isSameDay(s, d) && s.getHours() === h;
|
|
53
|
+
});
|
|
54
|
+
return (_jsx("div", { className: "border-l border-border/20 px-0.5 py-0.5", children: cellEvents.map((e) => (_jsx("button", { type: "button", onClick: () => onEventClick?.(e), className: "w-full text-left rounded-[4px] px-1 py-0.5 text-[11px] tracking-[-0.11px] truncate cursor-pointer", style: { backgroundColor: (e.color ?? 'var(--color-accent)') + '20', color: e.color ?? 'var(--color-accent)' }, children: e.title }, e.id))) }, di));
|
|
55
|
+
})] }, h)))] }));
|
|
56
|
+
}
|
|
57
|
+
// ─── DayView ────────────────────────────────────────────────────
|
|
58
|
+
function DayView({ date, events, onEventClick }) {
|
|
59
|
+
const dayEvents = events.filter((e) => isSameDay(new Date(e.start), date));
|
|
60
|
+
const now = new Date();
|
|
61
|
+
const isCurrentDay = isToday(date);
|
|
62
|
+
return (_jsxs("div", { className: "overflow-y-auto max-h-[500px]", children: [_jsx("div", { className: "text-[15px] tracking-[-0.15px] font-normal mb-3", children: date.toLocaleDateString(undefined, { weekday: 'long', month: 'long', day: 'numeric' }) }), HOURS.map((h) => {
|
|
63
|
+
const hourEvents = dayEvents.filter((e) => new Date(e.start).getHours() === h);
|
|
64
|
+
const isNow = isCurrentDay && now.getHours() === h;
|
|
65
|
+
return (_jsxs("div", { className: "flex border-t border-border/30 min-h-[48px] relative", children: [isNow && _jsx("div", { className: "absolute inset-x-0 top-0 border-t-2 border-negative z-10" }), _jsx("div", { className: "w-12 shrink-0 text-[11px] tracking-[-0.11px] text-text-muted text-right pr-2 py-1", children: h === 0 ? '12 AM' : h < 12 ? `${h} AM` : h === 12 ? '12 PM' : `${h - 12} PM` }), _jsx("div", { className: "flex-1 px-1 py-0.5", children: hourEvents.map((e) => (_jsxs("button", { type: "button", onClick: () => onEventClick?.(e), className: "w-full text-left rounded-[6px] px-3 py-2 mb-1 cursor-pointer transition-colors", style: { backgroundColor: (e.color ?? 'var(--color-accent)') + '20' }, children: [_jsx("div", { className: "text-[15px] tracking-[-0.15px]", style: { color: e.color ?? 'var(--color-accent)' }, children: e.title }), _jsxs("div", { className: "text-[11px] tracking-[-0.11px] text-text-dim", children: [formatTime(new Date(e.start)), " \u2013 ", formatTime(new Date(e.end)), e.location && ` · ${e.location}`] })] }, e.id))) })] }, h));
|
|
66
|
+
})] }));
|
|
67
|
+
}
|
|
68
|
+
function Calendar({ events = [], view: controlledView, onViewChange, selectedDate: controlledDate, onDateChange, onEventClick, className, }) {
|
|
69
|
+
const [internalView, setInternalView] = React.useState('month');
|
|
70
|
+
const [internalDate, setInternalDate] = React.useState(new Date());
|
|
71
|
+
const view = controlledView ?? internalView;
|
|
72
|
+
const date = controlledDate ?? internalDate;
|
|
73
|
+
const setView = (v) => { onViewChange ? onViewChange(v) : setInternalView(v); };
|
|
74
|
+
const setDate = (d) => { onDateChange ? onDateChange(d) : setInternalDate(d); };
|
|
75
|
+
const navigate = (dir) => {
|
|
76
|
+
if (view === 'month')
|
|
77
|
+
setDate(new Date(date.getFullYear(), date.getMonth() + dir, 1));
|
|
78
|
+
else if (view === 'week')
|
|
79
|
+
setDate(addDays(date, dir * 7));
|
|
80
|
+
else
|
|
81
|
+
setDate(addDays(date, dir));
|
|
82
|
+
};
|
|
83
|
+
return (_jsxs("div", { className: cn('', className), children: [_jsx(CalendarHeader, { date: date, view: view, onViewChange: setView, onPrev: () => navigate(-1), onNext: () => navigate(1), onToday: () => setDate(new Date()) }), view === 'month' && (_jsx(MonthView, { date: date, events: events, onDateClick: (d) => { setDate(d); setView('day'); }, onEventClick: onEventClick })), view === 'week' && _jsx(WeekView, { date: date, events: events, onEventClick: onEventClick }), view === 'day' && _jsx(DayView, { date: date, events: events, onEventClick: onEventClick })] }));
|
|
84
|
+
}
|
|
85
|
+
export { Calendar, CalendarHeader, MonthView, WeekView, DayView };
|
|
86
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../web/components/calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
declare const cardVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "elevated" | "interactive" | null | undefined;
|
|
5
|
+
padding?: "none" | "default" | "sm" | "lg" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
|
|
8
|
+
}
|
|
9
|
+
declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export { Card, cardVariants };
|
|
11
|
+
export type { CardProps };
|
|
12
|
+
//# sourceMappingURL=card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../web/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,YAAY;;;8EAkBhB,CAAC;AAEH,UAAU,SACR,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,YAAY,CAAC;CAAG;AAExC,QAAA,MAAM,IAAI,kFAQT,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../utils/cn';
|
|
5
|
+
const cardVariants = cva('rounded-[6px] bg-surface', {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: '',
|
|
9
|
+
elevated: 'shadow-lg shadow-black/12',
|
|
10
|
+
interactive: 'transition-colors hover:bg-surface-light cursor-pointer',
|
|
11
|
+
},
|
|
12
|
+
padding: {
|
|
13
|
+
none: 'p-0',
|
|
14
|
+
sm: 'p-3',
|
|
15
|
+
default: 'p-4',
|
|
16
|
+
lg: 'p-6',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: 'default',
|
|
21
|
+
padding: 'default',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
const Card = React.forwardRef(({ className, variant, padding, ...props }, ref) => (_jsx("div", { ref: ref, className: cn(cardVariants({ variant, padding, className })), ...props })));
|
|
25
|
+
Card.displayName = 'Card';
|
|
26
|
+
export { Card, cardVariants };
|
|
27
|
+
//# sourceMappingURL=card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../../web/components/card.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,EAAE;IACnD,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,2BAA2B;YACrC,WAAW,EAAE,yDAAyD;SACvE;QACD,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,KAAK;SACV;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACnB;CACF,CAAC,CAAC;AAMH,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClD,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KACxD,KAAK,GACT,CACH,CACF,CAAC;AAEF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface CategoryFilterProps {
|
|
2
|
+
categories: string[];
|
|
3
|
+
selected: string;
|
|
4
|
+
onSelect: (category: string) => void;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
declare function CategoryFilter({ categories, selected, onSelect, className }: CategoryFilterProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export { CategoryFilter };
|
|
9
|
+
export type { CategoryFilterProps };
|
|
10
|
+
//# sourceMappingURL=category-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-filter.d.ts","sourceRoot":"","sources":["../../../web/components/category-filter.tsx"],"names":[],"mappings":"AAEA,UAAU,mBAAmB;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAoBzF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../utils/cn';
|
|
3
|
+
function CategoryFilter({ categories, selected, onSelect, className }) {
|
|
4
|
+
return (_jsx("div", { className: cn('flex items-center gap-2 overflow-x-auto pb-2 scrollbar-hide', className), children: categories.map((cat) => (_jsx("button", { type: "button", onClick: () => onSelect(cat), className: cn('shrink-0 rounded-[6px] px-4 py-2 text-[15px] tracking-[-0.15px] font-normal transition-colors cursor-pointer', selected === cat
|
|
5
|
+
? 'bg-accent text-text-highlight'
|
|
6
|
+
: 'bg-surface-lighter text-text-dim hover:text-text'), children: cat }, cat))) }));
|
|
7
|
+
}
|
|
8
|
+
export { CategoryFilter };
|
|
9
|
+
//# sourceMappingURL=category-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-filter.js","sourceRoot":"","sources":["../../../web/components/category-filter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AASjC,SAAS,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAuB;IACxF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,6DAA6D,EAAE,SAAS,CAAC,YACzF,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,QAAQ,KAAK,GAAG;gBACd,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,kDAAkD,CACvD,YAEA,GAAG,IAVC,GAAG,CAWD,CACV,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
interface SparklineProps {
|
|
2
|
+
data: number[];
|
|
3
|
+
width?: number;
|
|
4
|
+
height?: number;
|
|
5
|
+
color?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
declare function Sparkline({ data, width, height, color, className }: SparklineProps): import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
interface LineChartPoint {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
label?: string;
|
|
13
|
+
}
|
|
14
|
+
interface LineChartProps {
|
|
15
|
+
data: LineChartPoint[];
|
|
16
|
+
width?: number;
|
|
17
|
+
height?: number;
|
|
18
|
+
color?: string;
|
|
19
|
+
showGrid?: boolean;
|
|
20
|
+
showLabels?: boolean;
|
|
21
|
+
showArea?: boolean;
|
|
22
|
+
animated?: boolean;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
declare function LineChart({ data, width, height, color, showGrid, showLabels, showArea, animated, className, }: LineChartProps): import("react/jsx-runtime").JSX.Element | null;
|
|
26
|
+
interface BarChartItem {
|
|
27
|
+
label: string;
|
|
28
|
+
value: number;
|
|
29
|
+
color?: string;
|
|
30
|
+
}
|
|
31
|
+
interface BarChartProps {
|
|
32
|
+
data: BarChartItem[];
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
color?: string;
|
|
36
|
+
horizontal?: boolean;
|
|
37
|
+
showLabels?: boolean;
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
declare function BarChart({ data, width, height, color, horizontal, showLabels, className, }: BarChartProps): import("react/jsx-runtime").JSX.Element | null;
|
|
41
|
+
interface PieChartItem {
|
|
42
|
+
label: string;
|
|
43
|
+
value: number;
|
|
44
|
+
color?: string;
|
|
45
|
+
}
|
|
46
|
+
interface PieChartProps {
|
|
47
|
+
data: PieChartItem[];
|
|
48
|
+
size?: number;
|
|
49
|
+
donut?: boolean;
|
|
50
|
+
centerLabel?: string;
|
|
51
|
+
className?: string;
|
|
52
|
+
}
|
|
53
|
+
declare function PieChart({ data, size, donut, centerLabel, className }: PieChartProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
interface StatCardProps {
|
|
55
|
+
label: string;
|
|
56
|
+
value: string | number;
|
|
57
|
+
change?: string;
|
|
58
|
+
trend?: 'up' | 'down' | 'neutral';
|
|
59
|
+
sparklineData?: number[];
|
|
60
|
+
className?: string;
|
|
61
|
+
}
|
|
62
|
+
declare function StatCard({ label, value, change, trend, sparklineData, className }: StatCardProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
export { Sparkline, LineChart, BarChart, PieChart, StatCard };
|
|
64
|
+
export type { SparklineProps, LineChartProps, LineChartPoint, BarChartProps, BarChartItem, PieChartProps, PieChartItem, StatCardProps };
|
|
65
|
+
//# sourceMappingURL=chart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../web/components/chart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
import { ResponsiveContainer, LineChart as RLineChart, Line, BarChart as RBarChart, Bar, PieChart as RPieChart, Pie, Cell, Tooltip, XAxis, YAxis, CartesianGrid, Area, AreaChart, } from 'recharts';
|
|
5
|
+
// ─── Colors ─────────────────────────────────────────────────────
|
|
6
|
+
const COLORS = ['#232323', '#4BB956', '#FF453A', '#FEF991', '#7B7B7B', '#E4E4E4'];
|
|
7
|
+
// ─── Custom Tooltip ─────────────────────────────────────────────
|
|
8
|
+
const CustomTooltip = ({ active, payload, label }) => {
|
|
9
|
+
if (!active || !payload?.length)
|
|
10
|
+
return null;
|
|
11
|
+
return (_jsxs("div", { className: "bg-surface rounded-[6px] shadow-[0_2px_8px_rgba(0,0,0,0.12)] px-3 py-2 text-[13px] tracking-[-0.13px]", children: [label != null && _jsx("div", { className: "text-text-dim mb-1", children: label }), payload.map((entry, i) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: entry.color } }), _jsx("span", { className: "text-text tabular-nums", children: entry.value })] }, i)))] }));
|
|
12
|
+
};
|
|
13
|
+
function Sparkline({ data, width = 80, height = 24, color, className }) {
|
|
14
|
+
if (data.length < 2)
|
|
15
|
+
return null;
|
|
16
|
+
const chartData = data.map((value, index) => ({ index, value }));
|
|
17
|
+
return (_jsx("div", { className: className, style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsx(RLineChart, { data: chartData, margin: { top: 2, right: 2, bottom: 2, left: 2 }, children: _jsx(Line, { type: "monotone", dataKey: "value", stroke: color ?? 'var(--color-accent)', strokeWidth: 1.5, dot: false, isAnimationActive: false }) }) }) }));
|
|
18
|
+
}
|
|
19
|
+
function LineChart({ data, width = 300, height = 200, color, showGrid = true, showLabels = true, showArea = false, animated = false, className, }) {
|
|
20
|
+
if (data.length < 2)
|
|
21
|
+
return null;
|
|
22
|
+
const accentColor = color ?? 'var(--color-accent)';
|
|
23
|
+
const gradientId = React.useId();
|
|
24
|
+
const chartData = data.map((d) => ({
|
|
25
|
+
x: d.x,
|
|
26
|
+
y: d.y,
|
|
27
|
+
label: d.label ?? d.x,
|
|
28
|
+
}));
|
|
29
|
+
if (showArea) {
|
|
30
|
+
return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(AreaChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: accentColor, stopOpacity: 0.2 }), _jsx("stop", { offset: "100%", stopColor: accentColor, stopOpacity: 0 })] }) }), showGrid && (_jsx(CartesianGrid, { strokeDasharray: "4 4", stroke: "var(--color-border)", strokeWidth: 0.5, vertical: false })), showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(XAxis, { hide: true }), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Area, { type: "monotone", dataKey: "y", stroke: accentColor, strokeWidth: 2, fill: `url(#${gradientId})`, dot: { r: 3, fill: accentColor, strokeWidth: 0 }, isAnimationActive: animated })] }) }) }));
|
|
31
|
+
}
|
|
32
|
+
return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RLineChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [showGrid && (_jsx(CartesianGrid, { strokeDasharray: "4 4", stroke: "var(--color-border)", strokeWidth: 0.5, vertical: false })), showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(XAxis, { hide: true }), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Line, { type: "monotone", dataKey: "y", stroke: accentColor, strokeWidth: 2, dot: { r: 3, fill: accentColor, strokeWidth: 0 }, isAnimationActive: animated })] }) }) }));
|
|
33
|
+
}
|
|
34
|
+
function BarChart({ data, width = 300, height = 200, color, horizontal = false, showLabels = true, className, }) {
|
|
35
|
+
if (data.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const defaultColor = color ?? 'var(--color-accent)';
|
|
38
|
+
const hasCustomColors = data.some((d) => d.color);
|
|
39
|
+
const chartData = data.map((d) => ({
|
|
40
|
+
label: d.label,
|
|
41
|
+
value: d.value,
|
|
42
|
+
fill: d.color ?? defaultColor,
|
|
43
|
+
}));
|
|
44
|
+
if (horizontal) {
|
|
45
|
+
return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RBarChart, { data: chartData, layout: "vertical", margin: { top: 10, right: 10, bottom: 10, left: showLabels ? 40 : 10 }, children: [showLabels && (_jsx(YAxis, { dataKey: "label", type: "category", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(YAxis, { type: "category", hide: true }), showLabels && (_jsx(XAxis, { type: "number", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), !showLabels && _jsx(XAxis, { type: "number", hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Bar, { dataKey: "value", radius: [0, 4, 4, 0], isAnimationActive: false, children: hasCustomColors && chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) })] }) }) }));
|
|
46
|
+
}
|
|
47
|
+
return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RBarChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), !showLabels && _jsx(XAxis, { hide: true }), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Bar, { dataKey: "value", fill: defaultColor, radius: [4, 4, 0, 0], isAnimationActive: false, children: hasCustomColors && chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) })] }) }) }));
|
|
48
|
+
}
|
|
49
|
+
function PieChart({ data, size = 160, donut = false, centerLabel, className }) {
|
|
50
|
+
const total = data.reduce((s, d) => s + d.value, 0) || 1;
|
|
51
|
+
const chartData = data.map((d, i) => ({
|
|
52
|
+
name: d.label,
|
|
53
|
+
value: d.value,
|
|
54
|
+
fill: d.color ?? COLORS[i % COLORS.length],
|
|
55
|
+
}));
|
|
56
|
+
return (_jsxs("div", { className: cn('flex flex-col items-center gap-4', className), children: [_jsxs("div", { className: "relative", style: { width: size, height: size, maxWidth: '100%' }, children: [_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RPieChart, { children: [_jsx(Pie, { data: chartData, cx: "50%", cy: "50%", innerRadius: donut ? '55%' : 0, outerRadius: "90%", paddingAngle: 0, dataKey: "value", strokeWidth: 0, isAnimationActive: false, children: chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) })] }) }), donut && centerLabel && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: _jsx("span", { className: "text-[17px] tracking-[-0.17px] font-normal", children: centerLabel }) }))] }), _jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-xs", children: data.map((item, i) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: item.color ?? COLORS[i % COLORS.length] } }), _jsx("span", { className: "text-[13px] tracking-[-0.13px] text-text", children: item.label }), _jsx("span", { className: "text-[11px] tracking-[-0.11px] text-text-dim ml-auto tabular-nums", children: item.value })] }, i))) })] }));
|
|
57
|
+
}
|
|
58
|
+
function StatCard({ label, value, change, trend, sparklineData, className }) {
|
|
59
|
+
return (_jsxs("div", { className: cn('bg-surface rounded-[6px] p-4', className), children: [_jsx("div", { className: "text-[13px] tracking-[-0.13px] text-text-dim mb-1", children: label }), _jsxs("div", { className: "flex items-end justify-between gap-2", children: [_jsxs("div", { children: [_jsx("div", { className: "text-[24px] tracking-[-0.72px] font-normal tabular-nums", children: value }), change && (_jsxs("span", { className: cn('text-[13px] tracking-[-0.13px]', trend === 'up' && 'text-positive', trend === 'down' && 'text-negative', trend === 'neutral' && 'text-text-dim'), children: [trend === 'up' && '↑', trend === 'down' && '↓', " ", change] }))] }), sparklineData && sparklineData.length > 1 && (_jsx(Sparkline, { data: sparklineData, width: 64, height: 24, color: trend === 'up' ? 'var(--color-positive)' : trend === 'down' ? 'var(--color-negative)' : undefined }))] })] }));
|
|
60
|
+
}
|
|
61
|
+
export { Sparkline, LineChart, BarChart, PieChart, StatCard };
|
|
62
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../web/components/chart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface ToolCall {
|
|
3
|
+
name: string;
|
|
4
|
+
input?: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
status?: 'running' | 'complete' | 'error';
|
|
7
|
+
}
|
|
8
|
+
export interface CodeBlock {
|
|
9
|
+
language?: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ChatMessage {
|
|
13
|
+
id: string;
|
|
14
|
+
role: 'user' | 'assistant' | 'system';
|
|
15
|
+
content: string;
|
|
16
|
+
timestamp?: number;
|
|
17
|
+
thinking?: string;
|
|
18
|
+
isStreaming?: boolean;
|
|
19
|
+
toolCalls?: ToolCall[];
|
|
20
|
+
codeBlocks?: CodeBlock[];
|
|
21
|
+
diff?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
command?: string;
|
|
24
|
+
}
|
|
25
|
+
interface ChatThinkingProps {
|
|
26
|
+
content: string;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
declare function ChatThinking({ content, className }: ChatThinkingProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
interface ChatCodeBlockProps {
|
|
31
|
+
language?: string;
|
|
32
|
+
content: string;
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
declare function ChatCodeBlock({ language, content, className }: ChatCodeBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
interface ChatDiffProps {
|
|
37
|
+
content: string;
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
declare function ChatDiff({ content, className }: ChatDiffProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
interface ChatToolCallProps {
|
|
42
|
+
toolCall: ToolCall;
|
|
43
|
+
className?: string;
|
|
44
|
+
}
|
|
45
|
+
declare function ChatToolCall({ toolCall, className }: ChatToolCallProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
interface ChatCommandProps {
|
|
47
|
+
command: string;
|
|
48
|
+
output?: string;
|
|
49
|
+
className?: string;
|
|
50
|
+
}
|
|
51
|
+
declare function ChatCommand({ command, output, className }: ChatCommandProps): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
interface ChatErrorProps {
|
|
53
|
+
message: string;
|
|
54
|
+
className?: string;
|
|
55
|
+
}
|
|
56
|
+
declare function ChatError({ message, className }: ChatErrorProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
interface ChatBubbleProps {
|
|
58
|
+
message: ChatMessage;
|
|
59
|
+
className?: string;
|
|
60
|
+
}
|
|
61
|
+
declare function ChatBubble({ message, className }: ChatBubbleProps): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
interface ChatInputProps {
|
|
63
|
+
value: string;
|
|
64
|
+
onChange: (value: string) => void;
|
|
65
|
+
onSend: () => void;
|
|
66
|
+
placeholder?: string;
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
className?: string;
|
|
69
|
+
}
|
|
70
|
+
declare function ChatInput({ value, onChange, onSend, placeholder, disabled, className }: ChatInputProps): import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
interface ChatContainerProps {
|
|
72
|
+
messages: ChatMessage[];
|
|
73
|
+
input?: ReactNode;
|
|
74
|
+
className?: string;
|
|
75
|
+
}
|
|
76
|
+
declare function ChatContainer({ messages, input, className }: ChatContainerProps): import("react/jsx-runtime").JSX.Element;
|
|
77
|
+
export { ChatContainer, ChatBubble, ChatInput, ChatThinking, ChatCodeBlock, ChatDiff, ChatToolCall, ChatCommand, ChatError };
|
|
78
|
+
export type { ChatContainerProps, ChatBubbleProps, ChatInputProps };
|
|
79
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../web/components/chat.tsx"],"names":[],"mappings":"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"}
|