@flexkit/studio 0.2.2 → 0.2.3

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.
Files changed (99) hide show
  1. package/dist/activity-nav-button-Z6M3FURW.js +2 -0
  2. package/dist/activity-nav-button-Z6M3FURW.js.map +1 -0
  3. package/dist/chat-page-J7I5V6G4.js +4 -0
  4. package/dist/{chat-page-YWENJEUP.js.map → chat-page-J7I5V6G4.js.map} +1 -1
  5. package/dist/chunk-32ZU4MLE.js +2 -0
  6. package/dist/{chunk-ODORXGGY.js.map → chunk-32ZU4MLE.js.map} +1 -1
  7. package/dist/chunk-3C2EG3SI.js +2 -0
  8. package/dist/{chunk-GW37ZTR2.js.map → chunk-3C2EG3SI.js.map} +1 -1
  9. package/dist/chunk-6NRQMG26.js +2 -0
  10. package/dist/chunk-6NRQMG26.js.map +1 -0
  11. package/dist/chunk-72TZUR4Q.js +2 -0
  12. package/dist/{chunk-4BX7OJJ6.js.map → chunk-72TZUR4Q.js.map} +1 -1
  13. package/dist/chunk-76CL7HSO.js +3 -0
  14. package/dist/chunk-76CL7HSO.js.map +1 -0
  15. package/dist/chunk-AN4APNXO.js +2 -0
  16. package/dist/chunk-AN4APNXO.js.map +1 -0
  17. package/dist/chunk-BP27UNNR.js +2 -0
  18. package/dist/{chunk-OFLU53AC.js.map → chunk-BP27UNNR.js.map} +1 -1
  19. package/dist/{chunk-7ZDMZVDA.js → chunk-G74PT7Z7.js} +5 -5
  20. package/dist/{chunk-7ZDMZVDA.js.map → chunk-G74PT7Z7.js.map} +1 -1
  21. package/dist/{chunk-Z6IEBNKV.js → chunk-IAA4CEBW.js} +2 -2
  22. package/dist/{chunk-Z6IEBNKV.js.map → chunk-IAA4CEBW.js.map} +1 -1
  23. package/dist/{chunk-2FQWBOU6.js → chunk-K7FD54PW.js} +6 -6
  24. package/dist/chunk-K7FD54PW.js.map +1 -0
  25. package/dist/chunk-MM356YIK.js +3 -0
  26. package/dist/chunk-MM356YIK.js.map +1 -0
  27. package/dist/chunk-MPLNRUP3.js +4 -0
  28. package/dist/{chunk-3FIKCGSP.js.map → chunk-MPLNRUP3.js.map} +1 -1
  29. package/dist/chunk-QDXGSL5B.js +2 -0
  30. package/dist/chunk-QDXGSL5B.js.map +1 -0
  31. package/dist/{chunk-LYGHDJ5A.js → chunk-QJDD73JR.js} +2 -2
  32. package/dist/{chunk-LYGHDJ5A.js.map → chunk-QJDD73JR.js.map} +1 -1
  33. package/dist/chunk-TWMX2IQ2.js +3 -0
  34. package/dist/chunk-TWMX2IQ2.js.map +1 -0
  35. package/dist/chunk-U45E5X3H.js +2 -0
  36. package/dist/chunk-U45E5X3H.js.map +1 -0
  37. package/dist/chunk-USNXQOMJ.js +2 -0
  38. package/dist/chunk-USNXQOMJ.js.map +1 -0
  39. package/dist/chunk-YCCFUGWJ.js +7 -0
  40. package/dist/chunk-YCCFUGWJ.js.map +1 -0
  41. package/dist/index.css +22 -0
  42. package/dist/index.js +9 -9
  43. package/dist/index.js.map +1 -1
  44. package/dist/list-IBUZ2LXU.js +2 -0
  45. package/dist/{list-3K2PBGML.js.map → list-IBUZ2LXU.js.map} +1 -1
  46. package/dist/logo-JAWR6P43.js +2 -0
  47. package/dist/logo-JAWR6P43.js.map +1 -0
  48. package/dist/pages-ZKDDV5T3.js +3 -0
  49. package/dist/pages-ZKDDV5T3.js.map +1 -0
  50. package/dist/plugin-pages-HQPZQSZT.js +2 -0
  51. package/dist/{plugin-pages-Q77CBW45.js.map → plugin-pages-HQPZQSZT.js.map} +1 -1
  52. package/dist/root-4UVGZZRU.js +2 -0
  53. package/dist/{root-4TME2KMP.js.map → root-4UVGZZRU.js.map} +1 -1
  54. package/dist/{root-4ZVGVCYY.js → root-HUJPHUHL.js} +10 -10
  55. package/dist/{root-4ZVGVCYY.js.map → root-HUJPHUHL.js.map} +1 -1
  56. package/dist/root-XGNAKO5P.js +2 -0
  57. package/dist/root-XGNAKO5P.js.map +1 -0
  58. package/dist/root-ZY2HGDBT.js +31 -0
  59. package/dist/{root-EZWV5VA4.js.map → root-ZY2HGDBT.js.map} +1 -1
  60. package/dist/search-N7G6BVN6.js +2 -0
  61. package/dist/{search-7NX232AW.js.map → search-N7G6BVN6.js.map} +1 -1
  62. package/dist/skills-pages-VP32HFUN.js +2 -0
  63. package/dist/{skills-pages-SMJ4EWZW.js.map → skills-pages-VP32HFUN.js.map} +1 -1
  64. package/dist/spec-renderer-EX7SCFWH.js +2 -0
  65. package/dist/{spec-renderer-5YGDRF52.js.map → spec-renderer-EX7SCFWH.js.map} +1 -1
  66. package/dist/ui.js +1 -1
  67. package/dist/user-nav-QZTYBG45.js +2 -0
  68. package/dist/user-nav-QZTYBG45.js.map +1 -0
  69. package/package.json +3 -3
  70. package/dist/chat-page-YWENJEUP.js +0 -4
  71. package/dist/chunk-2FQWBOU6.js.map +0 -1
  72. package/dist/chunk-3FIKCGSP.js +0 -4
  73. package/dist/chunk-4BX7OJJ6.js +0 -2
  74. package/dist/chunk-5DHOBLAE.js +0 -2
  75. package/dist/chunk-5DHOBLAE.js.map +0 -1
  76. package/dist/chunk-66N44IKJ.js +0 -3
  77. package/dist/chunk-66N44IKJ.js.map +0 -1
  78. package/dist/chunk-GW37ZTR2.js +0 -2
  79. package/dist/chunk-H6TOYVW2.js +0 -3
  80. package/dist/chunk-H6TOYVW2.js.map +0 -1
  81. package/dist/chunk-ODORXGGY.js +0 -2
  82. package/dist/chunk-OFLU53AC.js +0 -2
  83. package/dist/chunk-YIGEER6B.js +0 -7
  84. package/dist/chunk-YIGEER6B.js.map +0 -1
  85. package/dist/list-3K2PBGML.js +0 -2
  86. package/dist/logo-MU7MGYDH.js +0 -3
  87. package/dist/logo-MU7MGYDH.js.map +0 -1
  88. package/dist/pages-BDZ4ZXBS.js +0 -3
  89. package/dist/pages-BDZ4ZXBS.js.map +0 -1
  90. package/dist/plugin-pages-Q77CBW45.js +0 -2
  91. package/dist/root-4TME2KMP.js +0 -2
  92. package/dist/root-EZWV5VA4.js +0 -31
  93. package/dist/root-YKNISFWH.js +0 -2
  94. package/dist/root-YKNISFWH.js.map +0 -1
  95. package/dist/search-7NX232AW.js +0 -2
  96. package/dist/skills-pages-SMJ4EWZW.js +0 -2
  97. package/dist/spec-renderer-5YGDRF52.js +0 -2
  98. package/dist/user-nav-QZFCICK3.js +0 -2
  99. package/dist/user-nav-QZFCICK3.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/apps/ai/agent/dictation.ts","../src/apps/ai/api.ts"],"names":["appendDictatedText","existing","transcript","dictated","convertRecordedAudioToPcm","blob","AudioContextCtor","arrayBuffer","audioContext","audioBuffer","mono","mixToMono","resampled","resample","pcm","floatToPcm16","durationSeconds","buffer","length","channelCount","index","sum","channel","samples","sourceRate","targetRate","ratio","outputLength","output","sourceIndex","left","right","fraction","leftSample","rightSample","view","sample","AgentUploadError","status","message","code","getApiRootDomain","hostname","getPlatformOrigin","getWebhookTriggerUrl","projectId","token","createApiClient","projectBasePath","automationsBasePath","skillsBasePath","agentChatsBasePath","request","url","init","response","data","error","input","id","runId","chatId","workflowRunId","title","attachments","content","modelId","messageId","audio","signal","formData","file","tokenResponse","tokenData","put","approvalId","ids","itemId","state","automationId","skillId","artifactId","options","suffix","provider","connectionId","FetcherError","fetcher","paths","basePath","filter","limit","offset","params","since","query","enabled","search","visibility","value","trimmedSearch","scope"],"mappings":"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","file":"chunk-MM356YIK.js","sourcesContent":["export const DICTATION_SAMPLE_RATE = 24_000;\nexport const DICTATION_MAX_DURATION_SECONDS = 60;\nexport const DICTATION_MIN_DURATION_SECONDS = 0.25;\n\nexport function appendDictatedText(existing: string, transcript: string): string {\n const dictated = transcript.trim();\n\n if (!dictated) {\n return existing;\n }\n\n if (!existing.trim()) {\n return existing.length === 0 ? dictated : `${existing}${dictated}`;\n }\n\n if (/\\s$/.test(existing) || /^[.,!?;:]/.test(dictated)) {\n return `${existing}${dictated}`;\n }\n\n return `${existing} ${dictated}`;\n}\n\nexport async function convertRecordedAudioToPcm(blob: Blob): Promise<{ durationSeconds: number; pcm: Blob }> {\n if (typeof window === 'undefined') {\n throw new Error('Dictation is only available in the browser.');\n }\n\n const AudioContextCtor = window.AudioContext ?? window.webkitAudioContext;\n\n if (!AudioContextCtor) {\n throw new Error('This browser cannot decode recorded audio.');\n }\n\n const arrayBuffer = await blob.arrayBuffer();\n const audioContext = new AudioContextCtor();\n\n try {\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer.slice(0));\n const mono = mixToMono(audioBuffer);\n const resampled = resample(mono, audioBuffer.sampleRate, DICTATION_SAMPLE_RATE);\n const pcm = floatToPcm16(resampled);\n const durationSeconds = resampled.length / DICTATION_SAMPLE_RATE;\n\n if (durationSeconds < DICTATION_MIN_DURATION_SECONDS) {\n throw new Error('No speech was captured. Try again.');\n }\n\n if (durationSeconds > DICTATION_MAX_DURATION_SECONDS) {\n throw new Error(`Dictation is limited to ${String(DICTATION_MAX_DURATION_SECONDS)} seconds.`);\n }\n\n return {\n durationSeconds,\n pcm: new Blob([pcm], { type: 'audio/pcm' }),\n };\n } finally {\n await audioContext.close();\n }\n}\n\nfunction mixToMono(buffer: AudioBuffer): Float32Array {\n const { length, numberOfChannels: channelCount } = buffer;\n\n if (channelCount === 1) {\n return buffer.getChannelData(0).slice();\n }\n\n const mono = new Float32Array(length);\n\n for (let index = 0; index < length; index += 1) {\n let sum = 0;\n\n for (let channel = 0; channel < channelCount; channel += 1) {\n sum += buffer.getChannelData(channel)[index] ?? 0;\n }\n\n mono[index] = sum / channelCount;\n }\n\n return mono;\n}\n\nfunction resample(samples: Float32Array, sourceRate: number, targetRate: number): Float32Array {\n if (sourceRate === targetRate) {\n return samples;\n }\n\n const ratio = sourceRate / targetRate;\n const outputLength = Math.max(1, Math.round(samples.length / ratio));\n const output = new Float32Array(outputLength);\n\n for (let index = 0; index < outputLength; index += 1) {\n const sourceIndex = index * ratio;\n const left = Math.floor(sourceIndex);\n const right = Math.min(left + 1, samples.length - 1);\n const fraction = sourceIndex - left;\n const leftSample = samples[left] ?? 0;\n const rightSample = samples[right] ?? 0;\n output[index] = leftSample + (rightSample - leftSample) * fraction;\n }\n\n return output;\n}\n\nfunction floatToPcm16(samples: Float32Array): ArrayBuffer {\n const buffer = new ArrayBuffer(samples.length * 2);\n const view = new DataView(buffer);\n\n for (let index = 0; index < samples.length; index += 1) {\n const sample = Math.max(-1, Math.min(1, samples[index] ?? 0));\n view.setInt16(index * 2, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);\n }\n\n return buffer;\n}\n\ndeclare global {\n interface Window {\n webkitAudioContext?: typeof AudioContext;\n }\n}\n","import type { PluginConnection, PluginScope, PluginTools } from './plugin-types';\nimport { put } from '@vercel/blob/client';\nimport { convertRecordedAudioToPcm } from './agent/dictation';\nimport type {\n ActivityItem,\n ActivityItemState,\n AgentChat,\n AgentChatAttachment,\n AgentChatFollowUpResult,\n AgentChatMessage,\n AgentChatTurn,\n Automation,\n AutomationApproval,\n AutomationApprovalStatus,\n AutomationArtifact,\n AutomationInput,\n AutomationToolChannel,\n AutomationToolProvider,\n AutomationVisibility,\n MutationResult,\n Skill,\n SkillInput,\n} from './types';\n\nexport interface DecideApprovalInput {\n /** Approve and always allow this plugin tool for the automation. */\n remember?: boolean;\n approved: boolean;\n force?: boolean;\n reason?: string;\n}\n\nexport interface SendAgentChatMessageInput {\n attachments?: AgentChatAttachment[];\n content: string;\n modelId?: string | null;\n}\n\n/** A new chat and its first turn, started by one request. */\nexport interface StartAgentChatResult {\n chat: AgentChat;\n turn: AgentChatTurn;\n}\n\n/** Thrown when the API refuses an upload; `code` lets the UI tailor the message. */\nexport class AgentUploadError extends Error {\n code: string | null;\n status: number;\n\n constructor(status: number, message: string, code: string | null = null) {\n super(message);\n this.name = 'AgentUploadError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport interface ApiClient {\n /** Starts OAuth for a new account, or for `connectionId` to reconnect that specific account. */\n connectPlugins: (_input: {\n pluginId: string;\n scope: PluginScope;\n studioOrigin: string;\n connectionId?: string;\n }) => Promise<{ transactionId: string; authorizeUrl: string; completionOrigin: string; launchTicket: string }>;\n /** Renames (label null resets to the provider name) or makes a connection primary. */\n updatePluginConnection: (\n _id: string,\n _input: { label?: string | null; primary?: true }\n ) => Promise<{ connection: PluginConnection }>;\n pluginOAuthStatus: (_id: string) => Promise<{ id: string; status: 'pending' | 'exchanging' | 'complete' | 'failed'; expires_at: string }>;\n disconnectPlugin: (_id: string) => Promise<{ success: boolean }>;\n installPlugin: (_id: string) => Promise<unknown>;\n setPluginPolicy: (_id: string, _input: { enabled: boolean; allowPersonal: boolean }) => Promise<{ success: boolean }>;\n refreshPluginTools: (_id: string) => Promise<PluginTools>;\n\n cancelRun: (_runId: string) => Promise<MutationResult>;\n createAgentChat: (_input?: { modelId?: string | null }) => Promise<{ chat: AgentChat }>;\n deleteAgentChat: (_chatId: string) => Promise<{ success: boolean }>;\n getAgentChatStreamUrl: (_chatId: string, _workflowRunId: string) => string;\n renameAgentChat: (_chatId: string, _title: string) => Promise<{ chat: AgentChat }>;\n sendAgentChatMessage: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatTurn>;\n /**\n * Sends a message while the chat's turn is running. The platform decides\n * whether it steers that turn or waits as the next one; if the turn has\n * meanwhile ended, the message starts the next turn.\n */\n sendAgentChatFollowUp: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatFollowUpResult>;\n /** Creates a chat and sends its first message in one request. */\n startAgentChat: (_input: SendAgentChatMessageInput) => Promise<StartAgentChatResult>;\n /** Starts the next turn from a queued follow-up once the previous turn has ended. */\n startQueuedAgentChatMessage: (_chatId: string, _messageId: string) => Promise<AgentChatTurn>;\n stopAgentChat: (_chatId: string) => Promise<{ message: AgentChatMessage }>;\n transcribeAgentAudio: (_audio: Blob, _signal?: AbortSignal) => Promise<{ text: string }>;\n /** Uploads a chat attachment straight to the platform file store. */\n uploadAgentChatAttachment: (_file: File, _signal?: AbortSignal) => Promise<AgentChatAttachment>;\n decideApproval: (\n _approvalId: string,\n _input: DecideApprovalInput\n ) => Promise<MutationResult & { approval?: AutomationApproval }>;\n createAutomation: (_input: AutomationInput) => Promise<MutationResult & { automation?: Automation }>;\n createSkill: (_input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n deleteAutomation: (_automationId: string) => Promise<MutationResult>;\n deleteSkill: (_skillId: string) => Promise<MutationResult>;\n getArtifactUrl: (_artifactId: string, _options?: { download?: boolean }) => string;\n getRunArtifacts: (_workflowRunId: string) => Promise<AutomationArtifact[]>;\n getStreamUrl: (_workflowRunId: string) => string;\n /** JSON transcript of a finished run (owners and developers). */\n getTranscriptUrl: (_runId: string) => string;\n /** Lists delivery channels of `connectionId`, or of the provider's primary project account when omitted. */\n listChannels: (_provider: AutomationToolProvider, _connectionId?: string | null) => Promise<{\n channels: AutomationToolChannel[];\n errorMessage?: string;\n success: boolean;\n }>;\n runAutomation: (_automationId: string) => Promise<MutationResult & { runId?: string }>;\n updateAutomation: (\n _automationId: string,\n _input: AutomationInput\n ) => Promise<MutationResult & { automation?: Automation }>;\n updateSkill: (_skillId: string, _input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n /** Marks the caller's Activity items read; `'all'` marks every unread item. */\n markActivityRead: (_ids: string[] | 'all') => Promise<{ success: boolean }>;\n setActivityItemState: (\n _itemId: string,\n _state: Extract<ActivityItemState, 'unread' | 'read' | 'dismissed'>\n ) => Promise<{ item: ActivityItem }>;\n}\n\n\nfunction getApiRootDomain(): string {\n if (typeof window === 'undefined') {\n return 'flexkit.io';\n }\n\n const { hostname } = window.location;\n const isDevHost =\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === 'flexkit.test' ||\n hostname.endsWith('.flexkit.test');\n\n return isDevHost ? 'flexkit.test' : 'flexkit.io';\n}\n\n/** Origin that hosts plugin OAuth start and completion. */\nexport function getPlatformOrigin(): string {\n return `https://${getApiRootDomain()}`;\n}\n\n/** Public URL an external system calls to fire a webhook trigger. */\nexport function getWebhookTriggerUrl(projectId: string, token: string): string {\n return `https://${projectId}.api.${getApiRootDomain()}/automations/webhook/${encodeURIComponent(token)}`;\n}\n\nexport function createApiClient(projectId: string): ApiClient {\n const projectBasePath = `/api/flexkit/${projectId}`;\n const automationsBasePath = `${projectBasePath}/automations`;\n const skillsBasePath = `${projectBasePath}/skills`;\n const agentChatsBasePath = `${projectBasePath}/agent/chats`;\n\n async function request<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n ...(init?.headers ?? {}),\n },\n ...init,\n });\n const data = (await response.json()) as T;\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && 'error' in data ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n return data;\n }\n\n return {\n connectPlugins: (input) => request(`${projectBasePath}/plugins/connect`, { method: 'POST', body: JSON.stringify(input) }),\n pluginOAuthStatus: (id) => request(`${projectBasePath}/plugins/oauth-transactions/${encodeURIComponent(id)}`),\n updatePluginConnection: (id, input) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, { method: 'PATCH', body: JSON.stringify(input) }),\n disconnectPlugin: (id) => request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, { method: 'DELETE' }),\n installPlugin: (id) => request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/installation`, { method: 'PUT', body: JSON.stringify({}) }),\n setPluginPolicy: (id, input) => request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/policy`, { method: 'PATCH', body: JSON.stringify(input) }),\n refreshPluginTools: (id) => request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}/tools/refresh`, { method: 'POST' }),\n cancelRun: async (runId) =>\n request<MutationResult>(`${automationsBasePath}/runs/${encodeURIComponent(runId)}/cancel`, { method: 'POST' }),\n createAgentChat: async (input) =>\n request<{ chat: AgentChat }>(agentChatsBasePath, {\n body: JSON.stringify({ modelId: input?.modelId ?? null }),\n method: 'POST',\n }),\n deleteAgentChat: async (chatId) =>\n request<{ success: boolean }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, { method: 'DELETE' }),\n getAgentChatStreamUrl: (chatId, workflowRunId) =>\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/stream?workflowRunId=${encodeURIComponent(workflowRunId)}`,\n renameAgentChat: async (chatId, title) =>\n request<{ chat: AgentChat }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, {\n body: JSON.stringify({ title }),\n method: 'PATCH',\n }),\n sendAgentChatMessage: async (chatId, input) =>\n request<AgentChatTurn>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/messages`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n sendAgentChatFollowUp: async (chatId, input) =>\n request<AgentChatFollowUpResult>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n startAgentChat: async ({ attachments, content, modelId }) =>\n request<StartAgentChatResult>(agentChatsBasePath, {\n body: JSON.stringify({ message: { attachments, content }, modelId: modelId ?? null }),\n method: 'POST',\n }),\n startQueuedAgentChatMessage: async (chatId, messageId) =>\n request<AgentChatTurn>(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups/${encodeURIComponent(messageId)}/start`,\n { method: 'POST' }\n ),\n stopAgentChat: async (chatId) =>\n request<{ message: AgentChatMessage }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/stop`, {\n method: 'POST',\n }),\n transcribeAgentAudio: async (audio, signal) => {\n const { durationSeconds, pcm } = await convertRecordedAudioToPcm(audio);\n const formData = new FormData();\n formData.append('file', pcm, 'audio.pcm');\n formData.append('durationSeconds', String(durationSeconds));\n\n const response = await fetch(`${projectBasePath}/agent/transcribe`, {\n body: formData,\n credentials: 'include',\n method: 'POST',\n signal,\n });\n const data = (await response.json()) as { error?: string; text?: string };\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n if (!data.text?.trim()) {\n throw new Error('No speech was recognized. Try again.');\n }\n\n return { text: data.text };\n },\n uploadAgentChatAttachment: async (file, signal) => {\n // The platform issues a token scoped to one pathname, type and size; the\n // browser then writes the bytes to the store directly, so large files\n // never pass through the API function body limit.\n const tokenResponse = await fetch(`${projectBasePath}/agent/uploads`, {\n body: JSON.stringify({ filename: file.name, mediaType: file.type || null, sizeBytes: file.size }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal,\n });\n const tokenData = (await tokenResponse.json()) as {\n code?: string;\n error?: string;\n mediaType?: string;\n pathname?: string;\n token?: string;\n };\n\n if (!tokenResponse.ok || !tokenData.pathname || !tokenData.token || !tokenData.mediaType) {\n throw new AgentUploadError(\n tokenResponse.status,\n tokenData.error ? String(tokenData.error) : 'The file could not be uploaded.',\n tokenData.code ?? null\n );\n }\n\n const blob = await put(tokenData.pathname, file, {\n abortSignal: signal,\n access: 'public',\n contentType: tokenData.mediaType,\n token: tokenData.token,\n });\n\n return {\n filename: file.name,\n mediaType: tokenData.mediaType,\n sizeBytes: file.size,\n url: blob.url,\n };\n },\n decideApproval: async (approvalId, input) => {\n const response = await fetch(`${automationsBasePath}/approvals/${encodeURIComponent(approvalId)}/decide`, {\n body: JSON.stringify(input),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n const data = (await response.json()) as MutationResult & { approval?: AutomationApproval; error?: string };\n\n // Business errors (stale_preview, already_decided) come back as 400\n // with a structured body the caller must be able to inspect.\n if (!response.ok && typeof data.success !== 'boolean') {\n throw new Error(data.error ? String(data.error) : 'Request failed');\n }\n\n return data;\n },\n markActivityRead: async (ids) =>\n request<{ success: boolean }>(`${projectBasePath}/activity/read`, {\n body: JSON.stringify(ids === 'all' ? { all: true } : { ids }),\n method: 'POST',\n }),\n setActivityItemState: async (itemId, state) =>\n request<{ item: ActivityItem }>(`${projectBasePath}/activity/${encodeURIComponent(itemId)}`, {\n body: JSON.stringify({ state }),\n method: 'PATCH',\n }),\n createAutomation: async (input) =>\n request<MutationResult & { automation?: Automation }>(automationsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n createSkill: async (input) =>\n request<MutationResult & { skill?: Skill }>(skillsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n deleteAutomation: async (automationId) =>\n request<MutationResult>(`${automationsBasePath}/${encodeURIComponent(automationId)}`, { method: 'DELETE' }),\n deleteSkill: async (skillId) =>\n request<MutationResult>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, { method: 'DELETE' }),\n getArtifactUrl: (artifactId, options) => {\n const suffix = options?.download ? '?download=1' : '';\n\n return `${automationsBasePath}/artifacts/${encodeURIComponent(artifactId)}/content${suffix}`;\n },\n getRunArtifacts: async (workflowRunId) =>\n request<{ artifacts: AutomationArtifact[] }>(\n `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/artifacts`\n ).then((response) => response.artifacts),\n getStreamUrl: (workflowRunId) => `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/stream`,\n getTranscriptUrl: (runId) => `${automationsBasePath}/runs/${encodeURIComponent(runId)}/transcript`,\n listChannels: async (provider, connectionId) => {\n const url = connectionId\n ? `${projectBasePath}/plugin-connections/${encodeURIComponent(connectionId)}/channels`\n : `${projectBasePath}/plugins/${provider}/channels`;\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n const data = (await response.json()) as {\n channels?: AutomationToolChannel[];\n error?: string;\n errorMessage?: string;\n success?: boolean;\n };\n\n if (response.ok) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage,\n success: data.success ?? true,\n };\n }\n\n if (data.success === false) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage ?? `Failed to load ${provider === 'slack' ? 'Slack' : 'Teams'} channels.`,\n success: false,\n };\n }\n\n const error = data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n },\n runAutomation: async (automationId) =>\n request<MutationResult & { runId?: string }>(`${automationsBasePath}/${encodeURIComponent(automationId)}/runs`, {\n method: 'POST',\n }),\n updateAutomation: async (automationId, input) =>\n request<MutationResult & { automation?: Automation }>(\n `${automationsBasePath}/${encodeURIComponent(automationId)}`,\n {\n body: JSON.stringify(input),\n method: 'PATCH',\n }\n ),\n updateSkill: async (skillId, input) =>\n request<MutationResult & { skill?: Skill }>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, {\n body: JSON.stringify(input),\n method: 'PATCH',\n }),\n };\n}\n\nexport class FetcherError extends Error {\n status: number;\n\n constructor(status: number, message = 'Request failed') {\n super(message);\n this.name = 'FetcherError';\n this.status = status;\n }\n}\n\nexport const fetcher = async <T>(url: string): Promise<T> => {\n const response = await fetch(url, { credentials: 'include' });\n\n if (!response.ok) {\n throw new FetcherError(response.status);\n }\n\n return (await response.json()) as T;\n};\n\nexport function paths(projectId: string): {\n activity: (_options?: { filter?: 'all' | 'needs_action'; limit?: number; offset?: number }) => string;\n activityItem: (_itemId: string) => string;\n /** Badge counts; with `since`, also the unread items created after it. */\n activitySummary: (_since?: string | null) => string;\n agentChat: (_chatId: string) => string;\n agentChatSearch: (_query: string) => string;\n agentChats: (_offset?: number) => string;\n agentProfile: () => string;\n approval: (_approvalId: string) => string;\n approvals: (_options?: {\n limit?: number;\n offset?: number;\n runId?: string;\n status?: AutomationApprovalStatus;\n }) => string;\n approvalsCount: string;\n automation: (_automationId: string) => string;\n automationRuns: (_automationId: string, _offset?: number, _limit?: number) => string;\n automations: (_options?: {\n enabled?: boolean[];\n limit?: number;\n offset?: number;\n search?: string;\n visibility?: AutomationVisibility[];\n }) => string;\n creditBalance: string;\n entities: string;\n run: (_runId: string) => string;\n runHistory: (_scope: 'mine' | 'team', _offset?: number, _limit?: number) => string;\n skill: (_skillId: string) => string;\n skills: (_options?: { limit?: number; offset?: number; search?: string; visibility?: AutomationVisibility[] }) => string;\n spaces: string;\n tools: (_automationId?: string) => string;\n} {\n const basePath = `/api/flexkit/${projectId}/automations`;\n const skillsBasePath = `/api/flexkit/${projectId}/skills`;\n const agentChatsBasePath = `/api/flexkit/${projectId}/agent/chats`;\n\n return {\n activity: (options = {}) => {\n const { filter = 'all', limit = 25, offset = 0 } = options;\n const params = new URLSearchParams({ filter, limit: limit.toString(), offset: offset.toString() });\n\n return `/api/flexkit/${projectId}/activity?${params.toString()}`;\n },\n activityItem: (itemId) => `/api/flexkit/${projectId}/activity/${encodeURIComponent(itemId)}`,\n activitySummary: (since) =>\n since\n ? `/api/flexkit/${projectId}/activity/summary?since=${encodeURIComponent(since)}`\n : `/api/flexkit/${projectId}/activity/summary`,\n agentChat: (chatId) => `${agentChatsBasePath}/${encodeURIComponent(chatId)}`,\n agentChatSearch: (query) => `${agentChatsBasePath}/search?q=${encodeURIComponent(query)}`,\n agentChats: (offset = 0) => `${agentChatsBasePath}?offset=${offset.toString()}`,\n agentProfile: () => `/api/flexkit/${projectId}/agent/profile`,\n approval: (approvalId) => `${basePath}/approvals/${encodeURIComponent(approvalId)}`,\n approvals: (options = {}) => {\n const { limit = 25, offset = 0, runId, status } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (status) {\n params.set('status', status);\n }\n\n if (runId) {\n params.set('runId', runId);\n }\n\n return `${basePath}/approvals?${params.toString()}`;\n },\n approvalsCount: `${basePath}/approvals?limit=1`,\n automation: (automationId) => `${basePath}/${encodeURIComponent(automationId)}`,\n automationRuns: (automationId, offset = 0, limit = 25) =>\n `${basePath}/${encodeURIComponent(automationId)}/runs?offset=${offset.toString()}&limit=${limit.toString()}`,\n automations: (options = {}) => {\n const { enabled, limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (enabled && enabled.length > 0) {\n params.set('enabled', enabled.map((value) => (value ? 'true' : 'false')).join(','));\n }\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${basePath}?${params.toString()}`;\n },\n creditBalance: `${basePath}/credits`,\n entities: `${basePath}/entities`,\n run: (runId) => `${basePath}/runs/${encodeURIComponent(runId)}`,\n runHistory: (scope, offset = 0, limit = 25) =>\n `${basePath}/runs?scope=${scope}&offset=${offset.toString()}&limit=${limit.toString()}`,\n skill: (skillId) => `${skillsBasePath}/${encodeURIComponent(skillId)}`,\n skills: (options = {}) => {\n const { limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${skillsBasePath}?${params.toString()}`;\n },\n spaces: `/api/flexkit/${projectId}/spaces`,\n tools: (automationId) =>\n automationId ? `${basePath}/${encodeURIComponent(automationId)}/tools` : `${basePath}/tools`,\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import'./index.css';import {A,C,B,p,o as o$1,h as h$1,i}from'./chunk-G74PT7Z7.js';import {d,c}from'./chunk-P6BZ4QP7.js';import {b}from'./chunk-7SK5YPHT.js';import {f}from'./chunk-76CL7HSO.js';import {ma}from'./chunk-YCCFUGWJ.js';import {a,d as d$1,c as c$1,e as e$1,g as g$1}from'./chunk-HDOIOXMP.js';import {e,g,h,j,o,n,k}from'./chunk-SZEGGBOC.js';import {b as b$1}from'./chunk-6NRQMG26.js';import {PencilIcon,Trash2Icon,Ellipsis,Settings2,RefreshCw,Loader2,Trash2}from'lucide-react';import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {find,propEq}from'ramda';import {gql}from'@apollo/client';import {useApolloClient}from'@apollo/client/react';import {toast}from'sonner';function Me({entityName:l,entityNamePlural:a,row:r,options:s={canDelete:true,canEdit:true}}){let f=A(),E=b(),c=r.original._id,D=(s.canDelete??true)&&E,p=s.canEdit??true;function h$1(){f({type:"EditEntity",payload:{entityId:c,entityNamePlural:a}});}function d(){f({type:"DeleteEntity",payload:{entityId:c,entityName:l}});}return jsxs("div",{className:"fk:flex",children:[p&&jsxs(b$1,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1",onClick:h$1,variant:"ghost",children:[jsx(PencilIcon,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Edit"})]}),D&&!p&&jsxs(b$1,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1",onClick:d,variant:"ghost",children:[jsx(Trash2Icon,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Delete"})]}),p&&D&&jsxs(e,{children:[jsx(g,{asChild:true,children:jsxs(b$1,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0",variant:"ghost",children:[jsx(Ellipsis,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Additional actions"})]})}),jsxs(h,{align:"end",className:"w-[160px]",children:[jsxs(j,{onClick:h$1,children:[jsx(PencilIcon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Edit"]}),jsx(o,{}),jsxs(j,{className:"fk:text-destructive",onClick:d,children:[jsx(Trash2Icon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Delete"]})]})]})]})}function Y({table:l}){return jsxs(e,{children:[jsx(g,{asChild:true,children:jsxs(b$1,{className:"fk:hidden fk:h-8 fk:lg:flex",size:"sm",variant:"outline",children:[jsx(Settings2,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"View"]})}),jsxs(h,{align:"end",className:"fk:w-[150px]",children:[jsx(n,{children:"Toggle columns"}),jsx(o,{}),l.getAllColumns().filter(a=>typeof a.accessorFn<"u"&&a.getCanHide()).map(a=>jsx(k,{checked:a.getIsVisible(),className:"capitalize",onCheckedChange:r=>{a.toggleVisibility(!!r);},children:a.id},a.id))]})]})}function Ue({entityName:l,isReloading:a$1=false,onReload:r,table:s}){let f$1=A(),E=d(),c$2=c(),D=useApolloClient(),{currentProject:p$1,currentProjectId:h}=f(),d$2=p$1?.schema??[],w=p$1?.scopes,[ee,te,ae]=C(),[b$2,B$1]=useState(false),y=b(),m=s.getSelectedRowModel().rows.map(e=>e.original._id);function oe(){f$1({type:"AddEntity",payload:{entityName:l}});}function ne(e){E({type:"setScope",payload:{projectId:h,scope:e}});}async function le(e){if(e.length===0)return;let u=h$1(l,d$2,e);await new Promise((se,re)=>{te(gql`
2
+ ${u}
3
+ `),ae({variables:{where:i(e)},update(x){for(let ce of e)x.evict({id:ce});},onCompleted:()=>{se();},onError:x=>{re(x);}}),ee(true);});}function ie(){let e=l==="_asset"?"asset":l.toLowerCase();f$1({type:"AlertDialog",payload:{options:{dialogTitle:`Delete ${m.length} ${e}${m.length>1?"s":""}`,dialogMessage:m.length>1?`Are you sure you want to delete the selected ${e}s? They will be deleted permanently.`:`Are you sure you want to delete the selected ${e}? The item will be deleted permanently.`,dialogCancelTitle:"Cancel",dialogActionLabel:"Delete",isDestructive:true,dialogActionSubmit:async()=>{B$1(true);try{let u=[...m];await le(u),s.resetRowSelection(),await p(D,o$1(l,d$2),u),toast.success(u.length>1?"Items successfully deleted.":"Item successfully deleted.");}catch{toast.error("Failed to delete selected items.");}finally{B$1(false);}},dialogActionCancel:()=>{}}}});}return jsxs("div",{className:"fk:flex fk:items-center fk:justify-between",children:[jsxs("div",{className:"fk:flex fk:flex-1 fk:items-center fk:space-x-2",children:[w&&w.length>0?jsxs(a,{defaultValue:c$2.scope,onValueChange:e=>{ne(e);},value:c$2.scope,children:[jsxs(d$1,{className:"fk:w-48!",id:"project",size:"sm",children:[jsx("span",{className:"fk:text-muted-foreground",children:"Scope:"}),jsx(c$1,{children:(find(propEq(c$2.scope??"","name"))(w)||null)?.label})]}),jsx(e$1,{children:w.map(e=>jsx(g$1,{value:e.name,children:e.label},e.name))})]}):null,jsx(Y,{table:s}),r?jsx(b$1,{"aria-label":"Reload",className:"fk:h-8",disabled:b$2||a$1,onClick:r,size:"icon-sm",variant:"outline",children:jsx(RefreshCw,{className:a$1?"fk:animate-spin":void 0})}):null,jsx(B,{table:s})]}),m.length>0?jsx(ma,{disabled:!y,children:jsxs(b$1,{className:"fk:h-8 fk:mr-2 fk:lg:flex",disabled:b$2||!y,onClick:ie,size:"sm",variant:"destructive",children:[b$2?jsx(Loader2,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin"}):jsx(Trash2,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Delete (",m.length,")"]})}):null,jsx(ma,{disabled:!y,children:jsx(b$1,{className:"fk:ml-auto fk:h-8 fk:lg:flex",disabled:b$2||!y,onClick:oe,size:"sm",variant:"default",children:"Create"})})]})}export{Me as a,Y as b,Ue as c};//# sourceMappingURL=chunk-MPLNRUP3.js.map
4
+ //# sourceMappingURL=chunk-MPLNRUP3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["DataTableRowActions","entityName","entityNamePlural","row","options","actionDispatch","useDispatch","canMutate","useCanMutate","entityId","canDelete","canEdit","handleEdit","handleDelete","jsxs","Button","jsx","PencilIcon","Trash2Icon","DropdownMenu","DropdownMenuTrigger","Ellipsis","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DataTableViewOptions","table","Settings2","DropdownMenuLabel","column","DropdownMenuCheckboxItem","value","DataTableToolbar","isReloading","onReload","appDispatch","useAppDispatch","appContext","useAppContext","apolloClient","useApolloClient","currentProject","currentProjectId","useConfig","schema","scopes","runMutation","setMutation","setOptions","useEntityMutation","isDeleting","setIsDeleting","useState","selectedIds","handleCreate","handleScopeChange","deleteSelected","ids","mutation","getEntityDeleteMutation","resolve","reject","gql","getEntityDeleteWhere","cache","id","error","handleBatchDelete","itemLabel","idsToDelete","scheduleEntityListRemoval","getEntityListQueryName","toast","Select","SelectTrigger","SelectValue","find","propEq","SelectContent","scopeItem","SelectItem","RefreshCw","DataTableSortedBy","PermissionTooltip","Loader2","Trash2"],"mappings":"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","file":"chunk-3FIKCGSP.js","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { Ellipsis, PencilIcon, Trash2Icon } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\nimport { useCanMutate } from '../core/permissions';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const canMutate = useCanMutate();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n // Read-only roles keep the pencil (the drawer doubles as their read view)\n // but lose the delete affordance entirely.\n const canDelete = (options.canDelete ?? true) && canMutate;\n const canEdit = options.canEdit ?? true;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk:flex\">\n {canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleEdit} variant=\"ghost\">\n <PencilIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Edit</span>\n </Button>\n )}\n {canDelete && !canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2Icon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n )}\n {canEdit && canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>\n <PencilIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"fk:text-destructive\" onClick={handleDelete}>\n <Trash2Icon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:hidden fk:h-8 fk:lg:flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, RefreshCw, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useCanMutate } from '../core/permissions';\nimport { useConfig } from '../core/config/config-context';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { DataTableSortedBy } from './data-table-sorted-by';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n isReloading?: boolean;\n onReload?: () => void;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({\n entityName,\n isReloading = false,\n onReload,\n table,\n}: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const apolloClient = useApolloClient();\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const scopes = currentProject?.scopes;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n const canMutate = useCanMutate();\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteSelected(ids: string[]): Promise<void> {\n if (ids.length === 0) {\n return;\n }\n\n const mutation = getEntityDeleteMutation(entityName, schema, ids);\n\n await new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: getEntityDeleteWhere(ids) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of ids) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n\n try {\n const idsToDelete = [...selectedIds];\n\n await deleteSelected(idsToDelete);\n\n table.resetRowSelection();\n // Drop rows immediately, then soft-refetch counts/pages.\n await scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(entityName, schema),\n idsToDelete\n );\n toast.success(idsToDelete.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:justify-between\">\n <div className=\"fk:flex fk:flex-1 fk:items-center fk:space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk:w-48!\" id=\"project\" size=\"sm\">\n <span className=\"fk:text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <DataTableViewOptions table={table} />\n {onReload ? (\n <Button\n aria-label=\"Reload\"\n className=\"fk:h-8\"\n disabled={isDeleting || isReloading}\n onClick={onReload}\n size=\"icon-sm\"\n variant=\"outline\"\n >\n <RefreshCw className={isReloading ? 'fk:animate-spin' : undefined} />\n </Button>\n ) : null}\n <DataTableSortedBy table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:h-8 fk:mr-2 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin\" />\n ) : (\n <Trash2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n </PermissionTooltip>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:ml-auto fk:h-8 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </PermissionTooltip>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["DataTableRowActions","entityName","entityNamePlural","row","options","actionDispatch","useDispatch","canMutate","useCanMutate","entityId","canDelete","canEdit","handleEdit","handleDelete","jsxs","Button","jsx","PencilIcon","Trash2Icon","DropdownMenu","DropdownMenuTrigger","Ellipsis","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DataTableViewOptions","table","Settings2","DropdownMenuLabel","column","DropdownMenuCheckboxItem","value","DataTableToolbar","isReloading","onReload","appDispatch","useAppDispatch","appContext","useAppContext","apolloClient","useApolloClient","currentProject","currentProjectId","useConfig","schema","scopes","runMutation","setMutation","setOptions","useEntityMutation","isDeleting","setIsDeleting","useState","selectedIds","handleCreate","handleScopeChange","deleteSelected","ids","mutation","getEntityDeleteMutation","resolve","reject","gql","getEntityDeleteWhere","cache","id","error","handleBatchDelete","itemLabel","idsToDelete","scheduleEntityListRemoval","getEntityListQueryName","toast","Select","SelectTrigger","SelectValue","find","propEq","SelectContent","scopeItem","SelectItem","RefreshCw","DataTableSortedBy","PermissionTooltip","Loader2","Trash2"],"mappings":"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","file":"chunk-MPLNRUP3.js","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { Ellipsis, PencilIcon, Trash2Icon } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\nimport { useCanMutate } from '../core/permissions';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const canMutate = useCanMutate();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n // Read-only roles keep the pencil (the drawer doubles as their read view)\n // but lose the delete affordance entirely.\n const canDelete = (options.canDelete ?? true) && canMutate;\n const canEdit = options.canEdit ?? true;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk:flex\">\n {canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleEdit} variant=\"ghost\">\n <PencilIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Edit</span>\n </Button>\n )}\n {canDelete && !canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2Icon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n )}\n {canEdit && canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>\n <PencilIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"fk:text-destructive\" onClick={handleDelete}>\n <Trash2Icon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:hidden fk:h-8 fk:lg:flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, RefreshCw, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useCanMutate } from '../core/permissions';\nimport { useConfig } from '../core/config/config-context';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { DataTableSortedBy } from './data-table-sorted-by';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n isReloading?: boolean;\n onReload?: () => void;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({\n entityName,\n isReloading = false,\n onReload,\n table,\n}: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const apolloClient = useApolloClient();\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const scopes = currentProject?.scopes;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n const canMutate = useCanMutate();\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteSelected(ids: string[]): Promise<void> {\n if (ids.length === 0) {\n return;\n }\n\n const mutation = getEntityDeleteMutation(entityName, schema, ids);\n\n await new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: getEntityDeleteWhere(ids) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of ids) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n\n try {\n const idsToDelete = [...selectedIds];\n\n await deleteSelected(idsToDelete);\n\n table.resetRowSelection();\n // Drop rows immediately, then soft-refetch counts/pages.\n await scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(entityName, schema),\n idsToDelete\n );\n toast.success(idsToDelete.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:justify-between\">\n <div className=\"fk:flex fk:flex-1 fk:items-center fk:space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk:w-48!\" id=\"project\" size=\"sm\">\n <span className=\"fk:text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <DataTableViewOptions table={table} />\n {onReload ? (\n <Button\n aria-label=\"Reload\"\n className=\"fk:h-8\"\n disabled={isDeleting || isReloading}\n onClick={onReload}\n size=\"icon-sm\"\n variant=\"outline\"\n >\n <RefreshCw className={isReloading ? 'fk:animate-spin' : undefined} />\n </Button>\n ) : null}\n <DataTableSortedBy table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:h-8 fk:mr-2 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin\" />\n ) : (\n <Trash2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n </PermissionTooltip>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:ml-auto fk:h-8 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </PermissionTooltip>\n </div>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {g as g$1,f}from'./chunk-MM356YIK.js';import {a,b,c,e}from'./chunk-USNXQOMJ.js';import {b as b$1}from'./chunk-6NRQMG26.js';import {BellIcon}from'lucide-react';import {Link}from'react-router-dom';import v from'swr';import {jsx,jsxs}from'react/jsx-runtime';function g(t){let{data:o}=v(t?g$1(t).activitySummary():null,f,{refreshInterval:3e4});return o}function n(t){return t>99?"99+":t.toString()}function x({projectId:t}){let o=g(t),e$1=o?.needsActionCount??0,r=o?.unreadCount??0,f=e$1>0?`Activity: ${n(e$1)} waiting for you`:r>0?`Activity: ${n(r)} unread`:"Activity";return jsx(a,{children:jsxs(b,{children:[jsx(c,{asChild:true,children:jsx(b$1,{asChild:true,"aria-label":f,className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",size:"icon",variant:"ghost",children:jsxs(Link,{to:`/${t}/ai/activity`,children:[jsx(BellIcon,{className:"fk:size-4"}),e$1>0?jsx("span",{className:"fk:absolute fk:-right-1 fk:-top-1 fk:flex fk:h-4 fk:min-w-4 fk:items-center fk:justify-center fk:rounded-full fk:bg-amber-500 fk:px-1 fk:text-[0.625rem] fk:font-semibold fk:leading-none fk:text-white",children:n(e$1)}):r>0?jsx("span",{className:"fk:absolute fk:right-1 fk:top-1 fk:size-2 fk:rounded-full fk:bg-primary"}):null]})})}),jsx(e,{children:f})]})})}export{g as a,x as b};//# sourceMappingURL=chunk-QDXGSL5B.js.map
2
+ //# sourceMappingURL=chunk-QDXGSL5B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/apps/ai/activity-nav-button.tsx"],"names":["useActivitySummary","projectId","data","useSWR","paths","fetcher","formatCount","count","ActivityNavButton","summary","needsAction","unread","label","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","Button","Link","BellIcon","TooltipContent"],"mappings":"0RAaO,SAASA,CAAAA,CAAmBC,CAAAA,CAA4D,CAC7F,GAAM,CAAE,IAAA,CAAAC,CAAK,CAAA,CAAIC,EAAwBF,CAAAA,CAAYG,GAAAA,CAAMH,CAAS,CAAA,CAAE,iBAAgB,CAAI,IAAA,CAAMI,EAAS,CACvG,eAAA,CAAiB,GACnB,CAAC,CAAA,CAED,OAAOH,CACT,CAEA,SAASI,CAAAA,CAAYC,CAAAA,CAAuB,CAC1C,OAAOA,CAAAA,CAAQ,EAAA,CAAK,KAAA,CAAQA,CAAAA,CAAM,UACpC,CAGO,SAASC,CAAAA,CAAkB,CAAE,UAAAP,CAAU,CAAA,CAAuC,CACnF,IAAMQ,EAAUT,CAAAA,CAAmBC,CAAS,CAAA,CACtCS,GAAAA,CAAcD,GAAS,gBAAA,EAAoB,CAAA,CAC3CE,CAAAA,CAASF,CAAAA,EAAS,aAAe,CAAA,CACjCG,CAAAA,CACJF,IAAc,CAAA,CACV,CAAA,UAAA,EAAaJ,EAAYI,GAAW,CAAC,CAAA,gBAAA,CAAA,CACrCC,CAAAA,CAAS,EACP,CAAA,UAAA,EAAaL,CAAAA,CAAYK,CAAM,CAAC,UAChC,UAAA,CAER,OACEE,GAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAAC,IAAAA,CAACC,CAAAA,CAAA,CACC,UAAAH,GAAAA,CAACI,CAAAA,CAAA,CAAe,OAAA,CAAO,KACrB,QAAA,CAAAJ,GAAAA,CAACK,GAAAA,CAAA,CAAO,QAAO,IAAA,CAAC,YAAA,CAAYN,CAAAA,CAAO,SAAA,CAAU,4CAA4C,IAAA,CAAK,MAAA,CAAO,QAAQ,OAAA,CAC3G,QAAA,CAAAG,KAACI,IAAAA,CAAA,CAAK,EAAA,CAAI,CAAA,CAAA,EAAIlB,CAAS,CAAA,YAAA,CAAA,CACrB,QAAA,CAAA,CAAAY,GAAAA,CAACO,QAAAA,CAAA,CAAS,SAAA,CAAU,WAAA,CAAY,CAAA,CAC/BV,GAAAA,CAAc,EACbG,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,yMAAA,CACb,QAAA,CAAAP,EAAYI,GAAW,CAAA,CAC1B,CAAA,CACEC,CAAAA,CAAS,EACXE,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yEAAA,CAA0E,EACxF,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CACF,CAAA,CACAA,IAACQ,CAAAA,CAAA,CAAgB,SAAAT,CAAAA,CAAM,CAAA,CAAA,CACzB,EACF,CAEJ","file":"chunk-QDXGSL5B.js","sourcesContent":["import type { JSX } from 'react';\nimport { BellIcon } from 'lucide-react';\nimport { Link } from 'react-router-dom';\nimport useSWR from 'swr';\nimport { Button } from '../../ui/primitives/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { fetcher, paths } from './api';\nimport type { ActivitySummary } from './types';\n\n/**\n * The project's Activity badge counts. `ActivityNotifier` refreshes the same\n * SWR key on every poll, so every reader stays in sync with one request.\n */\nexport function useActivitySummary(projectId: string | undefined): ActivitySummary | undefined {\n const { data } = useSWR<ActivitySummary>(projectId ? paths(projectId).activitySummary() : null, fetcher, {\n refreshInterval: 30_000,\n });\n\n return data;\n}\n\nfunction formatCount(count: number): string {\n return count > 99 ? '99+' : count.toString();\n}\n\n/** Navbar shortcut to Activity, so pending items are visible from every app. */\nexport function ActivityNavButton({ projectId }: { projectId: string }): JSX.Element {\n const summary = useActivitySummary(projectId);\n const needsAction = summary?.needsActionCount ?? 0;\n const unread = summary?.unreadCount ?? 0;\n const label =\n needsAction > 0\n ? `Activity: ${formatCount(needsAction)} waiting for you`\n : unread > 0\n ? `Activity: ${formatCount(unread)} unread`\n : 'Activity';\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button asChild aria-label={label} className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" size=\"icon\" variant=\"ghost\">\n <Link to={`/${projectId}/ai/activity`}>\n <BellIcon className=\"fk:size-4\" />\n {needsAction > 0 ? (\n <span className=\"fk:absolute fk:-right-1 fk:-top-1 fk:flex fk:h-4 fk:min-w-4 fk:items-center fk:justify-center fk:rounded-full fk:bg-amber-500 fk:px-1 fk:text-[0.625rem] fk:font-semibold fk:leading-none fk:text-white\">\n {formatCount(needsAction)}\n </span>\n ) : unread > 0 ? (\n <span className=\"fk:absolute fk:right-1 fk:top-1 fk:size-2 fk:rounded-full fk:bg-primary\" />\n ) : null}\n </Link>\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- import'./index.css';import {c,e as e$1}from'./chunk-P6BZ4QP7.js';import {f}from'./chunk-66N44IKJ.js';import {e}from'./chunk-NNA4MLFC.js';import {useMemo}from'react';import A from'swr';import {find,propEq}from'ramda';function T(n,i){let{scope:c$1}=c(),{currentProject:e$1}=f(),o=useMemo(()=>e$1?.schema??[],[e$1]),a=e$1?.scopes?.find(t=>t.isDefault)?.name??"default",m=i?.commonParams.q?JSON.stringify(i):null,{data:r,error:s,isLoading:y}=A(m,()=>fetch(e(n).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(i),method:"POST",mode:"cors"}).then(t=>t.json()));return {results:useMemo(()=>E(r?.results??[],n,o,c$1,a)??[],[r,a,n,o,c$1]),error:s,isLoading:y}}function E(n,i,c,e,o){return n?.filter(l=>l?.hits?.length>0).map(l=>{let a=l,m=a.collection.replace(`${i}_`,"").replace(/_\d+$/,""),r=find(propEq(m,"plural"))(c);if(!r)return [];let s=e$1(r)?.name??"",y=r?.name??m;return a.hits.map(({document:u})=>{let t=u[s],b=(t&&typeof t!="string"?t[e]??t[o]:null)??u[s],N=Object.entries(u).reduce((d,[p,f])=>{if(p!==s&&p!=="id"&&p!=="_updatedAt"){let _=typeof f!="string"?f[e]??f[o]:f;d[p]=_;}return d},{});return {_id:u.id,_entityName:y,_entityNamePlural:m,[s]:b,...N}})}).flat()}export{T as a};//# sourceMappingURL=chunk-LYGHDJ5A.js.map
2
- //# sourceMappingURL=chunk-LYGHDJ5A.js.map
1
+ import'./index.css';import {c,e as e$1}from'./chunk-P6BZ4QP7.js';import {f}from'./chunk-76CL7HSO.js';import {e}from'./chunk-NNA4MLFC.js';import {useMemo}from'react';import A from'swr';import {find,propEq}from'ramda';function T(n,i){let{scope:c$1}=c(),{currentProject:e$1}=f(),o=useMemo(()=>e$1?.schema??[],[e$1]),a=e$1?.scopes?.find(t=>t.isDefault)?.name??"default",m=i?.commonParams.q?JSON.stringify(i):null,{data:r,error:s,isLoading:y}=A(m,()=>fetch(e(n).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(i),method:"POST",mode:"cors"}).then(t=>t.json()));return {results:useMemo(()=>E(r?.results??[],n,o,c$1,a)??[],[r,a,n,o,c$1]),error:s,isLoading:y}}function E(n,i,c,e,o){return n?.filter(l=>l?.hits?.length>0).map(l=>{let a=l,m=a.collection.replace(`${i}_`,"").replace(/_\d+$/,""),r=find(propEq(m,"plural"))(c);if(!r)return [];let s=e$1(r)?.name??"",y=r?.name??m;return a.hits.map(({document:u})=>{let t=u[s],b=(t&&typeof t!="string"?t[e]??t[o]:null)??u[s],N=Object.entries(u).reduce((d,[p,f])=>{if(p!==s&&p!=="id"&&p!=="_updatedAt"){let _=typeof f!="string"?f[e]??f[o]:f;d[p]=_;}return d},{});return {_id:u.id,_entityName:y,_entityNamePlural:m,[s]:b,...N}})}).flat()}export{T as a};//# sourceMappingURL=chunk-QJDD73JR.js.map
2
+ //# sourceMappingURL=chunk-QJDD73JR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/use-search.tsx"],"names":["useSearch","projectId","searchRequest","scope","useAppContext","currentProject","useConfig","schema","useMemo","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","results","result","item","entityNamePlural","entitySchema","find","propEq","primaryAttributeName","getDisplayAttribute","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-LYGHDJ5A.js","sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport useSWR from 'swr';\nimport { find, propEq } from 'ramda';\nimport { apiPaths } from './api-paths';\nimport { useAppContext } from './app-context';\nimport { useConfig } from './config/config-context';\nimport { getDisplayAttribute } from './get-display-attribute';\nimport type { Entity, RawResultItem, RawSearchResultItems, SearchRequestProps, SearchResultItem } from './types';\n\nexport function useSearch(\n projectId: string,\n searchRequest: SearchRequestProps | null\n): { results: SearchResultItem[] | []; error: Error; isLoading: boolean } {\n const { scope } = useAppContext();\n const { currentProject } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const swrKey = searchRequest?.commonParams.q ? JSON.stringify(searchRequest) : null;\n const { data, error, isLoading } = useSWR(swrKey, () =>\n fetch(apiPaths(projectId).search, {\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(searchRequest),\n method: 'POST',\n mode: 'cors',\n }).then((res) => res.json() as Promise<{ results: RawSearchResultItems }>)\n );\n const results = useMemo(\n () => mapResults(data?.results ?? [], projectId, schema, scope, defaultScope) ?? [],\n [data, defaultScope, projectId, schema, scope]\n );\n\n return { results, error, isLoading };\n}\n\nfunction mapResults(\n results: RawSearchResultItems | undefined,\n projectId: string,\n schema: Entity[],\n scope: string,\n defaultScope: string\n): SearchResultItem[] | undefined {\n return results\n ?.filter((result) => (result as RawResultItem)?.hits?.length > 0)\n .map((result) => {\n const item = result as RawResultItem;\n const entityNamePlural = item.collection.replace(`${projectId}_`, '').replace(/_\\d+$/, '');\n const entitySchema = find<Entity>(propEq(entityNamePlural, 'plural'))(schema);\n\n if (!entitySchema) {\n return [];\n }\n\n const primaryAttributeName = getDisplayAttribute(entitySchema)?.name ?? '';\n const entityName = entitySchema?.name ?? entityNamePlural;\n\n // iterate over the hits and return an object with the primary attribute value first and then the rest of the attributes.\n return item.hits.map(({ document }) => {\n const primaryAttribute = document[primaryAttributeName];\n const scopedPrimaryAttribute =\n primaryAttribute && typeof primaryAttribute !== 'string'\n ? (primaryAttribute[scope] ?? primaryAttribute[defaultScope])\n : null;\n const primaryAttributeValue = scopedPrimaryAttribute ?? document[primaryAttributeName];\n const attributes = Object.entries(document).reduce(\n (acc: Omit<SearchResultItem, '_id' | '_entityName' | '_entityNamePlural'>, [key, value]) => {\n if (key !== primaryAttributeName && key !== 'id' && key !== '_updatedAt') {\n const scopedValue = typeof value !== 'string' ? (value[scope] ?? value[defaultScope]) : value;\n\n acc[key] = scopedValue;\n }\n\n return acc;\n },\n {}\n );\n\n return {\n _id: document.id,\n _entityName: entityName,\n _entityNamePlural: entityNamePlural,\n [primaryAttributeName]: primaryAttributeValue as string,\n ...attributes,\n };\n });\n })\n .flat();\n}\n"]}
1
+ {"version":3,"sources":["../src/core/use-search.tsx"],"names":["useSearch","projectId","searchRequest","scope","useAppContext","currentProject","useConfig","schema","useMemo","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","results","result","item","entityNamePlural","entitySchema","find","propEq","primaryAttributeName","getDisplayAttribute","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-QJDD73JR.js","sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport useSWR from 'swr';\nimport { find, propEq } from 'ramda';\nimport { apiPaths } from './api-paths';\nimport { useAppContext } from './app-context';\nimport { useConfig } from './config/config-context';\nimport { getDisplayAttribute } from './get-display-attribute';\nimport type { Entity, RawResultItem, RawSearchResultItems, SearchRequestProps, SearchResultItem } from './types';\n\nexport function useSearch(\n projectId: string,\n searchRequest: SearchRequestProps | null\n): { results: SearchResultItem[] | []; error: Error; isLoading: boolean } {\n const { scope } = useAppContext();\n const { currentProject } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const swrKey = searchRequest?.commonParams.q ? JSON.stringify(searchRequest) : null;\n const { data, error, isLoading } = useSWR(swrKey, () =>\n fetch(apiPaths(projectId).search, {\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(searchRequest),\n method: 'POST',\n mode: 'cors',\n }).then((res) => res.json() as Promise<{ results: RawSearchResultItems }>)\n );\n const results = useMemo(\n () => mapResults(data?.results ?? [], projectId, schema, scope, defaultScope) ?? [],\n [data, defaultScope, projectId, schema, scope]\n );\n\n return { results, error, isLoading };\n}\n\nfunction mapResults(\n results: RawSearchResultItems | undefined,\n projectId: string,\n schema: Entity[],\n scope: string,\n defaultScope: string\n): SearchResultItem[] | undefined {\n return results\n ?.filter((result) => (result as RawResultItem)?.hits?.length > 0)\n .map((result) => {\n const item = result as RawResultItem;\n const entityNamePlural = item.collection.replace(`${projectId}_`, '').replace(/_\\d+$/, '');\n const entitySchema = find<Entity>(propEq(entityNamePlural, 'plural'))(schema);\n\n if (!entitySchema) {\n return [];\n }\n\n const primaryAttributeName = getDisplayAttribute(entitySchema)?.name ?? '';\n const entityName = entitySchema?.name ?? entityNamePlural;\n\n // iterate over the hits and return an object with the primary attribute value first and then the rest of the attributes.\n return item.hits.map(({ document }) => {\n const primaryAttribute = document[primaryAttributeName];\n const scopedPrimaryAttribute =\n primaryAttribute && typeof primaryAttribute !== 'string'\n ? (primaryAttribute[scope] ?? primaryAttribute[defaultScope])\n : null;\n const primaryAttributeValue = scopedPrimaryAttribute ?? document[primaryAttributeName];\n const attributes = Object.entries(document).reduce(\n (acc: Omit<SearchResultItem, '_id' | '_entityName' | '_entityNamePlural'>, [key, value]) => {\n if (key !== primaryAttributeName && key !== 'id' && key !== '_updatedAt') {\n const scopedValue = typeof value !== 'string' ? (value[scope] ?? value[defaultScope]) : value;\n\n acc[key] = scopedValue;\n }\n\n return acc;\n },\n {}\n );\n\n return {\n _id: document.id,\n _entityName: entityName,\n _entityNamePlural: entityNamePlural,\n [primaryAttributeName]: primaryAttributeValue as string,\n ...attributes,\n };\n });\n })\n .flat();\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import'./index.css';import {jsx,jsxs}from'react/jsx-runtime';var t="M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z";function n({title:l,theme:f}){return jsx("a",{className:"fk:flex fk:items-center fk:rounded-md fk:outline-none fk:transition-[color,box-shadow] fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:corner-squircle",href:"/",title:l,children:f==="light"?jsxs("svg",{className:"fk:h-8 fk:w-8",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"white"}),jsx("path",{d:t,fill:"#020817"})]}):jsxs("svg",{className:"fk:h-8 fk:w-8",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"#020817"}),jsx("path",{d:t,fill:"white"})]})})}
2
+ export{t as a,n as b};//# sourceMappingURL=chunk-TWMX2IQ2.js.map
3
+ //# sourceMappingURL=chunk-TWMX2IQ2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/components/logo.tsx"],"names":["LOGO_MARK_PATH","Logo","title","theme","jsx","jsxs"],"mappings":"iEAGaA,CAAAA,CACX,uRAEK,SAASC,CAAAA,CAAK,CAAE,KAAA,CAAAC,CAAAA,CAAO,MAAAC,CAAM,CAAA,CAA8D,CAChG,OACEC,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAU,sKACV,IAAA,CAAK,GAAA,CACL,KAAA,CAAOF,CAAAA,CAEN,SAAAC,CAAAA,GAAU,OAAA,CACTE,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CAAgB,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,MAAM,4BAAA,CACnE,QAAA,CAAA,CAAAD,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAE,iBAAA,CAAkB,IAAA,CAAK,OAAA,CAAQ,CAAA,CACvCA,IAAC,MAAA,CAAA,CACC,CAAA,CAAGJ,CAAAA,CACH,IAAA,CAAK,UACP,CAAA,CAAA,CACF,CAAA,CAEAK,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAgB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,MAAM,4BAAA,CACnE,QAAA,CAAA,CAAAD,IAAC,MAAA,CAAA,CAAK,CAAA,CAAE,kBAAkB,IAAA,CAAK,SAAA,CAAU,CAAA,CACzCA,GAAAA,CAAC,QACC,CAAA,CAAGJ,CAAAA,CACH,KAAK,OAAA,CACP,CAAA,CAAA,CACF,EAEJ,CAEJ","file":"chunk-TWMX2IQ2.js","sourcesContent":["import type { JSX } from 'react';\n\n/** The Flexkit mark (a 48×48 squircle with the two brackets cut out). */\nexport const LOGO_MARK_PATH =\n 'M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z';\n\nexport function Logo({ title, theme }: { title: string; theme: string | undefined }): JSX.Element {\n return (\n <a\n className=\"fk:flex fk:items-center fk:rounded-md fk:outline-none fk:transition-[color,box-shadow] fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:corner-squircle\"\n href=\"/\"\n title={title}\n >\n {theme === 'light' ? (\n <svg className=\"fk:h-8 fk:w-8\" fill=\"none\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 8H41V40H7V8Z\" fill=\"white\" />\n <path\n d={LOGO_MARK_PATH}\n fill=\"#020817\"\n />\n </svg>\n ) : (\n <svg className=\"fk:h-8 fk:w-8\" fill=\"none\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 8H41V40H7V8Z\" fill=\"#020817\" />\n <path\n d={LOGO_MARK_PATH}\n fill=\"white\"\n />\n </svg>\n )}\n </a>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {createContext,useState,useCallback,useEffect,useMemo,useContext}from'react';import {jsx}from'react/jsx-runtime';var V=["light","dark"],x="(prefers-color-scheme: dark)",k=createContext(void 0);function X({attribute:e="data-theme",children:s,defaultTheme:n,disableTransitionOnChange:d=false,enableColorScheme:g=true,enableSystem:r=true,forcedTheme:i,storageKey:l="theme",themes:m=V,value:h}){let[c,C]=useState(()=>N(l,n,r)),[a,T]=useState(()=>Q()),w=P(i??c,r,a),p=useCallback(t=>{if(!i&&(C(t),!!u()))try{window.localStorage.setItem(l,t);}catch{}},[i,l]);useEffect(()=>{if(!u()||!r)return;let t=window.matchMedia(x);function f(o){T(o.matches?"dark":"light");}return T(t.matches?"dark":"light"),t.addEventListener("change",f),()=>{t.removeEventListener("change",f);}},[r]),useEffect(()=>{if(!u())return;let t=window.document.documentElement,o=P(i??c??n,r,a);if(!o)return;let L=d?A():void 0,M=h?Object.values(h):m,v=h?.[o]??o;e==="class"&&(t.classList.remove(...M),t.classList.add(v)),e!=="class"&&t.setAttribute(e,v),g&&(o==="dark"||o==="light")&&(t.style.colorScheme=o),L?.();},[e,n,d,g,r,i,a,c,m,h]);let S=useMemo(()=>({forcedTheme:i,resolvedTheme:w,setTheme:p,systemTheme:a,theme:i??c,themes:r?[...m,"system"]:m}),[r,i,w,p,a,c,m]);return jsx(k.Provider,{value:S,children:s})}function _(){let e=useContext(k);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}function A(){let e=window.document.createElement("style");return e.appendChild(window.document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(e),()=>{window.getComputedStyle(window.document.body),window.setTimeout(()=>{e.remove();},0);}}function N(e,s,n){if(!u())return s??(n?"system":"light");try{let d=window.localStorage.getItem(e);if(d)return d}catch{}return s??(n?"system":"light")}function Q(){if(u())return window.matchMedia(x).matches?"dark":"light"}function u(){return typeof window<"u"}function P(e,s,n){if(e)return e!=="system"?e:s?n??"light":"light"}export{X as a,_ as b};//# sourceMappingURL=chunk-U45E5X3H.js.map
2
+ //# sourceMappingURL=chunk-U45E5X3H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/theme-context.tsx"],"names":["DEFAULT_THEMES","MEDIA_QUERY","ThemeContext","createContext","ThemeProvider","attribute","children","defaultTheme","disableTransitionOnChange","enableColorScheme","enableSystem","forcedTheme","storageKey","themes","value","theme","setThemeState","useState","getInitialTheme","systemTheme","setSystemTheme","getSystemTheme","resolvedTheme","resolveTheme","setTheme","useCallback","nextTheme","isBrowser","useEffect","mediaQuery","handleChange","event","root","nextResolvedTheme","cleanupTransitions","disableTransitions","themeValues","attributeValue","context","useMemo","jsx","useTheme","useContext","style","storedTheme"],"mappings":"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","file":"chunk-U45E5X3H.js","sourcesContent":["'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport type { JSX } from 'react';\n\ntype SystemTheme = 'dark' | 'light';\n\ninterface ThemeValue {\n [themeName: string]: string;\n}\n\nexport interface UseThemeProps {\n themes: string[];\n forcedTheme?: string;\n setTheme: (theme: string) => void;\n theme?: string;\n resolvedTheme?: string;\n systemTheme?: SystemTheme;\n}\n\nexport interface ThemeProviderProps {\n themes?: string[];\n forcedTheme?: string;\n enableSystem?: boolean;\n disableTransitionOnChange?: boolean;\n enableColorScheme?: boolean;\n storageKey?: string;\n defaultTheme?: string;\n attribute?: string | 'class';\n value?: ThemeValue;\n children?: React.ReactNode;\n}\n\nconst DEFAULT_THEMES = ['light', 'dark'];\nconst MEDIA_QUERY = '(prefers-color-scheme: dark)';\nconst ThemeContext = createContext<UseThemeProps | undefined>(undefined);\n\nexport function ThemeProvider({\n attribute = 'data-theme',\n children,\n defaultTheme,\n disableTransitionOnChange = false,\n enableColorScheme = true,\n enableSystem = true,\n forcedTheme,\n storageKey = 'theme',\n themes = DEFAULT_THEMES,\n value,\n}: ThemeProviderProps): JSX.Element {\n const [theme, setThemeState] = useState<string | undefined>(() =>\n getInitialTheme(storageKey, defaultTheme, enableSystem)\n );\n const [systemTheme, setSystemTheme] = useState<SystemTheme | undefined>(() => getSystemTheme());\n const resolvedTheme = resolveTheme(forcedTheme ?? theme, enableSystem, systemTheme);\n\n const setTheme = useCallback(\n (nextTheme: string) => {\n if (forcedTheme) {\n return;\n }\n\n setThemeState(nextTheme);\n\n if (!isBrowser()) {\n return;\n }\n\n try {\n window.localStorage.setItem(storageKey, nextTheme);\n } catch {\n //\n }\n },\n [forcedTheme, storageKey]\n );\n\n useEffect(() => {\n if (!isBrowser() || !enableSystem) {\n return;\n }\n\n const mediaQuery = window.matchMedia(MEDIA_QUERY);\n\n function handleChange(event: MediaQueryListEvent): void {\n setSystemTheme(event.matches ? 'dark' : 'light');\n }\n\n setSystemTheme(mediaQuery.matches ? 'dark' : 'light');\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [enableSystem]);\n\n useEffect(() => {\n if (!isBrowser()) {\n return;\n }\n\n const root = window.document.documentElement;\n const selectedTheme = forcedTheme ?? theme ?? defaultTheme;\n const nextResolvedTheme = resolveTheme(selectedTheme, enableSystem, systemTheme);\n\n if (!nextResolvedTheme) {\n return;\n }\n\n const cleanupTransitions = disableTransitionOnChange ? disableTransitions() : undefined;\n const themeValues = value ? Object.values(value) : themes;\n const attributeValue = value?.[nextResolvedTheme] ?? nextResolvedTheme;\n\n if (attribute === 'class') {\n root.classList.remove(...themeValues);\n root.classList.add(attributeValue);\n }\n\n if (attribute !== 'class') {\n root.setAttribute(attribute, attributeValue);\n }\n\n if (enableColorScheme && (nextResolvedTheme === 'dark' || nextResolvedTheme === 'light')) {\n root.style.colorScheme = nextResolvedTheme;\n }\n\n cleanupTransitions?.();\n }, [\n attribute,\n defaultTheme,\n disableTransitionOnChange,\n enableColorScheme,\n enableSystem,\n forcedTheme,\n systemTheme,\n theme,\n themes,\n value,\n ]);\n\n const context = useMemo<UseThemeProps>(() => {\n return {\n forcedTheme,\n resolvedTheme,\n setTheme,\n systemTheme,\n theme: forcedTheme ?? theme,\n themes: enableSystem ? [...themes, 'system'] : themes,\n };\n }, [enableSystem, forcedTheme, resolvedTheme, setTheme, systemTheme, theme, themes]);\n\n return <ThemeContext.Provider value={context}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): UseThemeProps {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n\n return context;\n}\n\nfunction disableTransitions(): () => void {\n const style = window.document.createElement('style');\n style.appendChild(\n window.document.createTextNode(\n '*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}'\n )\n );\n window.document.head.appendChild(style);\n\n return () => {\n window.getComputedStyle(window.document.body);\n\n window.setTimeout(() => {\n style.remove();\n }, 0);\n };\n}\n\nfunction getInitialTheme(storageKey: string, defaultTheme: string | undefined, enableSystem: boolean): string {\n if (!isBrowser()) {\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n }\n\n try {\n const storedTheme = window.localStorage.getItem(storageKey);\n\n if (storedTheme) {\n return storedTheme;\n }\n } catch {\n //\n }\n\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n}\n\nfunction getSystemTheme(): SystemTheme | undefined {\n if (!isBrowser()) {\n return undefined;\n }\n\n return window.matchMedia(MEDIA_QUERY).matches ? 'dark' : 'light';\n}\n\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\nfunction resolveTheme(\n theme: string | undefined,\n enableSystem: boolean,\n systemTheme: SystemTheme | undefined\n): string | undefined {\n if (!theme) {\n return undefined;\n }\n\n if (theme !== 'system') {\n return theme;\n }\n\n if (!enableSystem) {\n return 'light';\n }\n\n return systemTheme ?? 'light';\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {Tooltip}from'radix-ui';import {jsx,jsxs}from'react/jsx-runtime';function d({delayDuration:t=0,...e}){return jsx(Tooltip.Provider,{"data-slot":"tooltip-provider",delayDuration:t,...e})}function s({...t}){return jsx(Tooltip.Root,{"data-slot":"tooltip",...t})}function m({...t}){return jsx(Tooltip.Trigger,{"data-slot":"tooltip-trigger",...t})}function k({...t}){return jsx(Tooltip.Portal,{...t})}function c({className:t,sideOffset:e=0,children:n,...a$1}){return jsx(Tooltip.Portal,{children:jsxs(Tooltip.Content,{"data-slot":"tooltip-content",sideOffset:e,className:a("fk:z-50 fk:w-fit fk:origin-(--radix-tooltip-content-transform-origin) fk:animate-in fk:rounded-md fk:bg-foreground fk:px-3 fk:py-1.5 fk:text-xs fk:text-balance fk:text-background fk:fade-in-0 fk:zoom-in-95 fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:corner-squircle",t),...a$1,children:[n,jsx(Tooltip.Arrow,{className:"fk:z-50 fk:size-2.5 fk:translate-y-[calc(-50%-2px)] fk:rotate-45 fk:rounded-[2px] fk:bg-foreground fk:fill-foreground fk:corner-squircle"})]})})}export{d as a,s as b,m as c,k as d,c as e};//# sourceMappingURL=chunk-USNXQOMJ.js.map
2
+ //# sourceMappingURL=chunk-USNXQOMJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/primitives/tooltip.tsx"],"names":["TooltipProvider","delayDuration","props","jsx","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","className","sideOffset","children","jsxs","cn"],"mappings":"gIAMA,SAASA,CAAAA,CAAgB,CAAE,aAAA,CAAAC,CAAAA,CAAgB,CAAA,CAAG,GAAGC,CAAM,CAAA,CAA2D,CAChH,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,QAAA,CAAjB,CAA0B,WAAA,CAAU,kBAAA,CAAmB,aAAA,CAAeH,CAAAA,CAAgB,GAAGC,EAAO,CAC1G,CAEA,SAASG,CAAAA,CAAQ,CAAE,GAAGH,CAAM,CAAA,CAAuD,CACjF,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,IAAA,CAAjB,CAAsB,WAAA,CAAU,SAAA,CAAW,GAAGF,CAAAA,CAAO,CAC/D,CAEA,SAASI,CAAAA,CAAe,CAAE,GAAGJ,CAAM,CAAA,CAA0D,CAC3F,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,OAAA,CAAjB,CAAyB,YAAU,iBAAA,CAAmB,GAAGF,CAAAA,CAAO,CAC1E,CAEA,SAASK,CAAAA,CAAc,CAAE,GAAGL,CAAM,CAAA,CAAyD,CACzF,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,MAAA,CAAjB,CAAyB,GAAGF,CAAAA,CAAO,CAC7C,CAEA,SAASM,CAAAA,CAAe,CACtB,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,CAAA,CACb,QAAA,CAAAC,CAAAA,CACA,GAAGT,GACL,CAAA,CAA0D,CACxD,OACEC,GAAAA,CAACC,OAAAA,CAAiB,MAAA,CAAjB,CACC,QAAA,CAAAQ,IAAAA,CAACR,OAAAA,CAAiB,OAAA,CAAjB,CACC,WAAA,CAAU,iBAAA,CACV,UAAA,CAAYM,CAAAA,CACZ,SAAA,CAAWG,CAAAA,CACT,kfAAA,CACAJ,CACF,CAAA,CACC,GAAGP,GAAAA,CAEH,QAAA,CAAA,CAAAS,CAAAA,CACDR,GAAAA,CAACC,OAAAA,CAAiB,KAAA,CAAjB,CAAuB,SAAA,CAAU,0IAAA,CAA2I,CAAA,CAAA,CAC/K,EACF,CAEJ","file":"chunk-USNXQOMJ.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipPortal({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Portal>) {\n return <TooltipPrimitive.Portal {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-fit fk:origin-(--radix-tooltip-content-transform-origin) fk:animate-in fk:rounded-md fk:bg-foreground fk:px-3 fk:py-1.5 fk:text-xs fk:text-balance fk:text-background fk:fade-in-0 fk:zoom-in-95 fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:corner-squircle',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"fk:z-50 fk:size-2.5 fk:translate-y-[calc(-50%-2px)] fk:rotate-45 fk:rounded-[2px] fk:bg-foreground fk:fill-foreground fk:corner-squircle\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortal };\n"]}