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
Ruslan Bakiev
82bc5dd04e
refactor(frontend): extract calendar scene into workspace component
2026-02-23 11:35:57 +07:00
Ruslan Bakiev
d5f7280297
refactor(frontend): extract pilot sidebar into workspace component
2026-02-23 11:30:49 +07:00