organify-ui 0.3.39 → 0.3.41

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.
@@ -80,6 +80,23 @@ function createAiClient(config) {
80
80
  /** [Admin] Get per-user usage stats. Requires `x-user-role: admin` in JWT. */
81
81
  adminUsers(query) {
82
82
  return request(config, "GET", "/api/ai/admin/users", void 0, query);
83
+ },
84
+ /**
85
+ * Guided project creation wizard.
86
+ * Multi-turn conversation with mentor-mode system prompt.
87
+ * Returns richContent (methodology cards, quick replies, project preview).
88
+ * @param sessionId – omit on first turn; pass back echoed value on subsequent turns.
89
+ */
90
+ projectWizard(params) {
91
+ return request(config, "POST", "/api/ai/project-wizard", params);
92
+ },
93
+ /**
94
+ * Reset a wizard session.
95
+ */
96
+ resetWizard(params) {
97
+ return request(config, "POST", "/api/ai/reset", {
98
+ workspaceId: params.workspaceId
99
+ });
83
100
  }
84
101
  };
85
102
  }
@@ -267,7 +284,100 @@ function useAiUsage({ client: clientOrConfig }) {
267
284
  }, [refresh]);
268
285
  return { usage, loading, error, refresh };
269
286
  }
287
+ function useAiProjectWizard({
288
+ client: clientOrConfig,
289
+ workspaceId,
290
+ onCreated
291
+ }) {
292
+ const client = useClient(clientOrConfig);
293
+ const sessionIdRef = React.useRef(void 0);
294
+ const [messages, setMessages] = React.useState([]);
295
+ const [loading, setLoading] = React.useState(false);
296
+ const [error, setError] = React.useState(null);
297
+ const [phase, setPhase] = React.useState(0);
298
+ const [projectPreview, setProjectPreview] = React.useState();
299
+ const [quickReplies, setQuickReplies] = React.useState([]);
300
+ const [learningMode, setLearningMode] = React.useState(true);
301
+ const send = React.useCallback(
302
+ async (message) => {
303
+ if (!message.trim() || loading) return;
304
+ const userMsgId = makeId();
305
+ const placeholderId = makeId();
306
+ setMessages((prev) => [
307
+ ...prev,
308
+ { id: userMsgId, role: "user", content: message, timestamp: /* @__PURE__ */ new Date() },
309
+ { id: placeholderId, role: "assistant", content: "", timestamp: /* @__PURE__ */ new Date(), loading: true }
310
+ ]);
311
+ setLoading(true);
312
+ setError(null);
313
+ setQuickReplies([]);
314
+ try {
315
+ const res = await client.projectWizard({
316
+ message,
317
+ workspaceId,
318
+ sessionId: sessionIdRef.current
319
+ });
320
+ if (res.sessionId) {
321
+ sessionIdRef.current = res.sessionId;
322
+ }
323
+ const assistantMsg = {
324
+ id: placeholderId,
325
+ role: "assistant",
326
+ content: res.message ?? "",
327
+ timestamp: /* @__PURE__ */ new Date(),
328
+ loading: false,
329
+ richContent: res.richContent,
330
+ quickReplies: res.quickReplies
331
+ };
332
+ setMessages(
333
+ (prev) => prev.map((m) => m.id === placeholderId ? assistantMsg : m)
334
+ );
335
+ if (res.phase !== void 0) setPhase(res.phase);
336
+ if (res.projectPreview) setProjectPreview(res.projectPreview);
337
+ if (res.quickReplies?.length) setQuickReplies(res.quickReplies);
338
+ if (res.richContent?.type === "project_created" && res.projectPreview) {
339
+ const { id, name, slug } = res.projectPreview;
340
+ if (id && name && slug) {
341
+ onCreated?.({ id, name, slug });
342
+ }
343
+ }
344
+ } catch (err) {
345
+ const msg = err instanceof Error ? err.message : "Erro ao processar mensagem";
346
+ setError(msg);
347
+ setMessages(
348
+ (prev) => prev.map(
349
+ (m) => m.id === placeholderId ? { ...m, content: `Erro: ${msg}`, loading: false } : m
350
+ )
351
+ );
352
+ } finally {
353
+ setLoading(false);
354
+ }
355
+ },
356
+ [client, workspaceId, loading, onCreated]
357
+ );
358
+ const reset = React.useCallback(() => {
359
+ sessionIdRef.current = void 0;
360
+ setMessages([]);
361
+ setLoading(false);
362
+ setError(null);
363
+ setPhase(0);
364
+ setProjectPreview(void 0);
365
+ setQuickReplies([]);
366
+ }, []);
367
+ return {
368
+ messages,
369
+ loading,
370
+ error,
371
+ phase,
372
+ projectPreview,
373
+ quickReplies,
374
+ learningMode,
375
+ setLearningMode,
376
+ send,
377
+ reset
378
+ };
379
+ }
270
380
 
271
- export { createAiClient, useAiChat, useAiCommand, useAiSuggest, useAiUsage };
272
- //# sourceMappingURL=chunk-NV4RWAQ2.js.map
273
- //# sourceMappingURL=chunk-NV4RWAQ2.js.map
381
+ export { createAiClient, useAiChat, useAiCommand, useAiProjectWizard, useAiSuggest, useAiUsage };
382
+ //# sourceMappingURL=chunk-XSPNTWET.js.map
383
+ //# sourceMappingURL=chunk-XSPNTWET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ai/client.ts","../src/ai/hooks.ts"],"names":[],"mappings":"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","file":"chunk-XSPNTWET.js","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// organify-ui — AI Client\n// Typed, fetch-based client for the Organify AI Service (via API Gateway).\n//\n// Usage:\n// import { createAiClient } from 'organify-ui/ai';\n// const ai = createAiClient({ baseUrl: process.env.NEXT_PUBLIC_GATEWAY_URL! });\n// const result = await ai.chat({ message: 'Cria uma tarefa…', workspaceId: 'ws_1' });\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface AiAction {\n type: string;\n label: string;\n description?: string;\n applied?: boolean;\n}\n\nexport interface AiChatResponse {\n message: string;\n provider: string;\n tokensUsed: number;\n actions: AiAction[];\n}\n\nexport interface AiCommandResponse {\n message: string;\n provider: string;\n tokensUsed: number;\n actions: AiAction[];\n}\n\nexport interface AiSuggestResponse {\n suggestion: string;\n}\n\nexport interface AiResetResponse {\n message: string;\n}\n\nexport interface AiUsageResponse {\n used: number;\n limit: number;\n remaining: number;\n}\n\nexport interface AiAdminLogsResponse {\n logs: AiAdminLog[];\n total: number;\n}\n\nexport interface AiAdminLog {\n userId: string;\n action: string;\n tokensUsed: number;\n timestamp: string;\n workspaceId?: string;\n projectId?: string;\n}\n\nexport interface AiAdminStatsResponse {\n totalRequests: number;\n totalTokens: number;\n uniqueUsers: number;\n [key: string]: unknown;\n}\n\nexport interface AiAdminUsersResponse {\n users: AiAdminUserStat[];\n}\n\nexport interface AiAdminUserStat {\n userId: string;\n requests: number;\n tokens: number;\n}\n\n// ── Wizard types ─────────────────────────────────────────────────────────────\n\nexport interface WizardMethodologyOption {\n name: string;\n description: string;\n /** 0-100 fit score */\n fit: number;\n why: string;\n /** Expanded educational text — shown in \"Modo Explicação\" */\n learn: string;\n boardColumns: string[];\n complexity: 'simple' | 'medium' | 'advanced';\n bestFor: string[];\n}\n\nexport interface WizardProjectPreview {\n id?: string;\n name?: string;\n slug?: string;\n type?: 'KANBAN' | 'SCRUM' | 'HYBRID';\n description?: string;\n methodology?: string;\n suggestedPhases?: string[];\n estimatedDuration?: string;\n teamSize?: number;\n estimatedSprints?: number;\n epicTitles?: string[];\n}\n\nexport type WizardPhase = 0 | 1 | 2 | 3 | 4;\n\nexport interface WizardRichContent {\n type:\n | 'methodology_recommendation'\n | 'project_preview'\n | 'creation_preview'\n | 'project_created';\n methodologyOptions?: WizardMethodologyOption[];\n projectPreview?: WizardProjectPreview;\n quickReplies?: string[];\n phase?: WizardPhase;\n}\n\nexport interface AiWizardResponse {\n message: string;\n provider: string;\n tokensUsed: number;\n actions: AiAction[];\n richContent?: WizardRichContent;\n quickReplies?: string[];\n phase?: WizardPhase;\n projectPreview?: WizardProjectPreview;\n /** Echoed session ID — pass back in subsequent requests */\n sessionId: string;\n}\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\nexport interface AiClientConfig {\n /**\n * Base URL of the API gateway (e.g. \"https://api.organify.app\" or\n * \"http://localhost:4000\"). Must NOT have a trailing slash.\n */\n baseUrl: string;\n /**\n * Optional – if provided, sends as `Authorization: Bearer <token>`.\n * The gateway will forward it and inject user-identity headers before\n * reaching the AI service.\n */\n getToken?: () => string | null | undefined;\n}\n\n// ── Internal helpers ─────────────────────────────────────────────────────────\n\nasync function request<T>(\n config: AiClientConfig,\n method: 'GET' | 'POST',\n path: string,\n body?: Record<string, unknown>,\n query?: Record<string, string>,\n): Promise<T> {\n const token = config.getToken?.();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n if (token) headers['Authorization'] = `Bearer ${token}`;\n\n let url = `${config.baseUrl}${path}`;\n if (query && Object.keys(query).length) {\n url += '?' + new URLSearchParams(query).toString();\n }\n\n const res = await fetch(url, {\n method,\n headers,\n credentials: 'include',\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n let errorBody: { message?: string } = {};\n try {\n errorBody = await res.json();\n } catch { /* ignore */ }\n const msg = errorBody.message ?? res.statusText ?? 'Request failed';\n const err = new Error(msg) as Error & { statusCode: number };\n err.statusCode = res.status;\n throw err;\n }\n\n const json = await res.json();\n // Unwrap NestJS standard response envelope: { success, data }\n if (json && typeof json === 'object' && 'success' in json && 'data' in json) {\n return json.data as T;\n }\n return json as T;\n}\n\n// ── Client factory ───────────────────────────────────────────────────────────\n\nexport function createAiClient(config: AiClientConfig) {\n return {\n /**\n * Multi-turn conversational chat.\n * The gateway injects `x-user-id` / `x-user-plan` from the JWT.\n */\n chat(params: {\n message: string;\n workspaceId: string;\n projectId?: string;\n }): Promise<AiChatResponse> {\n return request<AiChatResponse>(config, 'POST', '/api/ai/chat', params);\n },\n\n /**\n * Single-shot command (⌘K palette).\n */\n command(params: {\n prompt: string;\n workspaceId: string;\n projectId?: string;\n }): Promise<AiCommandResponse> {\n return request<AiCommandResponse>(config, 'POST', '/api/ai/command', params);\n },\n\n /**\n * Lightweight inline suggestion (no rate-limit increment).\n */\n suggest(params: { prompt: string }): Promise<AiSuggestResponse> {\n return request<AiSuggestResponse>(config, 'POST', '/api/ai/suggest', params);\n },\n\n /**\n * Reset conversation context for a workspace.\n */\n reset(params: { workspaceId: string }): Promise<AiResetResponse> {\n return request<AiResetResponse>(config, 'POST', '/api/ai/reset', params);\n },\n\n /**\n * Get per-user usage stats (requests used today, daily limit, remaining).\n */\n getUsage(): Promise<AiUsageResponse> {\n return request<AiUsageResponse>(config, 'GET', '/api/ai/usage');\n },\n\n // ── Admin ──────────────────────────────────────────────────────────────\n\n /** [Admin] Get request logs. Requires `x-user-role: admin` in JWT. */\n adminLogs(query?: Record<string, string>): Promise<AiAdminLogsResponse> {\n return request<AiAdminLogsResponse>(config, 'GET', '/api/ai/admin/logs', undefined, query);\n },\n\n /** [Admin] Get aggregate stats. Requires `x-user-role: admin` in JWT. */\n adminStats(query?: Record<string, string>): Promise<AiAdminStatsResponse> {\n return request<AiAdminStatsResponse>(config, 'GET', '/api/ai/admin/stats', undefined, query);\n },\n\n /** [Admin] Get per-user usage stats. Requires `x-user-role: admin` in JWT. */\n adminUsers(query?: Record<string, string>): Promise<AiAdminUsersResponse> {\n return request<AiAdminUsersResponse>(config, 'GET', '/api/ai/admin/users', undefined, query);\n },\n\n /**\n * Guided project creation wizard.\n * Multi-turn conversation with mentor-mode system prompt.\n * Returns richContent (methodology cards, quick replies, project preview).\n * @param sessionId – omit on first turn; pass back echoed value on subsequent turns.\n */\n projectWizard(params: {\n message: string;\n workspaceId: string;\n sessionId?: string;\n }): Promise<AiWizardResponse> {\n return request<AiWizardResponse>(config, 'POST', '/api/ai/project-wizard', params);\n },\n\n /**\n * Reset a wizard session.\n */\n resetWizard(params: { workspaceId: string; sessionId: string }): Promise<AiResetResponse> {\n return request<AiResetResponse>(config, 'POST', '/api/ai/reset', {\n workspaceId: params.workspaceId,\n });\n },\n };\n}\n\nexport type AiClient = ReturnType<typeof createAiClient>;\n","'use client';\n// ─────────────────────────────────────────────────────────────────────────────\n// organify-ui — AI Hooks\n// React hooks that wrap `AiClient` with local state for easy use with the\n// `AiChatSidebar`, `CommandBar`, and `InlineAiButton` components.\n//\n// All hooks accept an `AiClient` instance (or `AiClientConfig` shorthand so\n// the client is created lazily).\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport * as React from 'react';\nimport { createAiClient } from './client';\nimport type { AiClient, AiClientConfig, AiAction, AiUsageResponse, WizardRichContent, WizardPhase, WizardProjectPreview, AiWizardResponse } from './client';\nimport type { AiChatMessage } from '../components/chat/ai-chat-sidebar';\n\n// ── Shared helpers ────────────────────────────────────────────────────────────\n\nfunction useClient(clientOrConfig: AiClient | AiClientConfig): AiClient {\n return React.useMemo(() => {\n // Duck-type: if it has a `chat` function it's already a client\n if (typeof (clientOrConfig as AiClient).chat === 'function') {\n return clientOrConfig as AiClient;\n }\n return createAiClient(clientOrConfig as AiClientConfig);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentionally stable — client identity doesn't change\n}\n\nfunction makeId() {\n return Math.random().toString(36).slice(2);\n}\n\n// ── useAiChat ────────────────────────────────────────────────────────────────\n\nexport interface UseAiChatOptions {\n client: AiClient | AiClientConfig;\n workspaceId: string;\n projectId?: string;\n}\n\nexport interface UseAiChatResult {\n messages: AiChatMessage[];\n loading: boolean;\n error: string | null;\n send: (message: string) => Promise<void>;\n reset: () => Promise<void>;\n clearMessages: () => void;\n}\n\n/**\n * Manages conversation state for `<AiChatSidebar>`.\n *\n * @example\n * const chat = useAiChat({ client: ai, workspaceId: 'ws_1' });\n * <AiChatSidebar messages={chat.messages} onSend={chat.send} loading={chat.loading} ... />\n */\nexport function useAiChat({\n client: clientOrConfig,\n workspaceId,\n projectId,\n}: UseAiChatOptions): UseAiChatResult {\n const client = useClient(clientOrConfig);\n const [messages, setMessages] = React.useState<AiChatMessage[]>([]);\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n\n const send = React.useCallback(\n async (message: string) => {\n // Optimistically append user message\n const userMsg: AiChatMessage = {\n id: makeId(),\n role: 'user',\n content: message,\n timestamp: new Date(),\n };\n const placeholderId = makeId();\n const placeholder: AiChatMessage = {\n id: placeholderId,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n loading: true,\n };\n setMessages((prev) => [...prev, userMsg, placeholder]);\n setLoading(true);\n setError(null);\n\n try {\n const res = await client.chat({ message, workspaceId, projectId });\n const assistantMsg: AiChatMessage = {\n id: makeId(),\n role: 'assistant',\n content: res.message,\n timestamp: new Date(),\n actions: res.actions as AiAction[],\n };\n // Replace loading placeholder\n setMessages((prev) => prev.map((m) => (m.id === placeholderId ? assistantMsg : m)));\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : 'Erro ao contactar o assistente IA';\n setError(errMsg);\n const errAssistant: AiChatMessage = {\n id: makeId(),\n role: 'assistant',\n content: `⚠️ ${errMsg}`,\n timestamp: new Date(),\n };\n setMessages((prev) => prev.map((m) => (m.id === placeholderId ? errAssistant : m)));\n } finally {\n setLoading(false);\n }\n },\n [client, workspaceId, projectId],\n );\n\n const reset = React.useCallback(async () => {\n try {\n await client.reset({ workspaceId });\n setMessages([]);\n setError(null);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : 'Erro ao reiniciar contexto';\n setError(msg);\n }\n }, [client, workspaceId]);\n\n const clearMessages = React.useCallback(() => setMessages([]), []);\n\n return { messages, loading, error, send, reset, clearMessages };\n}\n\n// ── useAiCommand ─────────────────────────────────────────────────────────────\n\nexport interface UseAiCommandOptions {\n client: AiClient | AiClientConfig;\n workspaceId: string;\n projectId?: string;\n}\n\nexport interface UseAiCommandResult {\n loading: boolean;\n response: string | null;\n actions: AiAction[];\n error: string | null;\n runCommand: (prompt: string) => Promise<void>;\n clear: () => void;\n}\n\n/**\n * Handles a single ⌘K command prompt for `<CommandBar>`.\n *\n * @example\n * const cmd = useAiCommand({ client: ai, workspaceId: 'ws_1' });\n * <CommandBar onAiPrompt={cmd.runCommand} aiLoading={cmd.loading} aiResponse={cmd.response ?? undefined} ... />\n */\nexport function useAiCommand({\n client: clientOrConfig,\n workspaceId,\n projectId,\n}: UseAiCommandOptions): UseAiCommandResult {\n const client = useClient(clientOrConfig);\n const [loading, setLoading] = React.useState(false);\n const [response, setResponse] = React.useState<string | null>(null);\n const [actions, setActions] = React.useState<AiAction[]>([]);\n const [error, setError] = React.useState<string | null>(null);\n\n const runCommand = React.useCallback(\n async (prompt: string) => {\n setLoading(true);\n setError(null);\n setResponse(null);\n setActions([]);\n try {\n const res = await client.command({ prompt, workspaceId, projectId });\n setResponse(res.message);\n setActions(res.actions ?? []);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : 'Erro ao executar comando';\n setError(msg);\n setResponse(`⚠️ ${msg}`);\n } finally {\n setLoading(false);\n }\n },\n [client, workspaceId, projectId],\n );\n\n const clear = React.useCallback(() => {\n setResponse(null);\n setActions([]);\n setError(null);\n }, []);\n\n return { loading, response, actions, error, runCommand, clear };\n}\n\n// ── useAiSuggest ─────────────────────────────────────────────────────────────\n\nexport interface UseAiSuggestOptions {\n client: AiClient | AiClientConfig;\n /** Debounce delay in ms before firing the API call (default: 400) */\n debounceMs?: number;\n}\n\nexport interface UseAiSuggestResult {\n loading: boolean;\n suggestion: string | null;\n error: string | null;\n getSuggestion: (prompt: string) => void;\n accept: () => string | null;\n dismiss: () => void;\n}\n\n/**\n * Provides debounced inline AI suggestions for `<InlineAiButton>`.\n *\n * @example\n * const inline = useAiSuggest({ client: ai });\n * <InlineAiButton\n * onTrigger={(text) => inline.getSuggestion(text ?? '')}\n * loading={inline.loading}\n * suggestion={inline.suggestion ?? undefined}\n * onAccept={inline.accept}\n * onDismiss={inline.dismiss}\n * />\n */\nexport function useAiSuggest({\n client: clientOrConfig,\n debounceMs = 400,\n}: UseAiSuggestOptions): UseAiSuggestResult {\n const client = useClient(clientOrConfig);\n const [loading, setLoading] = React.useState(false);\n const [suggestion, setSuggestion] = React.useState<string | null>(null);\n const [error, setError] = React.useState<string | null>(null);\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const getSuggestion = React.useCallback(\n (prompt: string) => {\n if (timerRef.current) clearTimeout(timerRef.current);\n if (!prompt.trim()) {\n setSuggestion(null);\n return;\n }\n timerRef.current = setTimeout(async () => {\n setLoading(true);\n setError(null);\n try {\n const res = await client.suggest({ prompt });\n setSuggestion(res.suggestion);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : 'Erro ao obter sugestão';\n setError(msg);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n },\n [client, debounceMs],\n );\n\n const accept = React.useCallback(() => {\n const val = suggestion;\n setSuggestion(null);\n return val;\n }, [suggestion]);\n\n const dismiss = React.useCallback(() => {\n setSuggestion(null);\n }, []);\n\n // Clean up timer on unmount\n React.useEffect(() => {\n return () => { if (timerRef.current) clearTimeout(timerRef.current); };\n }, []);\n\n return { loading, suggestion, error, getSuggestion, accept, dismiss };\n}\n\n// ── useAiUsage ───────────────────────────────────────────────────────────────\n\nexport interface UseAiUsageResult {\n usage: AiUsageResponse | null;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Fetches and caches the current user's AI usage stats.\n *\n * @example\n * const { usage } = useAiUsage({ client: ai });\n * <p>{usage?.remaining} requests left today</p>\n */\nexport function useAiUsage({ client: clientOrConfig }: { client: AiClient | AiClientConfig }): UseAiUsageResult {\n const client = useClient(clientOrConfig);\n const [usage, setUsage] = React.useState<AiUsageResponse | null>(null);\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n\n const refresh = React.useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const data = await client.getUsage();\n setUsage(data);\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : 'Erro ao obter uso');\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n React.useEffect(() => {\n refresh();\n }, [refresh]);\n\n return { usage, loading, error, refresh };\n}\n\n// ── useAiProjectWizard ───────────────────────────────────────────────────────\n\nexport interface WizardMessage {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n loading?: boolean;\n richContent?: WizardRichContent;\n quickReplies?: string[];\n}\n\nexport interface UseAiProjectWizardOptions {\n client: AiClient | AiClientConfig;\n workspaceId: string;\n onCreated?: (project: { id: string; name: string; slug: string }) => void;\n}\n\nexport interface UseAiProjectWizardResult {\n messages: WizardMessage[];\n loading: boolean;\n error: string | null;\n phase: WizardPhase;\n projectPreview: WizardProjectPreview | undefined;\n quickReplies: string[];\n learningMode: boolean;\n setLearningMode: (v: boolean) => void;\n send: (message: string) => Promise<void>;\n reset: () => void;\n}\n\n/**\n * Manages state for the `<AiProjectWizard>` component.\n * Persists the sessionId ref across messages so the LLM retains context.\n *\n * @example\n * const wizard = useAiProjectWizard({ client: ai, workspaceId: 'ws_1', onCreated: (p) => router.push(`/projects/${p.slug}`) });\n * <AiProjectWizard {...wizard} />\n */\nexport function useAiProjectWizard({\n client: clientOrConfig,\n workspaceId,\n onCreated,\n}: UseAiProjectWizardOptions): UseAiProjectWizardResult {\n const client = useClient(clientOrConfig);\n const sessionIdRef = React.useRef<string | undefined>(undefined);\n const [messages, setMessages] = React.useState<WizardMessage[]>([]);\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n const [phase, setPhase] = React.useState<WizardPhase>(0);\n const [projectPreview, setProjectPreview] = React.useState<WizardProjectPreview | undefined>();\n const [quickReplies, setQuickReplies] = React.useState<string[]>([]);\n const [learningMode, setLearningMode] = React.useState(true);\n\n const send = React.useCallback(\n async (message: string) => {\n if (!message.trim() || loading) return;\n\n const userMsgId = makeId();\n const placeholderId = makeId();\n\n setMessages((prev) => [\n ...prev,\n { id: userMsgId, role: 'user', content: message, timestamp: new Date() },\n { id: placeholderId, role: 'assistant', content: '', timestamp: new Date(), loading: true },\n ]);\n setLoading(true);\n setError(null);\n setQuickReplies([]);\n\n try {\n const res: AiWizardResponse = await client.projectWizard({\n message,\n workspaceId,\n sessionId: sessionIdRef.current,\n });\n\n // Persist session across turns\n if (res.sessionId) {\n sessionIdRef.current = res.sessionId;\n }\n\n const assistantMsg: WizardMessage = {\n id: placeholderId,\n role: 'assistant',\n content: res.message ?? '',\n timestamp: new Date(),\n loading: false,\n richContent: res.richContent,\n quickReplies: res.quickReplies,\n };\n\n setMessages((prev) =>\n prev.map((m) => (m.id === placeholderId ? assistantMsg : m)),\n );\n\n if (res.phase !== undefined) setPhase(res.phase);\n if (res.projectPreview) setProjectPreview(res.projectPreview);\n if (res.quickReplies?.length) setQuickReplies(res.quickReplies);\n\n // Notify parent when project is created\n if (res.richContent?.type === 'project_created' && res.projectPreview) {\n const { id, name, slug } = res.projectPreview as { id: string; name: string; slug: string };\n if (id && name && slug) {\n onCreated?.({ id, name, slug });\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : 'Erro ao processar mensagem';\n setError(msg);\n setMessages((prev) =>\n prev.map((m) =>\n m.id === placeholderId\n ? { ...m, content: `Erro: ${msg}`, loading: false }\n : m,\n ),\n );\n } finally {\n setLoading(false);\n }\n },\n [client, workspaceId, loading, onCreated],\n );\n\n const reset = React.useCallback(() => {\n sessionIdRef.current = undefined;\n setMessages([]);\n setLoading(false);\n setError(null);\n setPhase(0);\n setProjectPreview(undefined);\n setQuickReplies([]);\n }, []);\n\n return {\n messages,\n loading,\n error,\n phase,\n projectPreview,\n quickReplies,\n learningMode,\n setLearningMode,\n send,\n reset,\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { C as ChatMessage, M as MentionOption, a as MentionType } from '../../inline-ai-CcYfjXIS.js';
2
- export { b as ChatConfig, c as ChatEvents, d as ChatMention, e as ChatMessages, f as ChatPermissions, g as ChatReaction, h as ChatRoom, i as ChatRoomMember, j as ChatSidebar, k as ChatUser, l as CommandBar, m as CommandBarItem, n as CommandBarProps, o as CreateRoomDialog, I as InlineAiButton, p as InlineAiButtonProps, q as MOCK_PROJECTS, r as MOCK_USERS, s as MemberRole, t as MentionPopover, u as MentionPopoverProps, O as OrganifyChat, v as OrganifyChatProps, R as RoomManagementPanel, w as RoomType, x as RoomVisibility, T as TypingIndicatorMock, U as UseAiInlineOptions, y as generateAutoReplies, z as getMockMentionOptions, A as getRoomPermissions, B as typingIndicator, D as useAiInline, E as useChat } from '../../inline-ai-CcYfjXIS.js';
1
+ import { C as ChatMessage, M as MentionOption, a as MentionType } from '../../inline-ai-DGF3HIoy.js';
2
+ export { b as ChatConfig, c as ChatEvents, d as ChatMention, e as ChatMessages, f as ChatPermissions, g as ChatReaction, h as ChatRoom, i as ChatRoomMember, j as ChatSidebar, k as ChatUser, l as CommandBar, m as CommandBarItem, n as CommandBarProps, o as CreateRoomDialog, I as InlineAiButton, p as InlineAiButtonProps, q as MOCK_PROJECTS, r as MOCK_USERS, s as MemberRole, t as MentionPopover, u as MentionPopoverProps, O as OrganifyChat, v as OrganifyChatProps, R as RoomManagementPanel, w as RoomType, x as RoomVisibility, T as TypingIndicatorMock, U as UseAiInlineOptions, y as generateAutoReplies, z as getMockMentionOptions, A as getRoomPermissions, B as typingIndicator, D as useAiInline, E as useChat } from '../../inline-ai-DGF3HIoy.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  export { A as AiAction, a as AiChatMessage, b as AiChatSidebar, c as AiChatSidebarProps } from '../../ai-chat-sidebar-DnEOUzSL.js';
5
5
  import 'react';
@@ -1,5 +1,5 @@
1
- export { AiChatSidebar, ChatMessages, ChatSidebar, CommandBar, CreateRoomDialog, InlineAiButton, MOCK_PROJECTS, MOCK_USERS, MentionPopover, MessageBubble, MessageInput, OrganifyChat, RoomManagementPanel, TypingIndicatorMock, generateAutoReplies, getMockMentionOptions, getRoomPermissions, typingIndicator, useAiInline, useChat } from '../../chunk-V3UZIPZA.js';
1
+ export { AiChatSidebar, ChatMessages, ChatSidebar, CommandBar, CreateRoomDialog, InlineAiButton, MOCK_PROJECTS, MOCK_USERS, MentionPopover, MessageBubble, MessageInput, OrganifyChat, RoomManagementPanel, TypingIndicatorMock, generateAutoReplies, getMockMentionOptions, getRoomPermissions, typingIndicator, useAiInline, useChat } from '../../chunk-TMWQH4P7.js';
2
2
  import '../../chunk-UUBQQVDM.js';
3
- import '../../chunk-MZKEDV5W.js';
3
+ import '../../chunk-J5TEVLDY.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- export { NotificationBell, NotificationItem, NotificationList, OrganifyNotifications, PresenceAvatarStack, PresenceIndicator, useNotifications, usePresence } from '../../chunk-65SJI47W.js';
1
+ export { NotificationBell, NotificationItem, NotificationList, OrganifyNotifications, PresenceAvatarStack, PresenceIndicator, useNotifications, usePresence } from '../../chunk-EQ3A7A2C.js';
2
2
  import '../../chunk-UUBQQVDM.js';
3
- import '../../chunk-MZKEDV5W.js';
3
+ import '../../chunk-J5TEVLDY.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -48,6 +48,7 @@ declare function OrgStar({ size, ...props }: IconProps): react_jsx_runtime.JSX.E
48
48
  declare function OrgHeart({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
49
49
  declare function OrgPlay({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
50
50
  declare function OrgPause({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
51
+ declare function OrgPin({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
51
52
 
52
53
  declare function OrgBoard({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
53
54
  declare function OrgSprint({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
@@ -69,6 +70,7 @@ declare function OrgActivity({ size, ...props }: IconProps): react_jsx_runtime.J
69
70
  declare function OrgClock({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
70
71
  declare function OrgFlag({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
71
72
  declare function OrgChat({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
73
+ declare function OrgNote({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
72
74
 
73
75
  declare function OrgSettings({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
74
76
  declare function OrgBell({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
@@ -102,4 +104,4 @@ declare function OrgWorkspace({ size, ...props }: IconProps): react_jsx_runtime.
102
104
  declare function OrgTutorial({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
103
105
  declare function OrgCelebrate({ size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
104
106
 
105
- export { type IconProps, OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgTrash as OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgPMO, OrgPause, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap };
107
+ export { type IconProps, OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgTrash as OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgNote, OrgPMO, OrgPause, OrgPin, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap };
@@ -1,3 +1,3 @@
1
- export { OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgTrash as OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgPMO, OrgPause, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap } from '../chunk-MZKEDV5W.js';
1
+ export { OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgTrash as OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgNote, OrgPMO, OrgPause, OrgPin, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap } from '../chunk-J5TEVLDY.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -22,14 +22,15 @@ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
22
22
  import { Command as Command$1 } from 'cmdk';
23
23
  import { Toaster as Toaster$1 } from 'sonner';
24
24
  export { toast } from 'sonner';
25
- export { IconProps, OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgPMO, OrgPause, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgDelete as OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap } from './icons/index.js';
25
+ export { IconProps, OrgAI, OrgActivity, OrgArrowLeft, OrgArrowRight, OrgAttachment, OrgBell, OrgBoard, OrgCalendar, OrgCelebrate, OrgChart, OrgChat, OrgCheck, OrgCheckCircle, OrgChevronDown, OrgChevronLeft, OrgChevronRight, OrgChevronUp, OrgClock, OrgClose, OrgComment, OrgCopy, OrgCreditCard, OrgDelete, OrgDeveloper, OrgDiamond, OrgDoor, OrgDownload, OrgEdit, OrgError, OrgExecutive, OrgEye, OrgEyeOff, OrgFile, OrgFilter, OrgFlag, OrgFolder, OrgGauge, OrgGlobe, OrgGrid, OrgHeart, OrgHome, OrgInfo, OrgIntegration, OrgLink, OrgList, OrgLock, OrgLogo, OrgLogout, OrgMail, OrgMention, OrgMenu, OrgMoon, OrgNote, OrgPMO, OrgPause, OrgPin, OrgPlay, OrgPlus, OrgProjectManager, OrgReport, OrgRocket, OrgSearch, OrgSettings, OrgShield, OrgSort, OrgSprint, OrgStakeholder, OrgStar, OrgSun, OrgTag, OrgTarget, OrgTeam, OrgDelete as OrgTrash, OrgTutorial, OrgUnlock, OrgUpload, OrgUser, OrgWarning, OrgWave, OrgWordmark, OrgWorkflow, OrgWorkspace, OrgZap } from './icons/index.js';
26
26
  export { QueryClient, QueryClientProvider } from '@tanstack/react-query';
27
27
  export { Theme, ThemeProvider, ThemeProviderProps, useTheme } from './providers/theme-provider.js';
28
28
  export { I18nProvider, I18nProviderProps, Locale, TranslationKey, createTranslator, useI18n } from './i18n/index.js';
29
- export { b as ChatConfig, c as ChatEvents, d as ChatMention, C as ChatMessage, e as ChatMessages, f as ChatPermissions, g as ChatReaction, h as ChatRoom, i as ChatRoomMember, j as ChatSidebar, k as ChatUser, l as CommandBar, m as CommandBarItem, n as CommandBarProps, o as CreateRoomDialog, I as InlineAiButton, p as InlineAiButtonProps, q as MOCK_PROJECTS, r as MOCK_USERS, s as MemberRole, O as OrganifyChat, v as OrganifyChatProps, R as RoomManagementPanel, w as RoomType, x as RoomVisibility, T as TypingIndicatorMock, U as UseAiInlineOptions, y as generateAutoReplies, z as getMockMentionOptions, A as getRoomPermissions, B as typingIndicator, D as useAiInline, E as useChat } from './inline-ai-CcYfjXIS.js';
29
+ export { b as ChatConfig, c as ChatEvents, d as ChatMention, C as ChatMessage, e as ChatMessages, f as ChatPermissions, g as ChatReaction, h as ChatRoom, i as ChatRoomMember, j as ChatSidebar, k as ChatUser, l as CommandBar, m as CommandBarItem, n as CommandBarProps, o as CreateRoomDialog, I as InlineAiButton, p as InlineAiButtonProps, q as MOCK_PROJECTS, r as MOCK_USERS, s as MemberRole, O as OrganifyChat, v as OrganifyChatProps, R as RoomManagementPanel, w as RoomType, x as RoomVisibility, T as TypingIndicatorMock, U as UseAiInlineOptions, y as generateAutoReplies, z as getMockMentionOptions, A as getRoomPermissions, B as typingIndicator, D as useAiInline, E as useChat } from './inline-ai-DGF3HIoy.js';
30
30
  export { A as AiAction, a as AiChatMessage, b as AiChatSidebar, c as AiChatSidebarProps } from './ai-chat-sidebar-DnEOUzSL.js';
31
+ import { AiClient, AiClientConfig } from './ai/index.js';
32
+ export { AiAdminLog, AiAdminLogsResponse, AiAdminStatsResponse, AiAdminUserStat, AiAdminUsersResponse, AiChatResponse, AiCommandResponse, AiResetResponse, AiSuggestResponse, AiUsageResponse, AiWizardResponse, UseAiChatOptions, UseAiChatResult, UseAiCommandOptions, UseAiCommandResult, UseAiProjectWizardOptions, UseAiProjectWizardResult, UseAiSuggestOptions, UseAiSuggestResult, UseAiUsageResult, WizardMessage, WizardMethodologyOption, WizardPhase, WizardProjectPreview, WizardRichContent, createAiClient, useAiChat, useAiCommand, useAiProjectWizard, useAiSuggest, useAiUsage } from './ai/index.js';
31
33
  export { Notification, NotificationBell, NotificationBellProps, NotificationItem, NotificationItemProps, NotificationList, NotificationListProps, NotificationMetadata, NotificationPreferenceChannel, NotificationPreferences, NotificationPriority, NotificationType, OrganifyNotifications, OrganifyNotificationsProps, PresenceAvatarStack, PresenceAvatarStackProps, PresenceIndicator, PresenceIndicatorProps, PresenceStatus, PresenceUser, UserPresence, useNotifications, usePresence } from './components/notifications/index.js';
32
- export { AiAdminLog, AiAdminLogsResponse, AiAdminStatsResponse, AiAdminUserStat, AiAdminUsersResponse, AiChatResponse, AiClient, AiClientConfig, AiCommandResponse, AiResetResponse, AiSuggestResponse, AiUsageResponse, UseAiChatOptions, UseAiChatResult, UseAiCommandOptions, UseAiCommandResult, UseAiSuggestOptions, UseAiSuggestResult, UseAiUsageResult, createAiClient, useAiChat, useAiCommand, useAiSuggest, useAiUsage } from './ai/index.js';
33
34
 
34
35
  /**
35
36
  * Merge Tailwind CSS classes with clsx — the standard shadcn pattern.
@@ -1578,6 +1579,21 @@ interface CreateProjectDialogProps {
1578
1579
  }
1579
1580
  declare function CreateProjectDialog({ open, onOpenChange, onCreated, }: CreateProjectDialogProps): react_jsx_runtime.JSX.Element;
1580
1581
 
1582
+ interface AiProjectWizardProps {
1583
+ open: boolean;
1584
+ onOpenChange: (open: boolean) => void;
1585
+ workspaceId: string;
1586
+ /** AI client instance or config to build one lazily */
1587
+ client: AiClient | AiClientConfig;
1588
+ /** Called after the AI successfully creates the project */
1589
+ onCreated?: (project: {
1590
+ id: string;
1591
+ name: string;
1592
+ slug: string;
1593
+ }) => void;
1594
+ }
1595
+ declare function AiProjectWizard({ open, onOpenChange, workspaceId, client, onCreated, }: AiProjectWizardProps): react_jsx_runtime.JSX.Element;
1596
+
1581
1597
  interface CreateWorkspaceDialogProps {
1582
1598
  open: boolean;
1583
1599
  onOpenChange: (open: boolean) => void;
@@ -1644,4 +1660,4 @@ interface InviteMemberDialogProps {
1644
1660
  }
1645
1661
  declare function InviteMemberDialog({ open, onOpenChange, workspaceSlug: propWorkspaceSlug, workspaceId: _deprecated, onInvited, defaultView, }: InviteMemberDialogProps): react_jsx_runtime.JSX.Element;
1646
1662
 
1647
- export { type ActivityAction, type ActivityEntry, ActivityTrail, type ActivityTrailProps, ActivityTrailSkeleton, Alert, type AlertProps, Avatar, AvatarFallback, AvatarImage, type AvatarProps, Badge, type BadgeProps, type BoardItem, BoardSkeleton, BoardsSwitcher, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, CURRENT_USER_KEY, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatSkeleton, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type Comment, type CommentAuthor, CommentItem, type CommentReaction, CommentThread, type CommentThreadProps, CreateEpicDialog, type CreateEpicDialogProps, CreateProjectDialog, type CreateProjectDialogProps, CreateSprintDialog, type CreateSprintDialogProps, CreateTaskDialog, type CreateTaskDialogProps, CreateWorkspaceDialog, type CreateWorkspaceDialogProps, DashboardSkeleton, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Dock, DockButton, type DockEntry, type DockItem, type DockProps, DockSidebar, type DockSidebarProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DueDateBadge, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, GeometricIcon, type GeometricIconProps, GlassPanel, type GlassPanelProps, type GqlEndpoint, Input, type InputProps, InviteMemberDialog, type InviteMemberDialogProps, KanbanBoard, type KanbanBoardProps, Column as KanbanColumn, type KanbanColumnData, type KanbanTask, TaskCard as KanbanTaskCard, Label, Logo, type LogoProps, MemberListSkeleton, MetricCard, type MetricCardProps, MetricCardSkeleton, OrgLoader, OrgLoaderInline, type OrgLoaderProps, type OrganifyApiConfig, OrganifyContext, type OrganifyContextValue, type OrganifyProject, OrganifyProvider, type OrganifyProviderProps, type OrganifyUser, type OrganifyWorkspace, PlanBadge, type PlanBadgeProps, type PlanLimit, type PlanTier, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, type ProgressProps, ProjectListSkeleton, type ResolvedUser, ResponsiveDialog, type ResponsiveDialogProps, type RestEndpoint, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsSkeleton, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SidebarButton, SidebarEntry, type SidebarNavEntry, type SidebarNavItem, Skeleton, SkeletonCard, type SkeletonProps, type Sprint, SprintFilter, SprintSkeleton, StatusPill, type StatusPillProps, StepCircle, StepConnector, type StepStatus, Stepper, type StepperProps, type StepperStep, Switch, type SwitchProps, Tabs, TabsContent, TabsList, TabsTrigger, type TaskAssignee, TaskCard$1 as TaskCard, type TaskCardData, type TaskCardProps$1 as TaskCardProps, TaskCardSkeleton, type TaskDependency, type TaskDetailData, TaskDetailDialog, type TaskDetailDialogProps, TaskDetailPanel, type TaskDetailPanelProps, TaskDetailSheet, type TaskDetailSheetProps, type TaskLabel, TaskListSkeleton, type TaskPriority, type TaskStatus, type TaskSubtask, Textarea, Toast, ToastProgress, type ToastProps, Toaster, type ToasterProps, Toggle, type ToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseCurrentUserReturn, UserAvatar, type UserAvatarProps, UserDisplayName, type UserDisplayNameProps, WorkspaceSwitcher, type WorkspaceSwitcherProps, alertVariants, avatarVariants, badgeVariants, buttonVariants, cn, emptyMediaVariants, geometricIconVariants, glassPanelVariants, inputVariants, invalidateUserCache, metricCardVariants, orgLoaderVariants, priorityConfig, resolveUser, seedUserCache, statusPillVariants, useCurrentUser, useMediaQuery, useOrganify, useOrganifyApi, useOrganifyGql, useOrganifyNavigation, useOrganifyProject, useOrganifyRest, useOrganifyUser, useOrganifyWorkspace, useResolvedUser };
1663
+ export { type ActivityAction, type ActivityEntry, ActivityTrail, type ActivityTrailProps, ActivityTrailSkeleton, AiClient, AiClientConfig, AiProjectWizard, type AiProjectWizardProps, Alert, type AlertProps, Avatar, AvatarFallback, AvatarImage, type AvatarProps, Badge, type BadgeProps, type BoardItem, BoardSkeleton, BoardsSwitcher, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, CURRENT_USER_KEY, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatSkeleton, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type Comment, type CommentAuthor, CommentItem, type CommentReaction, CommentThread, type CommentThreadProps, CreateEpicDialog, type CreateEpicDialogProps, CreateProjectDialog, type CreateProjectDialogProps, CreateSprintDialog, type CreateSprintDialogProps, CreateTaskDialog, type CreateTaskDialogProps, CreateWorkspaceDialog, type CreateWorkspaceDialogProps, DashboardSkeleton, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Dock, DockButton, type DockEntry, type DockItem, type DockProps, DockSidebar, type DockSidebarProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DueDateBadge, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, GeometricIcon, type GeometricIconProps, GlassPanel, type GlassPanelProps, type GqlEndpoint, Input, type InputProps, InviteMemberDialog, type InviteMemberDialogProps, KanbanBoard, type KanbanBoardProps, Column as KanbanColumn, type KanbanColumnData, type KanbanTask, TaskCard as KanbanTaskCard, Label, Logo, type LogoProps, MemberListSkeleton, MetricCard, type MetricCardProps, MetricCardSkeleton, OrgLoader, OrgLoaderInline, type OrgLoaderProps, type OrganifyApiConfig, OrganifyContext, type OrganifyContextValue, type OrganifyProject, OrganifyProvider, type OrganifyProviderProps, type OrganifyUser, type OrganifyWorkspace, PlanBadge, type PlanBadgeProps, type PlanLimit, type PlanTier, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, type ProgressProps, ProjectListSkeleton, type ResolvedUser, ResponsiveDialog, type ResponsiveDialogProps, type RestEndpoint, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsSkeleton, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SidebarButton, SidebarEntry, type SidebarNavEntry, type SidebarNavItem, Skeleton, SkeletonCard, type SkeletonProps, type Sprint, SprintFilter, SprintSkeleton, StatusPill, type StatusPillProps, StepCircle, StepConnector, type StepStatus, Stepper, type StepperProps, type StepperStep, Switch, type SwitchProps, Tabs, TabsContent, TabsList, TabsTrigger, type TaskAssignee, TaskCard$1 as TaskCard, type TaskCardData, type TaskCardProps$1 as TaskCardProps, TaskCardSkeleton, type TaskDependency, type TaskDetailData, TaskDetailDialog, type TaskDetailDialogProps, TaskDetailPanel, type TaskDetailPanelProps, TaskDetailSheet, type TaskDetailSheetProps, type TaskLabel, TaskListSkeleton, type TaskPriority, type TaskStatus, type TaskSubtask, Textarea, Toast, ToastProgress, type ToastProps, Toaster, type ToasterProps, Toggle, type ToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseCurrentUserReturn, UserAvatar, type UserAvatarProps, UserDisplayName, type UserDisplayNameProps, WorkspaceSwitcher, type WorkspaceSwitcherProps, alertVariants, avatarVariants, badgeVariants, buttonVariants, cn, emptyMediaVariants, geometricIconVariants, glassPanelVariants, inputVariants, invalidateUserCache, metricCardVariants, orgLoaderVariants, priorityConfig, resolveUser, seedUserCache, statusPillVariants, useCurrentUser, useMediaQuery, useOrganify, useOrganifyApi, useOrganifyGql, useOrganifyNavigation, useOrganifyProject, useOrganifyRest, useOrganifyUser, useOrganifyWorkspace, useResolvedUser };