Commit Graph

179 Commits

Author SHA1 Message Date
Ruslan Bakiev
638652b4d8 fix(calendar-lab): enable hover on grid cells by removing pointer-events block
Content overlay layer was intercepting mouse events (pointer-events: auto
with z-index: 5), preventing :hover from reaching the grid cells underneath.
Removed pointer-events: auto from .canvas-content-visible since the content
layer is purely visual and needs no click handling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:16:20 +07:00
Ruslan Bakiev
f553c26931 fix: add browserHttpEndpoint for client-side Apollo requests
The Apollo Client was using httpEndpoint (http://localhost:3000/api/graphql)
for browser requests, which fails on remote servers. Added browserHttpEndpoint
as relative URL "/api/graphql" so browser requests go to the correct origin.
Also added error logging to setInboxHidden mutation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:40:08 +07:00
Ruslan Bakiev
5657da13c1 feat(calendar-lab): add hover-targeted zoom with progressive tension and zoom slider
- Zoom animation now targets the hovered cell (not a fixed demo block)
- Progressive "pull" tension: cell scales 5%→10% over 2 scroll ticks
  before the full flying-rect animation triggers (400ms decay timeout)
- Added zoom slider in top-right toolbar matching production design
  (range 0-3 with dot markers, drives step-by-step zoom animations)
- Slider handles mid-drag target updates via sliderTarget variable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:36:22 +07:00
Ruslan Bakiev
947ef4d56d refactor: migrate CRM data layer from manual gqlFetch to Apollo Client
Replace custom gqlFetch() with proper Apollo useQuery/useMutation hooks
powered by codegen-generated TypedDocumentNode types. Key changes:

- Add GraphQL SDL schema file and codegen config for typescript-vue-apollo
- Replace all 28 raw .graphql imports with generated typed documents
- Add 12 useQuery() hooks with cache-and-network fetch policy
- Add 17 useMutation() hooks with surgical refetchQueries per mutation
- Optimistic cache update for setContactInboxHidden (instant archive UX)
- Fix contact list subtitle: show lastText instead of channel name
- Migrate login page from gqlFetch to useMutation
- WebSocket realtime now calls Apollo refetch instead of full data reload

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:07:35 +07:00
Ruslan Bakiev
3e711a5533 fix(calendar-lab): rewrite zoom as GSAP flying-rect with proper async sequencing
- Replace panzoom + timeline approach with clean async/await GSAP tweens
- Flying rect morphs from cell position to full viewport (aspect ratio change)
- Fix zoomOut race condition: nested gsap.to inside tl.call fired outside timeline
- Fix opacity conflict: GSAP controls all opacity, CSS class only for pointer-events
- Fix gridLayerRef losing reference on :key remount during resize
- Make viewport dimensions reactive via ResizeObserver (vpWidth/vpHeight refs)
- Wait for fade-in completion before unlocking isAnimating

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-24 09:47:45 +07:00
Ruslan Bakiev
b316b024be feat(calendar-lab): replace tldraw with two-layer panzoom canvas
Drop tldraw/React dependency in favor of @panzoom/panzoom with a
two-layer architecture: outline rectangles (borders only) are zoomed
via CSS transforms while HTML content renders at native 1:1 scale
as a fade-in overlay — eliminating blur at any zoom level.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-24 01:09:46 +07:00
Ruslan Bakiev
1db8e58da1 fix(calendar-lab): rewrite tldraw zoom as LOD — render only current level shapes
Previous implementation created all ~589 shapes (year + months + weeks + days)
at once, causing visual chaos on load and broken zoom. New approach dynamically
creates/destroys shapes per level: year shows 12 months, month shows 6 weeks,
week shows 7 days, day shows time slots. Wheel prime pattern (2 ticks) prevents
accidental zooms. Double-click resets to year view.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-24 00:52:58 +07:00
Ruslan Bakiev
6cce211c0b fix(calendar-lab): use local tldraw runtime to avoid react/cdn instance mismatch 2026-02-23 19:47:57 +07:00
Ruslan Bakiev
c5d3a90413 refactor(voice): extract chat dictation into reusable component 2026-02-23 19:43:00 +07:00
Ruslan Bakiev
c1e8f912d1 fix(communications): restore voice dictation in message composer 2026-02-23 19:34:39 +07:00
Ruslan Bakiev
ed78532260 feat(calendar-lab): use tldraw canvas engine with nested zoom rectangles 2026-02-23 19:29:52 +07:00
Ruslan Bakiev
94d8d46693 fix telegram contact identity context for in/out messages 2026-02-23 19:28:03 +07:00
Ruslan Bakiev
79f1012f41 fix(calendar-lab): restore nested calendar canvas demo on zoom route 2026-02-23 19:22:14 +07:00
Ruslan Bakiev
faea65dfcb style(communications): show call play button only on waveform hover 2026-02-23 19:21:54 +07:00
Ruslan Bakiev
bb628a7c0d feat(calendar-lab): switch demo route to tldraw canvas preview 2026-02-23 18:48:34 +07:00
Ruslan Bakiev
2e1014d726 style(communications): center play control on call waveform 2026-02-23 18:44:35 +07:00
Ruslan Bakiev
5fb8113ed7 feat(communications): add play/pause for call voice messages 2026-02-23 18:42:21 +07:00
Ruslan Bakiev
2a3d18f326 compact pilot change summary row in sidebar 2026-02-23 18:37:44 +07:00
Ruslan Bakiev
0ed2a6b353 fix(calendar-lab): stabilize center fit and wheel direction 2026-02-23 18:26:07 +07:00
Ruslan Bakiev
179cc39d53 fix(calendar-lab): center panzoom fit on selected target 2026-02-23 18:19:09 +07:00
Ruslan Bakiev
6ab3b374a2 feat(calendar-lab): switch zoom scene to panzoom engine 2026-02-23 18:12:05 +07:00
Ruslan Bakiev
49c4757490 feat(calendar-lab): switch to hierarchical grid zoom mechanics 2026-02-23 18:03:27 +07:00
Ruslan Bakiev
67a186e916 feat(calendar-lab): render content only after zoom settle 2026-02-23 17:47:58 +07:00
Ruslan Bakiev
6d5402dcc1 feat(calendar-lab): amplify nested board zoom depth 2026-02-23 17:42:19 +07:00
Ruslan Bakiev
295b3a3dda fix(frontend): use exported toast-ui entry to fix nuxt build 2026-02-23 16:04:38 +07:00
Ruslan Bakiev
94c01516ba precompute call waveforms and stop list-time audio loading 2026-02-23 16:02:57 +07:00
Ruslan Bakiev
2eb2f3109c feat(calendar): add nested zoom lab page with four persistent levels 2026-02-23 15:57:12 +07:00
Ruslan Bakiev
6bc0bfa156 fix(documents): switch markdown editor to single-pane wysiwyg 2026-02-23 15:53:29 +07:00
Ruslan Bakiev
cb2d12819c fix(calendar): stretch year months grid to full viewport height 2026-02-23 15:39:09 +07:00
Ruslan Bakiev
0bbeef5594 fix(calendar): scope zoom selectors by layer and stretch week days to full height 2026-02-23 15:32:52 +07:00
Ruslan Bakiev
df8c06d313 refactor(review): rollback-only flow and compact change summary 2026-02-23 15:28:46 +07:00
Ruslan Bakiev
f716a0ea26 feat(documents): use toast-ui markdown rich editor 2026-02-23 15:23:58 +07:00
Ruslan Bakiev
7c019a6300 fix(calendar): keep depth layers mounted in one card without display swap 2026-02-23 14:58:52 +07:00
Ruslan Bakiev
ec94dd6e2a fix(calendar): zoom selected block first, then commit level 2026-02-23 14:56:11 +07:00
Ruslan Bakiev
40a225783d feat(documents): render markdown as rich text in editor 2026-02-23 14:54:03 +07:00
Ruslan Bakiev
60b9bb9fd1 remove contact company/country/location across db and ui 2026-02-23 14:52:26 +07:00
Ruslan Bakiev
f6b738352b fix(calendar): use full available calendar viewport height on desktop 2026-02-23 14:40:59 +07:00
Ruslan Bakiev
db49c4a830 fix(calendar): make nested block zoom smooth in both directions 2026-02-23 14:33:24 +07:00
Ruslan Bakiev
6ad53e64c5 feat(documents): delete document from context menu 2026-02-23 14:27:00 +07:00
Ruslan Bakiev
68cbe7bc64 fix(chat-ui): move source settings to thread header 2026-02-23 14:24:58 +07:00
Ruslan Bakiev
a19ba07baa fix(chat-ui): align voice cards by message direction 2026-02-23 12:52:33 +07:00
Ruslan Bakiev
894210cd42 fix(calendar): remove overlay swap and keep in-place zoom flow 2026-02-23 12:50:11 +07:00
Ruslan Bakiev
d3b751db65 refactor(graphql): replace dashboard query with resource queries 2026-02-23 12:46:29 +07:00
Ruslan Bakiev
aa465f65bd feat(workspace): add hidden contacts filter and remove calendar scene swap 2026-02-23 12:38:30 +07:00
Ruslan Bakiev
f076726362 fix(communications): move source settings gear to contact row 2026-02-23 12:30:26 +07:00
Ruslan Bakiev
acd974766a feat(telegram): ingest and render inbound voice messages 2026-02-23 12:21:53 +07:00
Ruslan Bakiev
c94c229a1a fix: avoid pilot sidebar trim crash on input prop 2026-02-23 12:03:51 +07:00
Ruslan Bakiev
43960d0374 feat(auth): enforce login route with global middleware 2026-02-23 12:01:03 +07:00
Ruslan Bakiev
5918a0593d fix(workspace): guard trim calls against undefined data 2026-02-23 11:51:55 +07:00
Ruslan Bakiev
8be6e7d581 refactor(workspace): extract communications sidebars 2026-02-23 11:44:53 +07:00