Generated: 2026-03-03
Total warnings: 1657 across 428 files
- src/components/assistant (424)
- src/utils (270)
- src/components/settings (199)
- src/components/vault (137)
- src/components/common (125)
- src/components/ui (105)
- src/components/workflows (70)
- src/components/workflow-builder (57)
- src/components/library (46)
- src/components/research (36)
- src/components/shared (33)
- src/office (26)
- src/models (24)
- src/contexts (22)
- src/hooks (13)
- src/components/client-matters (11)
- src/components/ui-new (11)
- src/components/dashboard (9)
- src/components/sidebar (7)
- src/components/compare (5)
- src/providers (5)
- src/components/history (4)
- src/constants (4)
- src/types (4)
- src/components/filter (2)
- src/app.tsx (1)
- src/components/app-layout.tsx (1)
- src/components/general-store-listener.tsx (1)
- src/components/grouping (1)
- src/error (1)
- src/index.tsx (1)
- src/statsig (1)
- src/workers (1)
| Line | Source |
|---|---|
| 125 | usageDisplayString: 'Argentina Legal', |
| 136 | usageDisplayString: 'Australia Extended', |
| 147 | usageDisplayString: 'Austria Legal', |
| 158 | usageDisplayString: 'Bahrain Legal', |
| 169 | usageDisplayString: 'Belgium Legal', |
| 180 | usageDisplayString: 'Bolivia Legal', |
| 191 | usageDisplayString: 'Brazil Legal', |
| 202 | usageDisplayString: 'British Virgin Islands Legal', |
| 213 | usageDisplayString: 'Canada Legal', |
| 224 | usageDisplayString: 'Cayman Islands Legal', |
| 235 | usageDisplayString: 'Chile Legal', |
| 246 | usageDisplayString: 'Colombia Legal', |
| 257 | usageDisplayString: 'Croatia Legal', |
| 268 | usageDisplayString: 'Costa Rica Legal', |
| 279 | usageDisplayString: 'Czech Republic Legal', |
| 290 | usageDisplayString: 'Denmark Legal', |
| 301 | usageDisplayString: 'Dominican Republic Legal', |
| 312 | usageDisplayString: 'Ecuador Legal', |
| 323 | usageDisplayString: 'Egypt Legal', |
| 334 | usageDisplayString: 'England & Wales Legal', |
| 345 | usageDisplayString: 'Estonia Legal', |
| 356 | usageDisplayString: 'European Union Legal', |
| 367 | usageDisplayString: 'Finland Legal', |
| 378 | usageDisplayString: 'France Legal', |
| 389 | usageDisplayString: 'Georgia Legal', |
| 402 | usageDisplayString: 'Germany Extended', |
| 413 | usageDisplayString: 'Germany Extended', |
| 424 | usageDisplayString: 'International Legal', |
| 435 | usageDisplayString: 'Guernsey Legal', |
| 446 | usageDisplayString: 'Greece Tax', |
| 457 | usageDisplayString: 'Hong Kong Legal', |
| 468 | usageDisplayString: 'Hungary Legal', |
| 479 | usageDisplayString: 'Iceland Legal', |
| 490 | usageDisplayString: 'India Legal', |
| 501 | usageDisplayString: 'India Extended', |
| 512 | usageDisplayString: 'Ireland Legal', |
| 523 | usageDisplayString: 'Israel Legal', |
| 534 | usageDisplayString: 'Italy Legal', |
| 545 | usageDisplayString: 'Japan Legal', |
| 556 | usageDisplayString: 'Jersey Legal', |
| 567 | usageDisplayString: 'Kuwait Legal', |
| 578 | usageDisplayString: 'Latvia Legal', |
| 589 | usageDisplayString: 'Liechtenstein Legal', |
| 600 | usageDisplayString: 'Lithuania Legal', |
| 611 | usageDisplayString: 'Luxembourg Legal', |
| 622 | usageDisplayString: 'Malta Legal', |
| 633 | usageDisplayString: 'Mexico Legal', |
| 644 | usageDisplayString: 'Netherlands Legal', |
| 655 | usageDisplayString: 'New Zealand Legal', |
| 666 | usageDisplayString: 'Nigeria Legal', |
| 677 | usageDisplayString: 'Northern Ireland Legal', |
| 688 | usageDisplayString: 'Norway Legal', |
| 699 | usageDisplayString: 'Panama Legal', |
| 710 | usageDisplayString: 'Paraguay Legal', |
| 721 | usageDisplayString: 'Peru Legal', |
| 732 | usageDisplayString: 'Poland Legal', |
| 743 | usageDisplayString: 'Portugal Legal', |
| 754 | usageDisplayString: 'Puerto Rico Legal', |
| 765 | usageDisplayString: 'Romania Legal', |
| 776 | usageDisplayString: 'Saudi Arabia Legal', |
| 787 | usageDisplayString: 'Scotland Legal', |
| 798 | usageDisplayString: 'Singapore Tax', |
| 809 | usageDisplayString: 'Slovakia Legal', |
| 820 | usageDisplayString: 'Slovenia Legal', |
| 831 | usageDisplayString: 'South Africa Legal', |
| 842 | usageDisplayString: 'South Korea Legal', |
| 853 | usageDisplayString: 'Spain Legal', |
| 864 | usageDisplayString: 'Sweden Regulations', |
| 875 | usageDisplayString: 'Switzerland Legal', |
| 886 | usageDisplayString: 'Taiwan Legal', |
| 897 | usageDisplayString: 'Turkey Legal', |
| 908 | usageDisplayString: 'Ukraine Legal', |
| 919 | usageDisplayString: 'United Arab Emirates Legal', |
| 930 | usageDisplayString: 'UK Legal', |
| 941 | usageDisplayString: 'United Nations Legal', |
| 952 | usageDisplayString: 'United States Legal', |
| 963 | usageDisplayString: 'Uruguay Legal', |
| 1028 | alt={'${descriptorToString(source.name)} Legal'} |
| 1047 | 'Assist (${source.usageDisplayString})' |
| 1063 | parentLabelMapping[productLabelKey] = 'Assist' |
| 1064 | groupLabelMapping[productLabelKey] = 'Assistant' |
| Line | Source |
|---|---|
| 100 | if (node.closest?.('[role="search"], [role="searchbox"]')) return true |
| 154 | 'Arial', |
| 155 | 'Arial Black', |
| 156 | 'Arial Narrow', |
| 157 | 'Arial Rounded MT Bold', |
| 158 | 'Baskerville Old Face', |
| 159 | 'Bookman Old Style', |
| 160 | 'Bookshelf Symbol 7', |
| 161 | 'Brush Script MT', |
| 162 | 'Calibri', |
| 163 | 'Calibri Light', |
| 164 | 'Cambria', |
| 165 | 'Cambria Math', |
| 166 | 'Century', |
| 167 | 'Comic Sans MS', |
| 168 | 'Consolas', |
| 169 | 'Cooper Black', |
| 170 | 'Copperplate Gothic Light', |
| 171 | 'Courier', |
| 172 | 'Courier New', |
| 173 | 'Garamond', |
| 174 | 'Georgia', |
| 175 | 'Gill Sans MT', |
| 176 | 'Gill Sans MT Condensed', |
| 177 | 'Helvetica', |
| 178 | 'Lucida Console', |
| 179 | 'Malgun Gothic', |
| 180 | 'Meiryo', |
| 181 | 'Myriad Pro', |
| 182 | 'SimSun', |
| 183 | 'Symbol', |
| 184 | 'Tahoma', |
| 185 | 'Tahoma Bold', |
| 186 | 'Times New Roman', |
| 187 | 'Trebuchet MS', |
| 188 | 'Verdana', |
| 405 | currentFont: 'Calibri', |
| Line | Source |
|---|---|
| 60 | export const I_MANAGE_SEARCH_FILTER_ID = 'imanage_search.open_search' |
| 219 | name: 'Search from iManage', |
| 220 | label: 'Search from iManage', |
| 282 | name: 'Cuatrecasas', |
| 283 | label: 'Cuatrecasas', |
| 306 | name: 'Macfarlanes', |
| 307 | label: 'Macfarlanes', |
| 312 | name: 'Lefebvre', |
| 313 | label: 'Lefebvre', |
| 324 | name: 'Rettsdata', |
| 325 | label: 'Rettsdata', |
| 330 | name: 'Bredin Prat', |
| 331 | label: 'Bredin Prat', |
| 342 | name: 'Chiomenti', |
| 343 | label: 'Chiomenti', |
| 354 | name: 'Ask LexisNexis®', |
| 355 | label: 'Ask LexisNexis®', |
| 391 | name: 'FromCounsel', |
| 392 | label: 'FromCounsel', |
| Line | Source |
|---|---|
| 200 | headerContent = '## Response\n\n' |
| 202 | headerContent = '## Harvey\n\n' |
| 211 | headerContent = '## Harvey\n\n' |
| 217 | headerContent = '## Input\n\n' |
| 220 | headerContent = '## Query\n\n' |
| 224 | headerContent = '## Query\n\n' |
| 226 | headerContent = '## Input\n\n' |
| 259 | return '<li id="ref-${source.id}"><a href="${documentUrl}" target="_blank">${documentName}</a></li>' |
| 270 | return '<li id="ref-${source.id}">${firstHundredWords} (${documentName})</li>' |
| 275 | const sourcesString = '<h2>References</h2><ol>${sourceHtmls.join( |
| 319 | content: '## Files\n\n${documentNames |
| 324 | { content: '<br/>', type: 'html' }, |
| 340 | '<h1>Harvey - ${fileName}</h1>', |
| Line | Source |
|---|---|
| 57 | const taskPrefix = taskType === TaskType.ASSISTANT_DRAFT ? 'Draft' : 'Assist' |
| 57 | const taskPrefix = taskType === TaskType.ASSISTANT_DRAFT ? 'Draft' : 'Assist' |
| 62 | content: '## Files\n\n${documents |
| 67 | { content: '<br/>', type: 'html' }, |
| 85 | let queryContent = '## Query\n\n${getMessageQuery(message)}' |
| 94 | queryContent = '## Query\n\n- ${anchorQuery}' |
| 96 | queryContent += '\n- [${numIntermediateRevisions} Revision${ |
| 115 | { content: '<br/>', type: WordSectionType.HTML }, |
| 117 | content: '## Response\n\n${responseWithDiff}', |
| 120 | { content: '<br/>', type: WordSectionType.HTML }, |
| 206 | '${EventKind.VAULT_REVIEW}_${reviewTableName}_${dateTime}.xlsx', |
| 213 | filename.replace(/\.[^/.]+$/, '') + '_with_review_table.zip' |
| Line | Source |
|---|---|
| 23 | <div className="p-4 text-sm text-red-500"> |
| 67 | <div className="p-4 text-sm text-neutral-500"> |
| 129 | <span className="text-xs font-semibold uppercase tracking-wider text-neutral-500"> |
| 182 | > |
| 190 | > |
| 207 | placeholder="Research query" |
| 231 | placeholder="New counterargument title" |
| 239 | > |
| 249 | > |
| 258 | > |
| 272 | > |
| Line | Source |
|---|---|
| 467 | style.textContent = ' |
| 986 | home: 'Home Tab', |
| 987 | insert: 'Insert Tab', |
| 988 | layout: 'Layout Tab', |
| 989 | review: 'Review Tab', |
| 1004 | operationType === 'accept' ? 'Accept All' : 'Reject All' |
| 1004 | operationType === 'accept' ? 'Accept All' : 'Reject All' |
| 1096 | left: 'Align Left', |
| 1097 | center: 'Align Center', |
| 1098 | right: 'Align Right', |
| 1099 | both: 'Justify', |
| Line | Source |
|---|---|
| 179 | { content: '<br/>', type: WordSectionType.HTML }, |
| 181 | content: '## Disclaimer\n\n${PWC_DISCLAIMER_TEXT}', |
| 188 | { content: '<br/>', type: WordSectionType.HTML }, |
| 190 | content: '<h2>Disclaimer</h2>${CUATRECASAS_HELP}', |
| 202 | ? ' All Revisions' |
| 721 | enter="transition-transform duration-250" |
| 722 | enterFrom="-translate-y-full" |
| 724 | leave="transition-transform transition-opacity duration-250" |
| 725 | leaveFrom="translate-y-0 opacity-100" |
| 726 | leaveTo="-translate-y-full opacity-0" |
| Line | Source |
|---|---|
| 31 | export const GPT_5_MODEL_NAME = 'GPT-5' |
| 383 | 'Assistant Chat', |
| 384 | features.hasWebSearch && 'Web Search', |
| 385 | features.hasDocuments && 'Doc Search', |
| 386 | features.hasKnowledgeSource && 'Knowledge Source', |
| 387 | features.hasVault && 'Vault Search', |
| 388 | features.hasCitations && 'Citations', |
| 404 | productArea: 'Assistant', |
| 405 | subject: 'Issue with Assistant Query', |
| 406 | featureUsed: featuresUsed || 'None', |
src/components/assistant/workflows/blocks/assistant-workflow-redline-change-selection-input.tsx (10)
| Line | Source |
|---|---|
| 304 | ' ~~<span style="color: red; font-size: 12px;">$1</span>~~ ' |
| 308 | ' <span style="color: blue; font-size: 12px;">$1</span> ' |
| 1049 | <li> |
| 1056 | <b>(Selected)</b> |
| 1058 | '(Not selected)' |
| 1060 | - {groupKey} (pg.{' '} |
| 1072 | <li> |
| 1079 | <b>(Selected)</b> |
| 1081 | '(Not selected)' |
| 1083 | - {groupKey} (pg.{' '} |
| Line | Source |
|---|---|
| 80 | const headerRow = columns.map((col) => '<th>${col.name}</th>') |
| 84 | '<tr>${columns |
| 87 | return '<td>${modelMarkdownToHtmlRemark(String(row.data[key] ?? ''))}</td>' |
| 92 | return '<table><thead><tr>${headerRow.join('')}</tr></thead><tbody>${bodyRows.join('')}</tbody></table>' |
| 134 | const fileName = 'Table_${dateTime}' |
| 153 | author: 'Harvey', |
| 157 | return saveAs(blob, '${fileName}.docx') |
| 173 | XLSX.utils.book_append_sheet(wb, ws, 'Table') |
| 179 | '${fileName}.xlsx' |
| 185 | '${fileName}.csv' |
| Line | Source |
|---|---|
| 1 | export const ASSISTANT_V2_MODE_HELP = '<h3>Choosing a mode</h3> |
| 10 | export const ASSISTANT_V2_OPEN_ENDED_HELP_INTRO = '<p class="ql-align-justify">In Assistant, you can query Harvey with or without uploading |
| 12 | export const ASSISTANT_V2_OPEN_ENDED_HELP_REMINDERS = '<h3>Important reminders</h3> |
| 20 | export const ASSISTANT_V2_WITHOUT_OPEN_ENDED_HELP_INTRO = '<p class="ql-align-justify">In Assistant, you can query Harvey and generate a res |
| 22 | export const ASSISTANT_V2_WITHOUT_OPEN_ENDED_HELP_REMINDERS = '<h3>Important reminders</h3> |
| 28 | export const ASSISTANT_KNOWLEDGE_SOURCES_HEADER = '<h3>Knowledge Sources</h3>' |
| 29 | export const ASSISTANT_KNOWLEDGE_SOURCES_INTRO = '<p>Knowledge is designed to facilitate research across various domains, enabling users to |
| 31 | export const ASSISTANT_SAVE_PROMPT_TOOLTIP_HELP = 'Save a prompt to Library' |
| Line | Source |
|---|---|
| 17 | if (normalizedKey === 'publicationstatus') return 'All Primary Law' |
| 18 | if (normalizedKey === 'jurisdiction') return 'All' |
| 19 | if (normalizedKey === 'legalclassification') return 'Civil; Criminal' |
| 20 | return 'N/A' |
| 25 | if (value.length === 0) return key ? getDefaultValue(key) : 'N/A' |
| 32 | if (values.length === 0) return key ? getDefaultValue(key) : 'N/A' |
| 35 | return String(value || (key ? getDefaultValue(key) : 'N/A')) |
| Line | Source |
|---|---|
| 103 | countryId: 'worldwide_tax_summaries', |
| 108 | countryId: 'pillar_two', |
| 123 | countryId: 'saudi_arabia', |
| 133 | countryId: 'hong_kong', |
| 264 | return '${getDisplayName(source)} Tax AI Assistant' |
| 268 | return source.flagImage || '${source.countryId}.png' |
| 335 | '${getDisplayName(source)} tax legislation, case law, and guidance', |
| Line | Source |
|---|---|
| 15 | cut: 'url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='curre |
| 17 | copy: 'url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='curr |
| 19 | paste: 'url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='cur |
| 21 | pasteText: 'url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke= |
| 23 | delete: 'url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='cu |
| 263 | const shadowStyleId = '${CONTEXT_MENU_STYLE_ID}-shadow' |
| Line | Source |
|---|---|
| 57 | filterIds: ['web_browsing.open_search'], |
| 103 | name: 'Document', |
| 121 | name: 'Draft', |
| 123 | tipsText: 'Draft long-form content.', |
| 127 | name: 'Tool Nudge', |
| 129 | tipsText: 'Use a tool to answer the question.', |
| Line | Source |
|---|---|
| 93 | return '${base}.docx' |
| 98 | sanitizeFileName(caption, MAX_SAFE_FILENAME_LENGTH) || 'workflow_event' |
| 99 | return '${base}.docx' |
| 103 | return '${workflowName ?? 'workflow_event'}_${eventId}.docx' |
| 103 | return '${workflowName ?? 'workflow_event'}_${eventId}.docx' |
| 106 | return 'workflow_event.docx' |
| Line | Source |
|---|---|
| 8 | return 'No merger control regime' |
| 20 | return '${metThresholds} Threshold${metThresholds > 1 ? 's' : ''} met' |
| 24 | return 'Thresholds not met' |
| 27 | return 'More information required' |
| 146 | partyType: 'General', |
| 147 | partyName: 'General', |
| Line | Source |
|---|---|
| 104 | {showFull ? 'Show summary' : 'Show full research brief'} |
| 104 | {showFull ? 'Show summary' : 'Show full research brief'} |
| 136 | {showBrief ? 'Hide research brief' : 'Show full research brief'} |
| 136 | {showBrief ? 'Hide research brief' : 'Show full research brief'} |
| 153 | > |
| 299 | <div className="mb-3 text-xs font-medium uppercase tracking-wider text-neutral-400"> |
| Line | Source |
|---|---|
| 9 | const DATADOG_ACTION_FILE_UPLOAD_STARTED = 'assistant_file_upload_started' |
| 10 | const DATADOG_ACTION_FILE_UPLOAD_SUCCESS = 'assistant_file_upload_success' |
| 11 | const DATADOG_ACTION_FILE_UPLOAD_FAILURE = 'assistant_file_upload_failure' |
| 13 | 'assistant_file_processing_success' |
| 15 | 'assistant_file_processing_failure' |
| Line | Source |
|---|---|
| 93 | headerText: 'Upload a file', |
| 500 | description = '${getFileTypeReadableName()[fileType]} document • ${ |
| 504 | description = 'Document • ${file.size ? bytesToReadable(file.size) : ''}' |
| 529 | text="Skipped" |
| 545 | text="Skipped" |
| Line | Source |
|---|---|
| 100 | trackCitationEvent('Citation Clicked') |
| 104 | trackCitationEvent('Citation Hovered') |
| 266 | headerText = removeWWWFromUrl(source.badges?.[0]?.text || '') || 'Web' |
| 270 | headerText = 'LexisNexis®' |
| 274 | headerText = 'Vault${folder ? ' - ${folder.name}' : ''}' |
| Line | Source |
|---|---|
| 23 | 'allen_and_overy', |
| 24 | 'paul_weiss', |
| 28 | 'financial_services', |
| 82 | return b.name.toUpperCase().localeCompare('M') >= 0 ? -1 : 1 |
| 89 | return a.name.toUpperCase().localeCompare('M') >= 0 ? 1 : -1 |
| Line | Source |
|---|---|
| 57 | const PLACEHOLDER_CONTENT = '<h1></h1><p></p>' |
| 158 | return 'Title' |
| 160 | const importCTA = isNew ? ' or import your first draft' : '' |
| 161 | return 'Write something' + importCTA |
| Line | Source |
|---|---|
| 251 | {hidden} earlier step{hidden !== 1 ? 's' : ''}… |
| 259 | > |
| 443 | {subDone > 0 ? '${subDone}/${subTotal}' : '${subTotal} in progress'} |
| 544 | <span className="text-xs font-semibold uppercase tracking-wider text-neutral-500"> |
| Line | Source |
|---|---|
| 60 | <SourceIconContainer dataTestId={'${url.hostname}-favicon'}> |
| 78 | dataTestId={'${config.title}-icon'} |
| 101 | <SourceIconContainer color={bgColor} dataTestId={'${fileType}-icon'}> |
| 117 | dataTestId={'${config.title}-icon'} |
| Line | Source |
|---|---|
| 28 | return <Eyebrow icon={IconPencil} text="You made changes" /> |
| 32 | return <Eyebrow icon={IconImport} text="You imported a draft" /> |
| 126 | <Eyebrow icon={IconInputForm} text="You selected text"> |
| 157 | text={'You restored Version ${revisionIdx + 1}'} |
| Line | Source |
|---|---|
| 314 | trackDeleteEvent('Delete Message Initiated') |
| 319 | trackDeleteEvent('Delete Message Confirmed') |
| 325 | trackDeleteEvent('Delete Message Cancelled') |
| Line | Source |
|---|---|
| 48 | header: 'PwC', |
| 53 | header: 'A&O Shearman', |
| 58 | header: 'Paul, Weiss', |
| Line | Source |
|---|---|
| 337 | const eventSource = isReply ? 'assistant_follow_up' : 'assistant_home' |
| 337 | const eventSource = isReply ? 'assistant_follow_up' : 'assistant_home' |
| 451 | target.closest('[contenteditable="true"]') || |
| Line | Source |
|---|---|
| 42 | 'button,a,input,[role="checkbox"],[role="menuitem"]' |
| 67 | '[data-radix-scroll-area-viewport]' |
| 75 | rootMargin: '-${offsetPx + 1}px 0px 0px 0px', |
| Line | Source |
|---|---|
| 15 | const DEFAULT_FILENAME = 'Document.docx' |
| 69 | return name.endsWith('.docx') ? name : '${name}.docx' |
| 118 | const path = 'assistant/generated-document/${existingDocumentId}' |
src/components/assistant/workflows/blocks/antitrust-filing-analysis/summary/country-detail-card.tsx (3)
| Line | Source |
|---|---|
| 28 | return new Intl.NumberFormat('en-US', { |
| 140 | <p className="mb-1 text-xs">Local Turnover</p> |
| 155 | <p className="mb-1 text-xs">Worldwide Turnover</p> |
| Line | Source |
|---|---|
| 18 | <p className="mr-4 w-24 text-xs font-semibold">Exception {idx + 1}</p> |
| 29 | <DataRow label="Requirement" value={exception.exception} /> |
| 30 | <DataRow label="Analysis" value={exception.exceptionAnalysis} /> |
| Line | Source |
|---|---|
| 24 | <p className="mr-4 w-24 text-xs font-semibold">Requirement {idx + 1}</p> |
| 32 | <DataRow label="Requirement" value={requirement.requirement} /> |
| 33 | <DataRow label="Analysis" value={requirement.requirementAnalysis} /> |
| Line | Source |
|---|---|
| 94 | title: 'Antitrust Filing Analysis - RFI', |
| 164 | content: '<h1>Requests for Information</h1>', |
| 175 | title: 'Antitrust Filing Analysis - Complete Report', |
| Line | Source |
|---|---|
| 15 | [WorkflowStreamRequestInputMode.ANSWER]: 'Harvey will answer without editing', |
| 17 | 'Harvey will decide whether to edit or reply', |
| 19 | 'Harvey will edit the draft based on your query', |
| Line | Source |
|---|---|
| 113 | ? 'Cannot change Client Matter until query completes' |
| 115 | ? 'Not available for this query type' |
| 157 | ? 'Additional actions available once query has been submitted' |
| Line | Source |
|---|---|
| 127 | const chatWorkflowDefaultTitle = 'Assist' |
| 190 | const source = el?.closest('[data-block-type]') |
| 271 | breadcrumbs={<RouterBreadcrumbs overridePath="assistant/workflows" />} |
| Line | Source |
|---|---|
| 178 | const placeholder = 'Describe how to change the draft' |
| 182 | return QUERY_MUST_HAVE_X_LEN_HELP_TEXT('at least ${MIN_QUERY_LENGTH}') |
| Line | Source |
|---|---|
| 176 | icon: <img src="/img/logos/chiomenti.png" alt="Chiomenti" />, |
| 215 | title: 'FromCounsel', |
| Line | Source |
|---|---|
| 9 | export const UPLOADED_FILES_VALUE = 'uploaded_files' |
| 127 | const title = (reviewEvent.title || 'Untitled').toLowerCase() |
| Line | Source |
|---|---|
| 207 | if (!e.relatedTarget?.closest('#assistant-input')) { |
| 494 | leave="transition-opacity duration-100" |
| Line | Source |
|---|---|
| 92 | event: 'AssistantReviewArtifactPage.page_opened', |
| 95 | route: 'assistant/review', |
| Line | Source |
|---|---|
| 13 | return 'deep analysis' |
| 15 | return 'file upload' |
| Line | Source |
|---|---|
| 44 | i18nKey: 'file_options.metadata.max_file_size_varies', |
| 125 | export const CUSTOMIZE_LABEL = 'Customize' |
| Line | Source |
|---|---|
| 149 | return <div>Error: Invalid block parameters.</div> |
| 161 | return <div>Error: Invalid output data.</div> |
| Line | Source |
|---|---|
| 38 | description = '${getFileTypeReadableName()[fileType]} document • ${ |
| 42 | description = 'Document • ${file.size ? bytesToReadable(file.size) : ''}' |
src/components/assistant/workflows/components/panel-layout/sources-panel/workflow-sources-panel.tsx (2)
| Line | Source |
|---|---|
| 93 | if (activeElement?.closest('[role="menu"]')) { |
| 98 | if (activeElement?.closest('[role="dialog"]')) { |
| Line | Source |
|---|---|
| 94 | if (dataType === 'numeric') return 'Number' |
| 95 | if (dataType === 'extraction') return 'Verbatim' |
| Line | Source |
|---|---|
| 50 | srLabel = 'Text input', |
| 57 | const textareaId = '${id ?? 'textinput-${reactId}'}__textarea' |
| Line | Source |
|---|---|
| 266 | path: 'assistant/workflow', |
| 394 | ? { overrideEndpoint: 'assistant/agent' } |
| Line | Source |
|---|---|
| 54 | const route = 'assistant/workflows/${workflowId}${ |
| 140 | const route = 'assistant/workflows?include_internal_admin_workflows=${includeInternalAdminWorkflows}' |
| Line | Source |
|---|---|
| 37 | path=":mode/:eventId?/:messageId?" |
| Line | Source |
|---|---|
| 150 | !relatedTarget?.closest?.('#assistant-change-log-${message.messageId}') |
| Line | Source |
|---|---|
| 127 | <p className="ml-2 hidden sm:block">New thread</p> |
| Line | Source |
|---|---|
| 55 | tipsText += '<h4>${translatedName}</h4> |
| Line | Source |
|---|---|
| 198 | return QUERY_MUST_HAVE_X_LEN_HELP_TEXT('at least ${MIN_QUERY_LENGTH}') |
| Line | Source |
|---|---|
| 56 | label="See all" |
| Line | Source |
|---|---|
| 113 | const historyUrl = 'history?${historyFilterParams.toString()}' |
| Line | Source |
|---|---|
| 74 | return reviewEvent.title || 'Untitled' |
| Line | Source |
|---|---|
| 182 | title = 'Sources', |
| Line | Source |
|---|---|
| 50 | tipsText += '<h4>${translatedName}</h4> |
| Line | Source |
|---|---|
| 152 | const modKey = isMac ? '⌘' : 'Ctrl+' |
| Line | Source |
|---|---|
| 29 | author: change.author ?? 'Unknown', |
| Line | Source |
|---|---|
| 52 | const DELETE_QUERY = 'Delete this selected text' |
| Line | Source |
|---|---|
| 15 | const BLANK_DIRECTIVE = '_blank' |
| Line | Source |
|---|---|
| 332 | {knowledgeSourceInfo.isBeta && <Badge variant="beta">Beta</Badge>} |
| Line | Source |
|---|---|
| 376 | folderName: 'Untitled', |
src/components/assistant/features/composer/components/deep-search-toggle/deep-search-followup-toggle.tsx (1)
| Line | Source |
|---|---|
| 124 | ? 'Deep analysis cannot be disabled while a stream is in progress' |
src/components/assistant/features/composer/components/file-sources-selector/assistant-file-sources-selector.tsx (1)
| Line | Source |
|---|---|
| 575 | titlePrefix: 'Add from ', |
| Line | Source |
|---|---|
| 27 | const WORKFLOW_DETAIL_DIALOG_SIZE = 'w-[900px] max-w-[900px]' |
| Line | Source |
|---|---|
| 65 | exportValues.revisions === ExportRevision.ALL ? ' All Revisions' : '' |
| Line | Source |
|---|---|
| 120 | if (!e.relatedTarget?.closest('#assistant-input')) { |
| Line | Source |
|---|---|
| 48 | path: 'assistant/workflow_draft', |
| Line | Source |
|---|---|
| 106 | path: 'assistant/draft', |
| Line | Source |
|---|---|
| 84 | ? '${reviewTablePath}?openAddFiles=true' |
| Line | Source |
|---|---|
| 7 | const SESSION_STORAGE_KEY_PREFIX = 'webSearchAcknowledgment_session' |
| Line | Source |
|---|---|
| 133 | const ASSISTANT_HOMEPAGE_SOURCE = 'assistant_homepage' |
| Line | Source |
|---|---|
| 5 | export const LS_DRAFT_KEY = 'draft:' |
| Line | Source |
|---|---|
| 186 | ...(token ? { Authorization: 'Bearer ${token}' } : {}), |
| Line | Source |
|---|---|
| 31 | value.trim().toLowerCase().replaceAll('likely to be', '').trim() |
src/components/assistant/workflows/blocks/assistant-workflow-antitrust-filings-answer-renderer.tsx (1)
| Line | Source |
|---|---|
| 101 | const renderedText = isStreaming ? 'Working…' : headerText |
| Line | Source |
|---|---|
| 212 | title: 'Redline Diff', |
| Line | Source |
|---|---|
| 1714 | {file.size ? bytesToReadable(file.size) : 'N/A'} |
| Line | Source |
|---|---|
| 75 | return acc + '<br><br>' + current |
| Line | Source |
|---|---|
| 141 | if (nudgeType.includes('lexis_nexis')) return 'lexis_protege' |
| Line | Source |
|---|---|
| 89 | {'${orderedColumnNames.length} columns · ${rows.length} rows'} |
| Line | Source |
|---|---|
| 179 | const renderedText = isStreaming ? 'Working…' : headerText |
| Line | Source |
|---|---|
| 388 | answerRef.current.style.minHeight = 'calc(100% + ${minHeightOffset}px)' |
| Line | Source |
|---|---|
| 33 | downloadLabel = 'Download', |
| Line | Source |
|---|---|
| 79 | matchKey: 'Deep Analysis', |
| Line | Source |
|---|---|
| 17 | <span className="text-xs font-medium text-secondary"> |
| Line | Source |
|---|---|
| 126 | ? 'Searching for terms' |
| Line | Source |
|---|---|
| 102 | return ['Paste text or add up to'] |
| Line | Source |
|---|---|
| 96 | reviewTableKnowledgeSource?.name ?? historyItem?.title ?? 'review_table' |
| Line | Source |
|---|---|
| 49 | emptyText = 'No options found.', |
| Line | Source |
|---|---|
| 480 | return columnHelper.accessor('data.${camelCaseKey}', { |
| Line | Source |
|---|---|
| 59 | getGeneratedDocumentFileName(latestBlockParams) ?? 'Document' |
| Line | Source |
|---|---|
| 27 | export const LEGACY_ROOT_FILE_ID = '__legacy_generated_document_root__' |
| Line | Source |
|---|---|
| 144 | let fileName = workflowName ?? 'Workflow' |
| Line | Source |
|---|---|
| 45 | label: 'Assist', |
| 52 | label: 'Assist', |
| 59 | label: 'Assist', |
| 66 | label: 'Assist', |
| 73 | label: 'Help Me', |
| 80 | label: 'Assist', |
| 87 | label: 'Assist', |
| 94 | label: 'Assist', |
| 101 | label: 'Assist', |
| 108 | label: 'Workflows', |
| 115 | label: 'Company Profile', |
| 122 | label: 'Assist', // TODO: Properly rename and migrate to a TaskType.UK_TAX, rather than just reusing HMRC_QA |
| 129 | label: 'Assist', |
| 136 | label: 'Assist', |
| 143 | label: 'Assist', |
| 150 | label: 'Assist', |
| 157 | label: 'Assist', |
| 164 | label: 'Assist', |
| 171 | label: 'Redline Q&A', |
| 178 | label: 'Redline Issues List', |
| 185 | label: 'Assist', |
| 192 | label: 'Assist', |
| 199 | label: 'Translation', |
| 206 | label: 'Assist', |
| 213 | label: 'Assist', |
| 214 | groupLabel: 'Assistant', |
| 221 | label: 'Draft', |
| 222 | groupLabel: 'Assistant', |
| 229 | label: 'OGC Contract Review', |
| 237 | label: 'Drafting', |
| 244 | label: 'Document Comparison', |
| 251 | label: 'Assist', |
| 258 | label: 'Assist', |
| 265 | label: 'Assist', |
| 272 | label: 'Transcripts', |
| 279 | label: 'Australia Breach Reporting', |
| 286 | label: 'Review Table', |
| 287 | groupLabel: userInfo?.IsVaultUser ? 'Vault' : '', |
| 294 | label: 'Assist', |
| 301 | label: 'Discovery', |
| 308 | label: 'Diligence Transcripts', |
| 315 | label: 'Competitive Analysis', |
| 322 | label: 'Word Add-In', |
| 323 | groupLabel: 'Other', |
| 330 | label: 'Outlook Add-In', |
| 331 | groupLabel: 'Other', |
| 338 | label: 'Playbook Creation', |
| 339 | groupLabel: 'Other', |
| 346 | label: 'Playbook Conversion', |
| 347 | groupLabel: 'Other', |
| 354 | label: 'Playbook Review', |
| 355 | groupLabel: 'Other', |
| 443 | [ProductLabel.ASSIST]: 'Assistant', |
| 444 | [ProductLabel.DRAFT]: 'Assistant', |
| 445 | [ProductLabel.VAULT_ASK]: 'Vault', |
| 448 | [ProductLabel.ASSIST__VAULT]: 'Assistant', |
| 449 | [ProductLabel.ASSIST__NO_UPLOADED_FILES]: 'Assistant', |
| 450 | [ProductLabel.ASSIST__USER_UPLOADED_FILES]: 'Assistant', |
| 451 | [ProductLabel.ASSIST__EDGAR]: 'Assistant', |
| 452 | [ProductLabel.ASSIST__FRENCH_CASE_LAW]: 'Assistant', |
| 453 | [ProductLabel.ASSIST__SWEDEN_CASE_LAW]: 'Assistant', |
| 454 | [ProductLabel.ASSIST__US_CASE_LAW]: 'Assistant', |
| 455 | [ProductLabel.ASSIST__SINGAPORE_CASE_LAW]: 'Assistant', |
| 456 | [ProductLabel.ASSIST__EUR_LEX]: 'Assistant', |
| 457 | [ProductLabel.ASSIST__MEMOS]: 'Assistant', |
| 458 | [ProductLabel.ASSIST__TAX]: 'Assistant', |
| 459 | [ProductLabel.ASSIST__CUATRECASAS]: 'Assistant', |
| 460 | [ProductLabel.ASSIST__MACFARLANES]: 'Assistant', |
| 461 | [ProductLabel.ASSIST__LEFEBVRE]: 'Assistant', |
| 462 | [ProductLabel.ASSIST__WEB_BROWSING]: 'Assistant', |
| 463 | [ProductLabel.ASSIST__BREDIN_PRAT]: 'Assistant', |
| 464 | [ProductLabel.ASSIST__AUSTRALIA_BREACH_REPORTING]: 'Assistant', |
| 465 | [ProductLabel.ASSIST__KNOWLEDGE_BASE]: 'Assistant', |
| 466 | [ProductLabel.ASSIST__LEXIS_NEXIS]: 'Assistant', |
| 467 | [ProductLabel.DRAFT__NO_UPLOADED_FILES]: 'Assistant', |
| 468 | [ProductLabel.DRAFT__USER_UPLOADED_FILES]: 'Assistant', |
| 469 | [ProductLabel.DRAFT__VAULT]: 'Assistant', |
| 470 | [ProductLabel.DRAFT__KNOWLEDGE_BASE]: 'Assistant', |
| 471 | [ProductLabel.VAULT_REVIEW]: 'Vault', |
| 472 | [ProductLabel.ASSIST__MULTI_SOURCE]: 'Assistant', |
| 476 | const ASSIST_PARENT_PRODUCT_LABEL = 'Assist' |
| 477 | const DRAFT_PARENT_PRODUCT_LABEL = 'Draft' |
| Line | Source |
|---|---|
| 42 | import('date-fns/locale').then((locales) => { |
| 199 | return 'Today' |
| 203 | return 'Past week' |
| 209 | return 'Past month' |
| 214 | return 'Past quarter' |
| 219 | return 'Past half year' |
| 223 | return 'Past year' |
| 227 | return 'Past 3 years' |
| 231 | return 'Past 5 years' |
| 236 | return 'This week' |
| 241 | return 'This month' |
| 247 | return 'This year' |
| 324 | readable = 'Today' |
| 382 | const tempDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' })) |
| 426 | if (isToday(timestamp)) return 'Today' |
| 427 | if (isYesterday(timestamp)) return 'Yesterday' |
| 532 | const inputDate = dateHasTimezone ? new Date(date) : new Date('${date}Z') |
| 557 | return '${values.year}-${values.month}-${values.day}T${values.hour}:${values.minute}:${values.second}.${values.fractionalSecond} ${values.ti |
| Line | Source |
|---|---|
| 20 | [LanguageCode.EN_US]: 'English (American)', |
| 21 | [LanguageCode.EN_GB]: 'English (British)', |
| 22 | [LanguageCode.EN_AU]: 'English (Australian)', |
| 23 | [LanguageCode.EN_CA]: 'English (Canadian)', |
| 24 | [LanguageCode.ES_ES]: 'Spanish (European)', |
| 25 | [LanguageCode.ES_419]: 'Spanish (Latin American)', |
| 26 | [LanguageCode.FR_CA]: 'French (Canadian)', |
| 27 | [LanguageCode.DE_CH]: 'German (Swiss)', |
| 28 | [LanguageCode.PT_BR]: 'Portuguese (Brazil)', |
| 29 | [LanguageCode.PT_PT]: 'Portuguese (Portugal)', |
| 97 | 'Administrative, Innovation, IT or Other Business Role', |
| 98 | [Title.COUNSEL]: 'Of Counsel', |
| 108 | [PracticeArea.COMMERCIAL]: 'Commercial Law', |
| 109 | [PracticeArea.REAL_ESTATE_AND_REITS]: 'Real Estate and REITs', |
| 110 | [PracticeArea.MERGERS_AND_ACQUISITION]: 'Mergers and Acquisitions', |
| 111 | [PracticeArea.PRIVACY]: 'Data Privacy/Cybersecurity', |
| 113 | 'White Collar & Investigations', |
| Line | Source |
|---|---|
| 61 | : stringDateUpperCase + 'Z' // + 'Z' is to infer string as UTC |
| 119 | const suffixes = ['B', 'M', 'K'] |
| 119 | const suffixes = ['B', 'M', 'K'] |
| 119 | const suffixes = ['B', 'M', 'K'] |
| 178 | const PRESERVE_KEYS_MARKER = '__preserveKeys' |
| 241 | displayErrorMessage({ message: 'No URL found for file download.' }) |
| 244 | displayErrorMessage({ message: 'Error downloading file.' }) |
| 259 | reject('No URL to download') |
| 277 | resolve('File downloaded successfully.') |
| 281 | reject('Failed to download from the URL: ${error.message}') |
| 291 | reject('No text to download') |
| 304 | resolve('File "${name}" downloaded successfully.') |
| 307 | reject('Failed to download the file: ${error.message}') |
| 389 | os = 'Mac' |
| 393 | os = 'Android' |
| 395 | os = 'Linux' |
| 397 | os = 'Windows' |
| Line | Source |
|---|---|
| 102 | text: '[Could not export image.]', |
| 221 | const dataUrl = canvas.toDataURL('image/png') |
| 304 | merge({}, textProperties, { font: { name: 'Monospace' } }) |
| 341 | style: 'Hyperlink', |
| 370 | author: 'Harvey AI', |
| 422 | author: 'Harvey AI', |
| 495 | font: { name: 'Monospace' }, |
| 745 | '<body>${sourceText}</body>', |
| 861 | style: 'Hyperlink', |
| 885 | text: ' (${s.documentName}, Page ${(s.page + 1).toString()})', |
| 892 | text: '${removeMarkTag(truncatedText)} (${s.documentName}, Page ${( |
| 935 | text: 'References', |
| 1204 | author = 'Harvey', |
| 1250 | text: 'Harvey – ${title}', |
| 1288 | author = 'Harvey', |
| 1301 | text: 'Harvey – ${injectTitle}', |
| Line | Source |
|---|---|
| 6 | const DEFAULT_ERROR_MESSAGE = 'Something went wrong.' |
| 92 | return 'File is locked, please unlock and re-upload' |
| 94 | return 'File has no name' |
| 97 | return 'File type is incompatible with file content' |
| 100 | return 'Unsupported file type' |
| 102 | return 'Failed to process due to OCR issue' |
| 105 | return 'This file is too large or complex to process. Please split it into two or more smaller files and try uploading again' |
| 107 | return 'File path length exceeds system limit. Please shorten folder names or move files closer to the root directory.' |
| 109 | return 'Failed to upload due to server error' |
| 111 | return 'File is empty' |
| 113 | return 'Failed to process file due to embedding limit' |
| 115 | return 'Something went wrong. Please try again after a few minutes.' |
| 117 | return 'Failed to process due to file corruption' |
| 119 | return 'Image has no text' |
| Line | Source |
|---|---|
| 1 | export const EMPTY_QUERY_HELP_TEXT = 'Please enter a query' |
| 3 | 'Query must have ${x} characters' |
| 5 | export const IS_LOADING_HELP_TEXT = 'Harvey is answering your previous query' |
| 7 | export const CLIENT_MATTER_QUERY_LOCK_HELP_TEXT = 'Please select a Client Matter before asking Harvey' |
| 10 | 'Please add a document before asking Harvey' |
| 12 | 'Please upload ${x} document' |
| 14 | export const SELECT_RESEARCH_DATABASE_HELP_TEXT = 'Select a research database' |
| 16 | export const COMPANY_PROFILE_EMPTY_HELP_TEXT = 'Please enter a stock ticker' |
| 18 | 'Please select at least one field' |
| 20 | export const ISSUES_LIST_ADD_TOPIC_HELP_TEXT = 'Please add at least one topic' |
| 22 | 'Harvey will choose the most relevant topics based on changes in the document.' |
| 24 | 'Remove topics and choose Auto Generate to have Harvey choose the most relevant topics.' |
| 27 | 'Please select a document type' |
| 29 | export const DOCUMENTS_UPLOADING_HELP_TEXT = 'Documents are uploading' |
| Line | Source |
|---|---|
| 50 | .replaceAll('{fileSize}', '') |
| 51 | .replaceAll('{maxFileSize}', '') || |
| 83 | export const UPLOAD_ERROR = 'Sorry, Harvey was unable to upload your document. This may be caused by an unstable internet connection. Please |
| 85 | export const TOO_MANY_FILES = 'You can only upload {documentLimit} at a time.' |
| 87 | export const FILE_TOO_LARGE = 'The document you uploaded is too large ({fileSize}MB). Harvey currently requires documents to be less than ({ |
| 89 | export const RATE_LIMIT = 'You have submitted more simultaneous requests than permitted by your organization (3 requests / minute). Please w |
| 91 | export const EMPTY_PROMPT_ERROR = 'It looks like you haven’t given Harvey a task to complete, please describe your task in the shaded area a |
| 93 | export const OVERFLOW_PROMPT_ERROR = 'It looks like your task request is too long, try limiting your request to fewer than 2000 characters f |
| 95 | export const UNCAUGHT_ERROR = 'An unexpected error occurred. This error (but no user data) has been provided to the team at Harvey and we ar |
| 97 | export const UNSAFE_ERROR = 'The task you have requested cannot be completed because it contains language that potentially requests an inapp |
| 99 | export const NETWORK_ERROR = 'Sorry, Harvey was unable to process this request due to a network issue. This may be caused by an unstable int |
| 101 | export const PASSWORD_PROTECTED_FILE_ERROR = 'The file you have uploaded is password protected. Harvey is unable to process password protect |
| 103 | export const LLM_ERROR = 'There was an error getting the response from the LLM. Please try again.' |
| 105 | export const FORCED_LOGOUT = 'Forced Logout' |
| Line | Source |
|---|---|
| 37 | const allowedExtensions = ['.pdf', '.docx', '.xlsx'] |
| 37 | const allowedExtensions = ['.pdf', '.docx', '.xlsx'] |
| 37 | const allowedExtensions = ['.pdf', '.docx', '.xlsx'] |
| 556 | return '${baseName}.pdf' |
| 945 | name: '${dmsFile.name}.docx', |
| 950 | name: '${dmsFile.name}.xlsx', |
| 955 | name: '${dmsFile.name}.pptx', |
| 997 | if (!fileType) return 'File' |
| Line | Source |
|---|---|
| 440 | return '<ins>${(node as Text).value}</ins>' |
| 467 | return '<del>${(node as Text).value}</del>' |
| 634 | return '<ins>${change.value}</ins>' |
| 637 | return '<del>${change.value}</del>' |
| 722 | handleOpenSpecialAttribute(added, 'ins', '<ins>') |
| 723 | handleOpenSpecialAttribute(removed, 'del', '<del>') |
| 733 | handleCloseSpecialAttribute('ins', '</ins>') |
| 734 | handleCloseSpecialAttribute('del', '</del>') |
| Line | Source |
|---|---|
| 66 | let errorMessage = 'Failed to start recording' |
| 85 | 'Microphone blocked by security policy. Please contact support.' |
| 88 | 'Microphone access denied. Please check browser settings.' |
| 98 | errorMessage = 'No microphone found. Please check your device.' |
| 101 | 'Microphone is in use or unavailable. Please check other applications.' |
| 104 | 'Microphone does not meet requirements. Please check your device.' |
| 114 | errorMessage = error.message || 'Failed to start recording' |
| Line | Source |
|---|---|
| 233 | sentryEvent(SentryEventType.USER_ACTION, 'export_response', { |
| 261 | html: '<body>${answerHtml}</body>', |
| 421 | content: '##Files\n\n${files.join('\n\n')}', |
| 424 | { content: '<br/>', type: WordSectionType.HTML }, |
| 427 | { content: '##Query\n\n${query}', type: WordSectionType.MARKDOWN }, |
| 428 | { content: '<br/>', type: WordSectionType.HTML }, |
| 430 | content: '##Response\n\n${cleanedResponse}', |
| Line | Source |
|---|---|
| 62 | ? '${sanitizeFileName(zippedFileName)}.zip' |
| 63 | : 'downloaded_files.zip' |
| 160 | displayInfoMessage('Your download will start shortly.', 5) |
| 188 | const message = 'There are currently ${documentIdsNotReadyToDownload.length} files that are not available. Skipping these files.' |
| 196 | 'There are currently no files that are available to download.' |
| Line | Source |
|---|---|
| 70 | ? 'Filtered AbortError: ${originalException.message}' |
| 71 | : 'Filtered AbortError', |
| 77 | event.fingerprint = ['{{ default }}'] // salt the stack trace based error grouping criteria |
| 78 | const errorType = event.exception?.values?.[0]?.type || '<no error type>' |
| 79 | event.fingerprint = [...event.fingerprint, 'errorType: ${errorType}'] |
| Line | Source |
|---|---|
| 81 | errorMessage = 'HTTP 403 Forbidden' |
| 90 | errorMessage = 'Expected "${expectedContent}", got "${content.slice(0, 50)}"' |
| 99 | errorMessage = 'Request timed out after 10s' |
| 106 | errorMessage = 'Unknown fetch error' |
| 114 | : 'Failed to get signed URL' |
| Line | Source |
|---|---|
| 99 | 'Error message displayed', |
| 150 | {errMsg} You can enable them on the{' '} |
| 154 | > |
| 163 | message: fallbackMessage ?? (errMsg || 'Unknown error'), |
| 182 | trackUserFacingWarning('Warning message displayed', { |
| Line | Source |
|---|---|
| 309 | const tooManyRequests = 'Too many requests' |
| 314 | 'Too many requests sent to Harvey. Please try again in a minute.', |
| 325 | 'Harvey was unable to process this request due to the combined length of the input and output, please reduce the length of your input.', |
| 425 | 'Sorry, something went wrong. Please refresh the page.', |
| Line | Source |
|---|---|
| 9 | export const VANITY_REDIRECT_COOKIE = 'harvey_login_slug' |
| 13 | const SESSION_STORAGE_ATTEMPTS_KEY = 'login_slug_attempts' |
| 66 | const message = 'Login slug max attempts reached, clearing cookie' |
| Line | Source |
|---|---|
| 406 | message: 'Upload failed. You can't upload more than a total of ${bytesToReadable( |
| 579 | const IGNORE_FILE_PREFIXES = ['._', '__MACOSX'] |
| 580 | const IGNORE_FILE_SUFFIXES = ['.DS_Store'] |
| Line | Source |
|---|---|
| 101 | constructor(message = 'Request aborted by client') { |
| 102 | super(message, 'AbortError') |
| 225 | trackEventRaw('Error Shown', { |
| Line | Source |
|---|---|
| 120 | const value = '<span class="font-inherit bg-highlight">${highlightInNode.slice( |
| 156 | const value = '<span class="font-inherit bg-highlight">${node.value.slice( |
| 188 | return { type: 'html', value: '<br />' } as Html |
| Line | Source |
|---|---|
| 31 | const UPLOAD_SOURCE_FILE_PICKER = 'file_picker' |
| 87 | const baseMessage = 'No files were accepted' |
| Line | Source |
|---|---|
| 280 | message: successMessage || 'Copied to clipboard', |
| Line | Source |
|---|---|
| 167 | 'customer_segment', |
| Line | Source |
|---|---|
| 8 | '${base}_${backendFormat(new Date())}.docx' |
| Line | Source |
|---|---|
| 5 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' |
| Line | Source |
|---|---|
| 41 | docxUtilsPromise = import('./docx') |
| Line | Source |
|---|---|
| 6 | const testKey = '__testKey__' |
| Line | Source |
|---|---|
| 33 | container: '#pspdfkit-container', |
| Line | Source |
|---|---|
| 128 | 'ak_v1_vendor-301054ec-cef3-40c4-bf4a-de4df8433403_IdiUR_YzL9Oz2Skerh06t39iiZ2FUdL3QOI0muwLZk0_1764976102417' |
| Line | Source |
|---|---|
| 8 | const testKey = '__testKey__' |
| Line | Source |
|---|---|
| 321 | ? '?spaceId=${encodeURIComponent(resource.spaceId)}' |
| Line | Source |
|---|---|
| 62 | message: 'Please acknowledge the action before proceeding.', |
| 78 | message: 'Content copied successfully from ${response.sourceEventIds.length} events.', |
| 82 | displaySuccessMessage({ message: 'Content copied successfully.' }) |
| 88 | message: 'Error copying content: ${ |
| 102 | <h2 className="text-lg font-semibold"> |
| 111 | <Label className="mb-4">Source Event IDs</Label> |
| 116 | placeholder="Comma-separated IDs" |
| 122 | <Label className="mb-4">Target Event IDs</Label> |
| 127 | placeholder="Comma-separated IDs" |
| 133 | <Label className="mb-4">Fields to Copy</Label> |
| 138 | placeholder="Comma-separated fields" |
| 144 | {isSubmitting ? 'Copying…' : 'Copy Contents'} |
| 144 | {isSubmitting ? 'Copying…' : 'Copy Contents'} |
| 153 | <DialogTitle>Confirm Content Copy</DialogTitle> |
| 157 | <strong>From:</strong> {sourceEventIds} |
| 160 | <strong>To:</strong> {targetEventIds} |
| 163 | <strong>Fields:</strong> {fieldsToCopy} |
| 166 | <AlertTitle className="mr-2 flex justify-between"> |
| 183 | > |
| 190 | {isSubmitting ? 'Copying…' : 'Confirm Copy'} |
| 190 | {isSubmitting ? 'Copying…' : 'Confirm Copy'} |
| Line | Source |
|---|---|
| 79 | displayErrorMessage({ message: 'Failed to fetch parent workspace' }) |
| 116 | message: 'Cannot add users to guest role', |
| 127 | message: 'Exceeded maximum number of users (${MAX_NUM_USERS}) allowed', |
| 177 | message: 'Successfully added ${numAdded} users to role', |
| 184 | message: 'Failed to add users to role', |
| 208 | <p>Select users from dropdown to add them to role {role.roleId}</p> |
| 213 | placeholder="Select users" |
| 236 | placeholder={'Enter new user emails to add to role ${startCase( |
| 253 | > |
| 266 | {addedUsers} users have been added to role {role.roleId} |
| 269 | <Button variant="secondary" onClick={onClear}> |
| 286 | ? 'This will grant ${plural(rolePermCount, { one: '# permission', other: '# permissions' })} to ${plural(dialogUsersToAdd, { one: '# new use |
| 291 | <p>Users to add:</p> |
| 312 | <p>Duplicate users:</p> |
| 335 | <p>Mismatched domain users:</p> |
| 357 | <p>Invalid users:</p> |
| 382 | > |
| Line | Source |
|---|---|
| 76 | return <DataTableSortHeader column={column} header="Role ID" /> |
| 86 | return <DataTableSortHeader column={column} header="Name" /> |
| 96 | return <DataTableSortHeader column={column} header="Description" /> |
| 109 | header="Date added" |
| 110 | tooltipText="Date when this Client Matter was added" |
| 127 | return <DataTableSortHeader column={column} header="Deleted At" /> |
| 169 | tooltip={'Remove ${row.getValue('name')}'} |
| 263 | <p> |
| 264 | Manage roles for <b>{workspaceName}</b>, add permissions to a role |
| 273 | <Icon icon={IconPlusLarge} className="mr-1" /> |
| 284 | emptyStateText="No roles found" |
| 299 | title="Delete role" |
| 300 | description={'Are you sure you want to delete role "${confirmingDeleteRole.name}"?'} |
| 302 | label: 'Delete', |
| 306 | label: 'Cancel', |
| Line | Source |
|---|---|
| 70 | return 'Are you sure you want to revoke ${workflowToDelete.name}' |
| 75 | return 'This will revoke this permission for ${roleId} tied to workspace ${workspace.clientName}' |
| 92 | displayErrorMessage({ message: 'Unable to delete workflow' }) |
| 114 | > |
| 181 | displayErrorMessage({ message: 'Unable to fetch workflows' }) |
| 204 | displayErrorMessage({ message: 'Role not found while adding workflows' }) |
| 223 | displayErrorMessage({ message: 'Unable to add workflows' }) |
| 240 | description={'The requested role ${roleId} you are trying to access does not exist.'} |
| 242 | text: 'Back to Settings', |
| 296 | placeholder="Add workflows" |
| 319 | > |
| Line | Source |
|---|---|
| 43 | displayErrorMessage({ message: 'Failed to fetch permissions' }) |
| 53 | title={'Workflow Permissions (${getSiteName(site)})'} |
| 57 | defaultText="Select workflow" |
| 68 | <div className="mb-2 mt-4 text-lg">Users</div> |
| 70 | <div className="text-sm">Select a workflow to view users</div> |
| 74 | <Spinner size="xxs" className="shrink-0 fill-primary" /> Loading... |
| 80 | <div className="text-sm italic">No users</div> |
| 89 | <div className="mb-2 mt-4 text-lg">Roles</div> |
| 91 | <div className="text-sm">Select a workflow to view roles</div> |
| 95 | <Spinner size="xxs" className="shrink-0 fill-primary" /> Loading... |
| 101 | <div className="text-sm italic">No roles</div> |
| Line | Source |
|---|---|
| 30 | message: 'Successfully cut over workspace to permission bundles!', |
| 38 | 'An error occurred while cutting over the workspace to permission bundles.', |
| 48 | {migrated ? 'Cutover Complete!' : 'Confirm Cutover'} |
| 48 | {migrated ? 'Cutover Complete!' : 'Confirm Cutover'} |
| 54 | ? 'This workspace has been migrated to permission bundles. All workspace users should be seeing the new interfaces for roles and permissions |
| 55 | : 'This workspace has not been cut over to permission bundles. Use the button below to confirm this action after validating that roles and p |
| 59 | <DialogTrigger>Cutover workspace to perm bundles</DialogTrigger> |
| 61 | title="Confirm permission bundle cutover" |
| 62 | description="Are you sure you want to migrate this workspace to permission bundles? This action cannot be undone and will affect all workspa |
| 64 | label: 'Confirm cutover', |
| 68 | label: 'Cancel', |
| Line | Source |
|---|---|
| 103 | message: 'Failed to add permissions to role ${role.roleId}', |
| 121 | <p> |
| 131 | placeholder={'Add permissions to ${role.roleId}'} |
| 155 | ? 'Add permissions' |
| 164 | {numAddedPerms} permissions have been added to role {role.roleId} |
| 167 | <Button variant="secondary" onClick={onClear}> |
| 183 | {'This will grant ${plural(numPermsToAdd, { one: '# new permission', other: '# new permissions' })} to ${plural(roleUserCount, { one: '# use |
| 187 | <p>Permissions to add:</p> |
| 215 | > |
| Line | Source |
|---|---|
| 48 | <div className="text-destructive">Delete all history</div> |
| 51 | <p> |
| 53 | {requestResetUsage ? ', and reset usage, ' : ''} before the date:{' '} |
| 53 | {requestResetUsage ? ', and reset usage, ' : ''} before the date:{' '} |
| 59 | {'Please acknowledge you want to delete all workspace history data${ |
| 60 | requestResetUsage ? ', and reset usage, ' : '' |
| 75 | <span>This operation could take up to a minute...</span> |
| 88 | > |
| 96 | > |
| Line | Source |
|---|---|
| 64 | return <DataTableSortHeader column={column} header="Permission" /> |
| 73 | return <DataTableSortHeader column={column} header="Perm ID" /> |
| 83 | return <DataTableSortHeader column={column} header="Date granted" /> |
| 98 | return <DataTableSortHeader column={column} header="Deleted At" /> |
| 124 | tooltip={'Remove ${row.getValue('name')}'} |
| 185 | message: 'Removed ${rolePerm?.name} from role ${workspaceRole.roleId}', |
| 191 | message: 'Failed to remove permission from role ${rolePk}', |
| 210 | emptyStateText="No permissions found" |
| Line | Source |
|---|---|
| 39 | 'Heading 1', |
| 40 | 'Heading 2', |
| 41 | 'Heading 3', |
| 42 | 'Normal', |
| 43 | 'List Number', |
| 44 | 'List Bullet', |
| 269 | return new File([preview.data], '${template.name}.pdf', { |
| Line | Source |
|---|---|
| 75 | return <DataTableSortHeader column={column} header="Email" /> |
| 93 | return <DataTableSortHeader column={column} header="Date added" /> |
| 114 | return <DataTableSortHeader column={column} header="Deleted At" /> |
| 140 | tooltip={'Remove ${row.getValue('userEmail')}'} |
| 203 | message: '${userEmail} removed from ${workspaceRole.roleId}', |
| 209 | message: 'Failed to remove ${userEmail} from ${workspaceRole.roleId}', |
| 228 | emptyStateText="No users found" |
| Line | Source |
|---|---|
| 109 | return <DataTableSortHeader column={column} header="Perm Name" /> |
| 119 | return <DataTableSortHeader column={column} header="Perm ID" /> |
| 132 | return <DataTableSortHeader column={column} header="Count" /> |
| 189 | <p> |
| 191 | <b>{selectedWorkspace.clientName}</b>. Permissions counts include |
| 197 | buttonText="Export" |
| 214 | emptyStateText="No perms found" |
| Line | Source |
|---|---|
| 58 | ['12345', 'Acme'], |
| 59 | ['56789', 'Harvey'], |
| 62 | ['12345', 'true', 'Acme'], |
| 63 | ['56789', 'false', 'Harvey'], |
| 227 | fileReader.readAsText(files[0], 'UTF-8') |
| Line | Source |
|---|---|
| 69 | title="File upload debugger" |
| 70 | subtitle="Upload a file to verify it can be processed" |
| 81 | description="Select a file to test the upload_file endpoint" |
| 82 | mainText="Drag and drop files here or click to browse" |
| 88 | <p className="text-muted-foreground text-xs"> |
| Line | Source |
|---|---|
| 47 | Size: '${project.filesCount} files (${project.sizeBytes} bytes)', |
| 58 | ? 'Deleted' |
| 59 | : 'Active' |
| 60 | : 'Not Set', |
| 69 | XLSX.utils.book_append_sheet(workbook, projectsWorksheet, 'Projects') |
| Line | Source |
|---|---|
| 19 | placeholder = 'Select template', |
| 35 | <div className="text-sm text-destructive">Failed to load templates</div> |
| 51 | inputPlaceholder="Search templates…" |
| 52 | emptyStateText="No templates found" |
| Line | Source |
|---|---|
| 22 | displayErrorMessage({ message: 'Role ID cannot be empty' }) |
| 37 | <h2 className="text-lg font-semibold">Role inspector</h2> |
| 41 | <p>Role ID:</p> |
| 47 | <Button disabled={roleId.trim().length === 0}>Inspect</Button> |
| Line | Source |
|---|---|
| 36 | <div className="text-destructive">Delete users</div> |
| 39 | <p> |
| 44 | <b>Users to be deleted:</b> |
| 71 | > |
| Line | Source |
|---|---|
| 40 | 'prose prose-sm max-w-none [&_input]:pointer-events-auto [&_input[type=checkbox]]:cursor-pointer [&_del]:bg-red-100 [&_del]:text-red-800 [&_ |
| 42 | 'prose prose-sm max-w-none [&_input]:pointer-events-auto [&_input[type=checkbox]]:cursor-pointer [&_del]:hidden [&_ins]:px-1 [&_ins]:rounded |
| 44 | 'prose prose-sm max-w-none [&_input]:pointer-events-auto [&_input[type=checkbox]]:cursor-pointer [&_ins]:hidden [&_del]:bg-red-100 [&_del]:t |
| Line | Source |
|---|---|
| 64 | 'rules.${index}.${fieldKey}' as FieldPath<PlaybookRuleFormValues> |
| 81 | 'rules.${index}.${fieldKey}' as FieldPath<PlaybookRuleFormValues> |
| 96 | 'rules.${index}.attributes.acceptableDeviations' as FieldPath<PlaybookRuleFormValues>, |
| Line | Source |
|---|---|
| 114 | [TemplateType.NDA]: 'nda_template', |
| 115 | [TemplateType.MSA]: 'msa_template', |
| 116 | [TemplateType.COMMERCIAL_CONTRACTS]: 'commercial_contracts_template', |
| Line | Source |
|---|---|
| 73 | <CardTitle className="mb-3 ml-1">Permissions</CardTitle> |
| 78 | <TabsTrigger value={RolePermsTab.rolePerms}> |
| 81 | <TabsTrigger value={RolePermsTab.addPerms}> |
| Line | Source |
|---|---|
| 85 | <CardTitle className="mb-3 ml-1">Users</CardTitle> |
| 90 | <TabsTrigger value={RoleUserTab.roleUsers}> |
| 93 | <TabsTrigger value={RoleUserTab.addUsers}> |
| Line | Source |
|---|---|
| 208 | 'image/jpeg': ['.jpg', '.jpeg'], |
| 208 | 'image/jpeg': ['.jpg', '.jpeg'], |
| 209 | 'image/png': ['.png'], |
| Line | Source |
|---|---|
| 19 | title="Library Events Manager" |
| 20 | subtitle="Manage library events content" |
| Line | Source |
|---|---|
| 58 | 'hover:border-interactive flex h-auto w-full flex-col items-start justify-start gap-2 rounded-lg border p-4 text-left transition-colors hove |
| 61 | "border-border relative -mx-2 flex items-center justify-between px-2 py-[calc(1.5rem-2px)] pr-3 text-left transition-colors after:absolute a |
| Line | Source |
|---|---|
| 34 | name: 'rules.${index}' as FieldPath<PlaybookRuleFormValues>, |
| 53 | void trigger('rules.${index}') |
| Line | Source |
|---|---|
| 47 | return parse(timestamp, 'yyyy-MM-dd', new Date()) |
| 49 | return parse(timestamp, 'yyyy-MM', new Date(0, 0, 1)) |
| Line | Source |
|---|---|
| 87 | const TABLE_HEADER_TEXT_CLASS = 'text-xs font-semibold text-muted' |
| 89 | 'text-xs font-semibold text-muted [&_*]:text-xs [&_*]:font-semibold [&_*]:text-muted' |
| Line | Source |
|---|---|
| 39 | ? new File([previewMutation.data], '${template?.name}.pdf', { |
| Line | Source |
|---|---|
| 95 | <span className="rounded bg-secondary px-1.5 py-0.5 text-xs font-medium text-muted"> |
| Line | Source |
|---|---|
| 24 | const tooltipContentId = '${id}-tooltip' |
| Line | Source |
|---|---|
| 55 | 'rules.${ruleIndex}.attributes.acceptableDeviations.${fieldIndex}' as FieldPath<PlaybookRuleFormValues> |
| Line | Source |
|---|---|
| 13 | <Route path=":playbookId" element={<PlaybookDetailPage />} /> |
| Line | Source |
|---|---|
| 431 | 'uploadPlaybook-${playbookId}' |
| Line | Source |
|---|---|
| 458 | 'uploadPlaybook-${playbookId}' |
| Line | Source |
|---|---|
| 41 | displayErrorMessage({ message: 'Failed to load workspace roles' }) |
| Line | Source |
|---|---|
| 404 | accept=".json" |
| Line | Source |
|---|---|
| 191 | {isLoadingWorkspaceOffboardJobs && 'Loading…'} |
| Line | Source |
|---|---|
| 56 | a.download = '${type.toLowerCase()}_export_${ |
| Line | Source |
|---|---|
| 86 | name: 'failed-document.pdf', |
| 88 | failure_reason: 'File is corrupted or password protected', |
| 174 | name: 'corrupted-file.pdf', |
| 176 | failure_reason: 'File is corrupted or password protected', |
| 180 | name: 'large-file.zip', |
| 182 | failure_reason: 'File size exceeds 50MB limit', |
| 203 | name: 'failed-file-1.pdf', |
| 205 | failure_reason: 'File is corrupted', |
| 209 | name: 'failed-file-2.docx', |
| 211 | failure_reason: 'Unsupported format', |
| 215 | name: 'failed-file-3.xlsx', |
| 217 | failure_reason: 'Password protected', |
| 253 | title: 'Components/Vault/ProgressToastV2', |
| 259 | component: ' |
| 319 | 'Progress toast showing files currently being processed. Mix of completed, processing, and failed files.', |
| 339 | 'Progress toast showing successful completion of all files. Will auto-dismiss after 30 seconds.', |
| 359 | 'Progress toast showing completed batch with some failed files. Error state with detailed failure reasons.', |
| 379 | 'Progress toast for large batch (1000+ files). Shows only failed files due to display threshold, with a message explaining the limitation.', |
| 399 | 'Progress toast with batch filtering enabled. Only shows files from the specified batch UUIDs (set via store).', |
| 419 | 'Progress toast with fast polling (2 seconds) for real-time updates during active processing.', |
| 441 | 'Progress toast for large batch (1000+ files) with no failures. Shows only title with no expandable content because display_mode is failed_o |
| 462 | 'Progress toast showing both server-side successful files and temporary failed files (e.g., files rejected during upload validation). Demons |
| 483 | 'Progress toast with workflow builder integration. When workflow builder is open, the toast is normally hidden except when ignoreHideToastOn |
| Line | Source |
|---|---|
| 39 | export const folderIdSearchParamKey = 'folder_id' |
| 40 | export const fileIdSearchParamKey = 'file_id' |
| 42 | export const sourceIdSearchParamKey = 'source_id' |
| 43 | export const questionIdSearchParamKey = 'question_id' |
| 44 | export const rowIdSearchParamKey = 'row_id' |
| 48 | export const projectDetailPageTabSearchParamKey = 'project_detail_tab' |
| 139 | '\n\n<i>(response was cut-off due to the query answer being too long. This might be a better query to run in Vault Review instead)</i>' |
| 150 | export const EXAMPLES_USER_EMAIL = 'examples@harvey.ai' |
| 423 | [ReviewColumnDisplayFormat.MMMM_SPACE_DD_COMMA_SPACE_YYYY]: 'MMMM dd, yyyy', |
| 424 | [ReviewColumnDisplayFormat.DD_SPACE_MMMM_SPACE_YYYY]: 'dd MMMM yyyy', |
| 425 | [ReviewColumnDisplayFormat.MMM_SPACE_DD_SPACE_YYYY]: 'MMM dd yyyy', |
| 426 | [ReviewColumnDisplayFormat.DD_SPACE_MMM_SPACE_YYYY]: 'dd MMM yyyy', |
| 427 | [ReviewColumnDisplayFormat.DD_MM_YYYY]: 'dd/MM/yyyy', |
| 428 | [ReviewColumnDisplayFormat.MM_DD_YYYY]: 'MM/dd/yyyy', |
| 429 | [ReviewColumnDisplayFormat.YYYY_MM_DD]: 'yyyy/MM/dd', |
| Line | Source |
|---|---|
| 1556 | userFriendlyMessage: '${files.length} file(s) failed: ${error}', |
| 3485 | title: event.title || newRun?.query || 'Untitled query', |
| 3615 | query: 'Review on ${currentProjectContent.name}', |
| 3867 | return 'extra_files_and_columns' |
| 3870 | return 'extra_columns' |
| 3873 | return 'extra_files' |
| 3879 | return 'retry_empty' |
| 3955 | ? 'Review on ${currentProjectContent.name}' |
| 3956 | : 'New Review' |
| 4612 | const finalRootName = nameById.get(rootId) ?? rootName ?? 'Root' |
| Line | Source |
|---|---|
| 256 | event: 'VaultProjectLayout.access_check_failed', |
| 293 | contextKey: '${userInfo.workspace.id}:${projectId}:access_level', |
| 294 | event: 'VaultProjectLayout.access_level_received', |
| 346 | contextKey: '${userInfo.workspace.id}:${projectId}:share_status', |
| 347 | event: 'VaultProjectLayout.share_status_fetched', |
| 374 | contextKey: '${userInfo.workspace.id}:${projectId}:share_fetch_error:${statusCode ?? 'unknown'}', |
| 375 | event: 'VaultProjectLayout.share_status_fetch_failed', |
| 444 | <Route path={'${filesPath}:fileId'} element={<VaultFilePreviewer />} /> |
| 450 | path={'${queriesPath}:queryId'} |
| Line | Source |
|---|---|
| 73 | category: 'vault_query', |
| 74 | message: 'Starting vault history request ${requestId}', |
| 91 | : 'no signal', |
| 99 | category: 'vault_query', |
| 100 | message: 'Vault history request ${requestId} was cancelled', |
| 133 | category: 'vault_query', |
| 134 | message: 'Vault history request ${requestId} failed', |
| 158 | : 'no signal', |
| Line | Source |
|---|---|
| 900 | const isDataCell = target.closest('.ag-row .ag-cell') |
| 911 | useKey('Escape', resetCellViewer) |
| 949 | const source = anchorEl?.closest('[data-review-content-type]') |
| 1351 | baseGradientColor="hsl(var(--neutral-200))" |
| 1352 | baseColor="hsl(var(--neutral-600))" |
| 1938 | const safeFileId = validateUuid(displayRowId) ? displayRowId : '[REDACTED]' |
| 2391 | baseGradientColor="hsl(var(--neutral-200))" |
| 2392 | baseColor="hsl(var(--neutral-600))" |
| Line | Source |
|---|---|
| 18 | const DATADOG_ACTION_UPLOAD_ERROR = 'vault_upload_error' |
| 76 | let errorType = 'Unknown' |
| 88 | errorType = 'HTTPError' |
| 100 | errorType = 'TypeError' |
| 125 | const DATADOG_ACTION_FILE_SELECTION = 'vault_file_selection' |
| 126 | const DATADOG_ACTION_UPLOAD_BATCH_INITIATED = 'vault_upload_batch_initiated' |
| 127 | const DATADOG_ACTION_PROJECT_UPLOAD_STATE = 'vault_project_upload_state' |
| Line | Source |
|---|---|
| 49 | return 'content_type' |
| 852 | err instanceof Error ? err.message : 'Failed to load folder content' |
| 1286 | setError(err instanceof Error ? err.message : 'Failed to load project') |
| 1387 | err instanceof Error ? err.message : 'Failed to load more content' |
| 1476 | setError(err instanceof Error ? err.message : 'Failed to load folder') |
| Line | Source |
|---|---|
| 211 | () => import('services/workers/upload/upload-worker') |
| 1959 | Authorization: 'Bearer ${authorizationToken}', |
| 2479 | ? 'vault/projects/${projectId}/queries/${queryId}' |
| 2480 | : 'vault/event/${queryId}' |
| 2718 | const url = 'vault/event/${eventId}/edit_cell' |
| Line | Source |
|---|---|
| 1288 | const aDocType = a.tags[0]?.name || 'zzz_unknown' |
| 1289 | const bDocType = b.tags[0]?.name || 'zzz_unknown' |
| 1301 | a.contentType || 'zzz_unknown', |
| 1302 | b.contentType || 'zzz_unknown' |
| Line | Source |
|---|---|
| 356 | resizeElement.classList.add('after:bg-skeleton-dark') |
| 373 | 'after:bg-skeleton-dark' |
| 428 | resizeElement.classList.remove('after:bg-skeleton-dark') |
| 445 | 'after:bg-skeleton-dark' |
| Line | Source |
|---|---|
| 29 | sharingStatusTooltip: 'Shared to everyone at ${workspaceClientName}', |
| 37 | sharingStatusTooltip: 'Created by you', |
| 41 | sharingStatusTooltip: 'Owned by ${sharedByUserEmail}', |
| 46 | sharingStatusTooltip: 'Private to you', |
| Line | Source |
|---|---|
| 619 | useKey('Escape', () => { |
| 1820 | return new Intl.NumberFormat('en-US').format(testNumber) |
| 1823 | return new Intl.NumberFormat('de-DE').format(testNumber) |
| Line | Source |
|---|---|
| 14 | DOCUMENT_TYPE: 'document_type', |
| 15 | UPDATED_AT: 'updated_at', |
| 16 | FILE_TYPE: 'file_type', |
| Line | Source |
|---|---|
| 44 | strokeColor="hsl(var(--neutral-300))" |
| 49 | strokeColor="hsl(var(--neutral-300))" |
| Line | Source |
|---|---|
| 44 | const sortStorageKey = 'vault_home_sort_option_${userInfo.dbId}_${userInfo.workspace.id}' |
| 45 | const viewModeStorageKey = 'vault_home_view_mode_${userInfo.dbId}_${userInfo.workspace.id}' |
| Line | Source |
|---|---|
| 163 | return 'border-b border-t-color' |
| 165 | return 'border-b no-top-border' |
| Line | Source |
|---|---|
| 124 | return '[serialization_error=true]' |
| 131 | ): string => '[VLT-8047] ${event} ${serializePayload(payload)}' |
| Line | Source |
|---|---|
| 84 | return QUERY_MUST_HAVE_X_LEN_HELP_TEXT('at least ${MIN_QUERY_LENGTH}') |
| 86 | return QUERY_MUST_HAVE_X_LEN_HELP_TEXT('fewer than ${queryLimit}') |
| Line | Source |
|---|---|
| 623 | 'animate-pulse stroke-background-accent' |
| Line | Source |
|---|---|
| 342 | textClassNames="text-start text-xs" |
| Line | Source |
|---|---|
| 993 | analyticsMessage="vault_progress_toast_v2" |
| Line | Source |
|---|---|
| 36 | 'Control+h', |
| Line | Source |
|---|---|
| 192 | creatorUserEmail === EXAMPLES_USER_EMAIL ? 'Harvey' : creatorUserEmail |
| Line | Source |
|---|---|
| 549 | return { error: 'Failed to run review query' } |
| Line | Source |
|---|---|
| 761 | analyticsMessage="vault_progress_toast" |
| Line | Source |
|---|---|
| 220 | const owner = userId === EXAMPLES_USER_EMAIL ? 'Harvey' : userId |
| Line | Source |
|---|---|
| 55 | const VAULT_STATIC_TAGS_SOURCE = 'vault_static_tags' |
| Line | Source |
|---|---|
| 960 | const zipFileName = '${projectName}.zip' |
| Line | Source |
|---|---|
| 65 | const basePath = 'vault/progress-summary/${projectId}' |
| Line | Source |
|---|---|
| 218 | contextKey: '${userInfo.workspace.id}:vault_list_loaded', |
| Line | Source |
|---|---|
| 104 | export const CELL_LOADING_TEXT = 'Processing…' |
| Line | Source |
|---|---|
| 496 | textClassNames="my-auto text-sm" |
| Line | Source |
|---|---|
| 43 | path={'${projectsPath}:projectId/*'} |
| Line | Source |
|---|---|
| 251 | accept=".csv" |
| Line | Source |
|---|---|
| 201 | accept=".csv" |
| Line | Source |
|---|---|
| 241 | 'Control+h', |
| Line | Source |
|---|---|
| 360 | 'Control+h', |
| Line | Source |
|---|---|
| 5 | assistant: 'Assistant', |
| 6 | tax: 'Tax AI Assistant', |
| 8 | eurlex: 'EUR-Lex', |
| 9 | usacaselaw: 'US Case Law', |
| 10 | uscaselaw: 'US Case Law', |
| 11 | francecaselaw: 'French Case Law', |
| 12 | ausbreachreporting: 'Australia Breach Reporting', |
| 14 | cuatrecasas: 'Cuatrecasas', |
| 15 | spaces: 'Spaces', |
| Line | Source |
|---|---|
| 92 | label: 'Microsoft Word', |
| 96 | label: 'Microsoft Excel', |
| 217 | const fileName = 'Table_${dateTime}' |
| 233 | return saveAs(blob, '${fileName}.docx') |
| 248 | XLSX.utils.book_append_sheet(wb, ws, 'Table') |
| 255 | source.page ? ' , Page ' + source.page : '' |
| 259 | XLSX.utils.book_append_sheet(wb, rs, 'Citations') |
| 266 | '${fileName}.xlsx' |
| 272 | '${fileName}.csv' |
| Line | Source |
|---|---|
| 32 | return 'iManage OnPrem' |
| 35 | return 'SharePoint' |
| 37 | return 'Google Drive' |
| 39 | return 'NetDocuments' |
| 41 | return 'Epona' |
| 43 | return 'Box' |
| 45 | return 'Outlook' |
| Line | Source |
|---|---|
| 294 | folderName: folder.name || 'Google Drive Folder', |
| 295 | folderPath: [folder.name || 'Google Drive Folder'], |
| 500 | myDriveView.setLabel('My drive only') |
| 510 | starredView.setLabel('Starred') |
| 522 | shouldEnableFolderSelection ? 'Select folder' : 'Select files' |
| 522 | shouldEnableFolderSelection ? 'Select folder' : 'Select files' |
| Line | Source |
|---|---|
| 149 | dataTestId={'${contentType}-icon'} |
| 163 | 'Publication Status', |
| 164 | 'Jurisdiction', |
| 165 | 'Legal Classification', |
| 328 | dataTestId={'${databaseSource}-icon'} |
| 343 | dataTestId={'${databaseSource}-icon'} |
| Line | Source |
|---|---|
| 48 | export const PAGE_VIEW_EVENT_NAME = 'Page Viewed' |
| 49 | export const FILTER_CHANGED_EVENT_NAME = 'Filter Changed' |
| 183 | devLog('MP Event buffer flushed') |
| 188 | engage: 'engage/', |
| 189 | groups: 'groups/', |
| Line | Source |
|---|---|
| 105 | label: 'iManage OnPrem', |
| 114 | label: 'Epona', |
| 122 | label: 'Google Drive', |
| 130 | label: 'Box', |
| 138 | label: 'SharePoint', |
| Line | Source |
|---|---|
| 78 | state.write('<mention type="${type}">${label}</mention>') |
| 99 | open: '<u>', |
| 100 | close: '</u>', |
| 217 | const lead = /^\w/.test(raw) ? '\\b' : '' |
| 218 | const trail = /\w$/.test(raw) ? '\\b' : '' |
| Line | Source |
|---|---|
| 465 | return 'Vault' |
| 467 | return 'Assistant thread' |
| 469 | return 'Playbook' |
| 473 | return 'Workflow' |
| 475 | return 'Resource' |
| Line | Source |
|---|---|
| 12 | <p className="rounded bg-accent-hover px-2.5 py-0.5 font-medium">Beta</p> |
| 12 | <p className="rounded bg-accent-hover px-2.5 py-0.5 font-medium">Beta</p> |
| 20 | > |
| Line | Source |
|---|---|
| 135 | const blob = await item.getType('text/html') |
| 145 | const blob = await item.getType('text/plain') |
| 153 | const modKey = isMac ? '⌘' : 'Ctrl + ' |
| Line | Source |
|---|---|
| 23 | declare module '@tiptap/core' { |
| 38 | content: 'inline*', |
| 52 | tag: 'a[href]', |
| Line | Source |
|---|---|
| 289 | 'ethical_walls' |
| 401 | const errorMessage = 'Missing configuration: iManageAppId=${!!iManageAppId}, iManageCustomerId=${!!iManageCustomerId}' |
| 425 | 'Failed to obtain integration token after connect attempt' |
| Line | Source |
|---|---|
| 23 | small: 'text-2xs leading-3', |
| 28 | userEmail = 'O', // O is for owner |
| 52 | {(userEmail || 'O')[0].toUpperCase()} |
| Line | Source |
|---|---|
| 52 | ? 'bg-secondary opacity-60' |
| 54 | ? 'bg-secondary hover:cursor-pointer hover:bg-secondary-hover' |
| Line | Source |
|---|---|
| 16 | const LS_SESSION_ID_KEY = 'session_id' |
| 17 | const LS_LAST_EVENT_KEY = 'session_last_event' |
| Line | Source |
|---|---|
| 170 | const cacheBustPath = '${path}?ts=${Date.now()}' |
| 380 | actionButtonLabel || 'Action', |
| Line | Source |
|---|---|
| 138 | buttonTitle = 'Ask Harvey', |
| 354 | ? 'Select a Client Matter to submit your query' |
| Line | Source |
|---|---|
| 126 | enter="transition-opacity duration-300" |
| 129 | leave="transition-opacity duration-100" |
| Line | Source |
|---|---|
| 7 | export const PROFILE_SETUP_SKIPPED_EVENT = 'profile_setup_skipped' |
| 8 | export const PROFILE_SETUP_STEP_SKIPPED_EVENT = 'profile_setup_step_skipped' |
| Line | Source |
|---|---|
| 299 | folderName: folder.name || 'Box Folder', |
| 300 | folderPath: [folder.name || 'Box Folder'], |
| Line | Source |
|---|---|
| 261 | editorContainerEl = dom.closest('#query-editor') |
| 328 | const clickedInsideDialog = target.closest('[role="dialog"]') |
| Line | Source |
|---|---|
| 258 | '[role="menu"]' |
| 356 | void trackAssistantOrVaultEvent('remove all users clicked', { |
| Line | Source |
|---|---|
| 15 | 'text-[10px] font-medium border rounded border-hy-border-strong bg-hy-bg-subtle text-primary' |
| 17 | 'text-sm font-medium border rounded-md border-hy-border-strong bg-hy-bg-subtle text-primary' |
| Line | Source |
|---|---|
| 29 | getComputedStyle(container).getPropertyValue('--button-min-width') |
| 63 | if (element.classList.contains('@container')) return element |
| Line | Source |
|---|---|
| 63 | {vaultProjectName || 'Vault'} |
| 66 | {clientMatterName || 'Client Matter'} |
| Line | Source |
|---|---|
| 199 | trackDialogSubmitted('Add Resources Dialog', { |
| Line | Source |
|---|---|
| 250 | trackDialogSubmitted('Add Resources Dialog', { |
| Line | Source |
|---|---|
| 259 | trackDialogSubmitted('Add Resources Dialog', { |
| Line | Source |
|---|---|
| 4 | return ' |
| Line | Source |
|---|---|
| 43 | <IconArrowRotateCounterClockwise className="mr-1 h-4 w-4" /> |
| Line | Source |
|---|---|
| 131 | placeholder={inputPlaceholder || 'Add a tag'} |
| Line | Source |
|---|---|
| 29 | declare module '@tiptap/core' { |
| Line | Source |
|---|---|
| 88 | selectButtonText: 'Select…', |
| Line | Source |
|---|---|
| 38 | const EPONA_APP_NAME = 'Harvey' |
| Line | Source |
|---|---|
| 2 | 'IntegrationFilePickerBlockingTime' |
| Line | Source |
|---|---|
| 89 | selectButtonText: 'Select…', |
| Line | Source |
|---|---|
| 179 | typefilters: 'Supported file types@1|${typeFilters}', |
| Line | Source |
|---|---|
| 12 | const BRAND_ONE_DRIVE = 'OneDrive' |
| Line | Source |
|---|---|
| 14 | const WITH_ONE_DRIVE_LABEL = '(with OneDrive)' |
| Line | Source |
|---|---|
| 89 | selectButtonText: 'Select…', |
| Line | Source |
|---|---|
| 301 | style={{ width: 'calc(${width} - 32px)' }} |
| Line | Source |
|---|---|
| 37 | tag: 'span[data-placeholder]', |
| Line | Source |
|---|---|
| 39 | tag: 'span[data-suggestedSource]', |
| Line | Source |
|---|---|
| 32 | event.clipboardData?.setData('text/plain', cleanedMarkdown) |
| Line | Source |
|---|---|
| 230 | '[role="menu"]' |
| Line | Source |
|---|---|
| 220 | void trackAssistantOrVaultEvent('remove all users clicked', { |
| Line | Source |
|---|---|
| 377 | void trackAssistantOrVaultEvent('shared with users', { |
| Line | Source |
|---|---|
| 41 | const eventName = 'Assistant thread ${eventVerb}' |
| Line | Source |
|---|---|
| 84 | trackAssistantOrVaultEvent('share link copied', { |
| Line | Source |
|---|---|
| 124 | <p className="ml-0.5 shrink-0 text-xs text-muted">References</p> |
| Line | Source |
|---|---|
| 51 | .replaceAll('\n\n', '<br /><br />')} |
| Line | Source |
|---|---|
| 10 | const DARK_MODE_MEDIA_QUERY = '(prefers-color-scheme: dark)' |
| Line | Source |
|---|---|
| 413 | folderName: 'Untitled', |
| Line | Source |
|---|---|
| 23 | placeholder = 'Select workspaces', |
| Line | Source |
|---|---|
| 12 | 'border-transparent bg-interactive text-primary-inverse hover:bg-interactive-hover', |
| 13 | skeleton: 'border-transparent bg-secondary-hover font-normal text-primary', |
| 15 | 'border-transparent bg-button-secondary text-primary hover:bg-button-secondary-hover', |
| 17 | 'border-transparent bg-destructive text-destructive hover:bg-destructive/80', |
| 18 | outline: 'text-primary bg-primary', |
| 19 | ghost: 'text-primary bg-primary border-transparent', |
| 21 | 'border border-primary bg-secondary hover:bg-secondary-hover text-primary rounded-md line-clamp-1 truncate', |
| 22 | warning: 'border-transparent bg-[#F1E7C9] text-[#C27A1D] font-normal', |
| 24 | 'border-transparent bg-hy-warning-bg text-hy-warning-fg font-normal', |
| 25 | beta: 'border-transparent bg-hy-jade-bg text-hy-jade-fg font-medium px-1 py-px text-2xs', |
| 26 | group: 'border-transparent bg-data-jade-400 text-primary font-normal', |
| 27 | success: 'border-transparent bg-hy-success-bg text-hy-success-fg font-normal', |
| 28 | info: 'border-transparent bg-hy-blue-bg text-hy-blue-fg font-normal', |
| Line | Source |
|---|---|
| 50 | months: 'flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0', |
| 52 | caption: 'flex justify-center pt-1 relative items-center', |
| 54 | nav: 'space-x-1 flex items-center', |
| 61 | table: 'w-full border-collapse space-y-1', |
| 63 | head_cell: 'text-muted rounded-md w-8 font-normal text-[0.8rem]', |
| 64 | row: 'flex w-full mt-2', |
| 78 | 'bg-interactive text-primary-inverse hover:bg-interactive hover:text-primary-inverse focus:bg-interactive focus:text-primary-inverse', |
| 79 | day_today: 'bg-button-secondary text-primary', |
| 81 | 'day-outside text-muted opacity-50 aria-selected:bg-button-secondary/50 aria-selected:text-muted aria-selected:opacity-30', |
| 82 | day_disabled: 'text-muted opacity-50', |
| 84 | 'aria-selected:bg-button-secondary aria-selected:text-primary', |
| Line | Source |
|---|---|
| 246 | ? 'left-[calc(var(--sidebar-width)_-_2px)]' |
| 247 | : 'left-[calc(var(--sidebar-width-icon)_-_2px)]' |
| 445 | 'peer/menu-button cursor-pointer flex w-full gap-[--spacing-lg] overflow-hidden rounded-md p-[--spacing-lg]', |
| 446 | 'text-left text-sm outline-none', |
| 447 | 'hover:bg-tab-hover focus-visible:ring-2 focus-visible:ring-ring active:bg-tab-active', |
| 448 | 'disabled:pointer-events-none disabled:opacity-50 disabled:cursor-default', |
| 449 | 'aria-disabled:pointer-events-none aria-disabled:opacity-50', |
| 450 | 'data-[active=true]:bg-tab-active', |
| 451 | 'group-has-[[data-sidebar=menu-action]]/menu-item:pr-8', |
| 453 | '[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&_span]:text-sm [&_div]:text-sm', |
| 454 | 'group-data-[collapsible=icon]:w-[var(--sidebar-button-height)]', |
| Line | Source |
|---|---|
| 3 | export const AG_GRID_HEADER_CELL_SELECTOR = '.ag-header-cell' |
| 4 | export const AG_GRID_CELL_SELECTOR = '.ag-cell' |
| 5 | export const AG_GRID_FULL_WIDTH_ROW_SELECTOR = '.ag-full-width-row' |
| 8 | 'button:not([disabled]):not([tabindex="-1"])', |
| 9 | '[href]:not([tabindex="-1"])', |
| 10 | 'input:not([disabled]):not([tabindex="-1"]):not([type="hidden"]):not([aria-disabled="true"])', |
| 11 | 'select:not([disabled]):not([tabindex="-1"])', |
| 12 | 'textarea:not([disabled]):not([tabindex="-1"])', |
| 13 | '[tabindex]:not([tabindex="-1"]):not([disabled]):not([aria-disabled="true"])', |
| Line | Source |
|---|---|
| 15 | sm: { container: 'h-4 w-4', inner: 'h-1.5 w-1.5', outer: 'h-2 w-2' }, |
| 15 | sm: { container: 'h-4 w-4', inner: 'h-1.5 w-1.5', outer: 'h-2 w-2' }, |
| 15 | sm: { container: 'h-4 w-4', inner: 'h-1.5 w-1.5', outer: 'h-2 w-2' }, |
| 16 | md: { container: 'h-6 w-6', inner: 'h-2 w-2', outer: 'h-3 w-3' }, |
| 16 | md: { container: 'h-6 w-6', inner: 'h-2 w-2', outer: 'h-3 w-3' }, |
| 16 | md: { container: 'h-6 w-6', inner: 'h-2 w-2', outer: 'h-3 w-3' }, |
| Line | Source |
|---|---|
| 6 | title: 'Workflow created', |
| 7 | description: 'Annie S · 4/8/2025 11:15am', |
| 12 | title: 'Version 1 published', |
| 13 | description: 'Annie S · 4/9/2025, 12:06am', |
| 18 | title: 'Draft saved', |
| 19 | description: 'You · Just now', |
| Line | Source |
|---|---|
| 30 | import('@ag-grid-enterprise/excel-export'), |
| 31 | import('@ag-grid-enterprise/row-grouping'), |
| 36 | await import('ag-grid-community/styles/ag-grid.css') |
| 37 | await import('ag-grid-community/styles/ag-theme-quartz.css') |
| 38 | await import('./data-grid.css') |
| Line | Source |
|---|---|
| 808 | width: 'calc(100% - 8px)', |
| 810 | transform: 'translateY(${itemOrVirtualItem.start}px)', |
| 815 | width: 'calc(100% - 8px)', |
| 1045 | return '${listboxId}-option-${encodeURIComponent(optionValue)}' |
| Line | Source |
|---|---|
| 26 | return 'top-0 right-0' |
| 28 | return 'top-0 left-0' |
| 30 | return 'bottom-0 left-0' |
| 33 | return 'bottom-0 right-0' |
| Line | Source |
|---|---|
| 20 | skeleton: 'my-0.5 h-3 w-16', |
| 24 | skeleton: 'my-[3px] h-3.5 w-20', |
| 28 | skeleton: 'my-1 h-4 w-24', |
| 32 | skeleton: 'my-[5px] h-[18px] w-32', |
| Line | Source |
|---|---|
| 67 | top: 'border-t-0 border-l-0 border-r-0', |
| 68 | bottom: 'border-b-0 border-l-0 border-r-0', |
| 69 | left: 'border-t-0 border-b-0 border-r-0', |
| 70 | right: 'border-t-0 border-b-0 border-l-0', |
| Line | Source |
|---|---|
| 289 | .getPropertyValue('--border-primary') |
| 291 | const borderColor = 'hsl(${borderColorHsl})' |
| 292 | const borderColorTransparent = 'hsl(${borderColorHsl} / 0%)' |
| Line | Source |
|---|---|
| 54 | formItemId: '${id}-form-item', |
| 55 | formDescriptionId: '${id}-form-item-description', |
| 56 | formMessageId: '${id}-form-item-message', |
| Line | Source |
|---|---|
| 20 | baseGradientColor = 'hsl(var(--text-primary))', |
| 21 | baseColor = 'hsl(var(--text-inactive))', |
| 38 | backgroundImage: 'linear-gradient(90deg, transparent calc(50% - var(--shimmer-spread)), var(--shimmer-gradient), transparent calc(50% + var( |
| Line | Source |
|---|---|
| 41 | backgroundColor: isActive ? 'hsl(40 7% 19%)' : 'hsl(40 4% 54%)', // Need HSL values for animation |
| 41 | backgroundColor: isActive ? 'hsl(40 7% 19%)' : 'hsl(40 4% 54%)', // Need HSL values for animation |
| Line | Source |
|---|---|
| 22 | const iconSize = isPresentationIcon ? 'h-[55%] w-[55%]' : 'h-[75%] w-[75%]' |
| 22 | const iconSize = isPresentationIcon ? 'h-[55%] w-[55%]' : 'h-[75%] w-[75%]' |
| Line | Source |
|---|---|
| 82 | {' |
| 99 | style={{ height: 'calc(100% - ${scrollBarTop}px)' }} |
| Line | Source |
|---|---|
| 79 | 'radial-gradient(circle at 0px 50%, transparent 3px, black 4px)', |
| 81 | 'radial-gradient(circle at 0px 50%, transparent 3px, black 4px)', |
| Line | Source |
|---|---|
| 399 | const listboxId = id ? '${id}-listbox' : '${generatedId}-listbox' |
| 399 | const listboxId = id ? '${id}-listbox' : '${generatedId}-listbox' |
| Line | Source |
|---|---|
| 47 | const labelId = hasDefaultLabel ? '${checkboxId}-label' : undefined |
| Line | Source |
|---|---|
| 20 | alt="Chiomenti" |
| Line | Source |
|---|---|
| 8 | return <img className={className} src="/img/logos/epona.png" alt="Epona" /> |
| Line | Source |
|---|---|
| 14 | alt="Google Drive" |
| Line | Source |
|---|---|
| 12 | alt="NetDocuments" |
| Line | Source |
|---|---|
| 9 | <img className={className} src="/img/logos/outlook.svg" alt="Outlook" /> |
| Line | Source |
|---|---|
| 17 | <style>{'.cls-1{fill:#54565a}'}</style> |
| Line | Source |
|---|---|
| 81 | const btn = sibling.matches('button:not([disabled])') |
| Line | Source |
|---|---|
| 21 | style={{ transform: 'translateX(-${100 - (value ?? 0)}%)' }} |
| Line | Source |
|---|---|
| 17 | value: 'Arabic', |
| 23 | value: 'Cantonese', |
| 28 | value: 'Simplified Chinese', |
| 33 | value: 'Traditional Chinese', |
| 38 | value: 'Czech', |
| 43 | value: 'Danish', |
| 48 | value: 'Dutch', |
| 53 | value: 'English', |
| 58 | value: 'Finnish', |
| 63 | value: 'French', |
| 68 | value: 'German', |
| 73 | value: 'Greek', |
| 78 | value: 'Gujarati', |
| 83 | value: 'Hebrew', |
| 89 | value: 'Hindi', |
| 94 | value: 'Hungarian', |
| 99 | value: 'Italian', |
| 104 | value: 'Japanese', |
| 109 | value: 'Korean', |
| 114 | value: 'Malay', |
| 119 | value: 'Marathi', |
| 124 | value: 'Norwegian Bokmål', |
| 129 | value: 'Polish', |
| 134 | value: 'Brazilian Portuguese', |
| 139 | value: 'European Portuguese', |
| 144 | value: 'Romanian', |
| 149 | value: 'Russian', |
| 154 | value: 'Serbian', |
| 159 | value: 'Spanish (Latin America)', |
| 164 | value: 'Spanish (Spain)', |
| 169 | value: 'Swedish', |
| 174 | value: 'Thai', |
| 179 | value: 'Turkish', |
| 184 | value: 'Ukrainian', |
| 189 | value: 'Vietnamese', |
| Line | Source |
|---|---|
| 118 | [WorkflowCategory.GENERAL]: 'General', |
| 119 | [WorkflowCategory.TRANSACTIONAL]: 'Transactional', |
| 120 | [WorkflowCategory.IN_HOUSE]: 'In-House', |
| 121 | [WorkflowCategory.LITIGATION]: 'Litigation', |
| 122 | [WorkflowCategory.FINANCIAL_SERVICES]: 'Financial Services', |
| 123 | [WorkflowCategory.OTHER]: 'Other', |
| Line | Source |
|---|---|
| 15 | content: '## Document: ${document.file.name}', |
| 19 | content: '### ${t.topic}\n#### Witness: ${t.witness}\n${t.summary}', |
| 31 | title: 'Transcripts', |
| 37 | content: '# Documents', |
| 45 | content: '# Questions and answers', |
| Line | Source |
|---|---|
| 59 | const ROUTE = 'document_compare' |
| 335 | return GET_UPLOAD_X_DOCUMENT_HELP_TEXT('the first') |
| 337 | return GET_UPLOAD_X_DOCUMENT_HELP_TEXT('the second') |
| Line | Source |
|---|---|
| 56 | ? 'Visible to ${ |
| 61 | : 'Visible to ${ |
| Line | Source |
|---|---|
| 8 | label: 'View all', |
| 9 | value: 'View all', |
| Line | Source |
|---|---|
| 45 | message: 'Unexpected: Couldn’t find matching document or source.', |
| 59 | message: 'Please wait for all files to finish loading', |
| Line | Source |
|---|---|
| 67 | { text: t'Review table', value: 'review_table' }, |
| 157 | 'Control+h', |
| Line | Source |
|---|---|
| 57 | 'Control+h', |
| Line | Source |
|---|---|
| 28 | const ROUTE = 'company_profile' |
| Line | Source |
|---|---|
| 58 | useKey('Escape', () => { |
| Line | Source |
|---|---|
| 45 | a.download = '${companyName}-competitive-analysis.xlsx' |
| Line | Source |
|---|---|
| 14 | export const EXTRACT_NOT_AVAILABLE_VALUE = 'N/A' |
| Line | Source |
|---|---|
| 13 | const fileName = 'CONTRACTS_${dateTime}.xlsx' |
| Line | Source |
|---|---|
| 28 | const CONFIRMATION_TEXT = 'DELETE WORKFLOW' |
| Line | Source |
|---|---|
| 75 | const SERVER_ROUTE = 'diligence/transcripts' |
| Line | Source |
|---|---|
| 49 | const ROUTE = 'legacy_drafting' |
| Line | Source |
|---|---|
| 46 | const ROUTE = 'ogc_review' |
| Line | Source |
|---|---|
| 387 | titleText: 'Redlines', |
| Line | Source |
|---|---|
| 117 | answer: { text: 'Loading…' }, |
| Line | Source |
|---|---|
| 966 | return 'review_table' |
| Line | Source |
|---|---|
| 95 | ...matchingFiles.map(() => outputLabel ?? 'no output label'), |
| 148 | !target.closest('[data-radix-dropdown-content]') && |
| 149 | !target.closest('[data-radix-dropdown-trigger]') && |
| 150 | !target.closest('[role="menuitem"]') && |
| 151 | !target.closest('[role="menu"]') && |
| 152 | !target.closest('[data-testid*="dropdown"]') && |
| 153 | !target.closest('.ks-input-dropdown') |
| 292 | 'Diatype, InterVariable, Inter, ui-sans-serif, system-ui, sans-serif, “Apple Color Emoji” , “Segoe UI Emoji”, “Segoe UI Symbol”, “Noto Color |
| 312 | 'Diatype, InterVariable, Inter, ui-sans-serif, system-ui, sans-serif, “Apple Color Emoji” , “Segoe UI Emoji”, “Segoe UI Symbol”, “Noto Color |
| Line | Source |
|---|---|
| 5 | 'FlippedSplitIcon', |
| 22 | ['path', { key: 'path1', d: 'M16 3h5v5', transform: 'rotate(180 12 12)' }], |
| 23 | ['path', { key: 'path2', d: 'M8 3H3v5', transform: 'rotate(180 12 12)' }], |
| 29 | transform: 'rotate(180 12 12)', |
| 32 | ['path', { key: 'path4', d: 'm15 9 6-6', transform: 'rotate(180 12 12)' }], |
| Line | Source |
|---|---|
| 16 | headerText: String(backendParams?.headerText) || 'Please select an option', |
| 18 | 'Option 1', |
| 19 | 'Option 2', |
| 20 | 'Option 3', |
| 22 | inputLabel: String(backendParams?.inputLabel) || 'List 1', |
| Line | Source |
|---|---|
| 263 | knowledgeSources: '[[${reviewTableSource.label + '.metadata.knowledge_sources'}]]', |
| 268 | reviewEventId: '[[${reviewTableSource.label + '.metadata.event_id'}]]', |
| 276 | knowledgeSources: '[[${reviewTableSource!.label + '.metadata.knowledge_sources'}]]', |
| 287 | reviewEventId: '[[${reviewTableSource!.label + '.metadata.event_id'}]]', |
| Line | Source |
|---|---|
| 37 | const NAME = '\\b[A-Z][^\\s' + PUNCTUATION + ']' |
| 49 | const VALID_CHARS = '[^' + TRIGGERS + PUNC + '\\s]' |
| 220 | (target as Element).closest('[data-mentions-dropdown]') !== null |
| Line | Source |
|---|---|
| 13 | sm: 'h-4 w-4', |
| 14 | md: 'h-6 w-6', |
| 15 | lg: 'h-8 w-8', |
src/components/workflow-builder/blocks/controls/workflow-builder-prompt-text-editor-component.tsx (2)
| Line | Source |
|---|---|
| 327 | dialogName: 'Workflow Prompt Dialog', |
| 490 | editorName={'${editorName}-dialog'} |
| Line | Source |
|---|---|
| 254 | outputLabel: 'knowledge_sources', |
| 355 | outputLabel: 'review_tables', |
| Line | Source |
|---|---|
| 120 | return inner.trim() ? '<u>${inner.trim()}</u>' : '' |
| 331 | const PLACEHOLDER_PREFIX = '<!--CODE_BLOCK_' |
| Line | Source |
|---|---|
| 74 | .post('workflow_builder/import_workflow', { |
| 78 | Authorization: 'Bearer ${token}', |
| Line | Source |
|---|---|
| 695 | blockName: 'Add step', |
| 721 | blockName: 'Start by adding your first step', // Note that this is just naming; actual display text gets set in the component |
| Line | Source |
|---|---|
| 38 | export const GENERATED_STEP_PREFIX = 'gen_' |
| 41 | return 'stable_ref_${randUuid()}' |
| Line | Source |
|---|---|
| 218 | ? '.metadata.class_name' |
| Line | Source |
|---|---|
| 764 | buttonName: 'Workflow Prompt Embedded Files Menu', |
| Line | Source |
|---|---|
| 828 | buttonName: 'Workflow Prompt Add Knowledge Source', |
| Line | Source |
|---|---|
| 39 | const html = clipboardData.getData('text/html') |
| Line | Source |
|---|---|
| 51 | const shiftPressed = useKeyPress('Shift', { |
| Line | Source |
|---|---|
| 1 | export const BACKEND_VERSION_CONFLICT_ERROR = 'BackendVersionConflict' |
| Line | Source |
|---|---|
| 63 | link.download = '${fileName}-workflow-export.json' |
| Line | Source |
|---|---|
| 71 | theme === Theme.DARK ? 'rgba(255, 255, 255, 0.32)' : '#ccc' |
| Line | Source |
|---|---|
| 61 | const stateKey = '${storeKey}State' |
| Line | Source |
|---|---|
| 31 | selectList = '[[' + selectList + '.selected]]' |
| Line | Source |
|---|---|
| 46 | String(backendParams?.headerText) || 'Upload a file for processing', |
| Line | Source |
|---|---|
| 18 | 'Add a message to display to the user.', |
| Line | Source |
|---|---|
| 152 | String(backendParams?.adminPrompt) || 'Enter your instructions here', |
| Line | Source |
|---|---|
| 158 | stableId: 'step_${index}', |
| Line | Source |
|---|---|
| 28 | { stepIndex: -1, field: 'steps', message: 'steps array is required' }, |
| Line | Source |
|---|---|
| 269 | return 'Runtime estimate: ${minutes}+ mins' |
| Line | Source |
|---|---|
| 24 | name: ['name', 'title', 'prompt name', 'prompt_name'], |
| 24 | name: ['name', 'title', 'prompt name', 'prompt_name'], |
| 25 | query: ['query', 'prompt', 'prompt text', 'prompt_text', 'text', 'content'], |
| 25 | query: ['query', 'prompt', 'prompt text', 'prompt_text', 'text', 'content'], |
| 28 | 'practice areas', |
| 29 | 'practice_areas', |
| 31 | 'practice area', |
| 32 | 'practice_area', |
| 50 | return { rows: [], headers: [], errors: ['CSV file is empty'] } |
| 276 | const headers = ['Name', 'Query', 'Categories', 'Practice Areas'] |
| 276 | const headers = ['Name', 'Query', 'Categories', 'Practice Areas'] |
| 276 | const headers = ['Name', 'Query', 'Categories', 'Practice Areas'] |
| 276 | const headers = ['Name', 'Query', 'Categories', 'Practice Areas'] |
| 278 | 'Sample Prompt Name', |
| 279 | 'This is the prompt text that will be saved', |
| 280 | 'Contract Review, Due Diligence', |
| 281 | 'Corporate Law, M&A', |
| Line | Source |
|---|---|
| 56 | { text: 'Legal', value: 'legal' }, |
| 57 | { text: 'Tax', value: 'tax' }, |
| 58 | { text: 'Family law', value: 'family-law' }, |
| 59 | { text: 'Corporate', value: 'corporate' }, |
| 60 | { text: 'Real Estate', value: 'real-estate' }, |
| 61 | { text: 'Intellectual Property', value: 'ip' }, |
| 62 | { text: 'Employment', value: 'employment' }, |
| 63 | { text: 'Immigration', value: 'immigration' }, |
| Line | Source |
|---|---|
| 120 | entityName: 'library table', |
| 129 | entityName: 'library table', |
| 138 | entityName: 'library table', |
| 147 | entityName: 'library table', |
| 156 | entityName: 'library table', |
| Line | Source |
|---|---|
| 437 | defaultValue="Private" |
| 443 | value="Private" |
| 451 | value="Workspace" |
| 461 | value="Harvey" |
| Line | Source |
|---|---|
| 111 | accept: { 'text/csv': ['.csv'] }, |
| 122 | link.download = 'prompt_upload_template.csv' |
| Line | Source |
|---|---|
| 74 | const path = 'library_v2/items${searchParams.size ? '?' + searchParams.toString() : ''}' |
| 114 | const route = 'library/${toLower(kind)}/export' |
| Line | Source |
|---|---|
| 94 | entityName: 'library table', |
| 106 | entityName: 'library table', |
| Line | Source |
|---|---|
| 112 | const effectiveSortBy = filters.sortBy ?? 'best_match' |
| Line | Source |
|---|---|
| 66 | <Route path=":tab" element={<LibraryTabPage />} /> |
| Line | Source |
|---|---|
| 56 | const LOAD_PROMPT_MENU_ENTRY_POINT = 'library load prompt menu' |
| Line | Source |
|---|---|
| 75 | defaultSort="best_match" |
| Line | Source |
|---|---|
| 32 | entryPoint: 'library_prompt_preview', |
| Line | Source |
|---|---|
| 55 | entryPoint: 'library_workflow_preview', |
| Line | Source |
|---|---|
| 1 | export const SEC_HELP_SHORT = '<h4>About</h4> |
| 4 | export const SEC_HELP = '<h4>About</h4> |
| 41 | export const MEMOS_HELP = '<h4>About</h4> |
| 44 | export const EURLEX_HELP = '<h4>About</h4> |
| 47 | export const USA_CASELAW_HELP_SHORT = '<h4>About</h4> |
| 51 | export const FRANCE_CASE_LAW_HELP_SHORT = '<h4>About</h4> |
| 55 | export const USA_CASELAW_HELP = '<h4>Tips for using Case Law</h4> |
| 71 | export const UK_TAX_HELP = '<h4>About</h4> |
| 127 | export const UK_TAX_HELP_PWC = '<h4>About</h4> |
| 185 | export const JAPAN_TAX_HELP = '<h4>About</h4> |
| 232 | export const PWC_DISCLAIMER_TEXT = 'Harvey outputs are intended to provide guidance only, do not constitute legal, tax or other professional |
| 234 | export const TAX_HELP_TEXT = ' |
| 237 | export const TAX_AI_HELP_TEXT = ' |
| 244 | export const AUS_BREACH_REPORTING_HELP = '<h4>About</h4> |
| 247 | export const LEXIS_NEXIS_DISCLAIMER_TEXT = 'AI generated content must be reviewed for accuracy. Unlinked citations in your response indicate |
| 249 | export const CUATRECASAS_HELP = ' |
| Line | Source |
|---|---|
| 53 | const METRIC_PREFIX = '${EventKind.USA_CASELAW}_ARTIFACT' |
| 232 | .replaceAll(/^ *(\d+\.{0,1} *)\n/gm, '<p><b>$1</b></p>\n\n') |
| 233 | .replaceAll(/^ *([A-Z]{1}\.{0,1} *)\n/gm, '<p><b>$1</b></p>\n\n') |
| 238 | '<h2>$1</h2>\n\n' |
| 261 | .replaceAll(/-\d+-/g, '<p><b>$&</b></p>\n\n') |
| 263 | .replaceAll('\n\n', '<br /><br />') |
| 323 | <div className="invisible mb-2 shrink-0 truncate text-xs text-muted transition group-hover:visible lg:visible"> |
| Line | Source |
|---|---|
| 266 | <Badge variant="beta">Beta</Badge> |
| 278 | jurisdiction: 'Select up to 3', |
| 279 | 'legal classification': 'Select up to 1', |
| 280 | 'publication status': 'Select up to 1', |
| 289 | : 'Select at least one' |
| 304 | <TooltipContent className="w-full"> |
| Line | Source |
|---|---|
| 375 | [ResearchArea.TAX]: 'Tax AI Assistant', |
| 377 | [ResearchArea.MEMOS]: 'Memos', |
| 378 | [ResearchArea.EURLEX]: 'EUR-Lex', |
| 379 | [ResearchArea.FRANCECASELAW]: 'French Case Law', |
| 380 | [ResearchArea.AUSBREACHREPORTING]: 'Australia Breach Reporting', |
| 381 | [ResearchArea.CUATRECASAS]: 'Cuatrecasas', |
| Line | Source |
|---|---|
| 222 | <p className="text-sm">Select all</p> |
| Line | Source |
|---|---|
| 44 | const trackSearchUsed = createEventTracker('Shared Spaces Search Used') |
| 46 | 'Customize Space Color Selected' |
| 49 | 'Add Resources Search Used' |
| 52 | 'Add Resources Item Selected' |
| 55 | 'Add Resources Access Level Changed' |
| 58 | 'Add Resources Sort Option Changed' |
| 61 | 'Add Resources View Mode Changed' |
| 64 | 'Publish to Space Popover Opened' |
| 67 | 'Publish to Space Search Used' |
| 70 | 'Publish to Space Access Level Selector Opened' |
| 73 | 'Publish to Space Access Level Changed' |
| Line | Source |
|---|---|
| 31 | light: 'bg-[hsl(var(--space-stone-100))]', |
| 32 | dark: 'bg-[hsl(var(--space-stone-900))]', |
| 35 | light: 'bg-[hsl(var(--space-mist-100))]', |
| 36 | dark: 'bg-[hsl(var(--space-mist-900))]', |
| 39 | light: 'bg-[hsl(var(--space-lilac-100))]', |
| 40 | dark: 'bg-[hsl(var(--space-lilac-900))]', |
| 43 | light: 'bg-[hsl(var(--space-rose-100))]', |
| 44 | dark: 'bg-[hsl(var(--space-rose-900))]', |
| 47 | light: 'bg-[hsl(var(--space-cream-100))]', |
| 48 | dark: 'bg-[hsl(var(--space-cream-900))]', |
| Line | Source |
|---|---|
| 200 | 'image/jpeg': ['.jpg', '.jpeg'], |
| 200 | 'image/jpeg': ['.jpg', '.jpeg'], |
| 201 | 'image/png': ['.png'], |
| 251 | trackDialogSubmitted('Customize Space Dialog', { |
| Line | Source |
|---|---|
| 1 | export const INTERNAL_MEMBER_COLOR = 'bg-[#333F40]' |
| 2 | export const EXTERNAL_MEMBER_COLOR = 'bg-[#755A24]' |
| Line | Source |
|---|---|
| 21 | const WORKFLOW_RUN_PATTERN = '^${BaseAppPath.Assistant}/workflows/([^/]+)' |
| 22 | const ASSISTANT_EVENT_PATTERN = '^${BaseAppPath.Assistant}/(assist|draft|review)/([^/]+)' |
| Line | Source |
|---|---|
| 76 | filterIds: ['harvey_guide'], |
| Line | Source |
|---|---|
| 26 | 'spaces/${spaceId}/resources' |
| Line | Source |
|---|---|
| 137 | 'grid grid-cols-1 gap-3 [@container_(min-width:480px)]:grid-cols-2 [@container_(min-width:720px)]:grid-cols-3 [@container_(min-width:960px)] |
| Line | Source |
|---|---|
| 18 | CREATE_SPACE: '${SPACES_PATHS.BASE}?${SPACES_QUERY_PARAMS.CREATE_SPACE}=true', |
| Line | Source |
|---|---|
| 71 | const SSE_EVENT_PREFIX = 'data: ' |
| 123 | Authorization: 'Bearer ${token}', |
| 124 | Accept: 'text/event-stream', |
| 155 | const defaultMessage = 'A problem occurred while querying the backend (status code ${response.status})' |
| 289 | Authorization: 'Bearer ${token}', |
| 290 | Accept: 'text/event-stream', |
| 490 | const defaultMessage = 'Request failed with status ${xhr.status}: ${xhr.statusText}' |
| Line | Source |
|---|---|
| 156 | const fileTypeLabel = hasUploadedFiles ? 'Uploaded' : 'Attached from Vault' |
| 156 | const fileTypeLabel = hasUploadedFiles ? 'Uploaded' : 'Attached from Vault' |
| 157 | const addMoreLabel = hasVaultFiles ? 'Add more' : 'Upload more' |
| 157 | const addMoreLabel = hasVaultFiles ? 'Add more' : 'Upload more' |
| Line | Source |
|---|---|
| 22 | div.style.left = '-9999px' |
| 23 | div.style.top = '-9999px' |
| Line | Source |
|---|---|
| 37 | const message = '${data.message} (Code: ${ |
| 44 | let stringified = '[Unable to stringify the thrown value]' |
| Line | Source |
|---|---|
| 105 | width = 'w-[300px]', |
| Line | Source |
|---|---|
| 52 | <span className="font-serif text-3xl text-primary-inverse">H</span> |
| Line | Source |
|---|---|
| 7 | const CSS_VAR_NAME = '--info-banner-height' |
| Line | Source |
|---|---|
| 55 | height: 'calc(100vh - var(--large-doc-warning-banner-height, 0px) - ${composerHeight + 48}px)', |
| Line | Source |
|---|---|
| 138 | prefix={<span className="text-[10px]">CM#</span>} |
| Line | Source |
|---|---|
| 17 | const title = customGuidance?.title || 'Guidance' |
| Line | Source |
|---|---|
| 5 | const DARK_MODE_MEDIA_QUERY = '(prefers-color-scheme: dark)' |
| Line | Source |
|---|---|
| 72 | 'Failed to upload ${failedFiles.length} files', |
| Line | Source |
|---|---|
| 13 | import('components/settings/integrations/pages/imanage-oauth-callback-page') |
| Line | Source |
|---|---|
| 67 | error instanceof Error ? error.message : 'Unknown error' |
| Line | Source |
|---|---|
| 23 | export const AUTH_UNAUTHORIZED_EVENT = 'auth:unauthorized' |
| Line | Source |
|---|---|
| 56 | title: 'Update available', |
| 58 | 'Includes enhancements, permission updates, and security fixes. Recommended for all users.', |
| 59 | message: 'New app enhancements are available', |
| 60 | secondaryCtaLabel: 'Refresh later', |
| 61 | ctaLabel: 'Refresh now', |
| Line | Source |
|---|---|
| 54 | export const DYNAMIC_CSP_COOKIE_PREFIX = 'dynamic_csp_urls_' |
| 138 | document.cookie = '${cookieName}=${cookieValue}; path=/; secure; samesite=strict; max-age=${maxAge}' |
| 143 | document.cookie = '${cookieName}=; path=/; secure; samesite=strict; max-age=0' |
| 1480 | 'david-baias.ro', |
| Line | Source |
|---|---|
| 9 | const url = 'event/${eventId}/feedback_sentiments' |
| 17 | const url = 'event/${eventId}/feedback' |
| 28 | const url = 'event/${eventId}/feedback/${feedbackId}' |
| Line | Source |
|---|---|
| 118 | modifiedAfterKey = 'updated_after_exclusive', |
| 121 | createdBeforeKey = 'created_before_exclusive', |
| 122 | createdAfterKey = 'created_after_exclusive', |
| Line | Source |
|---|---|
| 54 | modifiedAfterKey: 'updated_after_exclusive', |
| 56 | createdBeforeKey: 'created_before_exclusive', |
| 57 | createdAfterKey: 'created_after_exclusive', |
| Line | Source |
|---|---|
| 10 | const path = area ? 'research/taxonomy?area=${area}' : 'research/taxonomy' |
| 10 | const path = area ? 'research/taxonomy?area=${area}' : 'research/taxonomy' |
| Line | Source |
|---|---|
| 18 | 'research/usa_caselaw/${id}' + |
| 31 | const url = 'research/court_name_to_citation_string?${params.toString()}' |
| Line | Source |
|---|---|
| 24 | const path = 'library_v2/v1-practice-areas${searchParams.size ? '?${searchParams.toString()}' : ''}' |
| Line | Source |
|---|---|
| 4 | return userInfo.workspace.clientName || 'Team' |
| Line | Source |
|---|---|
| 25 | [BaseAppPath.Assistant]: 'Assistant', |
| 26 | [BaseAppPath.Vault]: 'Vault', |
| 27 | [BaseAppPath.History]: 'History', |
| 28 | [BaseAppPath.Library]: 'Library', |
| 29 | [BaseAppPath.Settings]: 'Settings', |
| 30 | [BaseAppPath.Workflows]: 'Workflows', |
| 35 | [SettingsPath.Workspace]: 'Workspace', |
| 36 | [SettingsPath.ClientMatters]: 'Client Matters', |
| 37 | [SettingsPath.Sharing]: 'Sharing', |
| 38 | [SettingsPath.Models]: 'Models', |
| 39 | [SettingsPath.Knowledge]: 'Knowledge', |
| 40 | [SettingsPath.Profile]: 'Profile', |
| 41 | [SettingsPath.Users]: 'Users', |
| 42 | [SettingsPath.Roles]: 'Roles', |
| 43 | [SettingsPath.Usage]: 'Usage', |
| 44 | [SettingsPath.WorkspaceHistory]: 'Workspace History', |
| 45 | [SettingsPath.WorkspaceProjects]: 'Workspace Projects', |
| 46 | [SettingsPath.Integrations]: 'Integrations', |
| 73 | details: 'Run workflow: ${formattedWorkflowId}', |
| 84 | details: 'Artifact: ${title}', |
| 111 | details: 'Open project: ${title}', |
| 226 | details: 'Open vault: ${projectName}', |
| Line | Source |
|---|---|
| 125 | title: 'Recording Time Limit', |
| 126 | message: 'You have ${remainingSeconds} second${remainingSeconds !== 1 ? 's' : ''} of recording time remaining.', |
| 170 | title: 'Recording Complete', |
| 171 | message: 'Recording time limit reached. Processing your ${Math.floor(RECORDING_LIMITS.MAX_DURATION_SECONDS / 60)}-minute recording…', |
| 208 | let errorMessage = 'An error occurred' |
| 240 | setError('Voice input permission required') |
| 258 | 'Microphone access was denied. Please enable microphone permissions in your browser settings and refresh the page.' |
| 261 | options.onError?.(errorMsg, 'cancelled', 'PermissionDenied') |
| 412 | error instanceof Error ? error.message : 'Failed to start recording' |
| 427 | : 'Unknown' |
| Line | Source |
|---|---|
| 14 | focusFirstItemKey = 'ArrowDown', |
| 15 | focusInputKey = 'ArrowUp', |
| 16 | selector = '[role="menuitem"]:not([data-disabled])', |
| Line | Source |
|---|---|
| 18 | { id: '1', clientName: 'Acme Corporation' }, |
| 19 | { id: '2', clientName: 'Globex Industries' }, |
| 20 | { id: '3', clientName: 'Initech' }, |
| 21 | { id: '4', clientName: 'Umbrella Corporation' }, |
| 22 | { id: '5', clientName: 'Stark Industries' }, |
| Line | Source |
|---|---|
| 102 | clientName: 'TODO: Placeholder', |
| 104 | clientMatterId: 'TODO: Placeholder', |
| Line | Source |
|---|---|
| 9 | cmName: 'Investment Funds & Management', |
| 11 | clientName: 'Acme Inc.', |
| Line | Source |
|---|---|
| 416 | prefix={<span className="text-[10px]">CM#</span>} |
| Line | Source |
|---|---|
| 82 | useKey('Escape', onClose) |
| Line | Source |
|---|---|
| 67 | 'dialogTitle-${titleId ?? generateRandomAlphaNumericId(4)}' |
| 173 | sm: 'max-h-[min(100%,320px)] w-[480px]', |
| 174 | md: 'max-h-[min(100%,432px)] w-[640px]', |
| 175 | lg: 'max-h-[min(100%,600px)] w-[960px]', |
| 176 | full: 'size-full max-h-full max-w-full', |
| 188 | sm: 'max-h-[min(80vh,320px,calc(100vh-2rem))] w-[480px]', |
| 189 | md: 'max-h-[min(80vh,432px,calc(100vh-2rem))] w-[640px]', |
| 190 | lg: 'max-h-[min(80vh,600px,calc(100vh-2rem))] w-[960px]', |
| 191 | full: 'max-h-[calc(100vh-2rem)] w-full max-w-full', |
| 278 | const openOverlay = target.closest('[data-state="open"]') |
| Line | Source |
|---|---|
| 11 | 'group-hover:[&_button]:bg-hy-bg-base-hover group-hover:[&_button]:hover:bg-hy-bg-input-hover', |
| Line | Source |
|---|---|
| 56 | const AGG_KEY = endpoint === 'queries/graph' ? '__total_queries__' : 'value' |
| 198 | <Tabs defaultValue="Month"> |
| 201 | value="Day" |
| 207 | value="Month" |
| 213 | value="Year" |
| Line | Source |
|---|---|
| 52 | export const TOTAL_KEY = 'All types' |
| 308 | value: '__select_all__', |
| Line | Source |
|---|---|
| 183 | ? 'user_stats_${format(selectedDateRange.from, 'P')}-${format( |
| 187 | : 'user_stats.csv' |
| Line | Source |
|---|---|
| 212 | <DisplayButton className="w-8">Esc</DisplayButton> |
| 480 | {isMac ? '⌘ K' : 'Ctrl+K'} |
| 480 | {isMac ? '⌘ K' : 'Ctrl+K'} |
| Line | Source |
|---|---|
| 64 | export const HELP_CENTER_CLICKED_EVENT = 'Help Center Clicked' |
| 86 | filterIds: ['harvey_guide'], |
| Line | Source |
|---|---|
| 105 | name: 'New Workflow', |
| Line | Source |
|---|---|
| 30 | 'pointer-events-none absolute left-1/2 top-1/2 size-5 -translate-x-1/2 -translate-y-1/2 group-hover/sidebar:opacity-0' |
| Line | Source |
|---|---|
| 87 | const preference1 = isSwapped ? 'B' : 'A' |
| 87 | const preference1 = isSwapped ? 'B' : 'A' |
| 88 | const preference2 = isSwapped ? 'A' : 'B' |
| 88 | const preference2 = isSwapped ? 'A' : 'B' |
| 259 | newPreference = 'Tie' |
| Line | Source |
|---|---|
| 24 | <Button onClick={controlsConfig.onSkip} variant="ghost"> |
| 29 | <Button onClick={controlsConfig.onClose} variant="ghost"> |
| 37 | > |
| 44 | > |
| Line | Source |
|---|---|
| 38 | <span className="sr-only">Close</span> |
| Line | Source |
|---|---|
| 245 | ? 'vault/history/workspace/${eventId}' |
| 246 | : 'vault/history/user_async/${eventId}' |
| 248 | ? 'workspace/history/${eventId}' |
| 249 | : 'user/history/${eventId}' |
| Line | Source |
|---|---|
| 37 | 'audio/webm;codecs=opus', |
| 38 | 'audio/webm', |
| 39 | 'audio/ogg;codecs=opus', |
| 40 | 'audio/mp4', |
| Line | Source |
|---|---|
| 314 | export const SHARE_SUCCESS_MESSAGE = 'Access updated successfully' |
| 315 | export const SHARE_ERROR_MESSAGE = 'Failed to update access' |
| Line | Source |
|---|---|
| 1 | declare module '@perlego/text-highlighter' |
| Line | Source |
|---|---|
| 7 | export const MD_MEDIA_QUERY = '(min-width: 768px)' |
| Line | Source |
|---|---|
| 17 | export const KNOWLEDGE_BASE_SOURCE_TYPE = 'Knowledge base' |
| 18 | export const VAULT_SOURCE_TYPE = 'Vault' |
| Line | Source |
|---|---|
| 40 | const AppRouter = lazy(() => import('components/app-router')) |
| Line | Source |
|---|---|
| 197 | void import('@ag-grid-enterprise/core').then(({ LicenseManager }) => { |
| Line | Source |
|---|---|
| 26 | 'Files are still uploading. Are you sure you want to leave?' |
| Line | Source |
|---|---|
| 53 | label: 'Client Matter', |
| Line | Source |
|---|---|
| 4 | const unknownErrorMessage = 'Sorry, something went wrong with your operation' |
| Line | Source |
|---|---|
| 27 | import('@axe-core/react') |
| Line | Source |
|---|---|
| 11 | parameter_a: z.string().catch('default_a'), |
| Line | Source |
|---|---|
| 34 | error: error instanceof Error ? error.message : 'Unknown error', |