chordia-ui 3.2.2 → 3.2.4

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 (39) hide show
  1. package/README.md +61 -0
  2. package/dist/IntegrationCard.cjs.js +2 -0
  3. package/dist/IntegrationCard.cjs.js.map +1 -0
  4. package/dist/IntegrationCard.es.js +217 -0
  5. package/dist/IntegrationCard.es.js.map +1 -0
  6. package/dist/UploadInteraction.cjs.js +2 -0
  7. package/dist/UploadInteraction.cjs.js.map +1 -0
  8. package/dist/UploadInteraction.es.js +379 -0
  9. package/dist/UploadInteraction.es.js.map +1 -0
  10. package/dist/components/layout.cjs.js +2 -2
  11. package/dist/components/layout.cjs.js.map +1 -1
  12. package/dist/components/layout.es.js +202 -411
  13. package/dist/components/layout.es.js.map +1 -1
  14. package/dist/components/onboarding.cjs.js +2 -0
  15. package/dist/components/onboarding.cjs.js.map +1 -0
  16. package/dist/components/onboarding.es.js +712 -0
  17. package/dist/components/onboarding.es.js.map +1 -0
  18. package/dist/index.cjs.js +1 -1
  19. package/dist/index.cjs2.js +2 -2
  20. package/dist/index.cjs2.js.map +1 -1
  21. package/dist/index.es.js +49 -41
  22. package/dist/index.es.js.map +1 -1
  23. package/dist/index.es2.js +869 -811
  24. package/dist/index.es2.js.map +1 -1
  25. package/dist/pages/interactionDetails.cjs.js +1 -1
  26. package/dist/pages/interactionDetails.cjs.js.map +1 -1
  27. package/dist/pages/interactionDetails.es.js +16 -15
  28. package/dist/pages/interactionDetails.es.js.map +1 -1
  29. package/dist/style.css +1 -1
  30. package/package.json +5 -1
  31. package/src/components/index.js +3 -0
  32. package/src/components/login/LoginPage.jsx +107 -5
  33. package/src/components/onboarding/AddTeammates.jsx +278 -0
  34. package/src/components/onboarding/ConnectData.jsx +89 -0
  35. package/src/components/onboarding/GettingStarted.jsx +524 -0
  36. package/src/components/onboarding/UploadEvaluate.jsx +255 -0
  37. package/src/components/onboarding/UploadInteraction.jsx +186 -0
  38. package/src/components/onboarding/index.js +5 -0
  39. package/src/tokens/colors.css +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"layout.cjs.js","sources":["../../src/components/layout/FirstCallScreen.jsx","../../src/components/layout/OnboardingChecklist.jsx","../../src/components/layout/DemoProjectBanner.jsx","../../src/components/layout/IntegrationCard.jsx","../../src/components/layout/LoginForm.jsx","../../src/components/layout/SplitPane.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useRef } from \"react\";\nimport { Upload, Link, Sparkles, CheckCircle2, X } from \"lucide-react\";\n\n/**\n * FirstCallScreen Component\n * Displays an onboarding screen with three options for getting started:\n * Upload an interaction, Explore a demonstration project, or Connect a data source.\n */\nexport default function FirstCallScreen({\n onUploadCall,\n onConnectSource,\n onUseSample,\n showExamples = false,\n}) {\n const [hoveredCard, setHoveredCard] = useState(null);\n const [uploadedFile, setUploadedFile] = useState(null);\n const [connectedSource, setConnectedSource] = useState(null);\n const [selectedProject, setSelectedProject] = useState(null);\n const fileInputRef = useRef(null);\n\n // Dummy data sources for testing\n const dummyDataSources = [\n { id: \"five9\", name: \"Five9\", status: \"available\", description: \"Cloud contact center platform\" },\n { id: \"twilio\", name: \"Twilio Flex\", status: \"available\", description: \"Programmable contact center\" },\n { id: \"genesys\", name: \"Genesys Cloud\", status: \"available\", description: \"All-in-one cloud contact center\" },\n { id: \"zoom\", name: \"Zoom Phone\", status: \"coming-soon\", description: \"Cloud phone system\" },\n ];\n\n // Dummy demo projects for testing\n const dummyProjects = [\n {\n id: \"retail-support\",\n name: \"Retail Customer Support\",\n description: \"Sample interactions from retail customer service team\",\n interactions: 24,\n dateRange: \"Last 30 days\",\n },\n {\n id: \"healthcare-billing\",\n name: \"Healthcare Billing Inquiries\",\n description: \"Patient billing and insurance verification calls\",\n interactions: 18,\n dateRange: \"Last 2 weeks\",\n },\n {\n id: \"financial-services\",\n name: \"Financial Services Compliance\",\n description: \"Banking and financial advisory interactions\",\n interactions: 32,\n dateRange: \"Last 45 days\",\n },\n ];\n\n const handleFileUpload = (event) => {\n const file = event.target.files?.[0];\n if (file) {\n // Check if file is audio or video\n const isAudio = file.type.startsWith(\"audio/\");\n const isVideo = file.type.startsWith(\"video/\");\n \n if (isAudio || isVideo) {\n setUploadedFile({\n name: file.name,\n type: file.type,\n size: file.size,\n lastModified: new Date(file.lastModified),\n });\n if (onUploadCall) {\n onUploadCall(file);\n } else {\n console.log(\"File uploaded:\", file.name, file.type, `(${(file.size / 1024 / 1024).toFixed(2)} MB)`);\n }\n } else {\n alert(\"Please select an audio or video file.\");\n }\n }\n // Reset input so the same file can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleConnectSource = (sourceId) => {\n const source = dummyDataSources.find((s) => s.id === sourceId);\n if (source && source.status === \"available\") {\n setConnectedSource(source);\n if (onConnectSource) {\n onConnectSource(source);\n } else {\n console.log(\"Connected to:\", source.name);\n }\n }\n };\n\n const handleSelectProject = (projectId) => {\n const project = dummyProjects.find((p) => p.id === projectId);\n if (project) {\n setSelectedProject(project);\n if (onUseSample) {\n onUseSample(project);\n } else {\n console.log(\"Selected project:\", project.name);\n }\n }\n };\n\n const handleUploadClick = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n const handleSampleClick = () => {\n if (showExamples && !selectedProject) {\n // Show project selection if examples are enabled\n return;\n }\n if (onUseSample) {\n onUseSample(selectedProject || { id: \"default\", name: \"Demo Project\" });\n }\n };\n\n const handleConnectClick = () => {\n if (showExamples && !connectedSource) {\n // Show data source selection if examples are enabled\n return;\n }\n if (onConnectSource) {\n onConnectSource(connectedSource || { id: \"default\", name: \"Data Source\" });\n }\n };\n\n const options = [\n {\n id: \"upload\",\n icon: Upload,\n title: \"Upload an interaction\",\n description:\n \"Drop an audio or video recording to see what Compass surfaces\",\n recommended: false,\n onClick: handleUploadClick,\n },\n {\n id: \"sample\",\n icon: Sparkles,\n title: \"Explore a demonstration project\",\n description:\n \"See how Chordia Compass surfaces insights from real interaction data\",\n recommended: true,\n onClick: handleSampleClick,\n },\n {\n id: \"connect\",\n icon: Link,\n title: \"Connect a data source\",\n description:\n \"Link your existing system to automatically analyze interactions\",\n recommended: false,\n onClick: handleConnectClick,\n },\n ];\n\n return (\n <div\n style={{\n minHeight: \"100vh\",\n background: \"var(--surface-warm)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"32px\",\n }}\n >\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"audio/*,video/*\"\n onChange={handleFileUpload}\n style={{ display: \"none\" }}\n />\n <div style={{ maxWidth: \"680px\", width: \"100%\" }}>\n {/* Header */}\n <div style={{ textAlign: \"center\", marginBottom: \"48px\" }}>\n <h1\n style={{\n fontSize: \"32px\",\n fontWeight: 760,\n letterSpacing: \"-0.02em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"12px\",\n lineHeight: 1.2,\n }}\n >\n Experience Compass with one interaction\n </h1>\n <p\n style={{\n fontSize: \"15px\",\n color: \"rgba(30, 33, 37, 0.65)\",\n lineHeight: 1.5,\n maxWidth: \"520px\",\n margin: \"0 auto\",\n }}\n >\n Compass surfaces evidence, signals, and actionable insights from\n customer interactions. Start by exploring what it reveals.\n </p>\n </div>\n\n {/* Options */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n {options.map((option) => {\n const Icon = option.icon;\n const isHovered = hoveredCard === option.id;\n\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={option.onClick}\n onMouseEnter={() => setHoveredCard(option.id)}\n onMouseLeave={() => setHoveredCard(null)}\n style={{\n position: \"relative\",\n width: \"100%\",\n padding: \"24px 28px\",\n background: isHovered\n ? \"rgba(255, 255, 255, 0.95)\"\n : \"rgba(255, 255, 255, 0.85)\",\n border: option.recommended\n ? \"2px solid rgba(184, 156, 106, 0.35)\"\n : isHovered\n ? \"1px solid rgba(52, 58, 64, 0.20)\"\n : \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"16px\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.2s ease\",\n transform: isHovered ? \"translateY(-2px)\" : \"translateY(0)\",\n boxShadow: isHovered\n ? \"0 12px 28px rgba(30, 33, 37, 0.12)\"\n : \"0 4px 12px rgba(30, 33, 37, 0.06)\",\n }}\n >\n {/* Recommended badge */}\n {option.recommended && (\n <div\n style={{\n position: \"absolute\",\n top: \"16px\",\n right: \"20px\",\n fontSize: \"10px\",\n fontWeight: 650,\n letterSpacing: \"0.06em\",\n textTransform: \"uppercase\",\n color: \"rgba(184, 156, 106, 0.75)\",\n background: \"rgba(184, 156, 106, 0.12)\",\n padding: \"4px 8px\",\n borderRadius: \"6px\",\n border: \"1px solid rgba(184, 156, 106, 0.2)\",\n }}\n >\n Recommended\n </div>\n )}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"18px\",\n }}\n >\n {/* Icon */}\n <div\n style={{\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"12px\",\n background: option.recommended\n ? \"rgba(184, 156, 106, 0.12)\"\n : \"rgba(231, 212, 162, 0.20)\",\n border: option.recommended\n ? \"1px solid rgba(184, 156, 106, 0.25)\"\n : \"1px solid rgba(231, 212, 162, 0.35)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon\n size={22}\n style={{\n color: option.recommended\n ? \"rgba(184, 156, 106, 0.75)\"\n : \"rgba(30, 33, 37, 0.52)\",\n }}\n />\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, paddingTop: \"2px\" }}>\n <div\n style={{\n fontSize: \"17px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n {option.title}\n </div>\n <div\n style={{\n fontSize: \"13.5px\",\n color: \"rgba(30, 33, 37, 0.62)\",\n lineHeight: 1.5,\n }}\n >\n {option.description}\n </div>\n </div>\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Footer note */}\n <div\n style={{\n marginTop: \"32px\",\n textAlign: \"center\",\n fontSize: \"12px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.5,\n }}\n >\n Your workspace has been created automatically. You can configure\n settings and add teammates later.\n </div>\n\n {/* Testing Examples Section */}\n {showExamples && (\n <div style={{ marginTop: \"48px\", paddingTop: \"32px\", borderTop: \"1px solid rgba(52, 58, 64, 0.12)\" }}>\n <h2\n style={{\n fontSize: \"20px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"24px\",\n }}\n >\n Testing Examples\n </h2>\n\n {/* Uploaded File Example */}\n {uploadedFile && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n File Uploaded\n </span>\n </div>\n <button\n onClick={() => setUploadedFile(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n <div><strong>Name:</strong> {uploadedFile.name}</div>\n <div><strong>Type:</strong> {uploadedFile.type}</div>\n <div><strong>Size:</strong> {(uploadedFile.size / 1024 / 1024).toFixed(2)} MB</div>\n <div><strong>Uploaded:</strong> {uploadedFile.lastModified.toLocaleString()}</div>\n </div>\n </div>\n )}\n\n {/* Demo Projects Selection */}\n {!selectedProject && (\n <div style={{ marginBottom: \"24px\" }}>\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.82)\",\n marginBottom: \"12px\",\n }}\n >\n Select a Demonstration Project:\n </h3>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {dummyProjects.map((project) => (\n <button\n key={project.id}\n onClick={() => handleSelectProject(project.id)}\n style={{\n padding: \"12px 16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"8px\",\n textAlign: \"left\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.20)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n >\n <div style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\", marginBottom: \"4px\" }}>\n {project.name}\n </div>\n <div style={{ fontSize: \"12px\", color: \"rgba(30, 33, 37, 0.62)\", marginBottom: \"4px\" }}>\n {project.description}\n </div>\n <div style={{ fontSize: \"11px\", color: \"rgba(30, 33, 37, 0.52)\" }}>\n {project.interactions} interactions · {project.dateRange}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Selected Project Example */}\n {selectedProject && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n Project Selected: {selectedProject.name}\n </span>\n </div>\n <button\n onClick={() => setSelectedProject(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n <div>{selectedProject.description}</div>\n <div style={{ marginTop: \"4px\" }}>\n <strong>{selectedProject.interactions}</strong> interactions · <strong>{selectedProject.dateRange}</strong>\n </div>\n </div>\n </div>\n )}\n\n {/* Data Sources Selection */}\n {!connectedSource && (\n <div style={{ marginBottom: \"24px\" }}>\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.82)\",\n marginBottom: \"12px\",\n }}\n >\n Connect a Data Source:\n </h3>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {dummyDataSources.map((source) => (\n <button\n key={source.id}\n onClick={() => handleConnectSource(source.id)}\n disabled={source.status === \"coming-soon\"}\n style={{\n padding: \"12px 16px\",\n background: source.status === \"coming-soon\" \n ? \"rgba(255, 255, 255, 0.5)\" \n : \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"8px\",\n textAlign: \"left\",\n cursor: source.status === \"coming-soon\" ? \"not-allowed\" : \"pointer\",\n transition: \"all 0.15s ease\",\n opacity: source.status === \"coming-soon\" ? 0.6 : 1,\n }}\n onMouseEnter={(e) => {\n if (source.status !== \"coming-soon\") {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.20)\";\n }\n }}\n onMouseLeave={(e) => {\n if (source.status !== \"coming-soon\") {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <div>\n <div style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\", marginBottom: \"4px\" }}>\n {source.name}\n </div>\n <div style={{ fontSize: \"12px\", color: \"rgba(30, 33, 37, 0.62)\" }}>\n {source.description}\n </div>\n </div>\n {source.status === \"coming-soon\" && (\n <span\n style={{\n fontSize: \"10px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.42)\",\n background: \"rgba(30, 33, 37, 0.08)\",\n padding: \"4px 8px\",\n borderRadius: \"4px\",\n }}\n >\n Coming Soon\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Connected Source Example */}\n {connectedSource && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n Connected: {connectedSource.name}\n </span>\n </div>\n <button\n onClick={() => setConnectedSource(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n {connectedSource.description}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n X,\n CheckCircle2,\n Circle,\n ChevronRight,\n Sparkles,\n Users,\n FolderOpen,\n Link,\n Settings,\n BookOpen,\n} from \"lucide-react\";\n\n/**\n * OnboardingChecklist Component\n * Displays a collapsible checklist of onboarding tasks with progress tracking.\n * Shows completed items with checkmarks and allows interaction with incomplete items.\n */\nexport default function OnboardingChecklist({\n onDismiss,\n onItemClick,\n completedItems = [],\n}) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [hoveredItem, setHoveredItem] = useState(null);\n\n const checklistItems = [\n {\n id: \"name-project\",\n title: \"Name your workspace\",\n description: \"Give your default project a meaningful name\",\n icon: FolderOpen,\n completed: completedItems.includes(\"name-project\"),\n optional: true,\n },\n {\n id: \"evaluate-second-interaction\",\n title: \"Evaluate another interaction\",\n description: \"Upload or connect a second interaction to see patterns\",\n icon: Sparkles,\n completed: completedItems.includes(\"evaluate-second-interaction\"),\n },\n {\n id: \"connect-source\",\n title: \"Connect a data source\",\n description: \"Link your system or platform for automatic evaluation\",\n icon: Link,\n completed: completedItems.includes(\"connect-source\"),\n },\n {\n id: \"invite-team\",\n title: \"Add teammates\",\n description: \"Invite managers or QA team members to collaborate\",\n icon: Users,\n completed: completedItems.includes(\"invite-team\"),\n optional: true,\n },\n {\n id: \"learn-concepts\",\n title: \"Understand Chordia concepts\",\n description: \"Learn how conditions, evidence, and confidence work\",\n icon: BookOpen,\n completed: completedItems.includes(\"learn-concepts\"),\n optional: true,\n },\n {\n id: \"configure-scope\",\n title: \"Clarify evaluation scope\",\n description: \"Customize which signals and conditions matter for your team\",\n icon: Settings,\n completed: completedItems.includes(\"configure-scope\"),\n optional: true,\n },\n ];\n\n const completedCount = checklistItems.filter((item) => item.completed).length;\n const totalCount = checklistItems.length;\n const progressPercent = (completedCount / totalCount) * 100;\n\n if (isCollapsed) {\n return (\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(false)}\n style={{\n width: \"100%\",\n padding: \"14px 16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.15s ease\",\n boxShadow: \"0 2px 8px rgba(30, 33, 37, 0.04)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div\n style={{\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.75)\",\n }}\n >\n Getting started ({completedCount}/{totalCount})\n </div>\n <ChevronRight size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </div>\n </button>\n );\n }\n\n return (\n <div\n style={{\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"16px\",\n overflow: \"hidden\",\n boxShadow: \"0 4px 16px rgba(30, 33, 37, 0.06)\",\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: \"18px 20px 16px\",\n borderBottom: \"1px solid rgba(52, 58, 64, 0.08)\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div style={{ flex: 1 }}>\n <div\n style={{\n fontSize: \"15px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n Getting started with Chordia\n </div>\n <div\n style={{\n fontSize: \"12px\",\n color: \"rgba(30, 33, 37, 0.58)\",\n lineHeight: 1.4,\n }}\n >\n {completedCount} of {totalCount} completed\n </div>\n </div>\n <div style={{ display: \"flex\", gap: \"4px\" }}>\n {/* Collapse button */}\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(true)}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"6px\",\n background: \"transparent\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 0.15s ease\",\n color: \"rgba(30, 33, 37, 0.52)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(231, 212, 162, 0.12)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n title=\"Collapse\"\n >\n <ChevronRight size={14} />\n </button>\n {/* Dismiss button */}\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"6px\",\n background: \"transparent\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 0.15s ease\",\n color: \"rgba(30, 33, 37, 0.52)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(231, 212, 162, 0.12)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n title=\"Dismiss checklist\"\n >\n <X size={14} />\n </button>\n )}\n </div>\n </div>\n {/* Progress bar */}\n <div\n style={{\n marginTop: \"14px\",\n height: \"6px\",\n background: \"rgba(30, 33, 37, 0.08)\",\n borderRadius: \"999px\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${progressPercent}%`,\n background:\n \"linear-gradient(90deg, rgba(184, 156, 106, 0.75) 0%, rgba(139, 157, 127, 0.75) 100%)\",\n borderRadius: \"999px\",\n transition: \"width 0.4s ease\",\n }}\n />\n </div>\n </div>\n\n {/* Checklist items */}\n <div style={{ padding: \"8px\" }}>\n {checklistItems.map((item, index) => {\n const Icon = item.icon;\n const isHovered = hoveredItem === item.id;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onItemClick?.(item.id)}\n onMouseEnter={() => setHoveredItem(item.id)}\n onMouseLeave={() => setHoveredItem(null)}\n disabled={item.completed}\n style={{\n width: \"100%\",\n padding: \"12px 14px\",\n background: item.completed\n ? \"rgba(139, 157, 127, 0.06)\"\n : isHovered\n ? \"rgba(231, 212, 162, 0.12)\"\n : \"transparent\",\n border: \"none\",\n borderRadius: \"10px\",\n cursor: item.completed ? \"default\" : \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.15s ease\",\n marginBottom: index < checklistItems.length - 1 ? \"4px\" : \"0\",\n opacity: item.completed ? 0.7 : 1,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n }}\n >\n {/* Icon/Checkbox */}\n <div\n style={{\n width: \"20px\",\n height: \"20px\",\n marginTop: \"1px\",\n flexShrink: 0,\n }}\n >\n {item.completed ? (\n <CheckCircle2\n size={20}\n style={{ color: \"rgba(139, 157, 127, 0.75)\" }}\n />\n ) : (\n <Circle\n size={20}\n style={{ color: \"rgba(30, 33, 37, 0.24)\" }}\n />\n )}\n </div>\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n marginBottom: \"3px\",\n }}\n >\n <Icon\n size={14}\n style={{ color: \"rgba(30, 33, 37, 0.52)\", flexShrink: 0 }}\n />\n <span\n style={{\n fontSize: \"13px\",\n fontWeight: 600,\n color: item.completed\n ? \"rgba(30, 33, 37, 0.52)\"\n : \"rgba(30, 33, 37, 0.85)\",\n textDecoration: item.completed ? \"line-through\" : \"none\",\n lineHeight: 1.3,\n }}\n >\n {item.title}\n </span>\n {item.optional && !item.completed && (\n <span\n style={{\n fontSize: \"9px\",\n fontWeight: 600,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n color: \"rgba(30, 33, 37, 0.42)\",\n background: \"rgba(30, 33, 37, 0.06)\",\n padding: \"2px 5px\",\n borderRadius: \"4px\",\n }}\n >\n Optional\n </span>\n )}\n </div>\n <div\n style={{\n fontSize: \"11.5px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.4,\n paddingLeft: \"22px\",\n }}\n >\n {item.description}\n </div>\n </div>\n {/* Arrow indicator (only for incomplete items on hover) */}\n {!item.completed && isHovered && (\n <ChevronRight\n size={16}\n style={{\n color: \"rgba(30, 33, 37, 0.32)\",\n marginTop: \"2px\",\n flexShrink: 0,\n }}\n />\n )}\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Footer note */}\n <div\n style={{\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid rgba(52, 58, 64, 0.08)\",\n }}\n >\n <div\n style={{\n fontSize: \"11px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.5,\n fontStyle: \"italic\",\n }}\n >\n You can dismiss this checklist anytime. These steps help you get the\n most from Chordia, but {'aren\\'t'} required.\n </div>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\n/**\n * DemoProjectBanner Component\n * Displays a diagonal banner in the top-right corner indicating a demo project.\n * Creates a triangular ribbon effect with rotated text.\n */\nexport default function DemoProjectBanner({\n text = \"Demo Project\",\n accentColor = \"#B89C6A\",\n textColor = \"rgba(255, 255, 255, 0.95)\",\n size = \"medium\",\n position = \"fixed\",\n}) {\n // Size configurations\n const sizeConfig = {\n small: {\n width: 140,\n height: 140,\n fontSize: \"11px\",\n letterSpacing: \"0.08em\",\n fontWeight: 650,\n },\n medium: {\n width: 180,\n height: 180,\n fontSize: \"12px\",\n letterSpacing: \"0.1em\",\n fontWeight: 680,\n },\n large: {\n width: 220,\n height: 220,\n fontSize: \"13px\",\n letterSpacing: \"0.12em\",\n fontWeight: 700,\n },\n };\n\n const config = sizeConfig[size];\n\n return (\n <div\n style={{\n position: position,\n top: 0,\n right: 0,\n width: config.width,\n height: config.height,\n overflow: \"hidden\",\n zIndex: position === \"fixed\" ? 9999 : 1,\n pointerEvents: \"none\",\n }}\n >\n {/* Triangle background */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: `0 ${config.width}px ${config.height}px 0`,\n borderColor: `transparent ${accentColor} transparent transparent`,\n opacity: 0.92,\n }}\n />\n\n {/* Diagonal stripe for depth */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: `0 ${config.width}px ${config.height}px 0`,\n borderColor: \"transparent rgba(0, 0, 0, 0.08) transparent transparent\",\n }}\n />\n\n {/* Text container - rotated 45deg */}\n <div\n style={{\n position: \"absolute\",\n top:\n size === \"small\"\n ? \"28px\"\n : size === \"medium\"\n ? \"38px\"\n : \"48px\",\n right:\n size === \"small\"\n ? \"-32px\"\n : size === \"medium\"\n ? \"-42px\"\n : \"-52px\",\n width:\n size === \"small\" ? \"160px\" : size === \"medium\" ? \"200px\" : \"240px\",\n transform: \"rotate(45deg)\",\n transformOrigin: \"center\",\n textAlign: \"center\",\n }}\n >\n <div\n style={{\n fontSize: config.fontSize,\n fontWeight: config.fontWeight,\n letterSpacing: config.letterSpacing,\n textTransform: \"uppercase\",\n color: textColor,\n textShadow: \"0 1px 2px rgba(0, 0, 0, 0.15)\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n }}\n >\n {text}\n </div>\n </div>\n\n {/* Subtle shadow for depth */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: config.width,\n height: config.height,\n background:\n \"linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.04) 100%)\",\n pointerEvents: \"none\",\n }}\n />\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\nimport { CheckCircle2, Circle, Settings } from \"lucide-react\";\n\n/**\n * IntegrationCard Component\n * Displays an integration provider card with status, logo, and configuration options\n */\nexport default function IntegrationCard({\n providerName,\n description,\n status = \"available\",\n railColor,\n logoUrl,\n icon,\n onConfigure,\n}) {\n const statusConfig = {\n connected: {\n label: \"Connected\",\n color: \"#6B7C93\",\n bgColor: \"rgba(107, 124, 147, 0.08)\",\n borderColor: \"rgba(107, 124, 147, 0.20)\",\n icon: <CheckCircle2 size={14} strokeWidth={2.5} />,\n },\n available: {\n label: \"Available\",\n color: \"#1E2125\",\n bgColor: \"rgba(30, 33, 37, 0.04)\",\n borderColor: \"rgba(30, 33, 37, 0.12)\",\n icon: <Circle size={14} strokeWidth={2} />,\n },\n \"coming-soon\": {\n label: \"Coming Soon\",\n color: \"rgba(30, 33, 37, 0.42)\",\n bgColor: \"transparent\",\n borderColor: \"rgba(30, 33, 37, 0.12)\",\n icon: <Circle size={14} strokeWidth={2} style={{ opacity: 0.4 }} />,\n },\n };\n\n const config = statusConfig[status] || statusConfig.available;\n\n return (\n <div\n style={{\n background: \"#FFFFFF\",\n border: `1px solid ${railColor}20`,\n borderRadius: \"8px\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n transition: \"all 0.15s ease\",\n cursor: status === \"coming-soon\" ? \"default\" : \"pointer\",\n opacity: status === \"coming-soon\" ? 0.6 : 1,\n overflow: \"hidden\",\n height: \"100%\",\n }}\n className=\"hover:shadow-sm\"\n >\n {/* Rail */}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n bottom: 0,\n width: \"4px\",\n background: railColor,\n opacity: status === \"coming-soon\" ? 0.4 : 1,\n }}\n />\n\n {/* Content wrapper with padding */}\n <div\n style={{\n padding: \"20px\",\n paddingLeft: \"24px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n height: \"100%\",\n }}\n >\n {/* Header: Logo + Status */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n {/* Logo/Icon */}\n <div\n style={{\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"6px\",\n background: `${railColor}08`,\n border: `1px solid ${railColor}18`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={providerName}\n style={{ width: \"32px\", height: \"32px\", objectFit: \"contain\" }}\n />\n ) : (\n <div\n style={{\n color: railColor,\n fontSize: \"20px\",\n fontWeight: 650,\n opacity: 0.8,\n }}\n >\n {icon || (providerName ? providerName.charAt(0) : \"\")}\n </div>\n )}\n </div>\n\n {/* Status Badge */}\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"4px 10px\",\n borderRadius: \"4px\",\n background: config.bgColor,\n border: `1px solid ${config.borderColor}`,\n fontSize: \"11px\",\n fontWeight: 600,\n letterSpacing: \"0.01em\",\n color: config.color,\n flexShrink: 0,\n }}\n >\n {config.icon}\n {config.label}\n </div>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, minHeight: 0 }}>\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"6px\",\n letterSpacing: \"-0.01em\",\n }}\n >\n {providerName}\n </h3>\n <p\n style={{\n fontSize: \"13px\",\n lineHeight: 1.5,\n color: \"rgba(30, 33, 37, 0.65)\",\n }}\n >\n {description}\n </p>\n </div>\n\n {/* Action Button - aligned to bottom */}\n {status !== \"coming-soon\" && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onConfigure?.();\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"8px 14px\",\n border: \"1px solid rgba(30, 33, 37, 0.15)\",\n borderRadius: \"5px\",\n background: status === \"connected\" ? \"transparent\" : \"rgba(30, 33, 37, 0.03)\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.92)\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n width: \"100%\",\n marginTop: \"auto\",\n }}\n className=\"hover:bg-[rgba(30,33,37,0.06)] hover:border-[rgba(30,33,37,0.20)]\"\n >\n <Settings size={14} strokeWidth={2.5} />\n {status === \"connected\" ? \"Configure\" : \"Connect\"}\n </button>\n )}\n </div>\n </div>\n );\n}\n\n","\"use client\";\nimport React, { useState } from 'react';\nimport { Lock, Mail, Eye, EyeOff, ArrowRight } from 'lucide-react';\n\n// Logo asset — concentric circles + wordmark\n// const LOGO_URL = new URL('../../assets/chordia-logo.png', import.meta.url).href;\nconst LOGO_URL = \"../../assets/chordia-logo.png\";\n\n/**\n * LoginForm — Chordia design system login component.\n *\n * Warm parchment aesthetic. Gold accents on focus, earth-tone CTA.\n * Purple is intentionally avoided — it's reserved for AI presence.\n *\n * Props:\n * - title: string (default: \"Chordia\") — only shown if no logo\n * - subtitle: string (default: \"Sign in to continue\")\n * - logo: ReactNode (optional — replaces the default logo image + subtitle)\n * - onLogin: (email, password) => Promise<void> | void\n * - loading: boolean\n * - error: string | null\n * - footer: ReactNode (optional — e.g. links, version info)\n * - showLabels: boolean (default: true)\n * - emailPlaceholder: string\n * - passwordPlaceholder: string\n * - onForgotPassword: () => void (optional — shows \"Forgot password?\" link)\n * - compact: boolean (default: false — skips the full-page centering wrapper)\n */\nexport default function LoginForm({\n title = 'Chordia',\n subtitle = 'Sign in to continue',\n logo,\n onLogin,\n loading = false,\n error = null,\n footer,\n showLabels = true,\n emailPlaceholder = 'you@company.com',\n passwordPlaceholder = 'Password',\n onForgotPassword,\n compact = false,\n}) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [focused, setFocused] = useState(null);\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (!email || !password || loading) return;\n onLogin?.(email, password);\n };\n\n const canSubmit = email && password && !loading;\n\n // Warm earth accent — compliance orange, used for focus/CTA (not purple)\n const accentColor = 'var(--rail-compliance)';\n const accentRgba = '201, 138, 90'; // --rail-compliance raw\n\n const card = (\n <div style={{\n width: '100%',\n maxWidth: 400,\n background: 'var(--paper-elevated)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n padding: '44px 36px 36px',\n boxShadow: '0 8px 32px rgba(30, 33, 37, 0.06), 0 1px 3px rgba(30, 33, 37, 0.04)',\n position: 'relative',\n overflow: 'hidden',\n }}>\n {/* Decorative top rail — warm gold gradient */}\n <div style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: 3,\n background: `linear-gradient(90deg, var(--state-unknown), ${accentColor})`,\n opacity: 0.6,\n }} />\n\n {/* Logo / Title area */}\n <div style={{ textAlign: 'center', marginBottom: 32 }}>\n {logo || (\n <>\n {/* Logo on a dark pill so the light-colored asset is visible */}\n <div style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '12px 24px',\n borderRadius: 'var(--radius-lg)',\n background: 'rgba(30, 33, 37, 0.92)',\n marginBottom: 16,\n }}>\n <img\n src={LOGO_URL}\n alt={title}\n style={{ height: 28, display: 'block' }}\n />\n </div>\n {subtitle && (\n <p style={{\n fontSize: 'var(--text-sm)',\n color: 'var(--text-muted)',\n marginTop: 4,\n marginBottom: 0,\n }}>{subtitle}</p>\n )}\n </>\n )}\n </div>\n\n <form onSubmit={handleSubmit}>\n {/* Email field */}\n <div style={{ marginBottom: 18 }}>\n {showLabels && (\n <label style={{\n display: 'block',\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n marginBottom: 6,\n fontFamily: 'var(--font-sans)',\n }}>Email</label>\n )}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <Mail size={15} style={{\n position: 'absolute',\n left: 12,\n color: focused === 'email' ? `rgba(${accentRgba}, 0.7)` : 'var(--text-faint)',\n pointerEvents: 'none',\n transition: 'color 0.2s ease',\n }} />\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={emailPlaceholder}\n required\n autoFocus\n autoComplete=\"email\"\n style={{\n width: '100%',\n padding: '11px 12px 11px 38px',\n fontSize: 'var(--text-md)',\n border: '1px solid',\n borderColor: focused === 'email' ? accentColor : 'var(--border)',\n borderRadius: 'var(--radius)',\n backgroundColor: focused === 'email' ? 'rgba(255,255,255,0.95)' : 'var(--paper)',\n color: 'var(--text-ink)',\n fontFamily: 'var(--font-sans)',\n outline: 'none',\n transition: 'border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease',\n boxShadow: focused === 'email' ? `0 0 0 3px rgba(${accentRgba}, 0.1)` : 'none',\n }}\n onFocus={() => setFocused('email')}\n onBlur={() => setFocused(null)}\n />\n </div>\n </div>\n\n {/* Password field */}\n <div style={{ marginBottom: 6 }}>\n {showLabels && (\n <label style={{\n display: 'block',\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n marginBottom: 6,\n fontFamily: 'var(--font-sans)',\n }}>Password</label>\n )}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <Lock size={15} style={{\n position: 'absolute',\n left: 12,\n color: focused === 'password' ? `rgba(${accentRgba}, 0.7)` : 'var(--text-faint)',\n pointerEvents: 'none',\n transition: 'color 0.2s ease',\n }} />\n <input\n type={showPassword ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={passwordPlaceholder}\n required\n autoComplete=\"current-password\"\n style={{\n width: '100%',\n padding: '11px 42px 11px 38px',\n fontSize: 'var(--text-md)',\n border: '1px solid',\n borderColor: focused === 'password' ? accentColor : 'var(--border)',\n borderRadius: 'var(--radius)',\n backgroundColor: focused === 'password' ? 'rgba(255,255,255,0.95)' : 'var(--paper)',\n color: 'var(--text-ink)',\n fontFamily: 'var(--font-sans)',\n outline: 'none',\n transition: 'border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease',\n boxShadow: focused === 'password' ? `0 0 0 3px rgba(${accentRgba}, 0.1)` : 'none',\n }}\n onFocus={() => setFocused('password')}\n onBlur={() => setFocused(null)}\n />\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n style={{\n position: 'absolute',\n right: 8,\n background: 'none',\n border: 'none',\n padding: 4,\n cursor: 'pointer',\n color: 'var(--text-faint)',\n display: 'flex',\n alignItems: 'center',\n transition: 'color 0.15s ease',\n borderRadius: 'var(--radius-sm)',\n }}\n tabIndex={-1}\n onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--text-muted)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--text-faint)'; }}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n </div>\n\n {/* Forgot password link */}\n {onForgotPassword && (\n <div style={{ textAlign: 'right', marginBottom: 4 }}>\n <button\n type=\"button\"\n onClick={onForgotPassword}\n style={{\n background: 'none',\n border: 'none',\n padding: '2px 0',\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n cursor: 'pointer',\n fontFamily: 'var(--font-sans)',\n transition: 'color 0.15s ease',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--text-strong)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--text-muted)'; }}\n >\n Forgot password?\n </button>\n </div>\n )}\n\n {/* Error message — gold warning tint, no red */}\n {error && (\n <div style={{\n fontSize: 'var(--text-sm)',\n color: 'var(--text-strong)',\n marginTop: 12,\n padding: '8px 12px',\n background: 'color-mix(in srgb, var(--state-unknown) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--state-unknown) 25%, transparent)',\n borderRadius: 'var(--radius-sm)',\n textAlign: 'center',\n fontWeight: 500,\n }}>{error}</div>\n )}\n\n {/* Submit button — dark ink, warm and authoritative */}\n <button\n type=\"submit\"\n disabled={!canSubmit}\n style={{\n width: '100%',\n padding: '11px 0',\n marginTop: 20,\n background: canSubmit ? 'var(--text-ink)' : 'var(--text-xfaint)',\n color: '#ffffff',\n border: 'none',\n borderRadius: 'var(--radius)',\n fontSize: 'var(--text-md)',\n fontWeight: 600,\n fontFamily: 'var(--font-sans)',\n cursor: canSubmit ? 'pointer' : 'not-allowed',\n transition: 'opacity 0.15s ease, transform 0.1s ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n }}\n onMouseEnter={(e) => {\n if (canSubmit) {\n e.currentTarget.style.opacity = '0.85';\n e.currentTarget.style.transform = 'translateY(-1px)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = '1';\n e.currentTarget.style.transform = 'translateY(0)';\n }}\n onMouseDown={(e) => {\n if (canSubmit) e.currentTarget.style.transform = 'translateY(0)';\n }}\n onMouseUp={(e) => {\n if (canSubmit) e.currentTarget.style.transform = 'translateY(-1px)';\n }}\n >\n {loading ? 'Signing in…' : (\n <>\n Sign In\n <ArrowRight size={16} />\n </>\n )}\n </button>\n </form>\n\n {/* Divider + Footer */}\n {footer && (\n <>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '24px 0 16px',\n }}>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n <span style={{ fontSize: 'var(--text-xs)', color: 'var(--text-faint)' }}>or</span>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n </div>\n <div style={{\n textAlign: 'center',\n fontSize: 'var(--text-xs)',\n color: 'var(--text-faint)',\n }}>{footer}</div>\n </>\n )}\n </div>\n );\n\n if (compact) return card;\n\n return (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '100vh',\n background: 'var(--bg-chordia)',\n padding: 'var(--spacing-6)',\n }}>\n {card}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useCallback, useEffect, useLayoutEffect } from \"react\";\n\n/**\n * SplitPane Component\n * Resizable two-pane layout with draggable divider and collapsible panels.\n *\n * Props:\n * left - React node for left pane\n * right - React node for right pane\n * defaultWidth - Initial left pane width in px (default: 260). Ignored if defaultRatio is set.\n * defaultRatio - Initial left pane width as ratio 0-1 (e.g. 0.5 for 50%). Overrides defaultWidth.\n * minWidth - Minimum left pane width in px (default: 180)\n * maxWidth - Maximum left pane width in px (default: 450)\n * minRatio - Minimum left pane width as ratio 0-1. Overrides minWidth when set.\n * maxRatio - Maximum left pane width as ratio 0-1. Overrides maxWidth when set.\n * collapsedWidth - Width of the collapsed strip in px (default: 0)\n * collapsed - Controlled collapsed state (optional)\n * onCollapsedChange - (collapsed: boolean) => void (optional)\n * collapseSide - Which side(s) can collapse: \"left\" | \"right\" | \"both\" | \"none\" (default: \"left\")\n * collapseThreshold - Drag below this px to auto-collapse left (default: minWidth - 40)\n * dividerWidth - Divider hit area width in px (default: 7)\n * style - Style for the outer container\n */\nexport default function SplitPane({\n left,\n right,\n defaultWidth = 260,\n defaultRatio,\n minWidth = 180,\n maxWidth = 450,\n minRatio,\n maxRatio,\n collapsedWidth = 0,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n collapseSide = \"left\",\n collapseThreshold,\n dividerWidth = 7,\n style,\n}) {\n const isControlled = controlledCollapsed !== undefined;\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const setCollapsed = useCallback(\n (val) => {\n const next = typeof val === \"function\" ? val(collapsed) : val;\n if (!isControlled) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [isControlled, collapsed, onCollapsedChange]\n );\n\n const containerRef = useRef(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const [width, setWidth] = useState(defaultWidth);\n const [dragging, setDragging] = useState(false);\n const [initialized, setInitialized] = useState(false);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n // Measure container and set initial width from ratio\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const w = containerRef.current.offsetWidth;\n setContainerWidth(w);\n if (!initialized && w > 0) {\n if (defaultRatio != null) {\n setWidth(Math.round(w * defaultRatio));\n }\n setInitialized(true);\n }\n }, []);\n\n // Observe container resize\n useEffect(() => {\n if (!containerRef.current) return;\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerWidth(entry.contentRect.width);\n }\n });\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n // Compute effective min/max from ratios if provided\n const effectiveMin = minRatio != null ? Math.round(containerWidth * minRatio) : minWidth;\n const effectiveMax = maxRatio != null ? Math.round(containerWidth * maxRatio) : maxWidth;\n const effectiveCollapseThreshold =\n collapseThreshold ?? (collapseSide === \"none\" ? 0 : effectiveMin - 40);\n\n const handleMouseDown = useCallback(\n (e) => {\n e.preventDefault();\n startXRef.current = e.clientX;\n startWidthRef.current = collapsed ? collapsedWidth : width;\n setDragging(true);\n },\n [width, collapsed, collapsedWidth]\n );\n\n useEffect(() => {\n if (!dragging) return;\n\n const handleMouseMove = (e) => {\n const delta = e.clientX - startXRef.current;\n const newWidth = startWidthRef.current + delta;\n\n const canCollapseLeft = collapseSide === \"left\" || collapseSide === \"both\";\n const canCollapseRight = collapseSide === \"right\" || collapseSide === \"both\";\n\n // Collapse left: dragged too far left\n if (canCollapseLeft && newWidth < effectiveCollapseThreshold) {\n if (!collapsed) setCollapsed(true);\n return;\n }\n\n // Collapse right: dragged too far right (right pane too narrow)\n const rightRemaining = containerWidth - newWidth - dividerWidth;\n if (canCollapseRight && containerWidth > 0 && rightRemaining < effectiveCollapseThreshold) {\n // Don't collapse right in this version — just clamp at max\n }\n\n if (collapsed) setCollapsed(false);\n setWidth(Math.min(Math.max(newWidth, effectiveMin), effectiveMax));\n };\n\n const handleMouseUp = () => setDragging(false);\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n };\n }, [\n dragging, collapsed, effectiveMin, effectiveMax, effectiveCollapseThreshold,\n containerWidth, dividerWidth, collapseSide, setCollapsed,\n ]);\n\n const handleDoubleClick = useCallback(() => {\n if (collapseSide !== \"none\") {\n setCollapsed((c) => !c);\n }\n }, [setCollapsed, collapseSide]);\n\n const actualLeftWidth = collapsed ? collapsedWidth : width;\n\n return (\n <div\n ref={containerRef}\n style={{\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\",\n position: \"relative\",\n ...style,\n }}\n >\n {/* Left pane */}\n {(actualLeftWidth > 0 || !collapsed) && (\n <div\n style={{\n width: actualLeftWidth,\n flexShrink: 0,\n overflow: \"hidden\",\n transition: dragging ? \"none\" : \"width 0.2s ease\",\n height: \"100%\",\n }}\n >\n {!collapsed && left}\n </div>\n )}\n\n {/* Divider */}\n <div\n onMouseDown={handleMouseDown}\n onDoubleClick={handleDoubleClick}\n style={{\n width: `${dividerWidth}px`,\n flexShrink: 0,\n cursor: \"col-resize\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\",\n zIndex: 2,\n }}\n >\n {/* Visual line */}\n <div\n style={{\n width: \"1px\",\n height: \"100%\",\n background: dragging\n ? \"var(--rail-discovery, #5E88B0)\"\n : \"var(--border, rgba(52,58,64,0.12))\",\n transition: \"background 0.15s ease\",\n }}\n />\n {/* Hover grip */}\n <div\n style={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"5px\",\n height: \"28px\",\n borderRadius: \"3px\",\n background: dragging\n ? \"var(--rail-discovery, #5E88B0)\"\n : \"var(--border, rgba(52,58,64,0.12))\",\n opacity: dragging ? 1 : 0,\n transition: \"opacity 0.15s ease, background 0.15s ease\",\n }}\n className=\"splitpane-grip\"\n />\n <style>{`\n div:hover > .splitpane-grip { opacity: 0.7 !important; }\n `}</style>\n </div>\n\n {/* Right pane */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n overflow: \"hidden\",\n height: \"100%\",\n }}\n >\n {right}\n </div>\n </div>\n );\n}\n"],"names":["FirstCallScreen","onUploadCall","onConnectSource","onUseSample","showExamples","hoveredCard","setHoveredCard","useState","uploadedFile","setUploadedFile","connectedSource","setConnectedSource","selectedProject","setSelectedProject","fileInputRef","useRef","dummyDataSources","dummyProjects","handleFileUpload","event","file","_a","isAudio","isVideo","handleConnectSource","sourceId","source","s","handleSelectProject","projectId","project","p","handleUploadClick","handleSampleClick","handleConnectClick","options","Upload","Sparkles","Link","jsxs","jsx","option","Icon","isHovered","CheckCircle2","X","e","OnboardingChecklist","onDismiss","onItemClick","completedItems","isCollapsed","setIsCollapsed","hoveredItem","setHoveredItem","checklistItems","FolderOpen","Users","BookOpen","Settings","completedCount","item","totalCount","progressPercent","ChevronRight","index","Circle","DemoProjectBanner","text","accentColor","textColor","size","position","config","IntegrationCard","providerName","description","status","railColor","logoUrl","icon","onConfigure","statusConfig","LOGO_URL","LoginForm","title","subtitle","logo","onLogin","loading","error","footer","showLabels","emailPlaceholder","passwordPlaceholder","onForgotPassword","compact","email","setEmail","password","setPassword","showPassword","setShowPassword","focused","setFocused","handleSubmit","canSubmit","accentRgba","card","Fragment","Mail","Lock","EyeOff","Eye","ArrowRight","SplitPane","left","right","defaultWidth","defaultRatio","minWidth","maxWidth","minRatio","maxRatio","collapsedWidth","controlledCollapsed","onCollapsedChange","collapseSide","collapseThreshold","dividerWidth","style","isControlled","internalCollapsed","setInternalCollapsed","collapsed","setCollapsed","useCallback","val","next","containerRef","containerWidth","setContainerWidth","width","setWidth","dragging","setDragging","initialized","setInitialized","startXRef","startWidthRef","useLayoutEffect","w","useEffect","ro","entries","entry","effectiveMin","effectiveMax","effectiveCollapseThreshold","handleMouseDown","handleMouseMove","delta","newWidth","handleMouseUp","handleDoubleClick","c","actualLeftWidth"],"mappings":"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"}
1
+ {"version":3,"file":"layout.cjs.js","sources":["../../src/components/layout/FirstCallScreen.jsx","../../src/components/layout/OnboardingChecklist.jsx","../../src/components/layout/DemoProjectBanner.jsx","../../src/components/layout/LoginForm.jsx","../../src/components/layout/SplitPane.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useRef } from \"react\";\nimport { Upload, Link, Sparkles, CheckCircle2, X } from \"lucide-react\";\n\n/**\n * FirstCallScreen Component\n * Displays an onboarding screen with three options for getting started:\n * Upload an interaction, Explore a demonstration project, or Connect a data source.\n */\nexport default function FirstCallScreen({\n onUploadCall,\n onConnectSource,\n onUseSample,\n showExamples = false,\n}) {\n const [hoveredCard, setHoveredCard] = useState(null);\n const [uploadedFile, setUploadedFile] = useState(null);\n const [connectedSource, setConnectedSource] = useState(null);\n const [selectedProject, setSelectedProject] = useState(null);\n const fileInputRef = useRef(null);\n\n // Dummy data sources for testing\n const dummyDataSources = [\n { id: \"five9\", name: \"Five9\", status: \"available\", description: \"Cloud contact center platform\" },\n { id: \"twilio\", name: \"Twilio Flex\", status: \"available\", description: \"Programmable contact center\" },\n { id: \"genesys\", name: \"Genesys Cloud\", status: \"available\", description: \"All-in-one cloud contact center\" },\n { id: \"zoom\", name: \"Zoom Phone\", status: \"coming-soon\", description: \"Cloud phone system\" },\n ];\n\n // Dummy demo projects for testing\n const dummyProjects = [\n {\n id: \"retail-support\",\n name: \"Retail Customer Support\",\n description: \"Sample interactions from retail customer service team\",\n interactions: 24,\n dateRange: \"Last 30 days\",\n },\n {\n id: \"healthcare-billing\",\n name: \"Healthcare Billing Inquiries\",\n description: \"Patient billing and insurance verification calls\",\n interactions: 18,\n dateRange: \"Last 2 weeks\",\n },\n {\n id: \"financial-services\",\n name: \"Financial Services Compliance\",\n description: \"Banking and financial advisory interactions\",\n interactions: 32,\n dateRange: \"Last 45 days\",\n },\n ];\n\n const handleFileUpload = (event) => {\n const file = event.target.files?.[0];\n if (file) {\n // Check if file is audio or video\n const isAudio = file.type.startsWith(\"audio/\");\n const isVideo = file.type.startsWith(\"video/\");\n \n if (isAudio || isVideo) {\n setUploadedFile({\n name: file.name,\n type: file.type,\n size: file.size,\n lastModified: new Date(file.lastModified),\n });\n if (onUploadCall) {\n onUploadCall(file);\n } else {\n console.log(\"File uploaded:\", file.name, file.type, `(${(file.size / 1024 / 1024).toFixed(2)} MB)`);\n }\n } else {\n alert(\"Please select an audio or video file.\");\n }\n }\n // Reset input so the same file can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const handleConnectSource = (sourceId) => {\n const source = dummyDataSources.find((s) => s.id === sourceId);\n if (source && source.status === \"available\") {\n setConnectedSource(source);\n if (onConnectSource) {\n onConnectSource(source);\n } else {\n console.log(\"Connected to:\", source.name);\n }\n }\n };\n\n const handleSelectProject = (projectId) => {\n const project = dummyProjects.find((p) => p.id === projectId);\n if (project) {\n setSelectedProject(project);\n if (onUseSample) {\n onUseSample(project);\n } else {\n console.log(\"Selected project:\", project.name);\n }\n }\n };\n\n const handleUploadClick = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n const handleSampleClick = () => {\n if (showExamples && !selectedProject) {\n // Show project selection if examples are enabled\n return;\n }\n if (onUseSample) {\n onUseSample(selectedProject || { id: \"default\", name: \"Demo Project\" });\n }\n };\n\n const handleConnectClick = () => {\n if (showExamples && !connectedSource) {\n // Show data source selection if examples are enabled\n return;\n }\n if (onConnectSource) {\n onConnectSource(connectedSource || { id: \"default\", name: \"Data Source\" });\n }\n };\n\n const options = [\n {\n id: \"upload\",\n icon: Upload,\n title: \"Upload an interaction\",\n description:\n \"Drop an audio or video recording to see what Compass surfaces\",\n recommended: false,\n onClick: handleUploadClick,\n },\n {\n id: \"sample\",\n icon: Sparkles,\n title: \"Explore a demonstration project\",\n description:\n \"See how Chordia Compass surfaces insights from real interaction data\",\n recommended: true,\n onClick: handleSampleClick,\n },\n {\n id: \"connect\",\n icon: Link,\n title: \"Connect a data source\",\n description:\n \"Link your existing system to automatically analyze interactions\",\n recommended: false,\n onClick: handleConnectClick,\n },\n ];\n\n return (\n <div\n style={{\n minHeight: \"100vh\",\n background: \"var(--surface-warm)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"32px\",\n }}\n >\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"audio/*,video/*\"\n onChange={handleFileUpload}\n style={{ display: \"none\" }}\n />\n <div style={{ maxWidth: \"680px\", width: \"100%\" }}>\n {/* Header */}\n <div style={{ textAlign: \"center\", marginBottom: \"48px\" }}>\n <h1\n style={{\n fontSize: \"32px\",\n fontWeight: 760,\n letterSpacing: \"-0.02em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"12px\",\n lineHeight: 1.2,\n }}\n >\n Experience Compass with one interaction\n </h1>\n <p\n style={{\n fontSize: \"15px\",\n color: \"rgba(30, 33, 37, 0.65)\",\n lineHeight: 1.5,\n maxWidth: \"520px\",\n margin: \"0 auto\",\n }}\n >\n Compass surfaces evidence, signals, and actionable insights from\n customer interactions. Start by exploring what it reveals.\n </p>\n </div>\n\n {/* Options */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n {options.map((option) => {\n const Icon = option.icon;\n const isHovered = hoveredCard === option.id;\n\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={option.onClick}\n onMouseEnter={() => setHoveredCard(option.id)}\n onMouseLeave={() => setHoveredCard(null)}\n style={{\n position: \"relative\",\n width: \"100%\",\n padding: \"24px 28px\",\n background: isHovered\n ? \"rgba(255, 255, 255, 0.95)\"\n : \"rgba(255, 255, 255, 0.85)\",\n border: option.recommended\n ? \"2px solid rgba(184, 156, 106, 0.35)\"\n : isHovered\n ? \"1px solid rgba(52, 58, 64, 0.20)\"\n : \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"16px\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.2s ease\",\n transform: isHovered ? \"translateY(-2px)\" : \"translateY(0)\",\n boxShadow: isHovered\n ? \"0 12px 28px rgba(30, 33, 37, 0.12)\"\n : \"0 4px 12px rgba(30, 33, 37, 0.06)\",\n }}\n >\n {/* Recommended badge */}\n {option.recommended && (\n <div\n style={{\n position: \"absolute\",\n top: \"16px\",\n right: \"20px\",\n fontSize: \"10px\",\n fontWeight: 650,\n letterSpacing: \"0.06em\",\n textTransform: \"uppercase\",\n color: \"rgba(184, 156, 106, 0.75)\",\n background: \"rgba(184, 156, 106, 0.12)\",\n padding: \"4px 8px\",\n borderRadius: \"6px\",\n border: \"1px solid rgba(184, 156, 106, 0.2)\",\n }}\n >\n Recommended\n </div>\n )}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"18px\",\n }}\n >\n {/* Icon */}\n <div\n style={{\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"12px\",\n background: option.recommended\n ? \"rgba(184, 156, 106, 0.12)\"\n : \"rgba(231, 212, 162, 0.20)\",\n border: option.recommended\n ? \"1px solid rgba(184, 156, 106, 0.25)\"\n : \"1px solid rgba(231, 212, 162, 0.35)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon\n size={22}\n style={{\n color: option.recommended\n ? \"rgba(184, 156, 106, 0.75)\"\n : \"rgba(30, 33, 37, 0.52)\",\n }}\n />\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, paddingTop: \"2px\" }}>\n <div\n style={{\n fontSize: \"17px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n {option.title}\n </div>\n <div\n style={{\n fontSize: \"13.5px\",\n color: \"rgba(30, 33, 37, 0.62)\",\n lineHeight: 1.5,\n }}\n >\n {option.description}\n </div>\n </div>\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Footer note */}\n <div\n style={{\n marginTop: \"32px\",\n textAlign: \"center\",\n fontSize: \"12px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.5,\n }}\n >\n Your workspace has been created automatically. You can configure\n settings and add teammates later.\n </div>\n\n {/* Testing Examples Section */}\n {showExamples && (\n <div style={{ marginTop: \"48px\", paddingTop: \"32px\", borderTop: \"1px solid rgba(52, 58, 64, 0.12)\" }}>\n <h2\n style={{\n fontSize: \"20px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"24px\",\n }}\n >\n Testing Examples\n </h2>\n\n {/* Uploaded File Example */}\n {uploadedFile && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n File Uploaded\n </span>\n </div>\n <button\n onClick={() => setUploadedFile(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n <div><strong>Name:</strong> {uploadedFile.name}</div>\n <div><strong>Type:</strong> {uploadedFile.type}</div>\n <div><strong>Size:</strong> {(uploadedFile.size / 1024 / 1024).toFixed(2)} MB</div>\n <div><strong>Uploaded:</strong> {uploadedFile.lastModified.toLocaleString()}</div>\n </div>\n </div>\n )}\n\n {/* Demo Projects Selection */}\n {!selectedProject && (\n <div style={{ marginBottom: \"24px\" }}>\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.82)\",\n marginBottom: \"12px\",\n }}\n >\n Select a Demonstration Project:\n </h3>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {dummyProjects.map((project) => (\n <button\n key={project.id}\n onClick={() => handleSelectProject(project.id)}\n style={{\n padding: \"12px 16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"8px\",\n textAlign: \"left\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.20)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n >\n <div style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\", marginBottom: \"4px\" }}>\n {project.name}\n </div>\n <div style={{ fontSize: \"12px\", color: \"rgba(30, 33, 37, 0.62)\", marginBottom: \"4px\" }}>\n {project.description}\n </div>\n <div style={{ fontSize: \"11px\", color: \"rgba(30, 33, 37, 0.52)\" }}>\n {project.interactions} interactions · {project.dateRange}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Selected Project Example */}\n {selectedProject && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n Project Selected: {selectedProject.name}\n </span>\n </div>\n <button\n onClick={() => setSelectedProject(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n <div>{selectedProject.description}</div>\n <div style={{ marginTop: \"4px\" }}>\n <strong>{selectedProject.interactions}</strong> interactions · <strong>{selectedProject.dateRange}</strong>\n </div>\n </div>\n </div>\n )}\n\n {/* Data Sources Selection */}\n {!connectedSource && (\n <div style={{ marginBottom: \"24px\" }}>\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.82)\",\n marginBottom: \"12px\",\n }}\n >\n Connect a Data Source:\n </h3>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {dummyDataSources.map((source) => (\n <button\n key={source.id}\n onClick={() => handleConnectSource(source.id)}\n disabled={source.status === \"coming-soon\"}\n style={{\n padding: \"12px 16px\",\n background: source.status === \"coming-soon\" \n ? \"rgba(255, 255, 255, 0.5)\" \n : \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"8px\",\n textAlign: \"left\",\n cursor: source.status === \"coming-soon\" ? \"not-allowed\" : \"pointer\",\n transition: \"all 0.15s ease\",\n opacity: source.status === \"coming-soon\" ? 0.6 : 1,\n }}\n onMouseEnter={(e) => {\n if (source.status !== \"coming-soon\") {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.20)\";\n }\n }}\n onMouseLeave={(e) => {\n if (source.status !== \"coming-soon\") {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\n <div>\n <div style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\", marginBottom: \"4px\" }}>\n {source.name}\n </div>\n <div style={{ fontSize: \"12px\", color: \"rgba(30, 33, 37, 0.62)\" }}>\n {source.description}\n </div>\n </div>\n {source.status === \"coming-soon\" && (\n <span\n style={{\n fontSize: \"10px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.42)\",\n background: \"rgba(30, 33, 37, 0.08)\",\n padding: \"4px 8px\",\n borderRadius: \"4px\",\n }}\n >\n Coming Soon\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Connected Source Example */}\n {connectedSource && (\n <div\n style={{\n marginBottom: \"24px\",\n padding: \"16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <CheckCircle2 size={18} style={{ color: \"#1F8F5A\" }} />\n <span style={{ fontSize: \"14px\", fontWeight: 650, color: \"rgba(30, 33, 37, 0.92)\" }}>\n Connected: {connectedSource.name}\n </span>\n </div>\n <button\n onClick={() => setConnectedSource(null)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <X size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </button>\n </div>\n <div style={{ fontSize: \"13px\", color: \"rgba(30, 33, 37, 0.65)\", lineHeight: 1.5 }}>\n {connectedSource.description}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n X,\n CheckCircle2,\n Circle,\n ChevronRight,\n Sparkles,\n Users,\n FolderOpen,\n Link,\n Settings,\n BookOpen,\n} from \"lucide-react\";\n\n/**\n * OnboardingChecklist Component\n * Displays a collapsible checklist of onboarding tasks with progress tracking.\n * Shows completed items with checkmarks and allows interaction with incomplete items.\n */\nexport default function OnboardingChecklist({\n onDismiss,\n onItemClick,\n completedItems = [],\n}) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [hoveredItem, setHoveredItem] = useState(null);\n\n const checklistItems = [\n {\n id: \"name-project\",\n title: \"Name your workspace\",\n description: \"Give your default project a meaningful name\",\n icon: FolderOpen,\n completed: completedItems.includes(\"name-project\"),\n optional: true,\n },\n {\n id: \"evaluate-second-interaction\",\n title: \"Evaluate another interaction\",\n description: \"Upload or connect a second interaction to see patterns\",\n icon: Sparkles,\n completed: completedItems.includes(\"evaluate-second-interaction\"),\n },\n {\n id: \"connect-source\",\n title: \"Connect a data source\",\n description: \"Link your system or platform for automatic evaluation\",\n icon: Link,\n completed: completedItems.includes(\"connect-source\"),\n },\n {\n id: \"invite-team\",\n title: \"Add teammates\",\n description: \"Invite managers or QA team members to collaborate\",\n icon: Users,\n completed: completedItems.includes(\"invite-team\"),\n optional: true,\n },\n {\n id: \"learn-concepts\",\n title: \"Understand Chordia concepts\",\n description: \"Learn how conditions, evidence, and confidence work\",\n icon: BookOpen,\n completed: completedItems.includes(\"learn-concepts\"),\n optional: true,\n },\n {\n id: \"configure-scope\",\n title: \"Clarify evaluation scope\",\n description: \"Customize which signals and conditions matter for your team\",\n icon: Settings,\n completed: completedItems.includes(\"configure-scope\"),\n optional: true,\n },\n ];\n\n const completedCount = checklistItems.filter((item) => item.completed).length;\n const totalCount = checklistItems.length;\n const progressPercent = (completedCount / totalCount) * 100;\n\n if (isCollapsed) {\n return (\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(false)}\n style={{\n width: \"100%\",\n padding: \"14px 16px\",\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"12px\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.15s ease\",\n boxShadow: \"0 2px 8px rgba(30, 33, 37, 0.04)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.95)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.85)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div\n style={{\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.75)\",\n }}\n >\n Getting started ({completedCount}/{totalCount})\n </div>\n <ChevronRight size={16} style={{ color: \"rgba(30, 33, 37, 0.42)\" }} />\n </div>\n </button>\n );\n }\n\n return (\n <div\n style={{\n background: \"rgba(255, 255, 255, 0.85)\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n borderRadius: \"16px\",\n overflow: \"hidden\",\n boxShadow: \"0 4px 16px rgba(30, 33, 37, 0.06)\",\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: \"18px 20px 16px\",\n borderBottom: \"1px solid rgba(52, 58, 64, 0.08)\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div style={{ flex: 1 }}>\n <div\n style={{\n fontSize: \"15px\",\n fontWeight: 680,\n letterSpacing: \"-0.01em\",\n color: \"rgba(30, 33, 37, 0.92)\",\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n Getting started with Chordia\n </div>\n <div\n style={{\n fontSize: \"12px\",\n color: \"rgba(30, 33, 37, 0.58)\",\n lineHeight: 1.4,\n }}\n >\n {completedCount} of {totalCount} completed\n </div>\n </div>\n <div style={{ display: \"flex\", gap: \"4px\" }}>\n {/* Collapse button */}\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(true)}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"6px\",\n background: \"transparent\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 0.15s ease\",\n color: \"rgba(30, 33, 37, 0.52)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(231, 212, 162, 0.12)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n title=\"Collapse\"\n >\n <ChevronRight size={14} />\n </button>\n {/* Dismiss button */}\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"6px\",\n background: \"transparent\",\n border: \"1px solid rgba(52, 58, 64, 0.12)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 0.15s ease\",\n color: \"rgba(30, 33, 37, 0.52)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(231, 212, 162, 0.12)\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.18)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.borderColor = \"rgba(52, 58, 64, 0.12)\";\n }}\n title=\"Dismiss checklist\"\n >\n <X size={14} />\n </button>\n )}\n </div>\n </div>\n {/* Progress bar */}\n <div\n style={{\n marginTop: \"14px\",\n height: \"6px\",\n background: \"rgba(30, 33, 37, 0.08)\",\n borderRadius: \"999px\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${progressPercent}%`,\n background:\n \"linear-gradient(90deg, rgba(184, 156, 106, 0.75) 0%, rgba(139, 157, 127, 0.75) 100%)\",\n borderRadius: \"999px\",\n transition: \"width 0.4s ease\",\n }}\n />\n </div>\n </div>\n\n {/* Checklist items */}\n <div style={{ padding: \"8px\" }}>\n {checklistItems.map((item, index) => {\n const Icon = item.icon;\n const isHovered = hoveredItem === item.id;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onItemClick?.(item.id)}\n onMouseEnter={() => setHoveredItem(item.id)}\n onMouseLeave={() => setHoveredItem(null)}\n disabled={item.completed}\n style={{\n width: \"100%\",\n padding: \"12px 14px\",\n background: item.completed\n ? \"rgba(139, 157, 127, 0.06)\"\n : isHovered\n ? \"rgba(231, 212, 162, 0.12)\"\n : \"transparent\",\n border: \"none\",\n borderRadius: \"10px\",\n cursor: item.completed ? \"default\" : \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.15s ease\",\n marginBottom: index < checklistItems.length - 1 ? \"4px\" : \"0\",\n opacity: item.completed ? 0.7 : 1,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n }}\n >\n {/* Icon/Checkbox */}\n <div\n style={{\n width: \"20px\",\n height: \"20px\",\n marginTop: \"1px\",\n flexShrink: 0,\n }}\n >\n {item.completed ? (\n <CheckCircle2\n size={20}\n style={{ color: \"rgba(139, 157, 127, 0.75)\" }}\n />\n ) : (\n <Circle\n size={20}\n style={{ color: \"rgba(30, 33, 37, 0.24)\" }}\n />\n )}\n </div>\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n marginBottom: \"3px\",\n }}\n >\n <Icon\n size={14}\n style={{ color: \"rgba(30, 33, 37, 0.52)\", flexShrink: 0 }}\n />\n <span\n style={{\n fontSize: \"13px\",\n fontWeight: 600,\n color: item.completed\n ? \"rgba(30, 33, 37, 0.52)\"\n : \"rgba(30, 33, 37, 0.85)\",\n textDecoration: item.completed ? \"line-through\" : \"none\",\n lineHeight: 1.3,\n }}\n >\n {item.title}\n </span>\n {item.optional && !item.completed && (\n <span\n style={{\n fontSize: \"9px\",\n fontWeight: 600,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n color: \"rgba(30, 33, 37, 0.42)\",\n background: \"rgba(30, 33, 37, 0.06)\",\n padding: \"2px 5px\",\n borderRadius: \"4px\",\n }}\n >\n Optional\n </span>\n )}\n </div>\n <div\n style={{\n fontSize: \"11.5px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.4,\n paddingLeft: \"22px\",\n }}\n >\n {item.description}\n </div>\n </div>\n {/* Arrow indicator (only for incomplete items on hover) */}\n {!item.completed && isHovered && (\n <ChevronRight\n size={16}\n style={{\n color: \"rgba(30, 33, 37, 0.32)\",\n marginTop: \"2px\",\n flexShrink: 0,\n }}\n />\n )}\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Footer note */}\n <div\n style={{\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid rgba(52, 58, 64, 0.08)\",\n }}\n >\n <div\n style={{\n fontSize: \"11px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n lineHeight: 1.5,\n fontStyle: \"italic\",\n }}\n >\n You can dismiss this checklist anytime. These steps help you get the\n most from Chordia, but {'aren\\'t'} required.\n </div>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\n/**\n * DemoProjectBanner Component\n * Displays a diagonal banner in the top-right corner indicating a demo project.\n * Creates a triangular ribbon effect with rotated text.\n */\nexport default function DemoProjectBanner({\n text = \"Demo Project\",\n accentColor = \"#B89C6A\",\n textColor = \"rgba(255, 255, 255, 0.95)\",\n size = \"medium\",\n position = \"fixed\",\n}) {\n // Size configurations\n const sizeConfig = {\n small: {\n width: 140,\n height: 140,\n fontSize: \"11px\",\n letterSpacing: \"0.08em\",\n fontWeight: 650,\n },\n medium: {\n width: 180,\n height: 180,\n fontSize: \"12px\",\n letterSpacing: \"0.1em\",\n fontWeight: 680,\n },\n large: {\n width: 220,\n height: 220,\n fontSize: \"13px\",\n letterSpacing: \"0.12em\",\n fontWeight: 700,\n },\n };\n\n const config = sizeConfig[size];\n\n return (\n <div\n style={{\n position: position,\n top: 0,\n right: 0,\n width: config.width,\n height: config.height,\n overflow: \"hidden\",\n zIndex: position === \"fixed\" ? 9999 : 1,\n pointerEvents: \"none\",\n }}\n >\n {/* Triangle background */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: `0 ${config.width}px ${config.height}px 0`,\n borderColor: `transparent ${accentColor} transparent transparent`,\n opacity: 0.92,\n }}\n />\n\n {/* Diagonal stripe for depth */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: `0 ${config.width}px ${config.height}px 0`,\n borderColor: \"transparent rgba(0, 0, 0, 0.08) transparent transparent\",\n }}\n />\n\n {/* Text container - rotated 45deg */}\n <div\n style={{\n position: \"absolute\",\n top:\n size === \"small\"\n ? \"28px\"\n : size === \"medium\"\n ? \"38px\"\n : \"48px\",\n right:\n size === \"small\"\n ? \"-32px\"\n : size === \"medium\"\n ? \"-42px\"\n : \"-52px\",\n width:\n size === \"small\" ? \"160px\" : size === \"medium\" ? \"200px\" : \"240px\",\n transform: \"rotate(45deg)\",\n transformOrigin: \"center\",\n textAlign: \"center\",\n }}\n >\n <div\n style={{\n fontSize: config.fontSize,\n fontWeight: config.fontWeight,\n letterSpacing: config.letterSpacing,\n textTransform: \"uppercase\",\n color: textColor,\n textShadow: \"0 1px 2px rgba(0, 0, 0, 0.15)\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n }}\n >\n {text}\n </div>\n </div>\n\n {/* Subtle shadow for depth */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: config.width,\n height: config.height,\n background:\n \"linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.04) 100%)\",\n pointerEvents: \"none\",\n }}\n />\n </div>\n );\n}\n\n","\"use client\";\nimport React, { useState } from 'react';\nimport { Lock, Mail, Eye, EyeOff, ArrowRight } from 'lucide-react';\n\n// Logo asset — concentric circles + wordmark\n// const LOGO_URL = new URL('../../assets/chordia-logo.png', import.meta.url).href;\nconst LOGO_URL = \"../../assets/chordia-logo.png\";\n\n/**\n * LoginForm — Chordia design system login component.\n *\n * Warm parchment aesthetic. Gold accents on focus, earth-tone CTA.\n * Purple is intentionally avoided — it's reserved for AI presence.\n *\n * Props:\n * - title: string (default: \"Chordia\") — only shown if no logo\n * - subtitle: string (default: \"Sign in to continue\")\n * - logo: ReactNode (optional — replaces the default logo image + subtitle)\n * - onLogin: (email, password) => Promise<void> | void\n * - loading: boolean\n * - error: string | null\n * - footer: ReactNode (optional — e.g. links, version info)\n * - showLabels: boolean (default: true)\n * - emailPlaceholder: string\n * - passwordPlaceholder: string\n * - onForgotPassword: () => void (optional — shows \"Forgot password?\" link)\n * - compact: boolean (default: false — skips the full-page centering wrapper)\n */\nexport default function LoginForm({\n title = 'Chordia',\n subtitle = 'Sign in to continue',\n logo,\n onLogin,\n loading = false,\n error = null,\n footer,\n showLabels = true,\n emailPlaceholder = 'you@company.com',\n passwordPlaceholder = 'Password',\n onForgotPassword,\n compact = false,\n}) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [focused, setFocused] = useState(null);\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (!email || !password || loading) return;\n onLogin?.(email, password);\n };\n\n const canSubmit = email && password && !loading;\n\n // Warm earth accent — compliance orange, used for focus/CTA (not purple)\n const accentColor = 'var(--rail-compliance)';\n const accentRgba = '201, 138, 90'; // --rail-compliance raw\n\n const card = (\n <div style={{\n width: '100%',\n maxWidth: 400,\n background: 'var(--paper-elevated)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n padding: '44px 36px 36px',\n boxShadow: '0 8px 32px rgba(30, 33, 37, 0.06), 0 1px 3px rgba(30, 33, 37, 0.04)',\n position: 'relative',\n overflow: 'hidden',\n }}>\n {/* Decorative top rail — warm gold gradient */}\n <div style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: 3,\n background: `linear-gradient(90deg, var(--state-unknown), ${accentColor})`,\n opacity: 0.6,\n }} />\n\n {/* Logo / Title area */}\n <div style={{ textAlign: 'center', marginBottom: 32 }}>\n {logo || (\n <>\n {/* Logo on a dark pill so the light-colored asset is visible */}\n <div style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '12px 24px',\n borderRadius: 'var(--radius-lg)',\n background: 'rgba(30, 33, 37, 0.92)',\n marginBottom: 16,\n }}>\n <img\n src={LOGO_URL}\n alt={title}\n style={{ height: 28, display: 'block' }}\n />\n </div>\n {subtitle && (\n <p style={{\n fontSize: 'var(--text-sm)',\n color: 'var(--text-muted)',\n marginTop: 4,\n marginBottom: 0,\n }}>{subtitle}</p>\n )}\n </>\n )}\n </div>\n\n <form onSubmit={handleSubmit}>\n {/* Email field */}\n <div style={{ marginBottom: 18 }}>\n {showLabels && (\n <label style={{\n display: 'block',\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n marginBottom: 6,\n fontFamily: 'var(--font-sans)',\n }}>Email</label>\n )}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <Mail size={15} style={{\n position: 'absolute',\n left: 12,\n color: focused === 'email' ? `rgba(${accentRgba}, 0.7)` : 'var(--text-faint)',\n pointerEvents: 'none',\n transition: 'color 0.2s ease',\n }} />\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={emailPlaceholder}\n required\n autoFocus\n autoComplete=\"email\"\n style={{\n width: '100%',\n padding: '11px 12px 11px 38px',\n fontSize: 'var(--text-md)',\n border: '1px solid',\n borderColor: focused === 'email' ? accentColor : 'var(--border)',\n borderRadius: 'var(--radius)',\n backgroundColor: focused === 'email' ? 'rgba(255,255,255,0.95)' : 'var(--paper)',\n color: 'var(--text-ink)',\n fontFamily: 'var(--font-sans)',\n outline: 'none',\n transition: 'border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease',\n boxShadow: focused === 'email' ? `0 0 0 3px rgba(${accentRgba}, 0.1)` : 'none',\n }}\n onFocus={() => setFocused('email')}\n onBlur={() => setFocused(null)}\n />\n </div>\n </div>\n\n {/* Password field */}\n <div style={{ marginBottom: 6 }}>\n {showLabels && (\n <label style={{\n display: 'block',\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n marginBottom: 6,\n fontFamily: 'var(--font-sans)',\n }}>Password</label>\n )}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <Lock size={15} style={{\n position: 'absolute',\n left: 12,\n color: focused === 'password' ? `rgba(${accentRgba}, 0.7)` : 'var(--text-faint)',\n pointerEvents: 'none',\n transition: 'color 0.2s ease',\n }} />\n <input\n type={showPassword ? 'text' : 'password'}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={passwordPlaceholder}\n required\n autoComplete=\"current-password\"\n style={{\n width: '100%',\n padding: '11px 42px 11px 38px',\n fontSize: 'var(--text-md)',\n border: '1px solid',\n borderColor: focused === 'password' ? accentColor : 'var(--border)',\n borderRadius: 'var(--radius)',\n backgroundColor: focused === 'password' ? 'rgba(255,255,255,0.95)' : 'var(--paper)',\n color: 'var(--text-ink)',\n fontFamily: 'var(--font-sans)',\n outline: 'none',\n transition: 'border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease',\n boxShadow: focused === 'password' ? `0 0 0 3px rgba(${accentRgba}, 0.1)` : 'none',\n }}\n onFocus={() => setFocused('password')}\n onBlur={() => setFocused(null)}\n />\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n style={{\n position: 'absolute',\n right: 8,\n background: 'none',\n border: 'none',\n padding: 4,\n cursor: 'pointer',\n color: 'var(--text-faint)',\n display: 'flex',\n alignItems: 'center',\n transition: 'color 0.15s ease',\n borderRadius: 'var(--radius-sm)',\n }}\n tabIndex={-1}\n onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--text-muted)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--text-faint)'; }}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n </div>\n\n {/* Forgot password link */}\n {onForgotPassword && (\n <div style={{ textAlign: 'right', marginBottom: 4 }}>\n <button\n type=\"button\"\n onClick={onForgotPassword}\n style={{\n background: 'none',\n border: 'none',\n padding: '2px 0',\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n cursor: 'pointer',\n fontFamily: 'var(--font-sans)',\n transition: 'color 0.15s ease',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--text-strong)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--text-muted)'; }}\n >\n Forgot password?\n </button>\n </div>\n )}\n\n {/* Error message — gold warning tint, no red */}\n {error && (\n <div style={{\n fontSize: 'var(--text-sm)',\n color: 'var(--text-strong)',\n marginTop: 12,\n padding: '8px 12px',\n background: 'color-mix(in srgb, var(--state-unknown) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--state-unknown) 25%, transparent)',\n borderRadius: 'var(--radius-sm)',\n textAlign: 'center',\n fontWeight: 500,\n }}>{error}</div>\n )}\n\n {/* Submit button — dark ink, warm and authoritative */}\n <button\n type=\"submit\"\n disabled={!canSubmit}\n style={{\n width: '100%',\n padding: '11px 0',\n marginTop: 20,\n background: canSubmit ? 'var(--text-ink)' : 'var(--text-xfaint)',\n color: '#ffffff',\n border: 'none',\n borderRadius: 'var(--radius)',\n fontSize: 'var(--text-md)',\n fontWeight: 600,\n fontFamily: 'var(--font-sans)',\n cursor: canSubmit ? 'pointer' : 'not-allowed',\n transition: 'opacity 0.15s ease, transform 0.1s ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n }}\n onMouseEnter={(e) => {\n if (canSubmit) {\n e.currentTarget.style.opacity = '0.85';\n e.currentTarget.style.transform = 'translateY(-1px)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = '1';\n e.currentTarget.style.transform = 'translateY(0)';\n }}\n onMouseDown={(e) => {\n if (canSubmit) e.currentTarget.style.transform = 'translateY(0)';\n }}\n onMouseUp={(e) => {\n if (canSubmit) e.currentTarget.style.transform = 'translateY(-1px)';\n }}\n >\n {loading ? 'Signing in…' : (\n <>\n Sign In\n <ArrowRight size={16} />\n </>\n )}\n </button>\n </form>\n\n {/* Divider + Footer */}\n {footer && (\n <>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '24px 0 16px',\n }}>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n <span style={{ fontSize: 'var(--text-xs)', color: 'var(--text-faint)' }}>or</span>\n <div style={{ flex: 1, height: 1, background: 'var(--border)' }} />\n </div>\n <div style={{\n textAlign: 'center',\n fontSize: 'var(--text-xs)',\n color: 'var(--text-faint)',\n }}>{footer}</div>\n </>\n )}\n </div>\n );\n\n if (compact) return card;\n\n return (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '100vh',\n background: 'var(--bg-chordia)',\n padding: 'var(--spacing-6)',\n }}>\n {card}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useCallback, useEffect, useLayoutEffect } from \"react\";\n\n/**\n * SplitPane Component\n * Resizable two-pane layout with draggable divider and collapsible panels.\n *\n * Props:\n * left - React node for left pane\n * right - React node for right pane\n * defaultWidth - Initial left pane width in px (default: 260). Ignored if defaultRatio is set.\n * defaultRatio - Initial left pane width as ratio 0-1 (e.g. 0.5 for 50%). Overrides defaultWidth.\n * minWidth - Minimum left pane width in px (default: 180)\n * maxWidth - Maximum left pane width in px (default: 450)\n * minRatio - Minimum left pane width as ratio 0-1. Overrides minWidth when set.\n * maxRatio - Maximum left pane width as ratio 0-1. Overrides maxWidth when set.\n * collapsedWidth - Width of the collapsed strip in px (default: 0)\n * collapsed - Controlled collapsed state (optional)\n * onCollapsedChange - (collapsed: boolean) => void (optional)\n * collapseSide - Which side(s) can collapse: \"left\" | \"right\" | \"both\" | \"none\" (default: \"left\")\n * collapseThreshold - Drag below this px to auto-collapse left (default: minWidth - 40)\n * dividerWidth - Divider hit area width in px (default: 7)\n * style - Style for the outer container\n */\nexport default function SplitPane({\n left,\n right,\n defaultWidth = 260,\n defaultRatio,\n minWidth = 180,\n maxWidth = 450,\n minRatio,\n maxRatio,\n collapsedWidth = 0,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n collapseSide = \"left\",\n collapseThreshold,\n dividerWidth = 7,\n style,\n}) {\n const isControlled = controlledCollapsed !== undefined;\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const setCollapsed = useCallback(\n (val) => {\n const next = typeof val === \"function\" ? val(collapsed) : val;\n if (!isControlled) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [isControlled, collapsed, onCollapsedChange]\n );\n\n const containerRef = useRef(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const [width, setWidth] = useState(defaultWidth);\n const [dragging, setDragging] = useState(false);\n const [initialized, setInitialized] = useState(false);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n // Measure container and set initial width from ratio\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const w = containerRef.current.offsetWidth;\n setContainerWidth(w);\n if (!initialized && w > 0) {\n if (defaultRatio != null) {\n setWidth(Math.round(w * defaultRatio));\n }\n setInitialized(true);\n }\n }, []);\n\n // Observe container resize\n useEffect(() => {\n if (!containerRef.current) return;\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerWidth(entry.contentRect.width);\n }\n });\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n // Compute effective min/max from ratios if provided\n const effectiveMin = minRatio != null ? Math.round(containerWidth * minRatio) : minWidth;\n const effectiveMax = maxRatio != null ? Math.round(containerWidth * maxRatio) : maxWidth;\n const effectiveCollapseThreshold =\n collapseThreshold ?? (collapseSide === \"none\" ? 0 : effectiveMin - 40);\n\n const handleMouseDown = useCallback(\n (e) => {\n e.preventDefault();\n startXRef.current = e.clientX;\n startWidthRef.current = collapsed ? collapsedWidth : width;\n setDragging(true);\n },\n [width, collapsed, collapsedWidth]\n );\n\n useEffect(() => {\n if (!dragging) return;\n\n const handleMouseMove = (e) => {\n const delta = e.clientX - startXRef.current;\n const newWidth = startWidthRef.current + delta;\n\n const canCollapseLeft = collapseSide === \"left\" || collapseSide === \"both\";\n const canCollapseRight = collapseSide === \"right\" || collapseSide === \"both\";\n\n // Collapse left: dragged too far left\n if (canCollapseLeft && newWidth < effectiveCollapseThreshold) {\n if (!collapsed) setCollapsed(true);\n return;\n }\n\n // Collapse right: dragged too far right (right pane too narrow)\n const rightRemaining = containerWidth - newWidth - dividerWidth;\n if (canCollapseRight && containerWidth > 0 && rightRemaining < effectiveCollapseThreshold) {\n // Don't collapse right in this version — just clamp at max\n }\n\n if (collapsed) setCollapsed(false);\n setWidth(Math.min(Math.max(newWidth, effectiveMin), effectiveMax));\n };\n\n const handleMouseUp = () => setDragging(false);\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n };\n }, [\n dragging, collapsed, effectiveMin, effectiveMax, effectiveCollapseThreshold,\n containerWidth, dividerWidth, collapseSide, setCollapsed,\n ]);\n\n const handleDoubleClick = useCallback(() => {\n if (collapseSide !== \"none\") {\n setCollapsed((c) => !c);\n }\n }, [setCollapsed, collapseSide]);\n\n const actualLeftWidth = collapsed ? collapsedWidth : width;\n\n return (\n <div\n ref={containerRef}\n style={{\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\",\n position: \"relative\",\n ...style,\n }}\n >\n {/* Left pane */}\n {(actualLeftWidth > 0 || !collapsed) && (\n <div\n style={{\n width: actualLeftWidth,\n flexShrink: 0,\n overflow: \"hidden\",\n transition: dragging ? \"none\" : \"width 0.2s ease\",\n height: \"100%\",\n }}\n >\n {!collapsed && left}\n </div>\n )}\n\n {/* Divider */}\n <div\n onMouseDown={handleMouseDown}\n onDoubleClick={handleDoubleClick}\n style={{\n width: `${dividerWidth}px`,\n flexShrink: 0,\n cursor: \"col-resize\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\",\n zIndex: 2,\n }}\n >\n {/* Visual line */}\n <div\n style={{\n width: \"1px\",\n height: \"100%\",\n background: dragging\n ? \"var(--rail-discovery, #5E88B0)\"\n : \"var(--border, rgba(52,58,64,0.12))\",\n transition: \"background 0.15s ease\",\n }}\n />\n {/* Hover grip */}\n <div\n style={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"5px\",\n height: \"28px\",\n borderRadius: \"3px\",\n background: dragging\n ? \"var(--rail-discovery, #5E88B0)\"\n : \"var(--border, rgba(52,58,64,0.12))\",\n opacity: dragging ? 1 : 0,\n transition: \"opacity 0.15s ease, background 0.15s ease\",\n }}\n className=\"splitpane-grip\"\n />\n <style>{`\n div:hover > .splitpane-grip { opacity: 0.7 !important; }\n `}</style>\n </div>\n\n {/* Right pane */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n overflow: \"hidden\",\n height: \"100%\",\n }}\n >\n {right}\n </div>\n </div>\n );\n}\n"],"names":["FirstCallScreen","onUploadCall","onConnectSource","onUseSample","showExamples","hoveredCard","setHoveredCard","useState","uploadedFile","setUploadedFile","connectedSource","setConnectedSource","selectedProject","setSelectedProject","fileInputRef","useRef","dummyDataSources","dummyProjects","handleFileUpload","event","file","_a","isAudio","isVideo","handleConnectSource","sourceId","source","s","handleSelectProject","projectId","project","p","handleUploadClick","handleSampleClick","handleConnectClick","options","Upload","Sparkles","Link","jsxs","jsx","option","Icon","isHovered","CheckCircle2","X","e","OnboardingChecklist","onDismiss","onItemClick","completedItems","isCollapsed","setIsCollapsed","hoveredItem","setHoveredItem","checklistItems","FolderOpen","Users","BookOpen","Settings","completedCount","item","totalCount","progressPercent","ChevronRight","index","Circle","DemoProjectBanner","text","accentColor","textColor","size","position","config","LOGO_URL","LoginForm","title","subtitle","logo","onLogin","loading","error","footer","showLabels","emailPlaceholder","passwordPlaceholder","onForgotPassword","compact","email","setEmail","password","setPassword","showPassword","setShowPassword","focused","setFocused","handleSubmit","canSubmit","accentRgba","card","Fragment","Mail","Lock","EyeOff","Eye","ArrowRight","SplitPane","left","right","defaultWidth","defaultRatio","minWidth","maxWidth","minRatio","maxRatio","collapsedWidth","controlledCollapsed","onCollapsedChange","collapseSide","collapseThreshold","dividerWidth","style","isControlled","internalCollapsed","setInternalCollapsed","collapsed","setCollapsed","useCallback","val","next","containerRef","containerWidth","setContainerWidth","width","setWidth","dragging","setDragging","initialized","setInitialized","startXRef","startWidthRef","useLayoutEffect","w","useEffect","ro","entries","entry","effectiveMin","effectiveMax","effectiveCollapseThreshold","handleMouseDown","handleMouseMove","delta","newWidth","handleMouseUp","handleDoubleClick","c","actualLeftWidth"],"mappings":"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"}