Commit Graph

31 Commits

Author SHA1 Message Date
46f7aff815 fix(ai-toolbar): ignore editable targets during global paste fallback 2026-04-22 23:19:18 -04:00
8cc868c22a test(ai-toolbar): verify paste listener gating at component boundary 2026-04-22 23:15:29 -04:00
9f23597e53 test(ai-toolbar): cover paste gating behavior 2026-04-22 17:58:14 -04:00
bfb29d3986 fix(ai-toolbar): gate paste capture on AI availability 2026-04-22 17:54:49 -04:00
a93d95ee2e fix(ai-toolbar): wrap masonry prompt cards correctly 2026-04-22 17:45:57 -04:00
e1a12d0c71 refactor(ai-toolbar): cluster example prompts in masonry layout 2026-04-22 17:42:29 -04:00
7b61703b01 refactor(ai-toolbar): stack attachment previews by row 2026-04-22 17:35:12 -04:00
4e4cca193c refactor(ai-toolbar): use 70-30 desktop composer split 2026-04-22 17:29:11 -04:00
7a917e5c22 feat(ui): drive mobile layouts from useIsMobile 2026-04-21 22:46:07 -04:00
a2d9782d8f refactor(ui): switch surfaces to shared shadow tokens 2026-04-21 21:43:17 -04:00
915e0b7cf8 feat: redesign
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-21 20:23:15 -04:00
12849b2362 feat: add AI settings controls 2026-04-10 15:40:29 -04:00
22224bebc6 feat: redesign local calendar workspace 2026-04-09 13:25:30 -04:00
f05e6f5792 feat: clarify AI draft messaging in toolbar 2026-04-09 11:59:45 -04:00
92f60d3a9a 📱 fix: hide keyboard shortcuts trigger on mobile 2026-04-09 00:59:15 -04:00
513aafcebc feat: support multiple image uploads for AI event generation 🖼️
- Updated OpenRouter integration to accept an array of image URLs
- Updated ImagePicker to use the `multiple` attribute natively
- Added `appendImagesDeduped` for handling client-side image deduplication
- Enhanced clipboard pasting to extract multiple images at once
- Rendered multiple images in a horizontal thumbnail strip in the AIToolbar
- Added tests to cover multi-image logic and AI request mapping
2026-04-08 20:46:43 -04:00
cac201a4d2 feat: add document-level paste and Ctrl/Cmd+V handler for image clipboard support 2026-04-08 19:58:40 -04:00
1c864f162e feat: handle image paste in AI toolbar textarea via onPaste handler 2026-04-08 19:58:36 -04:00
722c0f0f7d 🚸 feat: redesign AI toolbar with two-zone layout and HoverCard shortcuts popover
- Split composer into AI zone (primary accent) and data actions zone (neutral)
- Move Attach/Generate to labeled footer bar below textarea (left/right aligned)
- Add info icon with HoverCard (hover preview) + Popover (pinned click) showing identical keyboard shortcuts content using shadcn HoverCard to fix theme inconsistency vs Tooltip
- Expose imperative triggerRef on ImagePicker for keyboard shortcut access
- Wire TooltipProvider in root layout; install shadcn kbd and hover-card
- Unauthenticated state shows locked CTA with real sign-in button weight
- Add behavioral contract tests for footer bar, info trigger, and zone layout
2026-04-08 13:08:36 -04:00
650d1d5f95 🩹 fix: restore textarea placeholder padding in ai-toolbar
Replace px-0 py-0 override with px-3 py-1 so placeholder text is
never flush against the edge. The ::placeholder pseudo-element
inherits box padding from the textarea; zeroing it out removed all
visual breathing room for the hint text.

Also adds tests/textarea.test.ts that locks down this behaviour via
class-string assertions on the resolved cn() output.
2026-04-08 09:19:59 -04:00
0f46e9322f refactor: mobile-first AI toolbar layout 2026-04-08 01:50:06 -04:00
0807779c9b feat: make AI summary notification dismissable 2026-04-08 01:47:29 -04:00
a819cbfced fix: normalize action button icon spacing and text size 2026-04-08 01:33:33 -04:00
de6407170d fix: align component styling inconsistencies 2026-04-08 01:29:51 -04:00
8eda6c89e2 feat: replace all vanilla HTML elements with shadcn components
- Install skeleton and tooltip shadcn components
- event-dialog: textarea → Textarea, duration chips → Button ghost
- date-time-picker: raw button trigger → Button outline, quick-date chips → Button ghost
- event-card: <a> URL link → Button link asChild
- sign-in: animate-pulse div → Skeleton
- ai-toolbar: animate-pulse div → Skeleton, event count span → Badge secondary
- event-actions-toolbar: event count span → Badge secondary
2026-04-08 01:17:18 -04:00
2fc21ee929 feat(ai-toolbar): merge event actions into toolbar, add motion animations and AI summary panel
- Add event action props (events, onAddEvent, onImport, onExport, onClearAll)
- Show skeleton loading state while session is pending
- Render event action buttons (Add, Import, Export, Clear) in action bar
- Add AnimatePresence for image preview attach/remove
- Replace Card summary panel with animated glass-card panel
- Inline AI Summarize button into action bar when authenticated
- Add Sparkles icon to AI command section header
2026-04-08 00:56:58 -04:00
a7716d87df fix(components): add unoptimized image prop, overflow containment, and accessibility
Add unoptimized prop to image preview to support blob URLs, contain
overflow on preview container, replace div with semantic section
element in DragDropContainer with aria-label, and import shared
image constants.
2026-04-07 13:11:35 -04:00
5e888ce7ae feat(components): add image preview, picker, and clear controls to AIToolbar 2026-04-07 11:58:01 -04:00
fd5716f39e style(components): standardize main component file formatting 2026-04-07 08:10:05 -04:00
15be2399c6 refactor: migrate session usage to better-auth API 2026-04-06 22:41:57 -04:00
eb73f9f929 Refactor event management into reusable components
- Extract EventCard, EventsList, and event dialog into separate components
- Add new AI toolbar and drag-drop container components
- Simplify main page.tsx by removing inline component definitions
- Improve code organization and maintainability
2025-08-22 12:33:07 -04:00