Adds SessionProvider to main.tsx, creates ClientLayout with minimal top bar,
AuthCallback for magic link handling, ClientTabloPage with all 7 tabs using
tablo-views components, and ClientTabloListPage with auto-redirect for single tablo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds three React Query hooks (usePendingClientInvites, useCreateClientInvite, useCancelClientInvite) and a new Client Access section in the share dialog with email input, pending invite list, expiry countdown, and orange warning badge for invites expiring in less than 5 days.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add @xtablo/tablo-views workspace dependency to apps/main
- Update tablo-details.tsx to import from @xtablo/tablo-views and pass required props
- Remove inline EtapesSection and RoadmapSection functions (now in tablo-views)
- Update chat.tsx to import ChatMessages, useChat, useChatUnread from @xtablo/tablo-views
- Fix broken imports in DashboardTaskList, TabloOverviewSection, tablo.tsx, tasks.tsx
- Update kanban/index.ts to re-export from @xtablo/tablo-views
- Fix test files to import components from @xtablo/tablo-views
- Add is_client: false to test mock user objects
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Moves kanban, gantt, section components, chat hooks and extracted
EtapesSection/RoadmapSection from apps/main into the new shared
packages/tablo-views package. Components that previously depended on
app-specific providers (UserStoreProvider, useIsReadOnlyUser, etc.) are
refactored to receive data/callbacks as props, keeping the package free
of apps/main dependencies.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds createClientUser helper, POST/GET/DELETE /client-invites routes,
and mounts the router at /client-invites in authRouter.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace toast-only onSuccess with window.location.href redirect to
/login, which also cleanly resets all React state and caches.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Only show trash icon on tablo cards/rows when user is admin
- Comment out attachment button and file inputs in chat composer
- Remove top border from chat composer
- Add org logo to NavigationBar avatar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Normalize snake_case REST API responses to camelCase in useChat so
messages are correctly attributed after page reload
- Remove max-w-3xl from chat-ui messages and composer for full-width
- Remove discussion header/border so chat fills the tablo section
- Remove plan badge pills from settings page header
- Use org logo in NavigationBar avatar instead of first-letter fallback
- Persist plan announcement in localStorage instead of sessionStorage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a `chat` i18n namespace (FR/EN) and replace all hardcoded strings
in chat components with useTranslation calls. Introduce a `labels` prop
on ChatProvider so chat-ui renders translated typing indicators,
placeholders, and aria labels. Also filter out typing events from the
current user on the client side.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The chat REST API returns raw DB rows with snake_case fields
(user_id, created_at) while WS messages use camelCase. Handle
both to prevent Invalid Date errors from new Date(undefined).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The @import in main.css failed because ./src/chat-ui.css wasn't
in the exports field. Add explicit export and use correct path.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Import chat-ui.css via CSS @import in main.css (not JS import)
so @layer directives go through Tailwind's compilation
- Add @source directive for packages/chat-ui so Tailwind v4
scans the package for utility classes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace chatscope implementation with ChatProvider, ChatMessageList,
and ChatComposer from @xtablo/chat-ui. Props interface unchanged.
Also fix unused Tag import in chat-ui layouts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace leftover chatcn CSS variables in ticket status/priority
configs and filter tabs with xtablo design tokens.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Spec and plan for integrating chatcn as @xtablo/chat-ui package,
replacing chatscope for the chat UI rendering layer.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add shared ChatMessages component with date separators (Aujourd'hui, Hier, etc.)
- Show sender name and avatar on incoming messages
- Own messages aligned to the right, others to the left
- Show message timestamps on each message
- Typing indicator shows member names
- Optimistic messages shown with reduced opacity
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
DO RPC doesn't support WebSocket upgrade requests. Forward the request
via stub.fetch() and pass userId/channelId via custom headers.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove useSignUpToStream from hooks/auth.ts and oauth-signin.tsx
- Fix useRef initial values in useChat.ts
- Remove unused destructured variables in chat.tsx
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>