BibexPy 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bibex_core/MergeDB.py +1189 -0
- bibex_core/__init__.py +13 -0
- bibex_core/modules/__init__.py +35 -0
- bibex_core/modules/api_utils.py +1172 -0
- bibex_core/modules/c1_utils.py +423 -0
- bibex_core/modules/file_utils.py +71 -0
- bibex_core/modules/ml_utils.py +332 -0
- bibex_core/modules/post_process.py +50 -0
- bibex_core/modules/stats_utils.py +216 -0
- bibex_core/scp2xlsx.py +235 -0
- bibex_core/wos2xlsx.py +159 -0
- bibex_core/xlsx2vos.py +185 -0
- bibexpy/__init__.py +9 -0
- bibexpy/__main__.py +6 -0
- bibexpy/_server/__init__.py +1 -0
- bibexpy/_server/config.py +92 -0
- bibexpy/_server/jobs/__init__.py +3 -0
- bibexpy/_server/jobs/runner.py +301 -0
- bibexpy/_server/main.py +211 -0
- bibexpy/_server/models/__init__.py +0 -0
- bibexpy/_server/models/project.py +25 -0
- bibexpy/_server/routers/__init__.py +0 -0
- bibexpy/_server/routers/audit.py +65 -0
- bibexpy/_server/routers/convert.py +101 -0
- bibexpy/_server/routers/disambiguate.py +177 -0
- bibexpy/_server/routers/downloads.py +26 -0
- bibexpy/_server/routers/enrich.py +42 -0
- bibexpy/_server/routers/export.py +116 -0
- bibexpy/_server/routers/export_folder.py +97 -0
- bibexpy/_server/routers/filter.py +131 -0
- bibexpy/_server/routers/jobs.py +72 -0
- bibexpy/_server/routers/merge.py +437 -0
- bibexpy/_server/routers/prepare.py +241 -0
- bibexpy/_server/routers/projects.py +49 -0
- bibexpy/_server/routers/quality.py +288 -0
- bibexpy/_server/routers/records.py +204 -0
- bibexpy/_server/routers/report.py +111 -0
- bibexpy/_server/routers/settings.py +383 -0
- bibexpy/_server/routers/system.py +209 -0
- bibexpy/_server/routers/tools.py +257 -0
- bibexpy/_server/routers/upload.py +110 -0
- bibexpy/_server/services/__init__.py +0 -0
- bibexpy/_server/services/analyses.py +364 -0
- bibexpy/_server/services/audit.py +340 -0
- bibexpy/_server/services/bibex_adapter.py +47 -0
- bibexpy/_server/services/bibtex_writer.py +104 -0
- bibexpy/_server/services/converter.py +205 -0
- bibexpy/_server/services/disambiguation/__init__.py +19 -0
- bibexpy/_server/services/disambiguation/blocking.py +581 -0
- bibexpy/_server/services/disambiguation/cache.py +47 -0
- bibexpy/_server/services/disambiguation/deepseek_client.py +203 -0
- bibexpy/_server/services/disambiguation/orcid.py +261 -0
- bibexpy/_server/services/disambiguation/pipeline.py +985 -0
- bibexpy/_server/services/disambiguation/similarity.py +91 -0
- bibexpy/_server/services/enricher.py +338 -0
- bibexpy/_server/services/exporter.py +112 -0
- bibexpy/_server/services/filter_engine.py +300 -0
- bibexpy/_server/services/merger.py +202 -0
- bibexpy/_server/services/methodology.py +102 -0
- bibexpy/_server/services/report_export.py +300 -0
- bibexpy/_server/services/ris_writer.py +62 -0
- bibexpy/_server/services/smart_merger.py +967 -0
- bibexpy/_server/services/storage.py +165 -0
- bibexpy/_web/404/index.html +1 -0
- bibexpy/_web/404.html +1 -0
- bibexpy/_web/_next/static/chunks/117-7ad5186126fa076d.js +2 -0
- bibexpy/_web/_next/static/chunks/156-75beffb8ae92a7f3.js +1 -0
- bibexpy/_web/_next/static/chunks/169-301c04fcec22686f.js +4 -0
- bibexpy/_web/_next/static/chunks/2-ecc1c36a5632ac61.js +1 -0
- bibexpy/_web/_next/static/chunks/244-be343e0f8aa00fb5.js +1 -0
- bibexpy/_web/_next/static/chunks/367-b7457c2b95f6932b.js +1 -0
- bibexpy/_web/_next/static/chunks/382-9cd163eed632e241.js +1 -0
- bibexpy/_web/_next/static/chunks/392-afa8bfa4c1a9893d.js +1 -0
- bibexpy/_web/_next/static/chunks/507-63607ded9f83c1aa.js +1 -0
- bibexpy/_web/_next/static/chunks/624-cae565632f47217d.js +1 -0
- bibexpy/_web/_next/static/chunks/739-a00c6b9c0f11813e.js +1 -0
- bibexpy/_web/_next/static/chunks/862-8e1bd5f93c082c02.js +1 -0
- bibexpy/_web/_next/static/chunks/app/_not-found/page-873ba59b5eb7c342.js +1 -0
- bibexpy/_web/_next/static/chunks/app/layout-0d5fc68ac8971a04.js +1 -0
- bibexpy/_web/_next/static/chunks/app/page-cf2bea5edc74459a.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/convert/page-ab6dd645ae113b64.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/disambiguate/page-dd98482cc47344e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/enrich/page-4727e431468514e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/export/page-f9005d164bb22cb0.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/layout-07755fda55b3ae1f.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/merge/page-45b95318ea7beccf.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/records/page-bfad80457da9eb0b.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/report/page-f05767e74158e995.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/upload/page-8df78ca9cdecbcb8.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/page-99960711ac6a13e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/settings/page-002df809d6c5a227.js +1 -0
- bibexpy/_web/_next/static/chunks/app/tools/page-27eee1c6a590859f.js +1 -0
- bibexpy/_web/_next/static/chunks/fd9d1056-f2718be92181f426.js +1 -0
- bibexpy/_web/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
- bibexpy/_web/_next/static/chunks/main-app-d138a6e2f8c847f6.js +1 -0
- bibexpy/_web/_next/static/chunks/main-c4b9ddbf514503ef.js +1 -0
- bibexpy/_web/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
- bibexpy/_web/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
- bibexpy/_web/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- bibexpy/_web/_next/static/chunks/webpack-c81f7fd28659d64f.js +1 -0
- bibexpy/_web/_next/static/css/1c4638f3e39cf127.css +3 -0
- bibexpy/_web/_next/static/ypx2IQAkZiSaFiKWnzZGB/_buildManifest.js +1 -0
- bibexpy/_web/_next/static/ypx2IQAkZiSaFiKWnzZGB/_ssgManifest.js +1 -0
- bibexpy/_web/images/PROMPTS.md +83 -0
- bibexpy/_web/images/about-illustration.png +0 -0
- bibexpy/_web/images/authors/alperen-sahin.jpg +0 -0
- bibexpy/_web/images/authors/burak-can-kara.jpg +0 -0
- bibexpy/_web/images/authors/taskin-dirsehan.jpg +0 -0
- bibexpy/_web/images/bibexpy-logo-full.png +0 -0
- bibexpy/_web/images/bibexpy-logo-header.png +0 -0
- bibexpy/_web/images/bibexpy-logo-in.png +0 -0
- bibexpy/_web/images/bibexpy-logo.webp +0 -0
- bibexpy/_web/images/hero-illustration.png +0 -0
- bibexpy/_web/images/loader.gif +0 -0
- bibexpy/_web/images/workflow-diagram.png +0 -0
- bibexpy/_web/index.html +1 -0
- bibexpy/_web/index.txt +11 -0
- bibexpy/_web/projects/_/convert/index.html +1 -0
- bibexpy/_web/projects/_/convert/index.txt +12 -0
- bibexpy/_web/projects/_/disambiguate/index.html +1 -0
- bibexpy/_web/projects/_/disambiguate/index.txt +12 -0
- bibexpy/_web/projects/_/enrich/index.html +1 -0
- bibexpy/_web/projects/_/enrich/index.txt +12 -0
- bibexpy/_web/projects/_/export/index.html +1 -0
- bibexpy/_web/projects/_/export/index.txt +12 -0
- bibexpy/_web/projects/_/merge/index.html +1 -0
- bibexpy/_web/projects/_/merge/index.txt +12 -0
- bibexpy/_web/projects/_/records/index.html +1 -0
- bibexpy/_web/projects/_/records/index.txt +12 -0
- bibexpy/_web/projects/_/report/index.html +1 -0
- bibexpy/_web/projects/_/report/index.txt +12 -0
- bibexpy/_web/projects/_/upload/index.html +1 -0
- bibexpy/_web/projects/_/upload/index.txt +12 -0
- bibexpy/_web/projects/index.html +1 -0
- bibexpy/_web/projects/index.txt +11 -0
- bibexpy/_web/settings/index.html +1 -0
- bibexpy/_web/settings/index.txt +11 -0
- bibexpy/_web/tools/README.md +65 -0
- bibexpy/_web/tools/bibexcel.svg +6 -0
- bibexpy/_web/tools/bibliometrix.png +0 -0
- bibexpy/_web/tools/biblioshiny.svg +12 -0
- bibexpy/_web/tools/citavi.svg +6 -0
- bibexpy/_web/tools/citespace.svg +7 -0
- bibexpy/_web/tools/citnetexplorer.svg +8 -0
- bibexpy/_web/tools/endnote.svg +6 -0
- bibexpy/_web/tools/excel.svg +1 -0
- bibexpy/_web/tools/gephi.svg +66 -0
- bibexpy/_web/tools/histcite.svg +7 -0
- bibexpy/_web/tools/index.html +1 -0
- bibexpy/_web/tools/index.txt +11 -0
- bibexpy/_web/tools/jabref.svg +122 -0
- bibexpy/_web/tools/latex.svg +1 -0
- bibexpy/_web/tools/mendeley.svg +1 -0
- bibexpy/_web/tools/openrefine.svg +15 -0
- bibexpy/_web/tools/overleaf.svg +1 -0
- bibexpy/_web/tools/papers.svg +7 -0
- bibexpy/_web/tools/powerbi.svg +1 -0
- bibexpy/_web/tools/python.svg +1 -0
- bibexpy/_web/tools/r.svg +1 -0
- bibexpy/_web/tools/refworks.svg +5 -0
- bibexpy/_web/tools/scite.svg +5 -0
- bibexpy/_web/tools/tableau.svg +1 -0
- bibexpy/_web/tools/vosviewer.png +0 -0
- bibexpy/_web/tools/zotero.svg +1 -0
- bibexpy/cli.py +242 -0
- bibexpy-2.0.0.dist-info/METADATA +105 -0
- bibexpy-2.0.0.dist-info/RECORD +171 -0
- bibexpy-2.0.0.dist-info/WHEEL +5 -0
- bibexpy-2.0.0.dist-info/entry_points.txt +2 -0
- bibexpy-2.0.0.dist-info/licenses/LICENSE +674 -0
- bibexpy-2.0.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[244],{7855:function(e,a,t){t.d(a,{NS:function(){return o},Pr:function(){return n},hi:function(){return d},qk:function(){return l},td:function(){return c}});let i=function(){{let{protocol:e,hostname:a,port:t}=window.location;return/^300\d$/.test(t)?"".concat(e,"//").concat(a,":8001/api"):"/api"}}(),r=i.replace(/\/api$/,""),l="".concat(r,"/docs");function o(e,a){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"errors.generic",i=a instanceof Error?a.message:"string"==typeof a?a:"";if(!i)return e(t);let r=i.replace(/^\d{3}:\s*/,""),l=r.match(/^([a-z][a-z0-9_]*)(?::\s*([\s\S]*))?$/);if(l){let a="errors.".concat(l[1]),t=e(a);if(t!==a)return l[2]?"".concat(t,": ").concat(l[2]):t}return r||e(t)}function n(e,a){var t,i;if(a.title_key){let i=e(a.title_key,null!==(t=a.title_params)&&void 0!==t?t:void 0);if(i!==a.title_key)return i}let r=function(e,a,t){if(!a)return null;let i=null!=t?t:{},r=e=>String(null!=e?e:"");switch(a){case"analysis_activate":return null!=i.label?e("audit.titles.analysisActivated",{label:r(i.label)}):null;case"analysis_delete":return null!=i.label?e("audit.titles.analysisDeleted",{label:r(i.label)}):null;case"export":if(null!=i.deleted)return e("audit.titles.exportDeleted",{name:r(i.deleted)});if(null!=i.output)return e("audit.titles.exported",{fmt:r(i.format).toUpperCase(),name:r(i.output)});return null;case"filter_save":if("delete"===i.action)return e("audit.titles.presetDeleted",{name:r(i.name)});return null!=i.name?e("audit.titles.presetSaved",{name:r(i.name)}):null;case"upload":if("delete"===i.action)return e("audit.titles.fileDeleted",{name:r(i.name)});return Array.isArray(i.files)?e("audit.titles.filesUploaded",{n:i.files.length}):null;case"convert":return null!=i.output?e("audit.titles.converted",{name:r(i.output)}):null;case"merge":return e("audit.titles.merge",{method:r(i.method||"smart")});default:return null}}(e,a.kind,null!==(i=a.details)&&void 0!==i?i:void 0);return null!=r?r:a.title}async function s(e,a){let t=await fetch("".concat(i).concat(e),{...a,headers:{...null==a||!a.body||a.body instanceof FormData?{}:{"Content-Type":"application/json"},...(null==a?void 0:a.headers)||{}},cache:"no-store"});if(!t.ok){let e=t.statusText;try{e=(await t.json()).detail||e}catch(e){}throw Error("".concat(t.status,": ").concat(e))}if(204!==t.status)return t.json()}let d={listProjects:()=>s("/projects"),createProject:(e,a)=>s("/projects",{method:"POST",body:JSON.stringify({name:e,description:a})}),getProject:e=>s("/projects/".concat(e)),deleteProject:e=>s("/projects/".concat(e),{method:"DELETE"}),listFiles:e=>s("/projects/".concat(e,"/files")),uploadFiles:(e,a)=>{let t=new FormData;for(let e of a)t.append("files",e,e.name);return s("/projects/".concat(e,"/files"),{method:"POST",body:t})},deleteFile:(e,a)=>s("/projects/".concat(e,"/files/").concat(encodeURIComponent(a)),{method:"DELETE"}),listProcessed:e=>s("/projects/".concat(e,"/convert/processed")),csvToXlsx:function(e,a){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"scopus_merged.xlsx";return s("/projects/".concat(e,"/convert/csv-to-xlsx"),{method:"POST",body:JSON.stringify({files:a,output:t})})},wosToXlsx:function(e,a){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"wos_merged.xlsx";return s("/projects/".concat(e,"/convert/wos-to-xlsx"),{method:"POST",body:JSON.stringify({files:a,output:t})})},xlsxToWosTxt:(e,a,t)=>s("/projects/".concat(e,"/convert/xlsx-to-wos-txt"),{method:"POST",body:JSON.stringify({file:a,output:t})}),xlsxToTsv:(e,a,t)=>s("/projects/".concat(e,"/convert/xlsx-to-tsv"),{method:"POST",body:JSON.stringify({file:a,output:t})}),downloadUrl:(e,a)=>"".concat(i,"/projects/").concat(e,"/convert/download/").concat(encodeURIComponent(a)),startMerge:e=>s("/projects/".concat(e,"/merge"),{method:"POST",body:JSON.stringify({})}),listBorderline:e=>s("/projects/".concat(e,"/merge/borderline")),decideBorderline:(e,a)=>s("/projects/".concat(e,"/merge/borderline/decide"),{method:"POST",body:JSON.stringify({decisions:a})}),listMerged:e=>s("/projects/".concat(e,"/merge/results")),mergeSummary:e=>s("/projects/".concat(e,"/merge/summary")),listAnalyses:e=>s("/projects/".concat(e,"/merge/analyses")),activateAnalysis:(e,a)=>s("/projects/".concat(e,"/merge/analyses/").concat(encodeURIComponent(a),"/activate"),{method:"POST"}),deleteAnalysis:(e,a)=>s("/projects/".concat(e,"/merge/analyses/").concat(encodeURIComponent(a)),{method:"DELETE"}),getJob:e=>s("/jobs/".concat(e)),listJobs:e=>s("/jobs".concat(e?"?project_id=".concat(e):"")),cancelJob:e=>s("/jobs/".concat(e,"/cancel"),{method:"POST"}),jobStreamUrl:e=>"".concat(i,"/jobs/").concat(e,"/stream"),downloadFromUrl:(e,a,t)=>"".concat(i,"/projects/").concat(e,"/download/").concat(a,"/").concat(encodeURIComponent(t)),filterRecords:(e,a,t)=>s("/projects/".concat(e,"/filter"),{method:"POST",body:JSON.stringify(a),signal:t}),listPresets:e=>s("/projects/".concat(e,"/filter/presets")),savePreset:(e,a,t)=>s("/projects/".concat(e,"/filter/presets"),{method:"POST",body:JSON.stringify({name:a,spec:t})}),deletePreset:(e,a)=>s("/projects/".concat(e,"/filter/presets/").concat(encodeURIComponent(a)),{method:"DELETE"}),listExports:e=>s("/projects/".concat(e,"/export")),createExport:function(e,a,t,i){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"rename";return s("/projects/".concat(e,"/export"),{method:"POST",body:JSON.stringify({fmt:a,filter:t,output_name:i,if_exists:r})})},deleteExport:(e,a)=>s("/projects/".concat(e,"/export/").concat(encodeURIComponent(a)),{method:"DELETE"}),toolsFormats:()=>s("/tools/formats"),toolsConvert:async(e,a,t,r,l)=>{let o=new FormData;o.append("file",e,e.name),o.append("source_format",a),o.append("target_format",t),r&&o.append("output_name",r);let n=await fetch("".concat(i,"/tools/convert"),{method:"POST",body:o,signal:l});if(!n.ok){let e=n.statusText;try{e=(await n.json()).detail||e}catch(e){}throw Error("".concat(n.status,": ").concat(e))}let s=await n.blob(),d=(n.headers.get("content-disposition")||"").match(/filename="?([^";]+)"?/);return{blob:s,filename:d?d[1]:"converted_".concat(Date.now()),records:parseInt(n.headers.get("x-records-count")||"0",10),columns:parseInt(n.headers.get("x-columns-count")||"0",10)}},prepareStatus:e=>s("/projects/".concat(e,"/prepare/status")),prepare:e=>s("/projects/".concat(e,"/prepare"),{method:"POST"}),resetPrepare:e=>s("/projects/".concat(e,"/prepare/reset"),{method:"POST"}),deleteProcessedFile:(e,a)=>s("/projects/".concat(e,"/prepare/processed/").concat(encodeURIComponent(a)),{method:"DELETE"}),suggestFolders:e=>s("/projects/".concat(e,"/export-folder/suggest")),copyToFolder:(e,a,t)=>s("/projects/".concat(e,"/export-folder"),{method:"POST",body:JSON.stringify({files:a,target_folder:t,create_if_missing:!0})}),startApiEnrich:e=>s("/projects/".concat(e,"/enrich/api"),{method:"POST",body:JSON.stringify({})}),startFillAll:e=>s("/projects/".concat(e,"/enrich/fill-all"),{method:"POST"}),disambiguateStatus:e=>s("/projects/".concat(e,"/disambiguate/status")),startAuthorDisambiguation:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",t=arguments.length>2?arguments[2]:void 0;return s("/projects/".concat(e,"/disambiguate/authors"),{method:"POST",body:JSON.stringify({mode:a,max_records:null!=t?t:null})})},startAffiliationDisambiguation:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",t=arguments.length>2?arguments[2]:void 0;return s("/projects/".concat(e,"/disambiguate/affiliations"),{method:"POST",body:JSON.stringify({mode:a,max_records:null!=t?t:null})})},startCountryStandardization:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",t=arguments.length>2?arguments[2]:void 0;return s("/projects/".concat(e,"/disambiguate/countries"),{method:"POST",body:JSON.stringify({mode:a,max_records:null!=t?t:null})})},startOrgRollup:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto",t=arguments.length>2?arguments[2]:void 0;return s("/projects/".concat(e,"/disambiguate/organizations"),{method:"POST",body:JSON.stringify({mode:a,max_records:null!=t?t:null})})},getProposals:(e,a)=>s("/projects/".concat(e,"/disambiguate/proposals/").concat(a)),applyClusters:function(e,a,t){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return s("/projects/".concat(e,"/disambiguate/apply"),{method:"POST",body:JSON.stringify({kind:a,approved:t,approved_splits:i})})},restoreSnapshot:(e,a)=>s("/projects/".concat(e,"/disambiguate/restore"),{method:"POST",body:JSON.stringify({snapshot:a})}),qualityStats:e=>s("/projects/".concat(e,"/quality/stats")),qualityOverviewUrl:(e,a)=>"".concat(i,"/projects/").concat(e,"/quality/overview?fmt=").concat(a),lastFillReport:e=>s("/projects/".concat(e,"/quality/last-fill-report")),qualityCharts:e=>s("/projects/".concat(e,"/quality/charts")),deleteRecords:(e,a)=>s("/projects/".concat(e,"/records/delete"),{method:"POST",body:JSON.stringify(a)}),listSnapshots:e=>s("/projects/".concat(e,"/records/snapshots")),restoreRecordSnapshot:(e,a)=>s("/projects/".concat(e,"/records/restore-snapshot"),{method:"POST",body:JSON.stringify({snapshot:a})}),updateRecord:(e,a)=>s("/projects/".concat(e,"/records/update"),{method:"POST",body:JSON.stringify(a)}),listAudit:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return s("/projects/".concat(e,"/audit?limit=").concat(a))},auditSummary:e=>s("/projects/".concat(e,"/audit/summary")),addAuditEntry:(e,a)=>s("/projects/".concat(e,"/audit"),{method:"POST",body:JSON.stringify(a)}),clearAudit:e=>s("/projects/".concat(e,"/audit"),{method:"DELETE"}),auditReportUrl:e=>"".concat(i,"/projects/").concat(e,"/audit/report.md"),reportLogUrl:(e,a)=>"".concat(i,"/projects/").concat(e,"/report/log.").concat(a),methodologyUrl:(e,a)=>"".concat(i,"/projects/").concat(e,"/report/methodology.").concat(a),getMethodology:e=>s("/projects/".concat(e,"/report/methodology")),generateMethodology:e=>s("/projects/".concat(e,"/report/methodology"),{method:"POST"}),getSettings:()=>s("/settings"),updateSettings:e=>s("/settings",{method:"PUT",body:JSON.stringify({updates:e})}),validatePath:function(e){let a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return s("/settings/validate-path",{method:"POST",body:JSON.stringify({path:e,create_if_missing:a})})},browseFolder:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return s("/system/browse".concat(e?"?path=".concat(encodeURIComponent(e)):""))},findFolderByName:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;return s("/system/find-by-name?name=".concat(encodeURIComponent(e),"&limit=").concat(a))}};function c(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):e<1073741824?"".concat((e/1048576).toFixed(1)," MB"):"".concat((e/1073741824).toFixed(2)," GB")}},4502:function(e,a,t){t.d(a,{cn:function(){return l}});var i=t(1994),r=t(3335);function l(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return(0,r.m6)((0,i.W)(a))}},3554:function(e,a,t){t.d(a,{I18nProvider:function(){return c},QT:function(){return u},NT:function(){return m}});var i=t(7437),r=t(2265);let l={en:JSON.parse('{"common":{"loading":"Loading…","save":"Save","cancel":"Cancel","delete":"Delete","confirm":"Confirm","edit":"Edit","close":"Close","back":"Back","next":"Next","yes":"Yes","no":"No","ok":"OK","apply":"Apply","reset":"Reset","actions":"Actions","active":"Active","inactive":"Inactive","file":"file","files":"files","record":"record","records":"records","search":"Search","refresh":"Refresh","download":"Download","upload":"Upload","history":"History","noData":"No data","error":"Error","success":"Success","warning":"Warning","info":"Info","all":"All","none":"None","selected":"selected","total":"Total","size":"Size","date":"Date","name":"Name","type":"Type","status":"Status","createdAt":"Created","updatedAt":"Updated","showMore":"Show more","showLess":"Show less","show":"Show","hide":"Hide","open":"Open","more":"More","less":"Less","details":"Details","summary":"Summary","step":"Step","of":"of","copy":"Copy","footerTagline":"Self-hosted, reproducible bibliometric data preparation for Web of Science & Scopus.","footerCite":"Cite →","footerResources":"Resources","footerProject":"Project","footerDocs":"Documentation","footerPaper":"Paper \xb7 SoftwareX","footerWebsite":"Website","footerContact":"Contact","footerCitation":"Kara, Şahin & Dirsehan (2025) \xb7 SoftwareX","footerRights":"All rights reserved.","nextStep":"Next step","prevStep":"Previous step","confirmTitle":"Are you sure?"},"nav":{"data":"Preparing","lockNeedPrepare":"Prepare the data in step 1 first","lockNeedMerge":"Run Smart Merge in step 2 first","lockNeedAdvanced":"Unlocked via \'Advanced Editing\' after merge","analyses":"Data & Merge","records":"Records & Filtering","ai":"Harmonization","export":"Export","projects":"Projects","projectsHint":"Workspaces","settings":"Settings","settingsHint":"System","audit":"Audit log","report":"Report","tools":"Tools","toolsHint":"Quick convert","source":"Source","sourceHint":"GitHub v1","help":"Help","apiHint":"Backend docs","home":"Home","panel":{"workspaces":"Workspaces","system":"System","resources":"Resources","locale":"Language"}},"tools":{"title":"Tools","subtitle":"Standalone utilities — no project required.","converterTitle":"Format Converter","converterSubtitle":"Upload one file, pick a target format, download the converted file. Works without creating a project — handy for ad-hoc conversions or for files you\'ve edited manually in Excel.","step1Title":"1. Upload file","step1Hint":"Drag & drop or click. Accepted: .txt .csv .tsv .xlsx (up to ~100 MB)","dropOrClick":"Drop a file or click to browse","dropToUpload":"Drop to upload","fileSelected":"Selected: {name} ({size})","step2Title":"2. Source format","step2Hint":"What kind of file did you upload?","step3Title":"3. Target format","step3Hint":"What format do you want to convert to?","outputName":"Output filename (optional)","outputNamePlaceholder":"e.g. my_dataset","convertBtn":"Convert & download","converting":"Converting…","successMsg":"Converted {records} records \xb7 {columns} columns","downloadAgain":"Download again","resetBtn":"Convert another file","errTitle":"Conversion failed","noFileSelected":"Please select a file first","fileTooBig":"File too large (max 100 MB)","section":{"convert":"Convert","ecosystem":"Tool ecosystem","ecosystemHint":"Common tools that consume each output format. Hover any chip for a one-line description."},"sourceFormats":{"wos":"WoS plain text","scopus_csv":"Scopus CSV","xlsx":"Excel (.xlsx)","csv":"Plain CSV","tsv":"TSV / tab-separated"},"targetFormats":{"wos":"WoS plain text","vos":"VOSviewer TSV","bib":"BibTeX","ris":"RIS","xlsx":"Excel (.xlsx)","csv":"CSV","tsv":"TSV"}},"home":{"title":"BibexPy V2","subtitle":"Bibliometric data preparation","heroTitle":"Harmonizing the Bibliometric Symphony of Scopus and Web of Science","heroSubtitle":"BibexPy V2 turns raw database exports into clean, deduplicated and enrichment-ready datasets for VOSviewer, Biblioshiny and the wider bibliometrics workflow.","heroChecks":["100% self-hosted|Runs on your machine — no cloud upload","Open-source workflow|GPL-3.0 — inspect, fork, extend","Audit-friendly outputs|Every step logged for methods sections"],"openProjects":"Open Projects","experimental":"experimental","workflowTitle":"Workflow","tagline":"Scopus + Web of Science \xb7 DOI-based deduplication \xb7 Multi-stage matching","features":["Conversion|CSV ↔ XLSX ↔ WoS TXT, BibTeX, RIS, VOSviewer.","Merging|DOI-based deduplication, Simple and Enhanced merge.","Rich filter|Year, journal, author, category, full-text, quality / missing data.","API + ML Enrichment|CrossRef, OpenAlex, Scopus, Unpaywall + TF-IDF predictions.","AI Disambiguation*|DeepSeek LLM for author name + affiliation normalization.","Export|WoS, VOSviewer, BibTeX, RIS, CSV, XLSX — filtered subset supported."],"workflow":["Project|Create a local workspace that keeps raw files, analyses, exports and audit history together.","Prepare|Upload Scopus CSV, Web of Science TXT or spreadsheets; BibexPy consolidates source tables automatically.","Merge Analyses|Run Simple, Enhanced or Smart matching as independent analyses and keep older runs available.","Records & Quality|Review the active dataset, filter records, inspect missing fields and manage snapshots.","Harmonize|Use API, ML and guided AI review to standardize metadata, authors and affiliations.","Export|Create tool-ready WoS, VOSviewer, Biblioshiny, BibTeX, RIS, CSV or Excel outputs.","Report|Keep an operation report and audit trail attached to the project."],"workflowHeadline":"From local project workspace to traceable bibliometric outputs.","workflowBody":"The current workflow centers on one self-hosted project: prepare files, create repeatable merge analyses, review the active dataset, harmonize metadata, export to analysis tools, and keep an audit report.","ctaTitle":"Start preparing your dataset","ctaBody":"Create a new project, upload Scopus CSV and Web of Science TXT files, and let BibexPy do the heavy lifting — deduplication, field merging, enrichment.","ctaButton":"Start a project","ctaSecondary":"Just need a quick conversion? Try the standalone {tools}.","ctaSecondaryLink":"Tools","toolsTitle":"Need only a quick conversion?","toolsBody":"The Tools page is a lightweight utility area for one-off format conversion. Use it when you do not need a full project, merge history or analysis workspace.","toolsLink":"Open Tools","capabilityTitle":"Prepare, reconcile, export.","capabilityBody":"The homepage now leads with the work BibexPy actually removes from the researcher: file cleanup, source matching and reliable exports.","capabilities":["Prepare|Clean source exports, validate columns and keep every raw file traceable.","Reconcile|Merge records with DOI logic, field harmonization and lost-record tracking.","Export|Deliver clean datasets to VOSviewer, Biblioshiny, reference managers and spreadsheets."],"assurances":["Reproducible|Every operation leaves an audit trail that can be reported in a methods section.","Local and private|Raw datasets stay on the machine unless you explicitly choose an external API.","Self-hosted|FastAPI and Next.js run as your own local research workspace.","Extensible|Add enrichment services, review rules and export targets as projects mature."],"aboutTitle":"What is BibexPy?","aboutBody":"BibexPy is a self-hosted, open-source tool that automates the most tedious part of any bibliometric study: <strong>data preparation</strong>. It harmonizes Scopus and Web of Science records — two databases that describe the same publications with different field codes, formats and naming conventions — and exports clean datasets ready for VOSviewer, bibliometrix, CiteSpace and any reference manager.","aboutPoint1Title":"Data preparation first","aboutPoint1Body":"Every bibliometric paper spends ~40% of its time on data cleanup. BibexPy handles the deduplication, field merging, lost-record tracking and audit-trail generation, so you can focus on analysis.","aboutPoint2Title":"Reproducible by design","aboutPoint2Body":"Every merge, filter, enrichment and disambiguation step is captured in an audit log. Snapshots are taken before destructive operations. Methodologically transparent — referee-friendly.","aboutPoint3Title":"Self-hosted, no cloud","aboutPoint3Body":"Your raw data never leaves your machine. Backend (FastAPI) + Frontend (Next.js) run locally. Optional API/LLM calls are opt-in and only sent for specific records.","citationTitle":"Cite BibexPy","citationBody":"If you use BibexPy in academic work, please cite our SoftwareX paper:","citationApa":"Kara, B. C., Şahin, A., & Dirsehan, T. (2025). BibexPy: Harmonizing the bibliometric symphony of Scopus and Web of Science. SoftwareX, 30, 102098.","citationDoi":"doi.org/10.1016/j.softx.2025.102098","citationOpenPaper":"Open paper","citationCopyBib":"Copy BibTeX","citationCopied":"Copied!","authorsTitle":"Authors","authorsBody":"BibexPy is developed and maintained by:","authors":["Burak Can Kara, Ph.D.|Department of Construction, Merzifon Vocational School, Amasya University|0000-0002-6933-0759|burak-can-kara","Alperen Şahin, Ph.D.|Electronic Commerce and Management Department, Istanbul Esenyurt University|0000-0001-9563-6543|alperen-sahin","Taşkın Dirsehan, Ph.D.|Department of Business Administration, Marmara University|0000-0002-3599-0951|taskin-dirsehan"],"linksTitle":"Project links","linksRepoLabel":"GitHub repository (v1 CLI)","linksPaperLabel":"SoftwareX article","linksDocsLabel":"Documentation","linksLicenseLabel":"GPL-3.0 license","heroImageAlt":"BibexPy source-to-export product illustration","workflowImageAlt":"BibexPy project workflow from workspace to report"},"projects":{"title":"Projects","subtitle":"Each project keeps its own raw data, analyses and exports separate.","newProject":"New project","newProjectPlaceholder":"New project name (e.g. PhD thesis — sustainable supply chain)","noProjects":"No projects yet","noProjectsHint":"Type a name in the box above and click \\"Create\\".","projectName":"Project name","projectDescription":"Description","create":"Create","deleteConfirm":"Delete project?","deleteWarning":"This permanently removes all uploaded data, analyses and exports.","fileCount":"{n} files","lastUpdated":"Last updated"},"data":{"title":"Data","subtitle":"Step 1 — Upload raw Scopus CSV and/or Web of Science TXT files. The system consolidates each source into a single Excel file.","stepBadge":"Step 1 / 5","statusReady":"Ready","statusUnprepared":"Unprepared","statusAwaiting":"Awaiting data","continueToAnalyses":"Continue to Analyses","rawFilesHeader":"Raw files","consolidatedFilesHeader":"Consolidated files","dragDrop":"Drag files or click","dropToUpload":"Drop to upload","dragDropDescription":"Scopus {csv}, Web of Science {txt}, Excel {xlsx}","filesUploaded":"{n} files uploaded","uploadFailed":"Upload failed","ready":"Data uploaded and consolidated","readyDescription":"Your raw data is uploaded and each source has been consolidated into a single Excel. Next step: merge two sources into one dataset in the Analyses page.","totalRawFiles":"Total raw files","scopus":"Scopus","wos":"Web of Science","prepareTitle":"Data preparation","prepareSectionTitle":"Upload raw files","prepareDescription":"The system consolidates each source (Scopus / WoS) into a single Excel file. This step does not require manual management. (Merging Scopus + WoS is done in the next step.)","prepareBtn":"Prepare","prepareAgainBtn":"Re-prepare","addNewBtn":"Add new data","addMoreFiles":"Add more files","addNewHint":"Existing raw files are preserved — only consolidated source Excels are reset.","resetTitle":"Reset preparation and add new data?","resetSubtitle":"So you can add new files and re-run preparation","willBeDeleted":"Will be deleted (only consolidated Excels)","willBePreserved":"Preserved","rawPreservedNote":"raw files in your list — kept.","previousReset":"Previous preparation reset (your raw files are kept)","previousResetHint":"Upload new files, then click \\"Prepare\\" — old and new raw files together will produce new {scopusFile} and {wosFile} (one consolidated Excel per source).","stale":"Preparation out of date — raw files changed. Click \\"Re-prepare\\" to update consolidated Excels.","uploadedFilesHeader":"Raw files","consolidatedHeader":"Consolidated files","noConsolidatedFiles":"No consolidated files yet","noPreparedFound":"No prepared files found.","preparedNotFound":"Prepared files not found.","scopusBadge":"Scopus","wosBadge":"WoS","otherBadge":"Other","kindLabels":{"scopusCSV":"Scopus CSV","wosTXT":"WoS TXT","xlsx":"Excel","unknown":"Unknown"},"deleteFileConfirm":"Delete raw file?\\n\\n{name}\\n\\nNote: Consolidated source files are not deleted but their content is outdated — click \\"Re-prepare\\" to update.","deleteProcessedConfirm":"Delete consolidated file?\\n\\n{name}\\n\\nYour raw files are preserved. Click \\"Re-prepare\\" to re-generate.","preparedHint":"\\"Prepare\\" combines all your raw files into a single {scopusFile} and {wosFile}.","noFilesYet":"No files yet.","preparationFailed":"Preparation failed","resetFailed":"Reset failed","modal":{"addNewBtn":"Reset, I\'ll add new data"}},"analyses":{"title":"Analyses","subtitle":"Upload raw Scopus/WoS files and merge them into a single dataset with Smart Merge (DOI-based dedup) — preparation is automatic. Each merge is stored as an independent analysis.","stepBadge":"Step 1 / 5","activeBadge":"Active","active":"Active analysis","noActive":"No active analysis","newAnalysis":"New analysis","newAnalysisDrawerTitle":"New analysis","newAnalysisDrawerHint":"Choose an algorithm — the active analysis is preserved, a new folder is created.","cancel":"Cancel","list":"Analyses","listHint":"Each merge is an independent analysis folder. The active analysis is used in Records / Filter / Quality pages.","otherAnalyses":"Other analyses","otherAnalysesHint":"Past analyses are preserved. Click \\"Activate\\" to use one in Records / Filter / Quality.","legacy":"Legacy","show":"Show","hide":"Hide","activate":"Activate","deleteConfirm":"Confirm","deleteAnalysis":"Delete analysis","noAnalysisYet":"No analyses yet","noAnalysisHint":"Start your first analysis by choosing one of the algorithms below.","openInRecords":"Records & Filter","statRecords":"Records","statDedup":"Dedup","statDuplicates":"duplicates","statMatches":"matches","statColumns":"columns","deleteFailed":"Delete failed","activationFailed":"Activation failed","method":{"simple":"Simple","enhanced":"Enhanced","smart":"Smart","unknown":"Legacy"},"infoBanner":{"title":"How does merging work?","body":"Scopus and Web of Science describe the same publication with different fields/formats. This step matches the two sources by {doi}, keeps common records once, and resolves conflicts.","footer":"Each merge is stored as an independent analysis — you can switch between them, view older ones, and delete if needed. No records are deleted — unmatched WoS/Scopus rows are moved to \\"Lost Records\\" files."}},"algoCard":{"moreInfo":"More info","recommended":"Recommended","academic":"Academic","rerun":"Re-run","newAnalysisOfMethod":"New {method} analysis","rerunNote":"The active analysis is preserved — a new analysis folder is created.","speed":"Speed","howItWorks":"How it works","useCases":"Use cases","outputs":"Outputs","limitations":"Limitations","citation":"Citation","related":"Related references","close":"Close","escClose":"Press ESC or click outside to close","startBtnSimple":"Start Simple","startBtnEnhanced":"Start Enhanced","startBtnSmart":"Start Smart","simple":{"title":"Simple Merge","tagline":"Fast, deterministic","summary":"Deletes Scopus row for DOI-matched records, keeps WoS row.","speedHint":"fast \xb7 seconds","howItWorks":["All WoS + Scopus records are concatenated into a single dataframe.","Records with DOIs are grouped; for duplicate DOIs only the first row (WoS) is kept.","For records without DOI: cleaned title + year exact match deduplication.","Fields come from a single source (WoS if available, otherwise Scopus) — no field merging."],"useCases":["When a fast exploratory analysis is needed","When data quality is already high in both sources","When manual cleanup will be done afterwards"],"outputs":[{"name":"Merged_Simple.xlsx","desc":"Main merged dataset"},{"name":"Statistic.xlsx","desc":"Field-by-field fill statistics"},{"name":"Statistic.txt","desc":"Coarse summary"}],"limitations":["No DOI normalization (\'https://doi.org/\' counted differently)","No title fuzzy match — only exact alphanumeric","No year tolerance (online-first vs published difference)","No match confidence score produced"]},"enhanced":{"title":"Enhanced Merge","tagline":"Cross-database field completion","summary":"Deduplication + fills empty fields from the other source (WC↔SC cross-fill).","speedHint":"slow \xb7 ~1-3 min/1k records","howItWorks":["All steps of Simple Merge are applied.","In DOI groups, fields are merged with \'merge_values()\' — union of non-empty values (joined with ;).","WC ↔ SC cross-fill: if one is empty, fill from the other.","RP_WOS + RP_SCOPUS hybrid merge (WoS-first).","Author names normalized to WoS format.","DB column marked as \'BIBEXPY\'."],"useCases":["For richest data output (general recommendation)","When AB / DE missing in WoS; WC missing in Scopus","Preparation for bibliometrix / VOSviewer analysis"],"outputs":[{"name":"merged_enhanced.xlsx","desc":"Main merged dataset (field merging applied)"},{"name":"Statistic.xlsx","desc":"General + field-by-field fill statistics"},{"name":"Lost_Wos_Records.xlsx","desc":"Unmatched WoS records"},{"name":"Lost_Scopus_Records.xlsx","desc":"Unmatched Scopus records"}],"limitations":["Which field came from which source is not tracked","Conflict decisions are not audited","Title+Year exact match carries false-positive risk (e.g., \'Introduction\' titled editorials)"]},"smart":{"title":"Smart Merge","tagline":"Multi-stage + Caputo 2024","summary":"6-stage multi-level matching + field preference rules + audit trail.","speedHint":"medium \xb7 ~1-2 min/1k records","howItWorks":["Phase 1 (Normalize): DOI, title, year, author surname, ISSN/PMID/UT reduced to canonical form.","Phase 2 (Blocking): Records grouped by year + first author surname letter (O(n\xb2) → O(n\xb7k)).","Phase 3 (Multi-stage matching): Stage 0 negative rules (PMID/ISSN mismatch → reject) → Stage 1 DOI exact (conf 1.0) → Stage 2 PMID exact (0.99) → Stage 3 Title JW ≥ 0.92 + Year\xb11 + Surname (0.95) → Stage 4 Journal+Volume+Pages (0.90) → Stage 5 Borderline JW ∈ [0.80, 0.92) (manual review).","Phase 4 (Field merge): Caputo 2024 fixed defaults — TC/CR/NR→WoS, AB/AU/AF/C1→Scopus, DE/ID→union, WC/SC→cross-fill.","Phase 5 (Audit): match_audit.xlsx + conflict_log.xlsx + borderline_queue.xlsx are produced.","Phase 6 (Borderline review): Manual approval UI or optional LLM decision."],"useCases":["Studies requiring academic reproducibility (SCI/SSCI manuscript writing)","Old publications without DOI (pre-2000) / inconsistent metadata","Systematic review data preparation (PRISMA-ScR compliant audit)","Studies open to audit trail / reviewer scrutiny"],"outputs":[{"name":"merged_smart.xlsx","desc":"Main dataset (UID + match_method + confidence columns)"},{"name":"match_audit.xlsx","desc":"Each match\'s DOI, stage, confidence, rationale"},{"name":"conflict_log.xlsx","desc":"Field-level conflict source decisions"},{"name":"borderline_queue.xlsx","desc":"Pairs awaiting manual review (JW 0.80-0.92)"},{"name":"Lost_Smart_Wos_Records.xlsx","desc":"Unmatched WoS records"},{"name":"Lost_Smart_Scopus_Records.xlsx","desc":"Unmatched Scopus records"},{"name":"Statistic_Smart.xlsx","desc":"General + Field stats"}],"limitations":["~2x slower than Simple/Enhanced (reduced with blocking)","Strict 0.92 threshold for Title+Year+Surname may miss some duplicates (shown in borderline queue)"],"citation":{"title":"Caputo, A., Pizzi, S., Pellegrini, M. M., & Dabić, M. (2024)","journal":"Automatic Merging of Scopus and Web of Science Data — Annals of Data Science, 11(3), 1023–1047.","related":["Hammerton et al. (2013) — Rule-based deduplication. Database, bat086.","Borissov et al. (2022) — Deduklick. Systematic Reviews, 11, 172.","Winkler (1990) — Jaro-Winkler similarity. ASA Survey Research Methods."]}}},"merge":{"summaryHeader":"Active analysis","summaryNote":"This analysis result is used in the Records & Filtering, Harmonization and Export steps.","uploadTitle":"Data files","oldMerge":"Previous merge — new data added","currentMerge":"Current analysis","backToActive":"Back to active","narrative":{"title":"Methods paragraph (copy-ready)","hint":"Auto-generated summary you can paste into a manuscript\'s data preparation section.","copy":"Copy","copied":"Copied to clipboard","template":"On {date}, a database merging and deduplication process was conducted. A total of {scopus} records from Scopus and {wos} records from Web of Science were included in the procedure ({total_input} records in total). The Smart Merge algorithm identified {duplicates} duplicate records across the datasets. Following deduplication, the final consolidated dataset consisted of {total} unique records."},"staleHint":"New raw files were added — the active analysis is based on older data. Run Smart Merge to create a new analysis.","generalStats":"General statistics","stats":{"mergedRecords":"Merged records","wosInput":"WoS input","scopusInput":"Scopus input","duplicatesRemoved":"Duplicates removed","columns":"columns","totalInput":"total input","dedupRate":"dedup rate","commonColumns":"common columns"},"classic":{"simpleHeader":"Simple Merge — Results","enhancedHeader":"Enhanced Merge — Results","summaryBadge":"{duplicates} duplicates \xb7 {rate}% deduplication","simpleDescription":"DOI-based deduplication applied. For rows with the same DOI in WoS + Scopus, only the WoS row was kept; no field merging was done.","enhancedDescription":"Deduplication + cross-database field completion applied. Records representing the same publication across WoS and Scopus had their fields merged; empty fields were filled from the other source.","fieldRulesHeader":"Field rules","simpleHint":"Simple Merge does not merge fields — use Enhanced or Smart Merge for richer results.","enhancedHint":"Enhanced Merge does not record which field came from which source. For academic audit trail (match rationale, conflict decision), use Smart Merge.","simpleFieldRules":[{"field":"DI","rule":"DOI matching — first WoS row is kept among rows with the same DOI"},{"field":"TI + PY","rule":"If no DOI: cleaned title + year exact comparison"},{"field":"Other fields","rule":"Come from a single source (WoS priority, otherwise Scopus) — no field merging"}],"enhancedFieldRules":[{"field":"DI \xb7 UT \xb7 PM","rule":"Identifier matching — DOI / WoS UT / PubMed ID exact"},{"field":"AB, AU, AF, DE, ID, WC, SC","rule":"merge_values() — union of non-empty values (; joined + dedup)"},{"field":"WC ↔ SC","rule":"Cross-fill — if one is empty, completed from the other"},{"field":"RP","rule":"Hybrid RP_WOS + RP_SCOPUS (WoS-first)"},{"field":"AU","rule":"WoS author format normalization (Smith J → \'Smith, J.\')"}]},"smart":{"panelTitle":"Smart Merge — Match Details","matches":"matches","matchStagesHeader":"Match stages (Hammerton 2013 + Caputo 2024)","fieldSourceHeader":"Field conflict resolution (Caputo 2024)","fieldSourceNote":"{conflicts} field conflicts resolved","conflicts":"conflicts","borderlinePending":"borderline pending","borderlineTotal":"borderline total","borderlineNote":"{pending} uncertain pairs kept separate (total {total}). You can review them in the \\"Uncertain Pairs\\" panel of the Filter step.","openAudit":"Open history panel","detailedReport":"Detailed report","detailedReportNote":"All match decisions, the stage and confidence each was made at, conflict resolutions and borderline pairs are written to the audit log. Keep for academic reproducibility."},"files":{"title":"Generated Files","mainDataset":"Main merged dataset","lostRecords":"Unmatched records (Lost Records)","lostNote":"{wos} WoS \xb7 {scopus} Scopus rows did not match by DOI","stats":"Statistic reports","smartAudit":"Smart Merge audit files","smartAuditNote":"Match details, conflict decisions and borderline queue","other":"Other"},"branch":{"title":"What would you like to do now?","exportTitle":"Download & report","exportBody":"Download the merged data, export it and generate the methodology report — no filtering needed.","continueTitle":"Continue → Filter","continueBody":"Filter records, check field quality, review uncertain pairs and enrich."},"done":{"title":"Merge complete \uD83C\uDF89","body":"Your data is consolidated into a single dataset. Now export the results or generate a report. Open Advanced below if you want detailed editing.","exportTitle":"Go to Export","exportBody":"Download as WoS \xb7 VOSviewer \xb7 BibTeX \xb7 RIS \xb7 Excel.","reportTitle":"Go to Report","reportBody":"Generate the bibliometric methodology and summary report."},"advanced":{"title":"Advanced","hint":"(optional) detailed editing, match details, generated files","filterTitle":"Filter & Edit","filterBody":"Filter records, fix fields, review uncertain pairs.","harmonizeTitle":"Harmonize","harmonizeBody":"Unify and standardize author / institution / country names."},"next":{"downloadTitle":"Download Data","downloadBody":"Export the results (WoS \xb7 VOSviewer \xb7 BibTeX \xb7 RIS \xb7 Excel) and report.","advancedTitle":"Advanced Editing","advancedBody":"Filter, fix fields, harmonize — unlocks the advanced steps (3-4)."},"noMerge":{"title":"No analysis yet","hint":"Start with Smart Merge above."}},"help":{"jw":"Jaro-Winkler: a 0–1 string-similarity score for titles. Pairs at or above the threshold are treated as the same publication; lower pairs are kept separate. 0.88 is a balanced default.","blockingThreshold":"Blocking threshold (0–1): how similar two names/affiliations must be to land in the same candidate group for review. Lower = wider net (more candidates, slower); higher = stricter.","autoApprove":"Auto-approve threshold (0–1): pairs at or above this similarity are merged automatically without AI/manual review. Keep it high (e.g. 0.95) to avoid false merges."},"borderline":{"title":"Uncertain Pairs — Review (optional)","description":"Smart Merge could not match these pairs with certainty (JW 0.80–0.92) and kept them SEPARATE automatically. You can merge the ones that are the same publication here.","loading":"Loading borderline queue…","refresh":"Refresh","filterPending":"Pending","filterAll":"Show all","selectAllVisible":"Select all","clearVisible":"Clear","selectAllHint":"Mark all listed pairs as \'merge\'","reviewToggle":"Review","bulkMark":"Bulk mark","bulkConfirm":"A snapshot will be taken and the dataset updated for accepted pairs. Continue?","loadFailed":"Loading failed","applyFailed":"Apply failed","noBorderline":"✓ No borderline pairs — Smart Merge resolved all matches with high confidence.","noFilterMatch":"No pairs match the current filter.","accept":"Same publication","acceptAccepted":"✓ Same publication (accepted)","reject":"Different publication","rejectRejected":"✗ Different publication (rejected)","skip":"Skip","applyAccept":"Auto-accept JW ≥ {threshold}","applySelection":"Apply selections","pending":"pending","accepted":"accepted","rejected":"rejected","noBorderlineHint":"Smart Merge has not produced any borderline matches, or they have all been resolved.","fields":{"title":"Title","year":"Year","surname":"Surname","journal":"Journal","volume":"Volume","doi":"DOI"},"confShort":"conf","appliedToast":"{applied} records updated. Pending: {pending}."},"records":{"title":"Records & Filter","subtitle":"Apply filters, manage records, check field quality.","stepBadge":"Step 2 / 5","totalRecords":"{n} records","matchingRecords":"matching records","queryFailed":"Query failed","exportFiltered":"Export filter","goToMerge":"Go to Merge","dashboardOpen":"Open Dashboard","dashboardClose":"Close Dashboard","dashboardShow":"Show Dashboard","dashboardHide":"Hide Dashboard","filterApplied":"Filter applied \xb7 {n} of {total}","noRecords":"No records","loadingRecords":"Loading records…","openFilter":"Filters","closeFilter":"Close","search":"Search in title / authors / abstract…","selected":"{n} selected","selectAll":"Select all","clearSelection":"Clear selection","deleteSelected":"Delete selected","enrichSelected":"Enrich selected","deleteConfirm":"Delete {n} records?","deleteWarning":"A snapshot is taken before delete — you can restore later.","nextStepTitle":"What\'s next?","nextStepSubtitle":"Step 4 (Harmonization) is optional. If you don\'t need semantic clean-up, jump straight to Export.","nextStepAITitle":"Polish with AI","nextStepAIBody":"Merge author / affiliation / keyword variants that look the same but are written differently. Uses LLM where deterministic rules can\'t decide.","nextStepAIBtn":"Open Harmonization","nextStepAIBadge":"Optional \xb7 Step 4","nextStepExportTitle":"Skip AI, go to Export","nextStepExportBody":"Your dataset is already merged, filtered and quality-checked. Convert directly to WoS / VOSviewer / BibTeX / Excel / CSV.","nextStepExportBtn":"Open Export","nextStepExportBadge":"Step 5","noResults":"No results. Try loosening filters.","tableHint":"Tip: Click header → sort \xb7 Drag header edge → column width \xb7 Click row → detail","firstPage":"First page","lastPage":"Last page","selectAllInPage":"Select all in page","unselectPage":"Unselect page","filter":{"year":"Year","docType":"Document type","docTypeSearch":"Search document type…","language":"Language","languageSearch":"Search language…","dbSource":"Database","dbSourceSearch":"Database…","journal":"Journal","journalPlaceholder":"Journal name (e.g. NATURE)","journalSubtitle":"Substring search in SO — case-insensitive","authors":"Author","authorsPlaceholder":"Author (e.g. SMITH J)","authorsSubtitle":"Substring search in AU — can add multiple","wcCategories":"WoS Categories","wcPlaceholder":"e.g. COMPUTER SCIENCE","scCategories":"Subject Categories","scPlaceholder":"e.g. ENGINEERING","citationCount":"Citation count","citationHint":"avg. {mean}, max {max}","fulltext":"Full-text search","fulltextHint":"AND/OR/NOT supported \xb7 \\"exact phrase\\" in quotes","quality":"Quality / Missing data","qualityMissing":"Missing","qualityHas":"Has","qualityHasLabel":"Show those WITH","qualityMissingLabel":"Show those MISSING","savePreset":"Save preset","loadPreset":"Load preset","clearAll":"Reset","noMatch":"No match.","add":"Add","clearThis":"Clear this filter","range":"range","yearCount":"{year}: {count} records","yearsSelected":"{n} years selected","quickFilters":"Quick filters","last5Years":"Last 5 years","last10Years":"Last 10 years","hasDoi":"Has DOI","hasAbstract":"Has Abstract (AB)","highCitation":"High citation (≥10)","fulltextPlaceholder":"(machine OR deep) AND learning NOT survey"},"presets":{"title":"Presets","save":"Save current filter","namePlaceholder":"New preset name…","noPresets":"No presets yet","hint":"Apply a filter first, then save.","delete":"Delete","deleteConfirm":"Delete preset \\"{name}\\"?","savedAuditTitle":"Preset saved: {name}"},"columns":{"configure":"Column settings","visible":"Visible columns","hidden":"Hidden columns","reset":"Reset to default","short":"Columns","all":"All","defaults":"Defaults","none":"None","noMatch":"No matching column.","searchPlaceholder":"Search column…","abLen":"Abstract length","afFull":"Author (full)"},"quality":{"title":"Data Quality Dashboard","subtitle":"Field-by-field fill rate","fillRate":"Fill rate","missing":"Missing","filled":"Filled","fillField":"Fill","fillFieldHint":"Use API enrichment to fill empty values in this field","noFields":"No field data available","healthScore":"health score","healthScoreHint":"Bibliometrically weighted: critical fields (authors, year, source, citations, references) count most; complementary fields least. Differs from the fill bar below, which weights all fields equally.","totalRecords":"Total Records","highFill":"High fill","midFill":"Mid fill","lowFill":"Low fill","overallHealth":"Overall data health","healthHint":"Average fill rate of DI, AB, TI, AU, PY fields","barLegend":"Left = total filled (all fields pooled); right = each field\'s missing share, by color","fieldFillRates":"Field fill rates","overview":{"title":"General Overview","hint":"Dataset summary table (Biblioshiny-style) — paste into a report or download.","colField":"Field","colLabel":"Description","colTotal":"Total","colFilled":"Filled","colMissing":"Missing","colFillRate":"Fill %","download":"Download","downloadPngFailed":"Could not create image"},"fillHint":"\\"Fill\\" → empty records are queried via their DOI against CrossRef \xb7 OpenAlex \xb7 Europe PMC \xb7 DataCite APIs. A snapshot is taken automatically and audit log is written.","startFailed":"Could not start","loadingQuality":"Loading data quality…","starting":"Starting…","scanTitle":"Boost data health","scanDesc":"{n} field(s) have missing data — fill them automatically from CrossRef, OpenAlex, Europe PMC and DataCite.","scanAllGood":"All tracked fields look complete — nothing to fill.","reportTitle":"Enrichment report","reportSummary":"{enriched} of {scanned} records with a DOI were updated.","reportSummaryShort":"{enriched} record(s) were updated.","reportDois":"+{n} missing DOI(s) resolved from title lookup.","reportOverall":"Overall fill {before}% → {after}%","runAgain":"Run again","startAll":"Fill all missing","startAllHint":"Run API enrichment in parallel for every field with missing values","startAllConfirm":"Enrichment will be started for {n} fields. The jobs run in parallel and may take a little while.","startAllNothing":"Nothing to fill — all fields are complete","stopAll":"Cancel running","cancelTitle":"Cancel","recordsEnriched":"+{n} records filled","noRecordsEnriched":"0 records filled","noDoiCount":"{n} without DOI","notInApiCount":"{n} not in API","failedShort":"Failed","filledShort":"filled","missingArrow":"missing →","fillNMissing":"Fill {n} missing records via API","startAllTitle":"Fill all missing fields?","startAllFreeNote":"The enrichment sources used (Crossref, OpenAlex, Unpaywall) are free and consume no paid quota.","missingShort":"missing"},"editRow":"Edit record","deleteRow":"Delete record","deleteRowConfirm":"Delete this record? A snapshot is taken so it can be restored."},"enrich":{"title":"Harmonization","subtitle":"Use LLM to standardize data where semantic decisions are needed — merge variants, generate missing fields.","stepBadge":"Step 3 / 5","comingSoon":"coming soon","infoBanner1":"<strong>Records & Filter</strong> page fills fields from <span class=\\"font-medium\\">deterministic APIs</span> (CrossRef, OpenAlex...).","infoBanner2":"<strong>Harmonization</strong> solves places where a <span class=\\"font-medium\\">semantic decision</span> is needed: \\"are these two authors the same person?\\", \\"are these two keywords the same concept?\\"","affectedFields":"Affected fields","howWillItWork":"How will this tool work?","howSteps":["Dataset is scanned, all unique values in the relevant field are extracted.","Candidate groups are formed with deterministic similarity (Jaro-Winkler / token-level).","Uncertain groups are sent to LLM — semantic decision is requested.","Suggestions are listed with confidence score; user approves one by one.","Approved ones are applied to dataset after snapshot; audit log is written."],"devStatusLabel":"Development status","devStatusBody":"The infrastructure of the Author and Affiliation Disambiguation module can be used as-is for these tools (blocking + similarity + LLM + approval). We await your feedback for prioritization.","categories":{"disambiguation":{"label":"Variant Merging","description":"Merging different spellings of the same thing into one standard"},"normalization":{"label":"Standardization","description":"Term/label standardization for bibliometric analysis"},"extraction":{"label":"Information Extraction","description":"Generating missing fields from existing text"}},"tools":{"authors":{"title":"Author Disambiguation","description":"Merge different spellings of the same author (Smith J / Smith John A. / J. A. Smith) into one name. Decided via coauthor + affiliation + year hints."},"affiliations":{"title":"Affiliation Standardization","description":"Pull MIT / Massachusetts Institute of Technology / Mass Inst Tech variants to one standard institution. Campus/city differences are preserved."},"keywords":{"title":"Keyword Merging","description":"Pull \'machine learning\' / \'Machine Learning\' / \'ML\' variants in DE/ID fields to one normalized form. Makes word-count analysis healthy."},"journals":{"title":"Journal Name Standardization","description":"Merge abbreviation/full name differences like \'IEEE Trans Knowl Data Eng\' and \'IEEE Transactions on Knowledge and Data Engineering\'."},"categories":{"title":"Subject Category Prediction","description":"For records missing WC/SC field, predict WoS Category from Abstract. LLM fallback for cases not returned by APIs."},"kw-from-ab":{"title":"Abstract → Keywords","description":"For records with empty DE but filled AB, generate 5-10 keywords from Abstract. Aligned with standard bibliometric vocabulary."},"organizations":{"title":"Organizations (parent)","description":"Roll department/sub-unit addresses up to the parent university/institution so the collaboration network is built at the organization level."},"countries":{"title":"Countries","description":"Standardize country-name variants (USA / United States / US -> United States)."}},"apiTitle":"API Enrichment","apiDescription":"Fill missing fields from CrossRef / OpenAlex / Semantic Scholar.","apiStart":"Start API enrichment","mlTitle":"ML Enrichment","mlDescription":"Use machine learning models to enhance records.","mlStart":"Start ML enrichment","fieldTitle":"Field Enrichment","fieldDescription":"Fill a specific field\'s empty values via API sources.","selectField":"Select field","maxRecords":"Max records","fillField":"Fill","result":{"title":"Enrichment result","total":"Total candidates","missingBefore":"Missing before","noDoi":"No DOI (skipped)","target":"Target (queried)","enriched":"Filled","apiNoData":"API had no data","failed":"Failed","missingAfter":"Missing after","fillRateBefore":"Fill rate before","fillRateAfter":"Fill rate after","sources":"Source contributions"}},"disambiguate":{"title":"Author Disambiguation","subtitle":"Cluster duplicate authors and affiliations.","authorsTab":"Authors","affiliationsTab":"Affiliations","mode":"Scan Mode","modeAuto":"Smart","modeAutoDescription":"Sends only suspicious authors to LLM — fast, cheap","modeBroad":"Broad","modeBroadDescription":"Asks LLM about all same-surname+initial groups","modeFullLLM":"Full LLM","modeFullLLMDescription":"Sends ALL author groups to LLM — expensive, comprehensive","fullLLMWarning":"This mode sends ALL author groups to LLM — costs may increase 10x+ on large datasets.","scanAuthors":"Scan authors","scanAffiliations":"Scan affiliations","selectThreshold":"Select ≥{threshold}","applyClusters":"Apply {n} clusters","howItWorks":"How does it work?","howItWorksList":"Deterministic blocking (same surname + first initial) + Jaro-Winkler similarity.|Only <strong>uncertain</strong> blocks go to DeepSeek (typically 5-10% of authors).|LLM returns cluster suggestions + confidence score + rationale.|Nothing is applied automatically — data stays unchanged until you approve. A snapshot is taken before apply.|Responses are cached; the same block won\'t be sent to LLM twice.","start":"Start disambiguation","running":"Running…","proposals":"Proposals","noProposals":"No proposals — run disambiguation first","approve":"Approve","reject":"Reject","applySelected":"Apply selected","applied":"Applied {n} replacements","snapshot":"Snapshot","restore":"Restore","limitLabel":"Limit (records)","limitHint":"Optional — scan only the first N records. Useful for cost-controlled testing. Leave empty to scan all.","limitOff":"Off","limitChip50":"Test (50)","limitChip500":"Sample (500)","limitChipAll":"All","cluster":"Cluster","members":"members","canonical":"Canonical name","startFailed":"Could not start","applyConfirm":"{n} clusters will be applied to the dataset. A snapshot will be taken. Continue?","appliedMessage":"Applied: {n} replacements. Snapshot: {snapshot}","applyFailed":"Could not apply","experimentalWarning":"<strong>EXPERIMENTAL</strong> — Merge author name + affiliation variants via DeepSeek LLM. All suggestions await manual approval; applied to data only after a snapshot is taken.","llmNotConfigured":"LLM API key is not configured.","settingsLink":"Settings","settingsHintAfter":" page — add the provider and API key.","providerLabel":"Provider","modelLabel":"Model","changeLink":"Change →","uncertainHeader":"Uncertain","noProposalsHint":"No proposals yet. Click the \\"Scan\\" button above.","confidenceLabel":"confidence","variantsLabel":"Variants","canonicalLabel":"Canonical:","scan":"Scan","advanced":"Advanced","splitHeader":"Splits — same name, likely different people","splitDesc":"This name splits into field-disjoint groups; each becomes a separate author (suffix a/b/c). Largest group kept plain.","mergeHeader":"Merges — same {subject}, different spellings","mergeDesc":"Variants of the same {subject}, unified to one canonical form.","autoBadge":"auto","reviewBadge":"review","plainStays":"kept plain","approveApply":"Approve & apply ({n})","noSplits":"No split suggestions.","noMerges":"No merge suggestions.","scanHint":"Scan finds two things: same person written differently (merge) and same name that are different people (split). Everything needs your approval.","scanHintStd":"Scan finds variants of the same {subject} and unifies them to one canonical form. Everything needs your approval.","selectAll":"Select all","clearAll":"Clear all","subjects":{"authors":"person","affiliations":"institution","organizations":"institution","countries":"country"}},"export":{"title":"Export","subtitle":"Convert the active dataset into formats expected by bibliometric tools (WoS / VOSviewer / BibTeX / RIS / CSV / XLSX).","stepBadge":"Step 4 / 5","exportFailed":"Export failed","copyFailed":"Copy failed","browserNotSupported":"This browser doesn\'t support folder picker. Switch to path entry mode.","folderPickFailed":"Folder couldn\'t be picked","copied":"{n} files copied","skipped":"Skipped","copiedFailed":"{ok} files copied, {fail} failed","browserCopyTitle":"{n} files copied via browser","filterSelection":"Filter selection","subsetExported":"Subset of this filter will be exported","allExported":"All data will be exported","allData":"All data","noPresetsHint":"No presets yet. You can save a preset in the Filter page.","refFormats":"Reference / bibliometric formats","usedIn":"Works with","tableFormats":"Table / generic formats","generatedFiles":"Generated exports","noExportsYet":"No exports yet.","copyToFolder":"Save to a folder","nFilesSelected":"{n} files selected","selectFilesAbove":"Select files above","browserPick":"Browser folder","enterPath":"Server path","selectedFolder":"Save location","changeFolder":"Change folder","change":"change","pickFolder":"Choose where to save…","opensBrowserPicker":"Pick the destination folder in your browser","copyToNamedFolder":"Save to \\"{name}\\" ({n})","pickAndCopy":"Choose folder & save","browserSafetyNote":"Files are written directly by your browser — the backend never sees the path.","pathPlaceholder":"C:\\\\Users\\\\you\\\\Documents\\\\BibexPy output","copy":"Save","pathNote":"Provide an absolute path where files will be saved. Created automatically if missing. The backend writes directly to disk since it runs on this machine.","formatInfo":{"wos":"Web of Science plain-text format — the de-facto standard for science-mapping workflows","vos":"Tab-separated map+network file ready for VOSviewer co-authorship / co-citation visualizations","bib":"BibTeX entries with full metadata — works in any LaTeX / reference-manager toolchain","ris":"RIS reference format — universal import for desktop reference managers","xlsx":"Spreadsheet with all fields and types preserved (numbers, dates, multi-value cells)","csv":"Comma-separated dump for data-science pipelines","tsv":"Tab-separated dump — safer than CSV when fields contain commas or quotes"},"compatibleWith":"Works with","moreTools":"+{n} more","duplicate":{"title":"{format} already exists","body":"{count} previous {format} export{plural} found. What would you like to do?","replace":"Replace — delete old, create new","replaceHint":"Old files are removed, only the new one stays.","keep":"Keep both — add a new timestamped file","keepHint":"Old files are preserved. The new file gets a new name.","cancel":"Cancel — don\'t create","replacing":"Replacing…","replaced":"{n} old file{plural} removed"},"deleteExport":"Delete file","deleteExportConfirm":"Delete \\"{name}\\"?","deleteExportFailed":"Could not delete","formatTitle":"Format","format":{"wos":"WoS TXT","vos":"VOSviewer TXT","bibtex":"BibTeX","ris":"RIS","csv":"CSV","xlsx":"Excel"},"withFilter":"Apply current filter","withoutFilter":"Export all records","outputNamePlaceholder":"Output file name (optional)","createExport":"Create export","downloadAll":"Download","copyTo":"Copy to folder","folderPicker":"Select folder","previousExports":"Previous exports","noExports":"No exports yet"},"settings":{"title":"Settings","subtitle":"Manage API keys, LLM settings and other configurations.","language":"Language","languageHint":"UI display language. Default: English","english":"English","turkish":"T\xfcrk\xe7e","changesPending":"{n} changes pending","allSaved":"All changes saved","saving":"Saving…","revert":"Revert","changed":"changed","defined":"defined","llmProvider":"LLM Provider","modelLabel":"Model","modelPlaceholder":"e.g. gpt-4o, claude-3.5-sonnet, meta-llama/llama-3.1-70b","modelNotInList":"This model is not in this provider\'s preset list — manual value.","baseUrlHint":"OpenAI-compatible endpoint. /chat/completions is appended automatically.","getApiKey":"Get API key","disambiguationPipeline":"Disambiguation Pipeline","pathPlaceholder":"C:\\\\Users\\\\you\\\\BibexPyData","browseFolder":"Browse","validatePath":"Validate","check":"Check","createThisFolder":"Create this folder","nProjectsExist":"{n} projects exist","apiKeyPlaceholder":"Enter your API key","maskedKeyNote":"Current key is masked. Don\'t touch if you don\'t want to change.","groups":{"storage":"Storage","api":"Data Enrichment APIs","llm":"LLM (Disambiguation)"},"saveChanges":"Save changes","saved":"Saved","saveFailed":"Save failed","envFile":"Environment file","secretSet":"Set (hidden)","secretEmpty":"Not set","pathValid":"Valid path","pathInvalid":"Invalid path","providerLabel":"Provider","customProvider":"Custom","customBaseUrl":"Base URL","customApiKey":"API Key","fields":{"STORAGE_DIR":{"label":"Project Storage Folder","hint":"All projects are stored here. If you change it, move existing projects to the new folder manually. A backend restart is required."},"SCOPUS_API_KEY":{"label":"Scopus API Key","hint":"Needed only for Scopus enrichment (Elsevier, institutional/paid). All other sources are free."},"SEMANTIC_SCHOLAR_API_KEY":{"label":"Semantic Scholar API Key","hint":"Optional. Works without a key; a key only raises the rate limit (free)."},"UNPAYWALL_EMAIL":{"label":"Unpaywall Email","hint":"Optional. Used for open-access PDF links; Unpaywall only asks for an email (free)."},"CROSSREF_EMAIL":{"label":"CrossRef Email (recommended)","hint":"Optional but recommended. Gives higher throughput via CrossRef\'s polite pool (free)."},"LLM_PROVIDER":{"label":"LLM Provider","hint":"Used by the disambiguation module. Any OpenAI-compatible API works."},"LLM_API_KEY":{"label":"LLM API Key"},"LLM_BASE_URL":{"label":"LLM Base URL","hint":"If provider is \'Custom\', enter the full endpoint URL here (e.g. https://api.together.ai/v1)."},"LLM_MODEL":{"label":"Model"},"DISAMBIGUATION_ENABLED":{"label":"Disambiguation Enabled"},"DISAMBIGUATION_BLOCKING_THRESHOLD":{"label":"Blocking threshold"},"DISAMBIGUATION_AUTO_APPROVE_THRESHOLD":{"label":"Auto-approve threshold"}},"infoNotes":["Settings are written to the .env file.","A backend restart may be required for some changes to take effect.","API keys are shown masked; to keep a value unchanged, leave its field untouched."],"pathStatus":{"ready":"Ready","notWritable":"Not writable — possible permission issue","missing":"Folder does not exist","notDir":"Exists but is not a directory","empty":"Path is empty"},"providers":{"deepseek":"DeepSeek","openai":"OpenAI","openrouter":"OpenRouter","custom":"Custom (OpenAI-compatible)"}},"report":{"title":"Operation Report","subtitle":"Summary of all operations performed in this project","backToRecords":"Back to records","totalOperations":"Total operations","recordCount":"Record count","firstLast":"First → Last","categoryDist":"Category distribution","chronological":"Chronological list","downloadLog":"Download log","rawLogs":{"title":"Raw Change Logs","desc":"The complete, untouched operation log — every merge, filter, edit and enrichment, in order. Download as Markdown, plain text or PDF."},"methodology":{"title":"LLM Manuscript Report","desc":"Turn your operation log into an English data-preparation methodology paragraph, ready to paste into the Methods section of your paper. It is based only on the steps you actually performed.","generate":"Generate report","regenerate":"Regenerate","generating":"Sending the log to the model and writing the methodology…","notConfigured":"No language model is configured. Add an API key in","settingsLink":"Settings","noOperations":"Perform at least one step to generate a report.","generatedAt":"Generated","draftNote":"AI-generated — review the numbers against your data before publishing. The BibexPy citation is included in the text.","sampleLabel":"Example output (illustrative)","failed":"Could not generate the methodology report."}},"audit":{"title":"Operation history","subtitle":"Merge, delete, enrichment etc. operations are recorded automatically.","operations":"operations","noEntries":"No operations recorded yet.","totalOperations":"{n} records \xb7 newest first","downloadMarkdown":"Download Markdown","clearAll":"Clear history","clearConfirm":"Delete ALL operation records? This cannot be undone.","byKind":"By category","timeline":"Timeline","before":"before","after":"after","showDetails":"show details","hideDetails":"hide details","restore":"Restore","restoreTitle":"Restore this snapshot?","restoreConfirm":"The dataset will be reverted to this snapshot. Any changes made after it will be lost.","restoredToast":"Restored {n} records from snapshot.","restoreFailed":"Could not restore snapshot","kinds":{"upload":"Upload","convert":"Conversion","merge":"Merge","filter_save":"Preset","records_delete":"Records deletion","enrich_api":"API enrichment","enrich_ml":"ML enrichment","enrich_selected":"Selected enrichment","disambiguate":"Disambiguation","snapshot":"Snapshot","snapshot_restore":"Snapshot restore","analysis_activate":"Activate analysis","analysis_delete":"Delete analysis","merge_borderline":"Borderline pairs","export":"Export","project_create":"Project created","report":"Report","records_edit":"Record edit"},"smart":{"rawInput":"Raw input","matched":"Matched","borderline":"Borderline","pendingTotal":"pending / total","output":"Output","conflictResolution":"Conflict resolution ({conflict} fields \xb7 Caputo 2024)","seconds":"sec","filesProduced":"{n} files produced","dedupShort":"dedup","lostShort":"lost"},"kindLabels":{"upload":"\uD83D\uDCE5 File upload","convert":"\uD83D\uDD04 Conversion","merge":"\uD83E\uDDE9 Merge","merge_borderline":"\uD83D\uDD0D Borderline decision","analysis_activate":"\uD83C\uDFAF Active analysis changed","analysis_delete":"\uD83D\uDDD1️ Analysis deleted","filter_save":"⭐ Preset saved","records_delete":"\uD83D\uDDD1️ Records deleted","enrich_api":"\uD83C\uDF10 API enrichment","enrich_ml":"\uD83E\uDDE0 ML enrichment","enrich_field":"\uD83D\uDD27 Field enrichment","enrich_selected":"\uD83D\uDD27 Selected enrichment","disambiguate":"✨ Disambiguation","disambiguate_authors":"✨ Author disambiguation","disambiguate_affiliations":"\uD83C\uDFE2 Affiliation disambiguation","snapshot":"\uD83D\uDCF8 Snapshot","snapshot_restore":"↩️ Snapshot restore","export":"\uD83D\uDCE4 Export"},"titles":{"disambiguationApplied":"Disambiguation applied ({kind}) — {n} changes","disambiguationRestored":"Disambiguation snapshot restored","filesCopiedToFolder":"{n} files copied to local folder","merge":"Merge ({method})","autoPrepare":"Auto-prepare — {csv} CSV + {txt} TXT","prepareReset":"Preparation reset — {n} processed files deleted (raw files kept)","processedFileDeleted":"Processed file deleted: {name}","recordsDeleted":"{n} records deleted","snapshotRestored":"Snapshot restored: {name}","fieldEnrichment":"Field enrichment: {field} ({label})","selectedEnrichment":"Enrichment for {n} selected records","filesUploaded":"{n} files uploaded","authorDisambiguation":"Author disambiguation","affiliationStandardization":"Affiliation standardization","projectCreated":"Project created: {name}","apiEnrichment":"API enrichment","mlEnrichment":"ML enrichment","methodologyGenerated":"Methodology report generated (LLM)","fillAll":"Fill missing fields (API + ML)","countryStandardization":"Country standardization","orgRollup":"Affiliation roll-up (parent organization)","recordEdited":"Record edited ({n} fields)","analysisActivated":"Active analysis: {label}","analysisDeleted":"Analysis deleted: {label}","presetSaved":"Preset saved: {name}","presetDeleted":"Preset deleted: {name}","exported":"Export ({fmt}): {name}","exportDeleted":"Export deleted: {name}","converted":"Converted: {name}","fileDeleted":"File deleted: {name}","borderlineDecisions":"Borderline pairs: {accept} accepted / {reject} rejected / {skip} skipped"}},"recordDetail":{"title":"Record detail","noTitle":"no title","otherFields":"Other fields","groups":{"citation":"Citation","authors":"Authors & Address","categories":"Categories & Keywords","citations":"Citations","abstract":"Abstract & Full Text"},"fields":{"TI":"Title","SO":"Journal/Source","JI":"Journal (ISO)","PY":"Year","VL":"Volume","IS":"Issue","BP":"Start page","EP":"End page","PG":"Page count","DT":"Document type","LA":"Language","DI":"DOI","UT":"WoS ID","PM":"PubMed ID","PU":"Publisher","DB":"Source DB","AU":"Authors (short)","AF":"Authors (full)","C1":"Addresses","RP":"Corresponding author","EM":"Email","OI":"ORCID","RI":"Researcher ID","DE":"Keywords (Author)","ID":"Keywords Plus","WC":"WoS Categories","SC":"Subject Categories","TC":"WoS Citation Count","Z9":"Total Citations","U1":"Last 180 days","U2":"Last 5 years","NR":"Reference count","CR":"References","AB":"Abstract"},"edit":"Edit","save":"Save","saved":"{n} field(s) updated.","saveFailed":"Could not save the record.","editHint":"Edit any field below — empty fields can be filled in manually too. Saved to the active dataset (a snapshot is taken)."},"bulk":{"recordsSelected":"records selected","enrich":"Fill via API","enrichBtn":"Enrich","enrichDescription":"All missing fields of selected records will be queried from CrossRef \xb7 OpenAlex \xb7 Europe PMC \xb7 DataCite.","clearSelection":"Cancel selection","reasonPlaceholder":"Deletion reason (optional) — e.g. \'duplicate, missing DOI\'","noSelected":"No records selected","deleteFailed":"Delete failed","requestFailed":"Request failed","recordsUpdated":"{enriched}/{target} records updated","cellsFilled":"{n} cells filled","noDoiSkipped":"{n} without DOI (skipped)","apiNotFound":"{n} not found in API","deletedToast":"{deleted} records deleted, {kept} kept."},"jobs":{"starting":"Starting…","running":"Running","completed":"Completed","failed":"Failed","cancelled":"Cancelled","queued":"Queued","cancel":"Cancel","result":"Result (JSON)"},"errors":{"generic":"An error occurred","networkError":"Network error","projectNotFound":"Project not found","fileNotFound":"File not found","permissionDenied":"Permission denied","invalidInput":"Invalid input","project_not_found":"Project not found","analysis_not_found":"Analysis not found","no_active_merged_dataset":"No active merged dataset","analysis_delete_failed":"Analysis could not be deleted (file may be locked, try again later)","folder_access_denied":"You don\'t have access to this folder","csv_encoding_failed":"Could not read CSV encoding (tried UTF-8 / cp1254 / latin-1)","disambiguation_disabled_hint":"Disambiguation is off (enable it in Settings)","disambiguation_disabled":"Disambiguation is off","file_empty":"File is empty — no records to convert","file_not_found":"File not found","not_a_folder":"Exists but is not a folder","invalid_filename":"Invalid file name","invalid_mode_disambig":"Invalid mode (auto/broad/full_llm)","invalid_mode":"Invalid mode","target_folder_missing":"Target folder does not exist","target_folder_not_absolute":"Target folder must be an absolute path (e.g. C:\\\\... or /home/...)","no_raw_files":"No raw files uploaded yet","path_not_found":"Path not found","scopus_convert_failed":"Scopus CSV → XLSX conversion failed. Is the file really a Scopus CSV?","no_records_to_delete":"No records specified to delete (uids, dois or indices)","tsv_encoding_failed":"Could not read TSV encoding","wos_convert_failed":"WoS TXT → XLSX conversion failed. Is the file really WoS plain text?","decisions_empty":"decisions cannot be empty","invalid_if_exists":"if_exists must be \'rename\' | \'replace\' | \'abort\'","invalid_kind":"kind must be \'authors\' or \'affiliations\'","invalid_method":"method must be \'simple\', \'enhanced\' or \'smart\'","name_empty":"name cannot be empty","uids_or_dois_required":"uids or dois required","output_file_missing":"Output produced but file not found","job_not_found_or_uncancelable":"Job not found or cannot be canceled","job_not_found":"Job not found","no_files_to_process":"No CSV or TXT files to process (XLSX is used directly)","unknown_key":"Unknown key","unknown_source_format":"Unknown source format","format_files_exist":"files from this format already exist","unsupported_target_format":"Unsupported target format","file_read_failed":"Could not read file","file_write_failed":"Could not write file","invalid_decision":"Invalid decision","invalid_target_format":"Invalid target format","invalid_source_format":"Invalid source format","invalid_folder":"Invalid folder","invalid_path":"Invalid path","folder_list_failed":"Could not list folder","folder_create_failed":"Could not create folder","delete_failed":"Delete failed","snapshot_not_found":"Snapshot not found","field_must_be_numeric":"must be numeric","no_source_data":"No source data found — go to Step 1 (Preparing) and upload Scopus CSV or Web of Science TXT.","not_prepared":"Data is not prepared yet. Go to Step 1 (Preparing) and run “Prepare” to build the datasets before merging.","no_merged_data":"No merged dataset — run Merge first","llm_key_missing":"LLM API key not set — add it in Settings","no_au_column":"AU (authors) column not found","no_c1_column":"C1 (affiliations) column not found","no_operations":"No operations to report yet. Perform at least one step first.","methodology_not_generated":"The methodology report has not been generated yet.","llm_request_failed":"The language model request failed. Please try again.","project_delete_failed":"Could not delete the project. A file may be open or locked — close any program using it (Excel, a file browser) and try again.","no_fields_to_update":"No fields to update.","record_not_found":"Record not found."},"folderPicker":{"title":"Select Folder","subtitle":"System browser \xb7 macOS / Windows / Linux compatible","nativePicker":"Native picker","nativePickerTip":"Open browser\'s native file picker (Chrome/Edge) — backend resolves the folder name to a full path","nativePickerLoadError":"Load failed","nativePickerNoPath":"Full path for \\"{name}\\" could not be found. Pick manually from the left panel.","nativePickerMultipleMatches":"{count} possible paths found for \\"{name}\\" — which one do you want?","nativePickerError":"Native picker error","cancelManual":"Cancel, browse manually","upBtn":"Up","computerTip":"Computer / root","computer":"Computer","quickAccess":"Quick Access","loading":"Loading…","backToRoot":"Back to root","emptyFolder":"This folder is empty (no subfolders)","toSelect":"Will select","nothingSelected":"(no selection)","cancel":"Cancel","selectThis":"Select this folder"}}'),tr:JSON.parse('{"common":{"loading":"Y\xfckleniyor…","save":"Kaydet","cancel":"Vazge\xe7","delete":"Sil","confirm":"Onayla","edit":"D\xfczenle","close":"Kapat","back":"Geri","next":"İleri","yes":"Evet","no":"Hayır","ok":"Tamam","apply":"Uygula","reset":"Sıfırla","actions":"İşlemler","active":"Aktif","inactive":"Pasif","file":"dosya","files":"dosya","record":"kayıt","records":"kayıt","search":"Ara","refresh":"Yenile","download":"İndir","upload":"Y\xfckle","history":"Ge\xe7miş","noData":"Veri yok","error":"Hata","success":"Başarılı","warning":"Uyarı","info":"Bilgi","all":"T\xfcm\xfc","none":"Yok","selected":"se\xe7ili","total":"Toplam","size":"Boyut","date":"Tarih","name":"İsim","type":"T\xfcr","status":"Durum","createdAt":"Oluşturma","updatedAt":"G\xfcncelleme","showMore":"Daha fazla g\xf6ster","showLess":"Daha az g\xf6ster","show":"G\xf6ster","hide":"Gizle","open":"A\xe7","more":"Fazla","less":"Az","details":"Detaylar","summary":"\xd6zet","step":"Adım","of":"/","copy":"Kopyala","footerTagline":"Web of Science & Scopus i\xe7in kendi sunucunuzda \xe7alışan, tekrarlanabilir bibliyometrik veri hazırlama.","footerCite":"Atıf →","footerResources":"Kaynaklar","footerProject":"Proje","footerDocs":"Dok\xfcmantasyon","footerPaper":"Makale \xb7 SoftwareX","footerWebsite":"Web sitesi","footerContact":"İletişim","footerCitation":"Kara, Şahin & Dirsehan (2025) \xb7 SoftwareX","footerRights":"T\xfcm hakları saklıdır.","nextStep":"Sonraki adım","prevStep":"\xd6nceki adım","confirmTitle":"Emin misiniz?"},"nav":{"data":"Hazırlık","lockNeedPrepare":"\xd6nce 1. adımda veriyi hazırla","lockNeedMerge":"\xd6nce 2. adımda birleştir (Smart Merge)","lockNeedAdvanced":"Birleştirme sonrası \'Gelişmiş D\xfczenleme\' ile a\xe7ılır","analyses":"Veri & Birleştirme","records":"Kayıtlar & Filtreleme","ai":"Harmonizasyon","export":"Veri D\xf6n\xfcş\xfcm\xfc","projects":"Projeler","projectsHint":"\xc7alışma alanları","settings":"Ayarlar","settingsHint":"Sistem","audit":"Operasyon ge\xe7mişi","report":"Rapor","tools":"Ara\xe7lar","toolsHint":"Hızlı d\xf6n\xfcş\xfcm","source":"Kaynak","sourceHint":"GitHub v1","help":"Yardım","apiHint":"Backend docs","home":"Anasayfa","panel":{"workspaces":"\xc7alışma Alanı","system":"Sistem","resources":"Kaynaklar","locale":"Dil"}},"tools":{"title":"Ara\xe7lar","subtitle":"Bağımsız yardımcı ara\xe7lar — proje gerektirmez.","converterTitle":"Format D\xf6n\xfcşt\xfcr\xfcc\xfc","converterSubtitle":"Tek bir dosya y\xfckle, hedef formatı se\xe7, d\xf6n\xfcşm\xfcş dosyayı indir. Proje oluşturmadan \xe7alışır — ad-hoc d\xf6n\xfcş\xfcmler veya Excel\'de elle d\xfczenlediğin dosyalar i\xe7in kullanışlıdır.","step1Title":"1. Dosyayı y\xfckle","step1Hint":"S\xfcr\xfckle bırak veya tıkla. Kabul edilen: .txt .csv .tsv .xlsx (en fazla ~100 MB)","dropOrClick":"Dosyayı bırak veya tıklayıp g\xf6zat","dropToUpload":"Bırakın, y\xfckleyelim","fileSelected":"Se\xe7ildi: {name} ({size})","step2Title":"2. Kaynak formatı","step2Hint":"Y\xfcklediğin dosya ne t\xfcr?","step3Title":"3. Hedef formatı","step3Hint":"Hangi formata d\xf6n\xfcşt\xfcrmek istiyorsun?","outputName":"\xc7ıktı dosya adı (opsiyonel)","outputNamePlaceholder":"\xf6rn: dataset_temizlenmis","convertBtn":"D\xf6n\xfcşt\xfcr & indir","converting":"D\xf6n\xfcşt\xfcr\xfcl\xfcyor…","successMsg":"{records} kayıt \xb7 {columns} kolon başarıyla d\xf6n\xfcşt\xfcr\xfcld\xfc","downloadAgain":"Tekrar indir","resetBtn":"Başka dosya d\xf6n\xfcşt\xfcr","errTitle":"D\xf6n\xfcş\xfcm başarısız","noFileSelected":"\xd6nce bir dosya se\xe7","fileTooBig":"Dosya \xe7ok b\xfcy\xfck (en fazla 100 MB)","section":{"convert":"D\xf6n\xfcşt\xfcr","ecosystem":"Ara\xe7 ekosistemi","ecosystemHint":"Her hedef formatı kullanan yaygın ara\xe7lar. Tek satırlık a\xe7ıklama i\xe7in chip\'lerin \xfcst\xfcne gel."},"sourceFormats":{"wos":"WoS d\xfcz metin","scopus_csv":"Scopus CSV","xlsx":"Excel (.xlsx)","csv":"D\xfcz CSV","tsv":"TSV / sekme ayrımlı"},"targetFormats":{"wos":"WoS d\xfcz metin","vos":"VOSviewer TSV","bib":"BibTeX","ris":"RIS","xlsx":"Excel (.xlsx)","csv":"CSV","tsv":"TSV"}},"home":{"title":"BibexPy V2","subtitle":"Bibliyometrik veri hazırlama","heroTitle":"Scopus ve Web of Science bibliyometrik senfonisini uyumlu hale getirir","heroSubtitle":"BibexPy V2, ham veritabanı exportlarını VOSviewer, Biblioshiny ve daha geniş bibliyometri akışı i\xe7in temiz, tekilleştirilmiş ve zenginleştirmeye hazır veri setlerine d\xf6n\xfcşt\xfcr\xfcr.","heroChecks":["Tamamen self-hosted|Kendi makinende \xe7alışır — buluta veri \xe7ıkmaz","A\xe7ık kaynak iş akışı|GPL-3.0 — incele, \xe7atalla, geliştir","Audit dostu \xe7ıktılar|Her adım metodoloji b\xf6l\xfcm\xfc i\xe7in kayıt altında"],"openProjects":"Projelere git","experimental":"deneysel","workflowTitle":"İş akışı","tagline":"Scopus + Web of Science \xb7 DOI tabanlı tekilleştirme \xb7 Multi-stage eşleştirme","features":["D\xf6n\xfcş\xfcm|CSV ↔ XLSX ↔ WoS TXT, BibTeX, RIS, VOSviewer.","Birleştirme|DOI tabanlı tekilleştirme, Simple ve Enhanced merge.","Zengin filtre|Yıl, dergi, yazar, kategori, full-text, kalite/eksik veri.","API + ML Enrichment|CrossRef, OpenAlex, Scopus, Unpaywall + TF-IDF tahminleri.","AI Disambiguation*|DeepSeek LLM ile yazar adı + affiliation normalizasyonu.","Export|WoS, VOSviewer, BibTeX, RIS, CSV, XLSX — filtered subset destekli."],"workflow":["Proje|Ham dosyaları, analizleri, \xe7ıktıları ve işlem ge\xe7mişini aynı yerel \xe7alışma alanında tut.","Veri Hazırlığı|Scopus CSV, Web of Science TXT veya tabloları y\xfckle; BibexPy kaynak tabloları otomatik konsolide eder.","Analiz Birleştirme|Simple, Enhanced veya Smart eşleştirmeyi bağımsız analizler olarak \xe7alıştır; eski koşuları koru.","Kayıtlar & Kalite|Aktif veri setini incele, filtrele, eksik alanları kontrol et ve snapshotları y\xf6net.","Harmonizasyon|API, ML ve kontroll\xfc AI inceleme ile metaveri, yazar ve kurum adlarını standartlaştır.","Dışa Aktarım|WoS, VOSviewer, Biblioshiny, BibTeX, RIS, CSV veya Excel \xe7ıktıları \xfcret.","Rapor|Proje işlem raporunu ve audit izini \xe7alışmaya bağlı tut."],"workflowHeadline":"Yerel proje alanından izlenebilir bibliyometrik \xe7ıktılara.","workflowBody":"G\xfcncel akış tek bir self-hosted proje etrafında d\xf6ner: dosyaları hazırla, tekrarlanabilir birleştirme analizleri oluştur, aktif veri setini incele, metaveriyi harmonize et, analiz ara\xe7larına aktar ve işlem raporunu koru.","ctaTitle":"Veri setini hazırlamaya başla","ctaBody":"Yeni bir proje oluştur, Scopus CSV ve Web of Science TXT dosyalarını y\xfckle — BibexPy ağır işleri yapsın: tekilleştirme, alan birleştirme, zenginleştirme.","ctaButton":"Proje başlat","ctaSecondary":"Sadece hızlı d\xf6n\xfcş\xfcm m\xfc istiyorsun? Bağımsız {tools} sayfasını dene.","ctaSecondaryLink":"Ara\xe7lar","toolsTitle":"Sadece hızlı bir d\xf6n\xfcş\xfcm m\xfc gerekiyor?","toolsBody":"Ara\xe7lar sayfası, tek seferlik format d\xf6n\xfcş\xfcmleri i\xe7in hafif bir yardımcı alandır. Tam proje, merge ge\xe7mişi veya analiz \xe7alışma alanı gerekmiyorsa burayı kullan.","toolsLink":"Ara\xe7lar\'a git","capabilityTitle":"Hazırla, uzlaştır, dışa aktar.","capabilityBody":"Yeni anasayfa BibexPy\'nin araştırmacıdan aldığı asıl y\xfck\xfc \xf6ne \xe7ıkarır: dosya temizliği, kaynak eşleştirme ve g\xfcvenilir \xe7ıktı \xfcretimi.","capabilities":["Hazırla|Kaynak exportlarını temizle, kolonları doğrula ve her ham dosyayı izlenebilir tut.","Uzlaştır|Kayıtları DOI mantığı, alan uyumlulaştırma ve kayıp kayıt takibiyle birleştir.","Dışa aktar|Temiz veri setlerini VOSviewer, Biblioshiny, referans y\xf6neticileri ve tablolar i\xe7in \xfcret."],"assurances":["Tekrarlanabilir|Her operasyon y\xf6ntem b\xf6l\xfcm\xfcnde raporlanabilecek bir audit izi bırakır.","Yerel ve \xf6zel|Ham veri setleri, sen harici API se\xe7medik\xe7e makinede kalır.","Self-hosted|FastAPI ve Next.js kendi yerel araştırma \xe7alışma alanın olarak \xe7alışır.","Genişletilebilir|Proje olgunlaştık\xe7a enrichment servisleri, inceleme kuralları ve \xe7ıktı hedefleri eklenebilir."],"aboutTitle":"BibexPy nedir?","aboutBody":"BibexPy, her bibliyometrik \xe7alışmanın en sıkıcı kısmını otomatikleştiren self-hosted, a\xe7ık kaynak bir ara\xe7tır: <strong>veri hazırlama</strong>. Aynı yayını farklı alan kodları, formatlar ve adlandırma kuralları ile tanımlayan Scopus ve Web of Science kayıtlarını uyumlulaştırır; VOSviewer, bibliometrix, CiteSpace ve herhangi bir referans y\xf6neticisi i\xe7in hazır temiz veri setleri \xfcretir.","aboutPoint1Title":"\xd6nce veri hazırlama","aboutPoint1Body":"Her bibliyometrik makale zamanının ~%40\'ını veri temizliğine harcar. BibexPy tekilleştirme, alan birleştirme, kayıp kayıt takibi ve audit trail \xfcretimini halleder — analize odaklan.","aboutPoint2Title":"Tekrarlanabilirlik tasarımdan","aboutPoint2Body":"T\xfcm merge, filtre, zenginleştirme ve disambiguation adımları audit log\'a yazılır. Yıkıcı işlemler \xf6ncesi snapshot alınır. Y\xf6ntemsel olarak şeffaf — hakem dostu.","aboutPoint3Title":"Self-hosted, bulutsuz","aboutPoint3Body":"Ham verin makineyi terk etmez. Backend (FastAPI) + Frontend (Next.js) lokalde \xe7alışır. API/LLM \xe7ağrıları opt-in olup yalnızca belirli kayıtlar i\xe7in yapılır.","citationTitle":"BibexPy\'yi atıfla","citationBody":"BibexPy\'yi akademik \xe7alışmada kullanıyorsan l\xfctfen SoftwareX makalemize atıf ver:","citationApa":"Kara, B. C., Şahin, A., & Dirsehan, T. (2025). BibexPy: Harmonizing the bibliometric symphony of Scopus and Web of Science. SoftwareX, 30, 102098.","citationDoi":"doi.org/10.1016/j.softx.2025.102098","citationOpenPaper":"Makaleyi a\xe7","citationCopyBib":"BibTeX\'i kopyala","citationCopied":"Kopyalandı!","authorsTitle":"Yazarlar","authorsBody":"BibexPy şu kişiler tarafından geliştirilip s\xfcrd\xfcr\xfclmektedir:","authors":["Burak Can Kara, Ph.D.|İnşaat B\xf6l\xfcm\xfc, Merzifon Meslek Y\xfcksekokulu, Amasya \xdcniversitesi|0000-0002-6933-0759|burak-can-kara","Alperen Şahin, Ph.D.|Elektronik Ticaret ve Y\xf6netimi B\xf6l\xfcm\xfc, İstanbul Esenyurt \xdcniversitesi|0000-0001-9563-6543|alperen-sahin","Taşkın Dirsehan, Ph.D.|İşletme B\xf6l\xfcm\xfc, Marmara \xdcniversitesi|0000-0002-3599-0951|taskin-dirsehan"],"linksTitle":"Proje bağlantıları","linksRepoLabel":"GitHub deposu (v1 CLI)","linksPaperLabel":"SoftwareX makalesi","linksDocsLabel":"Dok\xfcmantasyon","linksLicenseLabel":"GPL-3.0 lisansı","heroImageAlt":"BibexPy kaynaktan \xe7ıktıya \xfcr\xfcn g\xf6rseli","workflowImageAlt":"BibexPy proje alanından rapora uzanan iş akışı"},"projects":{"title":"Projeler","subtitle":"Her proje kendi ham verisi, analizleri ve \xe7ıktılarını ayrı tutar.","newProject":"Yeni proje","newProjectPlaceholder":"Yeni proje adı (\xf6rn: Doktora tezi — s\xfcrd\xfcr\xfclebilir tedarik zinciri)","noProjects":"Hen\xfcz proje yok","noProjectsHint":"Yukarıdaki kutuya bir ad yazıp \\"Oluştur\\" deyin.","projectName":"Proje adı","projectDescription":"A\xe7ıklama","create":"Oluştur","deleteConfirm":"Proje silinsin mi?","deleteWarning":"Bu işlem y\xfcklenmiş t\xfcm veriyi, analizleri ve \xe7ıktıları kalıcı olarak siler.","fileCount":"{n} dosya","lastUpdated":"Son g\xfcncelleme"},"data":{"title":"Veri","subtitle":"Adım 1 — Ham Scopus CSV ve/veya Web of Science TXT dosyalarını y\xfckle. Sistem her kaynağı tek bir Excel\'de konsolide eder.","stepBadge":"Adım 1 / 5","statusReady":"Hazır","statusUnprepared":"Hazırlanmamış","statusAwaiting":"Veri bekleniyor","continueToAnalyses":"Analizlere ge\xe7","rawFilesHeader":"Ham dosyalar","consolidatedFilesHeader":"Hazırlanmış dosyalar","dragDrop":"Dosyaları s\xfcr\xfckle veya tıkla","dropToUpload":"Bırakın, y\xfckleyelim","dragDropDescription":"Scopus {csv}, Web of Science {txt}, Excel {xlsx}","filesUploaded":"{n} dosya y\xfcklendi","uploadFailed":"Y\xfckleme başarısız","ready":"Veri y\xfcklendi ve hazırlandı","readyDescription":"Ham verin y\xfckl\xfc ve her kaynak (Scopus / WoS) tek bir Excel\'de konsolide edilmiş durumda. Sıradaki adım: Analizler sayfasında iki kaynağı tek dataset\'e birleştirme.","totalRawFiles":"Toplam ham dosya","scopus":"Scopus","wos":"Web of Science","prepareTitle":"Veri hazırlama","prepareSectionTitle":"Ham dosyaları y\xfckle","prepareDescription":"Sistem her kaynağı (Scopus / WoS) ayrı ayrı tek bir Excel dosyasında konsolide eder. Bu adımı manuel y\xf6netmen gerekmez. (Scopus + WoS birleştirmesi sonraki adımda yapılır.)","prepareBtn":"Hazırla","prepareAgainBtn":"Yeniden hazırla","addNewBtn":"Yeni veri ekle","addNewHint":"Mevcut ham dosyaların korunur — sadece konsolide kaynak Excel\'leri sıfırlanır.","addMoreFiles":"Başka dosya ekle","resetTitle":"Hazırlığı sıfırla ve yeni veri ekle?","resetSubtitle":"Yeni dosyaları ekleyip tekrar \'Hazırla\' yapabilmen i\xe7in","willBeDeleted":"Silinecek (sadece hazırlanmış Excel\'ler)","willBePreserved":"Korunacak","rawPreservedNote":"y\xfckl\xfc ham dosyan — listede kalır.","previousReset":"\xd6nceki hazırlık silindi (ham dosyaların korundu)","previousResetHint":"Yeni dosyaları y\xfckle, sonra \\"Hazırla\\" tıkla — eski ve yeni ham dosyaların hepsi birlikte yeni {scopusFile} ve {wosFile} \xfcretecek (her kaynak i\xe7in tek konsolide Excel).","stale":"Hazırlık g\xfcncel değil — ham dosyalar değişti. \\"Yeniden hazırla\\" tıklayarak hazırlanmış Excel\'leri g\xfcncelleyebilirsin.","uploadedFilesHeader":"Ham dosyalar","consolidatedHeader":"Hazırlanmış dosyalar","noConsolidatedFiles":"Hen\xfcz hazırlanmış dosya yok","noPreparedFound":"Hazırlanmış dosya bulunamadı.","preparedNotFound":"Hazırlanmış dosyalar bulunamadı.","scopusBadge":"Scopus","wosBadge":"WoS","otherBadge":"Diğer","kindLabels":{"scopusCSV":"Scopus CSV","wosTXT":"WoS TXT","xlsx":"Excel","unknown":"Bilinmiyor"},"deleteFileConfirm":"Ham dosya silinsin mi?\\n\\n{name}\\n\\nNot: Konsolide kaynak dosyaları silinmez, ama i\xe7erikleri eskidi — \\"Yeniden hazırla\\" tıklayarak g\xfcncelleyebilirsin.","deleteProcessedConfirm":"Hazırlanmış dosya silinsin mi?\\n\\n{name}\\n\\nHam dosyaların korunur. \\"Yeniden hazırla\\" tıklayarak yeniden \xfcretebilirsin.","preparedHint":"\\"Hazırla\\" tıkladığında eski ham dosyaların + yeni ekleyeceklerin birlikte tek bir {scopusFile} ve {wosFile} \xfcretir.","noFilesYet":"Hen\xfcz dosya yok.","preparationFailed":"Hazırlama başarısız","resetFailed":"Sıfırlama başarısız","modal":{"addNewBtn":"Sıfırla, yeni veri ekleyeceğim"}},"analyses":{"title":"Analizler","subtitle":"Ham Scopus/WoS dosyalarını y\xfckle ve Smart Merge ile DOI-tabanlı tekilleştirip tek veri setine birleştir — hazırlık otomatik. Her birleştirme bağımsız bir analiz olarak saklanır.","stepBadge":"Adım 1 / 5","activeBadge":"Aktif","active":"Aktif analiz","noActive":"Aktif analiz yok","newAnalysis":"Yeni analiz","newAnalysisDrawerTitle":"Yeni analiz","newAnalysisDrawerHint":"Bir algoritma se\xe7 — mevcut aktif analiz korunur, yeni bir klas\xf6r oluşur.","cancel":"Vazge\xe7","list":"Analizler","listHint":"Her birleştirme bağımsız bir analiz klas\xf6r\xfc olarak saklanır. Aktif analiz Records / Filter / Quality sayfalarında kullanılır.","otherAnalyses":"Diğer analizler","otherAnalysesHint":"Ge\xe7miş analizler korunur. \\"Aktif yap\\" tıklayarak birini Records / Filter / Quality\'de kullanabilirsin.","legacy":"Eski","show":"G\xf6ster","hide":"Gizle","activate":"Aktif yap","deleteConfirm":"Onayla","deleteAnalysis":"Analizi sil","noAnalysisYet":"Hen\xfcz analiz yok","noAnalysisHint":"Aşağıdaki algoritmalardan birini se\xe7erek ilk analizini başlat.","openInRecords":"Hazırlık & Filtre","statRecords":"Kayıt","statDedup":"Tekilleştirme","statDuplicates":"duplicate","statMatches":"eşleşme","statColumns":"kolon","deleteFailed":"Silme başarısız","activationFailed":"Aktivasyon başarısız","method":{"simple":"Simple","enhanced":"Enhanced","smart":"Smart","unknown":"Eski"},"infoBanner":{"title":"Birleştirme nasıl \xe7alışır?","body":"Scopus ve Web of Science aynı yayını farklı alanlar/bi\xe7imlerle ifade eder. Bu adım iki kaynağı {doi} \xfcst\xfcnden eşleştirir, ortak kayıtları teklemeden saklar, \xe7akışmaları \xe7\xf6zer.","footer":"Her birleştirme bağımsız bir analiz olarak saklanır — sonradan analizler arası ge\xe7iş yapabilir, eskileri g\xf6r\xfcnt\xfcleyebilir, gerekirse silebilirsin. Hi\xe7bir kayıt silinmez — eşleşmeyen WoS/Scopus satırları \\"Lost Records\\" dosyalarına ayrılır."}},"algoCard":{"moreInfo":"Detaylı bilgi","recommended":"\xd6nerilen","academic":"Akademik","rerun":"Yeniden \xe7alıştır","newAnalysisOfMethod":"Yeni {method} analizi","rerunNote":"Mevcut analiz korunur — yeni bir analiz klas\xf6r\xfc oluşur.","speed":"Hız","howItWorks":"Nasıl \xe7alışır","useCases":"Kullanım alanları","outputs":"\xc7ıktılar","limitations":"Sınırlamalar","citation":"Atıf","related":"İlgili kaynaklar","close":"Kapat","escClose":"ESC veya dış alana tıklayarak kapat","startBtnSimple":"Simple başlat","startBtnEnhanced":"Enhanced başlat","startBtnSmart":"Smart başlat","simple":{"title":"Simple Merge","tagline":"Hızlı, deterministik","summary":"DOI eşleşen kayıtlarda Scopus satırını siler, WoS satırını korur.","speedHint":"hızlı \xb7 saniyeler","howItWorks":["T\xfcm WoS + Scopus kayıtları tek dataframe\'de concat edilir.","DOI\'si dolu kayıtlar gruplanır; tekrarlanan DOI\'lerden sadece ilk satır (WoS) kalır.","DOI\'siz kayıtlar i\xe7in: temizlenmiş başlık + yıl birebir eşleşmesi ile tekilleştirme.","Alanlar tek bir kaynaktan gelir (WoS varsa WoS, yoksa Scopus) — birleştirme yok."],"useCases":["Hızlı keşif analizi gerekiyorsa","Veri kalitesi zaten her iki kaynakta da y\xfcksekse","Sonradan manuel temizleme yapılacaksa"],"outputs":[{"name":"Merged_Simple.xlsx","desc":"Ana birleştirilmiş dataset"},{"name":"Statistic.xlsx","desc":"Alan-bazlı doluluk istatistikleri"},{"name":"Statistic.txt","desc":"Kaba sayım \xf6zeti"}],"limitations":["DOI normalizasyonu yok (\'https://doi.org/\' farklı sayılır)","Title fuzzy match yok — sadece birebir alphanumeric","Yıl toleransı yok (online-first vs published farkı)","Eşleşme g\xfcven skoru \xfcretilmez"]},"enhanced":{"title":"Enhanced Merge","tagline":"Cross-database alan tamamlama","summary":"Tekilleştirme + boş alanları diğer kaynaktan doldurma (WC↔SC cross-fill).","speedHint":"yavaş \xb7 ~1-3 dk/1k kayıt","howItWorks":["Simple Merge\'in t\xfcm adımları uygulanır.","DOI gruplarında alanlar \'merge_values()\' ile birleştirilir — boş olmayan değerlerin union\'u (; ile join).","WC ↔ SC cross-fill: biri boşsa diğerinden doldurulur.","RP_WOS + RP_SCOPUS hibrit birleşim (WoS \xf6ncelikli).","Yazar isimleri WoS formatına normalize edilir.","DB s\xfctunu \'BIBEXPY\' olarak işaretlenir."],"useCases":["En zengin veri \xe7ıktısı i\xe7in (genel \xf6neri)","WoS\'ta eksik AB / DE; Scopus\'ta eksik WC varsa","bibliometrix / VOSviewer analizine hazırlık"],"outputs":[{"name":"merged_enhanced.xlsx","desc":"Ana birleştirilmiş dataset (alan birleştirme uygulanmış)"},{"name":"Statistic.xlsx","desc":"Genel + alan-bazlı doluluk istatistikleri"},{"name":"Lost_Wos_Records.xlsx","desc":"Eşleşemeyen WoS kayıtları"},{"name":"Lost_Scopus_Records.xlsx","desc":"Eşleşemeyen Scopus kayıtları"}],"limitations":["Hangi alanın hangi kaynaktan geldiği takip edilmez","\xc7akışma kararları audit\'lenmez","Title+Year birebir eşleşmesi yanlış-pozitif riski taşır (\xf6rn. \'Introduction\' başlıklı edit\xf6ryal yazılar)"]},"smart":{"title":"Smart Merge","tagline":"Multi-stage + Caputo 2024","summary":"6 aşamalı \xe7ok kademeli eşleşme + alan tercih kuralları + audit trail.","speedHint":"orta \xb7 ~1-2 dk/1k kayıt","howItWorks":["Faz 1 (Normalize): DOI, başlık, yıl, yazar soyadı, ISSN/PMID/UT kanonik forma indirgenir.","Faz 2 (Blocking): Yıl + ilk yazar soyad-harfi ile bloklara ayrılır (O(n\xb2) → O(n\xb7k)).","Faz 3 (Multi-stage eşleşme): Stage 0 negative rules (PMID/ISSN mismatch → reject) → Stage 1 DOI exact (conf 1.0) → Stage 2 PMID exact (0.99) → Stage 3 Title JW ≥ 0.92 + Yıl\xb11 + Surname (0.95) → Stage 4 Journal+Volume+Pages (0.90) → Stage 5 Borderline JW ∈ [0.80, 0.92) (manuel onay).","Faz 4 (Field merge): Caputo 2024 sabit defaults — TC/CR/NR→WoS, AB/AU/AF/C1→Scopus, DE/ID→union, WC/SC→cross-fill.","Faz 5 (Audit): match_audit.xlsx + conflict_log.xlsx + borderline_queue.xlsx \xfcretilir.","Faz 6 (Borderline review): Manuel onay UI veya opsiyonel LLM kararı."],"useCases":["Akademik tekrarlanabilirlik gereken \xe7alışmalar (SCI/SSCI makale yazımı)","DOI\'siz eski yayınlar (pre-2000) / tutarsız metadata","Sistematik review veri hazırlama (PRISMA-ScR uyumlu audit)","Audit trail / hakem denetimine a\xe7ık \xe7alışmalar"],"outputs":[{"name":"merged_smart.xlsx","desc":"Ana dataset (UID + match_method + confidence kolonları)"},{"name":"match_audit.xlsx","desc":"Her eşleşmenin DOI, stage, confidence, gerek\xe7esi"},{"name":"conflict_log.xlsx","desc":"Alan-bazlı \xe7akışmaların kaynak kararları"},{"name":"borderline_queue.xlsx","desc":"Manuel onay bekleyen \xe7iftler (JW 0.80-0.92)"},{"name":"Lost_Smart_Wos_Records.xlsx","desc":"Eşleşemeyen WoS kayıtları"},{"name":"Lost_Smart_Scopus_Records.xlsx","desc":"Eşleşemeyen Scopus kayıtları"},{"name":"Statistic_Smart.xlsx","desc":"General + Field stats"}],"limitations":["Simple/Enhanced\'tan ~2x daha yavaş (blocking ile azaltılmış)","Title+Year+Surname i\xe7in 0.92 katı eşiği bazı duplicate\'ları ka\xe7ırabilir (borderline kuyruğunda g\xf6sterilir)"],"citation":{"title":"Caputo, A., Pizzi, S., Pellegrini, M. M., & Dabić, M. (2024)","journal":"Automatic Merging of Scopus and Web of Science Data — Annals of Data Science, 11(3), 1023–1047.","related":["Hammerton et al. (2013) — Rule-based deduplication. Database, bat086.","Borissov et al. (2022) — Deduklick. Systematic Reviews, 11, 172.","Winkler (1990) — Jaro-Winkler similarity. ASA Survey Research Methods."]}}},"merge":{"summaryHeader":"Aktif analiz","summaryNote":"Bu analizin sonucu Kayıtlar & Filtreleme, Harmonizasyon ve Veri D\xf6n\xfcş\xfcm\xfc adımlarında kullanılır.","uploadTitle":"Veri dosyaları","oldMerge":"Eski birleştirme — yeni veri eklendi","currentMerge":"Mevcut analiz","backToActive":"Aktif analize d\xf6n","narrative":{"title":"Y\xf6ntem paragrafı (kopyalamaya hazır)","hint":"Bir makalenin veri hazırlama b\xf6l\xfcm\xfcne yapıştırabileceğin otomatik \xf6zet.","copy":"Kopyala","copied":"Panoya kopyalandı","template":"{date} tarihinde bir veri tabanı birleştirme ve yinelenen kayıt ayıklama işlemi ger\xe7ekleştirildi. İşleme Scopus\'tan {scopus} ve Web of Science\'tan {wos} kayıt dahil edildi (toplam {total_input} kayıt). Smart Merge algoritması veri k\xfcmeleri arasında {duplicates} yinelenen kayıt belirledi. Yinelenenlerin ayıklanmasının ardından, nihai birleştirilmiş veri k\xfcmesi {total} benzersiz kayıttan oluştu."},"staleHint":"Yeni ham dosyalar eklendi — aktif analiz eski veriye dayanıyor. Smart Merge ile yeni analiz oluştur.","generalStats":"Genel istatistikler","stats":{"mergedRecords":"Birleştirilmiş kayıt","wosInput":"WoS girişi","scopusInput":"Scopus girişi","duplicatesRemoved":"Duplicate atıldı","columns":"kolon","totalInput":"toplam giriş","dedupRate":"tekilleştirme","commonColumns":"ortak kolon"},"classic":{"simpleHeader":"Simple Merge — Sonu\xe7lar","enhancedHeader":"Enhanced Merge — Sonu\xe7lar","summaryBadge":"{duplicates} duplicate \xb7 %{rate} tekilleştirme","simpleDescription":"DOI tabanlı tekilleştirme uygulandı. Aynı DOI\'li WoS + Scopus satırlarından sadece WoS satırı tutuldu; alan birleştirme yapılmadı.","enhancedDescription":"Tekilleştirme + cross-database alan tamamlama uygulandı. WoS ve Scopus aynı yayını i\xe7eren satırların alanları birleştirildi; boş alanlar diğer kaynaktan dolduruldu.","fieldRulesHeader":"Alan kuralları","simpleHint":"Simple Merge alanları birleştirmez — daha zengin sonu\xe7 i\xe7in Enhanced veya Smart Merge kullan.","enhancedHint":"Enhanced Merge hangi alanın hangi kaynaktan geldiğini kaydetmez. Akademik audit trail (eşleşmenin gerek\xe7esi, \xe7akışma kararı) i\xe7in Smart Merge \xf6ner.","simpleFieldRules":[{"field":"DI","rule":"DOI eşleştirme — DOI dolu satırlardan ilk WoS satırı tutulur"},{"field":"TI + PY","rule":"DOI yoksa: temizlenmiş başlık + yıl birebir karşılaştırması"},{"field":"Diğer alanlar","rule":"Tek kaynaktan gelir (WoS \xf6ncelik, yoksa Scopus) — alan birleştirme yok"}],"enhancedFieldRules":[{"field":"DI \xb7 UT \xb7 PM","rule":"Kimlik eşleştirme — DOI / WoS UT / PubMed ID birebir"},{"field":"AB, AU, AF, DE, ID, WC, SC","rule":"merge_values() — boş olmayan değerlerin union\'u (; ile birleştirme + dedup)"},{"field":"WC ↔ SC","rule":"Cross-fill — biri boşsa diğerinden tamamlanır"},{"field":"RP","rule":"Hibrit RP_WOS + RP_SCOPUS (WoS \xf6ncelikli)"},{"field":"AU","rule":"WoS yazar format normalizasyonu (Smith J → \'Smith, J.\')"}]},"smart":{"panelTitle":"Smart Merge — Eşleşme Detayları","matches":"eşleşme","matchStagesHeader":"Eşleşme aşamaları (Hammerton 2013 + Caputo 2024)","fieldSourceHeader":"\xc7akışma kaynak dağılımı (Caputo 2024)","fieldSourceNote":"{conflicts} alan \xe7akışması \xe7\xf6z\xfcld\xfc","conflicts":"\xe7akışma","borderlinePending":"bekleyen borderline","borderlineTotal":"toplam borderline","borderlineNote":"{pending} belirsiz \xe7ift ayrı tutuldu (toplam {total}). İstersen Filtre adımındaki \\"Belirsiz \xc7iftler\\" panelinden inceleyebilirsin.","openAudit":"Ge\xe7miş panelini a\xe7","detailedReport":"Detaylı Rapor","detailedReportNote":"Yapılan t\xfcm eşleştirme kararları, hangi aşamada hangi g\xfcven ile alındığı, \xe7akışma \xe7\xf6z\xfcmleri ve borderline\'a yollanan \xe7iftler tam olarak audit log\'a yazılır. Akademik tekrarlanabilirlik i\xe7in saklayabilirsiniz."},"files":{"title":"\xdcretilen Dosyalar","mainDataset":"Ana birleştirilmiş veri","lostRecords":"Eşleşemeyen kayıtlar (Lost Records)","lostNote":"{wos} WoS \xb7 {scopus} Scopus kaydı DOI ile eşleşmedi","stats":"İstatistik raporları","smartAudit":"Smart Merge audit dosyaları","smartAuditNote":"Eşleşme detayları, \xe7akışma kararları ve borderline kuyruğu","other":"Diğer"},"branch":{"title":"Şimdi ne yapmak istersin?","exportTitle":"Veriyi indir & raporla","exportBody":"Birleştirilmiş veriyi indir, dışa aktar ve metodoloji raporunu oluştur — filtrelemeye gerek yok.","continueTitle":"Devam et → Filtrele","continueBody":"Kayıtları filtrele, alan kalitesini kontrol et, belirsiz \xe7iftleri incele ve zenginleştir."},"done":{"title":"Birleştirme tamamlandı \uD83C\uDF89","body":"Verilerin tek veri setinde birleştirildi. Şimdi sonu\xe7ları dışa aktar veya rapor oluştur. Detaylı d\xfczenleme istersen aşağıdaki Gelişmiş\'i a\xe7.","exportTitle":"Export\'a Git","exportBody":"WoS \xb7 VOSviewer \xb7 BibTeX \xb7 RIS \xb7 Excel formatlarında indir.","reportTitle":"Report\'a Git","reportBody":"Bibliyometrik metodoloji ve \xf6zet raporunu oluştur."},"advanced":{"title":"Gelişmiş","hint":"(opsiyonel) detaylı d\xfczenleme, eşleşme detayları, \xfcretilen dosyalar","filterTitle":"Filtrele & D\xfczenle","filterBody":"Kayıtları filtrele, alanları d\xfczelt, belirsiz \xe7iftleri incele.","harmonizeTitle":"Harmonize Et","harmonizeBody":"Yazar / kurum / \xfclke isimlerini birleştir ve standartlaştır."},"next":{"downloadTitle":"Veriyi İndir","downloadBody":"Sonu\xe7ları dışa aktar (WoS \xb7 VOSviewer \xb7 BibTeX \xb7 RIS \xb7 Excel) ve raporla.","advancedTitle":"Gelişmiş D\xfczenleme","advancedBody":"Filtrele, alanları d\xfczelt, harmonize et — ileri adımları (3-4) a\xe7ar."},"noMerge":{"title":"Hen\xfcz analiz yok","hint":"Yukarıdaki Smart Merge ile başlat."}},"help":{"jw":"Jaro-Winkler: başlıklar i\xe7in 0–1 arası metin benzerlik skoru. Eşik ve \xfczeri \xe7iftler aynı yayın sayılır; altındakiler ayrı tutulur. 0.88 dengeli bir varsayılandır.","blockingThreshold":"Blocking eşiği (0–1): iki isim/kurumun aynı aday gruba (inceleme i\xe7in) d\xfcşmesi i\xe7in ne kadar benzer olması gerektiği. D\xfcş\xfck = daha geniş ağ (daha \xe7ok aday, daha yavaş); y\xfcksek = daha katı.","autoApprove":"Otomatik onay eşiği (0–1): bu benzerlik ve \xfczeri \xe7iftler AI/manuel inceleme olmadan otomatik birleştirilir. Yanlış birleştirmeyi \xf6nlemek i\xe7in y\xfcksek tutun (\xf6r. 0.95)."},"borderline":{"title":"Belirsiz \xc7iftler — İncele (opsiyonel)","description":"Smart Merge bu \xe7iftleri kesin eşleştiremedi (JW 0.80–0.92) ve otomatik olarak AYRI tuttu. İstersen aynı yayın olanları burada birleştirebilirsin.","loading":"Borderline kuyruğu y\xfckleniyor…","refresh":"Yenile","filterPending":"Bekleyen","filterAll":"T\xfcm\xfcn\xfc g\xf6ster","selectAllVisible":"T\xfcm\xfcn\xfc se\xe7","clearVisible":"Temizle","selectAllHint":"Listelenen t\xfcm \xe7iftleri \'birleştir\' işaretle","reviewToggle":"İncele","bulkMark":"Toplu işaretle","bulkConfirm":"Kabul edilenler i\xe7in snapshot alınacak ve dataset g\xfcncellenecek. Devam?","loadFailed":"Y\xfcklenemedi","applyFailed":"Uygulama başarısız","noBorderline":"✓ Hi\xe7 borderline \xe7ift yok — Smart Merge t\xfcm eşleşmeleri y\xfcksek g\xfcvenle yaptı.","noFilterMatch":"Mevcut filtreyle eşleşen \xe7ift yok.","accept":"Aynı yayın","acceptAccepted":"✓ Aynı yayın (kabul)","reject":"Farklı yayın","rejectRejected":"✗ Farklı yayın (red)","skip":"Atla","applyAccept":"JW ≥ {threshold} olanları kabul et","applySelection":"Se\xe7imleri uygula","pending":"bekliyor","accepted":"kabul","rejected":"red","noBorderlineHint":"Smart Merge borderline eşleşme \xfcretmedi veya hepsi karar verildi.","fields":{"title":"Başlık","year":"Yıl","surname":"Soyad","journal":"Dergi","volume":"Cilt","doi":"DOI"},"confShort":"g\xfcven","appliedToast":"{applied} kayıt g\xfcncellendi. Bekleyen: {pending}."},"records":{"title":"Hazırlık & Filtre","subtitle":"Filtre uygula, kayıt y\xf6net, alan kalitesini kontrol et.","stepBadge":"Adım 2 / 5","totalRecords":"{n} kayıt","matchingRecords":"eşleşen kayıt","queryFailed":"Sorgu başarısız","exportFiltered":"Filtreyi export et","goToMerge":"Birleştirmeye git","dashboardOpen":"Dashboard a\xe7","dashboardClose":"Dashboard kapat","dashboardShow":"Dashboard\'u g\xf6ster","dashboardHide":"Dashboard\'u gizle","filterApplied":"Filtre uygulandı \xb7 {total} kayıttan {n}","noRecords":"Kayıt yok","loadingRecords":"Kayıtlar y\xfckleniyor…","openFilter":"Filtreler","closeFilter":"Kapat","search":"Başlık / yazar / \xf6zet i\xe7inde ara…","selected":"{n} se\xe7ili","selectAll":"T\xfcm\xfcn\xfc se\xe7","clearSelection":"Se\xe7imi temizle","deleteSelected":"Se\xe7ili kayıtları sil","enrichSelected":"Se\xe7ili kayıtları zenginleştir","deleteConfirm":"{n} kayıt silinsin mi?","deleteWarning":"Silmeden \xf6nce snapshot alınır — sonradan geri y\xfckleyebilirsin.","nextStepTitle":"Sıradaki adım?","nextStepSubtitle":"Adım 4 (Harmonizasyon) opsiyoneldir. Semantik temizliğe ihtiyacın yoksa doğrudan Veri D\xf6n\xfcş\xfcm\xfc\'ne ge\xe7ebilirsin.","nextStepAITitle":"AI ile cila","nextStepAIBody":"Yazar / affiliation / anahtar kelime varyantlarını birleştir (aynı şey farklı yazılmış). Deterministik kuralın yetmediği yerlerde LLM kullanılır.","nextStepAIBtn":"Harmonizasyon\'u a\xe7","nextStepAIBadge":"Opsiyonel \xb7 Adım 4","nextStepExportTitle":"AI\'ı atla, Veri D\xf6n\xfcş\xfcm\xfc\'ne ge\xe7","nextStepExportBody":"Veri zaten birleştirildi, filtrelendi ve kalite kontrol\xfcnden ge\xe7ti. Doğrudan WoS / VOSviewer / BibTeX / Excel / CSV\'ye d\xf6n\xfcşt\xfcr.","nextStepExportBtn":"Veri D\xf6n\xfcş\xfcm\xfc\'n\xfc a\xe7","nextStepExportBadge":"Adım 5","noResults":"Sonu\xe7 yok. Filtreleri gevşetmeyi deneyin.","tableHint":"İpucu: Başlığa tıkla → sırala \xb7 Başlık kenarını s\xfcr\xfckle → kolon genişliği \xb7 Satıra tıkla → detay","firstPage":"İlk sayfa","lastPage":"Son sayfa","selectAllInPage":"T\xfcm sayfayı se\xe7","unselectPage":"Sayfayı se\xe7imden \xe7ıkar","filter":{"year":"Yıl","docType":"Dok\xfcman tipi","docTypeSearch":"Dok\xfcman tipi ara…","language":"Dil","languageSearch":"Dil ara…","dbSource":"Veritabanı","dbSourceSearch":"Veritabanı…","journal":"Dergi","journalPlaceholder":"Dergi adı (\xf6rn: NATURE)","journalSubtitle":"SO i\xe7inde substring ara — b\xfcy\xfck/k\xfc\xe7\xfck harf \xf6nemsiz","authors":"Yazar","authorsPlaceholder":"Yazar (\xf6rn: SMITH J)","authorsSubtitle":"AU i\xe7inde substring — birden fazla ekleyebilirsin","wcCategories":"WoS Kategorileri","wcPlaceholder":"\xd6rn: COMPUTER SCIENCE","scCategories":"Konu Kategorileri","scPlaceholder":"\xd6rn: ENGINEERING","citationCount":"Atıf sayısı","citationHint":"ort. {mean}, max {max}","fulltext":"Tam metin arama","fulltextHint":"AND/OR/NOT desteklenir \xb7 \\"tam ifade\\" tırnak i\xe7inde","quality":"Kalite / Eksik veri","qualityMissing":"Eksik","qualityHas":"Var","qualityHasLabel":"VAR olanları getir","qualityMissingLabel":"EKSİK olanları getir","savePreset":"Preset kaydet","loadPreset":"Preset y\xfckle","clearAll":"Sıfırla","noMatch":"Eşleşen yok.","add":"Ekle","clearThis":"Bu filtreyi temizle","range":"aralık","yearCount":"{year}: {count} kayıt","yearsSelected":"{n} yıl se\xe7ili","quickFilters":"Hızlı filtreler","last5Years":"Son 5 yıl","last10Years":"Son 10 yıl","hasDoi":"DOI var","hasAbstract":"\xd6zet (AB) var","highCitation":"Y\xfcksek atıf (≥10)","fulltextPlaceholder":"(makine OR derin) AND \xf6ğrenme NOT derleme"},"presets":{"title":"Preset\'ler","save":"Mevcut filtreyi kaydet","namePlaceholder":"Yeni preset adı…","noPresets":"Hen\xfcz preset yok","hint":"\xd6nce filtre uygula, sonra kaydet.","delete":"Sil","deleteConfirm":"\\"{name}\\" preset\'ini sil?","savedAuditTitle":"Preset kaydedildi: {name}"},"columns":{"configure":"Kolon ayarları","visible":"G\xf6r\xfcnen kolonlar","hidden":"Gizli kolonlar","reset":"Varsayılana d\xf6n","short":"Kolonlar","all":"Hepsi","defaults":"Varsayılan","none":"Hi\xe7biri","noMatch":"Eşleşen kolon yok.","searchPlaceholder":"Kolon ara…","abLen":"\xd6zet uzunluğu","afFull":"Yazar (tam)"},"quality":{"title":"Veri Kalitesi Panosu","subtitle":"Alan-bazlı doluluk oranı","fillRate":"Doluluk","missing":"Eksik","filled":"Dolu","fillField":"Doldur","fillFieldHint":"Bu alandaki eksik değerleri API ile doldur","noFields":"Alan verisi bulunamadı","healthScore":"sağlık skoru","healthScoreHint":"Bibliometrik ağırlıklı: kritik alanlar (yazar, yıl, kaynak, atıf, referans) en \xe7ok; tamamlayıcı alanlar en az sayılır. Aşağıdaki doluluk barından farklıdır — bar t\xfcm alanları eşit ağırlıklar.","totalRecords":"Toplam Kayıt","highFill":"Y\xfcksek doluluk","midFill":"Orta doluluk","lowFill":"D\xfcş\xfck doluluk","overallHealth":"Genel veri sağlığı","healthHint":"DI, AB, TI, AU, PY alanlarının ortalama doluluğu","barLegend":"Sol = toplam dolu (t\xfcm alanlar havuzda); sağ = her alanın eksik payı (renge g\xf6re)","fieldFillRates":"Alan doluluk oranları","overview":{"title":"Genel Bakış","hint":"Veri k\xfcmesi \xf6zet tablosu (Biblioshiny-tarzı) — rapora yapıştır veya indir.","colField":"Alan","colLabel":"A\xe7ıklama","colTotal":"Toplam","colFilled":"Dolu","colMissing":"Eksik","colFillRate":"Doluluk %","download":"İndir","downloadPngFailed":"G\xf6rsel oluşturulamadı"},"fillHint":"\\"Doldur\\" → eksik kayıtların DOI\'si \xfczerinden CrossRef \xb7 OpenAlex \xb7 Europe PMC \xb7 DataCite API\'lerine sorulur. Snapshot otomatik alınır, audit log\'a yazılır.","startFailed":"Başlatılamadı","loadingQuality":"Veri kalitesi y\xfckleniyor…","starting":"Başlatılıyor…","scanTitle":"Veri sağlığını artır","scanDesc":"{n} alanda eksik veri var — CrossRef, OpenAlex, Europe PMC ve DataCite\'tan otomatik doldur.","scanAllGood":"İzlenen t\xfcm alanlar dolu g\xf6r\xfcn\xfcyor — doldurulacak bir şey yok.","reportTitle":"Zenginleştirme raporu","reportSummary":"DOI\'li {scanned} kayıttan {enriched} tanesi g\xfcncellendi.","reportSummaryShort":"{enriched} kayıt g\xfcncellendi.","reportDois":"Başlık aramasıyla {n} eksik DOI bulundu.","reportOverall":"Genel doluluk %{before} → %{after}","runAgain":"Tekrar \xe7alıştır","startAll":"T\xfcm\xfcn\xfc doldur","startAllHint":"Eksik değeri olan t\xfcm alanlar i\xe7in API zenginleştirmesini paralel başlat","startAllConfirm":"{n} alan i\xe7in zenginleştirme başlatılacak. İşler paralel \xe7alışır ve biraz zaman alabilir.","startAllNothing":"Doldurulacak bir şey yok — t\xfcm alanlar dolu","stopAll":"\xc7alışanları iptal et","cancelTitle":"İptal","recordsEnriched":"+{n} kayıt dolduruldu","noRecordsEnriched":"0 kayıt dolduruldu","noDoiCount":"{n} DOI\'siz","notInApiCount":"{n} API\'de yok","failedShort":"Başarısız","filledShort":"dolu","missingArrow":"eksik →","fillNMissing":"{n} eksik kaydı API ile doldur","startAllTitle":"T\xfcm eksik alanlar doldurulsun mu?","startAllFreeNote":"Kullanılan zenginleştirme kaynakları (Crossref, OpenAlex, Unpaywall) \xfccretsizdir ve hi\xe7bir \xfccretli kota t\xfcketmez.","missingShort":"eksik"},"editRow":"Kaydı d\xfczenle","deleteRow":"Kaydı sil","deleteRowConfirm":"Bu kayıt silinsin mi? Geri y\xfcklenebilmesi i\xe7in snapshot alınır."},"enrich":{"title":"Harmonizasyon","subtitle":"Semantik karar gereken yerlerde LLM yardımıyla veriyi standardize et — varyantları birleştir, eksik alanları \xfcret.","stepBadge":"Adım 3 / 5","comingSoon":"yakında","infoBanner1":"<strong>Hazırlık & Filtre</strong> sayfası alanları <span class=\\"font-medium\\">deterministik API\'lerden</span> (CrossRef, OpenAlex...) doldurur.","infoBanner2":"<strong>Harmonizasyon</strong> ise <span class=\\"font-medium\\">semantik karar</span> gerektiren yerleri \xe7\xf6zer: \\"bu iki yazar aynı kişi mi?\\", \\"bu iki anahtar kelime aynı kavram mı?\\"","affectedFields":"Etkilenen alanlar","howWillItWork":"Bu ara\xe7 nasıl \xe7alışacak?","howSteps":["Dataset taranır, ilgili alandaki t\xfcm unique değerler \xe7ıkarılır.","Deterministik benzerlik (Jaro-Winkler / token-level) ile aday gruplar oluşturulur.","Belirsiz gruplar LLM\'e g\xf6nderilir — semantik karar istenir.","\xd6neriler g\xfcven skoru ile listelenir, kullanıcı tek tek onaylar.","Onaylananlar snapshot\'tan sonra dataset\'e uygulanır, audit log\'a yazılır."],"devStatusLabel":"Geliştirme durumu","devStatusBody":"Yazar ve Affiliation Disambiguation mod\xfcl\xfcn\xfcn altyapısı bu ara\xe7lar i\xe7in birebir kullanılabilir (blocking + similarity + LLM + onay). \xd6nceliklendirme i\xe7in geri bildirimini bekliyoruz.","categories":{"disambiguation":{"label":"Varyant Birleştirme","description":"Aynı şeyin farklı yazımlarını tek standarda \xe7ekme"},"normalization":{"label":"Standardizasyon","description":"Bibliometrik analiz i\xe7in terim/etiket standardizasyonu"},"extraction":{"label":"Bilgi \xc7ıkarımı","description":"Var olan metinden eksik alanları \xfcretme"}},"tools":{"authors":{"title":"Yazar Disambiguation","description":"Aynı yazarın farklı yazımlarını (Smith J / Smith John A. / J. A. Smith) tek isimde birleştir. Coauthor + affiliation + yıl ipu\xe7larıyla karar verilir."},"affiliations":{"title":"Affiliation Standardizasyonu","description":"MIT / Massachusetts Institute of Technology / Mass Inst Tech varyantlarını tek standart kuruma \xe7ek. Kamp\xfcs/şehir farkı korunur."},"keywords":{"title":"Anahtar Kelime Birleştirme","description":"DE/ID alanlarındaki \'machine learning\' / \'Machine Learning\' / \'ML\' gibi varyantları tek normalize formuna \xe7ek. Kelime sayım analizini sağlıklı yapar."},"journals":{"title":"Dergi Adı Standardizasyonu","description":"\'IEEE Trans Knowl Data Eng\' ve \'IEEE Transactions on Knowledge and Data Engineering\' gibi kısaltma/tam ad farklarını birleştir."},"categories":{"title":"Konu Kategorisi Tahmini","description":"WC/SC alanı eksik kayıtlar i\xe7in Abstract\'tan WoS Kategorisi tahmini. API\'lerin d\xf6nd\xfcrmediği durumlar i\xe7in LLM fallback."},"kw-from-ab":{"title":"Abstract → Anahtar Kelime","description":"DE\'si boş ama AB\'si dolu kayıtlar i\xe7in Abstract\'tan 5-10 anahtar kelime \xfcretir. Standart bibliometrik kelime stoğuyla hizalanır."},"organizations":{"title":"Kurumlar (\xfcst kurum)","description":"Departman/alt-birim adreslerini \xfcst \xfcniversite/kuruma toplar; işbirliği ağı kurum d\xfczeyinde kurulur."},"countries":{"title":"\xdclkeler","description":"\xdclke adı varyantlarını standartlaştırır (USA / United States / US -> United States)."}},"apiTitle":"API Zenginleştirme","apiDescription":"CrossRef / OpenAlex / Semantic Scholar \xfczerinden eksik alanları doldur.","apiStart":"API zenginleştirmeyi başlat","mlTitle":"ML Zenginleştirme","mlDescription":"Makine \xf6ğrenmesi modelleriyle kayıtları geliştir.","mlStart":"ML zenginleştirmeyi başlat","fieldTitle":"Alan Zenginleştirme","fieldDescription":"Belirli bir alanın boş değerlerini API kaynaklarından doldur.","selectField":"Alan se\xe7","maxRecords":"Maks kayıt","fillField":"Doldur","result":{"title":"Zenginleştirme sonucu","total":"Toplam aday","missingBefore":"\xd6nce eksik","noDoi":"DOI yok (atlandı)","target":"Hedef (sorgulandı)","enriched":"Dolduruldu","apiNoData":"API\'de veri yok","failed":"Başarısız","missingAfter":"Sonra eksik","fillRateBefore":"\xd6nce doluluk","fillRateAfter":"Sonra doluluk","sources":"Kaynak katkıları"}},"disambiguate":{"title":"Yazar Ayrıştırma","subtitle":"Yazar ve affiliation duplicate\'lerini gruplandır.","authorsTab":"Yazarlar","affiliationsTab":"Affiliations","mode":"Tarama Modu","modeAuto":"Akıllı","modeAutoDescription":"Sadece ş\xfcpheli yazarları LLM\'e g\xf6nderir — hızlı, ucuz","modeBroad":"Geniş","modeBroadDescription":"Aynı soyad+initial olan t\xfcm grupları LLM\'e sorar","modeFullLLM":"Tam LLM","modeFullLLMDescription":"T\xdcM yazar gruplarını LLM\'e g\xf6nderir — pahalı, kapsamlı","fullLLMWarning":"Bu mod T\xdcM yazar gruplarını LLM\'e g\xf6nderir — b\xfcy\xfck datasetlerde maliyet 10x+ artabilir.","scanAuthors":"Yazar tara","scanAffiliations":"Affiliation tara","selectThreshold":"≥{threshold} olanları se\xe7","applyClusters":"{n} cluster\'ı uygula","howItWorks":"Nasıl \xe7alışır?","howItWorksList":"Deterministik blocking (aynı soyadı + ilk harf) + Jaro-Winkler benzerlik.|Sadece <strong>belirsiz</strong> bloklar DeepSeek\'e gider (genelde yazarların %5-10\'u).|LLM cluster \xf6nerileri + g\xfcven skoru + gerek\xe7e d\xf6nd\xfcr\xfcr.|Hi\xe7biri otomatik uygulanmaz — siz onaylayana kadar veri değişmez. Uygulamadan \xf6nce snapshot alınır.|Yanıtlar cache\'lenir; aynı blok ikinci \xe7ağrıda LLM\'e gitmez.","start":"Disambiguation başlat","running":"\xc7alışıyor…","proposals":"\xd6neriler","noProposals":"Hen\xfcz \xf6neri yok — disambiguation \xe7alıştır","approve":"Kabul","reject":"Red","applySelected":"Se\xe7ilenleri uygula","applied":"{n} değiştirme uygulandı","snapshot":"Snapshot","restore":"Geri y\xfckle","limitLabel":"Sınır (kayıt)","limitHint":"Opsiyonel — sadece ilk N kaydı tara. Maliyet kontroll\xfc test i\xe7in faydalı. Boş bırakılırsa t\xfcm dataset taranır.","limitOff":"Kapalı","limitChip50":"Test (50)","limitChip500":"\xd6rnek (500)","limitChipAll":"T\xfcm\xfc","cluster":"Cluster","members":"\xfcye","canonical":"Kanonik isim","startFailed":"Başlatılamadı","applyConfirm":"{n} cluster datasete uygulanacak. Snapshot alınacak. Devam?","appliedMessage":"Uygulandı: {n} değişiklik. Snapshot: {snapshot}","applyFailed":"Uygulanamadı","experimentalWarning":"<strong>EXPERIMENTAL</strong> — DeepSeek LLM ile yazar adı + affiliation varyantlarını birleştir. T\xfcm \xf6neriler manuel onay bekler; veriye snapshot alındıktan sonra uygulanır.","llmNotConfigured":"LLM API key tanımlı değil.","settingsLink":"Ayarlar","settingsHintAfter":" sayfasından sağlayıcıyı ve API key\'ini ekleyin.","providerLabel":"Sağlayıcı","modelLabel":"Model","changeLink":"Değiştir →","uncertainHeader":"Belirsiz","noProposalsHint":"Hen\xfcz \xf6neri yok. Yukarıdan \\"Tara\\" butonuna basın.","confidenceLabel":"g\xfcven","variantsLabel":"Varyantlar","canonicalLabel":"Kanonik:","scan":"Tara","advanced":"Gelişmiş","splitHeader":"Ayrıştırma — aynı isim, muhtemelen farklı kişiler","splitDesc":"Bu isim alan bakımından ayrık gruplara b\xf6l\xfcn\xfcyor; her grup ayrı yazar olur (ek a/b/c). En b\xfcy\xfck grup d\xfcz kalır.","mergeHeader":"Birleştirme — aynı {subject}, farklı yazılış","mergeDesc":"Aynı {subject} i\xe7in varyantlar; tek standart forma toplanır.","autoBadge":"otomatik","reviewBadge":"incele","plainStays":"d\xfcz kalır","approveApply":"Onayla ve uygula ({n})","noSplits":"Ayrıştırma \xf6nerisi yok.","noMerges":"Birleştirme \xf6nerisi yok.","scanHint":"Tarama iki şey bulur: farklı yazılmış aynı kişi (birleştir) ve aynı isimli farklı kişiler (ayrıştır). Hepsi senin onayına tabi.","scanHintStd":"Tarama, aynı {subject} i\xe7in farklı yazılışları bulur ve tek standart forma toplar. Hepsi senin onayına tabi.","selectAll":"T\xfcm\xfcn\xfc se\xe7","clearAll":"T\xfcm\xfcn\xfc temizle","subjects":{"authors":"kişi","affiliations":"kurum","organizations":"kurum","countries":"\xfclke"}},"export":{"title":"Veri D\xf6n\xfcş\xfcm\xfc","subtitle":"Birleştirilmiş veriyi (veya filtreli alt-k\xfcmesini) bibliometrik ara\xe7ların beklediği formatlara \xe7evir.","stepBadge":"Adım 4 / 5","exportFailed":"Export başarısız","copyFailed":"Kopyalama başarısız","browserNotSupported":"Bu tarayıcı klas\xf6r se\xe7ici desteklemiyor. Path girme moduna ge\xe7.","folderPickFailed":"Klas\xf6r se\xe7ilemedi","copied":"{n} dosya kopyalandı","skipped":"Atlandı","copiedFailed":"{ok} dosya kopyalandı, {fail} başarısız","browserCopyTitle":"{n} dosya tarayıcı ile kopyalandı","filterSelection":"Filtre se\xe7imi","subsetExported":"Bu filtrenin alt-k\xfcmesi export edilecek","allExported":"T\xfcm veri export edilecek","allData":"T\xfcm veri","noPresetsHint":"Hen\xfcz preset yok. Filtre & Ara sayfasında preset kaydedebilirsin.","refFormats":"Referans / bibliometrik formatlar","usedIn":"Şu ara\xe7larda kullanılır","tableFormats":"Tablo / genel formatlar","generatedFiles":"\xdcretilen export\'lar","noExportsYet":"Hen\xfcz export yok.","copyToFolder":"Bir klas\xf6re kaydet","nFilesSelected":"{n} dosya se\xe7ildi","selectFilesAbove":"Yukarıdan dosya se\xe7","browserPick":"Tarayıcı klas\xf6r\xfc","enterPath":"Sunucu yolu","selectedFolder":"Kayıt yeri","changeFolder":"Klas\xf6r\xfc değiştir","change":"değiştir","pickFolder":"Kaydedilecek yeri se\xe7…","opensBrowserPicker":"Hedef klas\xf6r\xfc tarayıcıdan se\xe7","copyToNamedFolder":"\\"{name}\\" klas\xf6r\xfcne kaydet ({n})","pickAndCopy":"Klas\xf6r se\xe7 ve kaydet","browserSafetyNote":"Dosyalar doğrudan tarayıcı ile yazılır — backend yolu g\xf6rmez.","pathPlaceholder":"C:\\\\Users\\\\sen\\\\Documents\\\\BibexPy \xe7ıktı","copy":"Kaydet","pathNote":"Dosyaların kaydedileceği mutlak yolu verin. Yoksa otomatik oluşturulur. Backend bu makinede \xe7alıştığı i\xe7in doğrudan diske yazılır.","formatInfo":{"wos":"Web of Science d\xfcz metin formatı — bilim haritalama akışlarının fiili standardı","vos":"VOSviewer i\xe7in ortak-yazarlık / ortak-atıf g\xf6rselleştirmesine hazır harita+ağ TSV","bib":"Tam metadata i\xe7eren BibTeX kayıtları — LaTeX ve referans y\xf6neticileri ile uyumlu","ris":"RIS referans formatı — masa\xfcst\xfc referans y\xf6neticileri i\xe7in evrensel i\xe7e aktarım","xlsx":"T\xfcm alanlar ve tipler korunmuş tablo (sayı, tarih, \xe7ok değerli h\xfccreler dahil)","csv":"Veri bilimi akışları i\xe7in virg\xfclle ayrılmış d\xf6k\xfcm\xfc","tsv":"Sekme ile ayrılmış — alan i\xe7inde virg\xfcl/tırnak olduğunda CSV\'den g\xfcvenli"},"compatibleWith":"Uyumlu ara\xe7lar","moreTools":"+{n} daha","duplicate":{"title":"{format} zaten var","body":"{count} adet eski {format} dosyası bulundu. Ne yapmak istersin?","replace":"Eskisini sil, yenisini oluştur","replaceHint":"Eski dosyalar silinir, yalnızca yenisi kalır.","keep":"İkisini de tut — yeni timestamp\'li dosya ekle","keepHint":"Eski dosyalar korunur. Yeni dosya farklı isimle gelir.","cancel":"Vazge\xe7 — oluşturma","replacing":"Eski siliniyor…","replaced":"{n} eski dosya silindi"},"deleteExport":"Dosyayı sil","deleteExportConfirm":"\\"{name}\\" silinsin mi?","deleteExportFailed":"Silme başarısız","formatTitle":"Format","format":{"wos":"WoS TXT","vos":"VOSviewer TXT","bibtex":"BibTeX","ris":"RIS","csv":"CSV","xlsx":"Excel"},"withFilter":"Mevcut filtreyi uygula","withoutFilter":"T\xfcm kayıtları aktar","outputNamePlaceholder":"\xc7ıktı dosya adı (opsiyonel)","createExport":"Export oluştur","downloadAll":"İndir","copyTo":"Klas\xf6re kopyala","folderPicker":"Klas\xf6r se\xe7","previousExports":"\xd6nceki \xe7ıktılar","noExports":"Hen\xfcz \xe7ıktı yok"},"settings":{"title":"Ayarlar","subtitle":"API anahtarlarını, LLM ayarlarını ve diğer yapılandırmaları y\xf6net.","language":"Dil","languageHint":"Aray\xfcz dili. Varsayılan: İngilizce","english":"English","turkish":"T\xfcrk\xe7e","changesPending":"{n} değişiklik bekliyor","allSaved":"T\xfcm değişiklikler kaydedildi","saving":"Kaydediliyor…","revert":"Geri al","changed":"değişti","defined":"tanımlı","llmProvider":"LLM Sağlayıcısı","modelLabel":"Model","modelPlaceholder":"\xf6rn: gpt-4o, claude-3.5-sonnet, meta-llama/llama-3.1-70b","modelNotInList":"Bu model bu sağlayıcının preset listesinde yok — manuel değer.","baseUrlHint":"OpenAI-uyumlu endpoint. /chat/completions otomatik append edilir.","getApiKey":"API key al","disambiguationPipeline":"Disambiguation Pipeline","pathPlaceholder":"C:\\\\Users\\\\sen\\\\BibexPyData","browseFolder":"G\xf6zat","validatePath":"Doğrula","check":"Kontrol et","createThisFolder":"Bu klas\xf6r\xfc oluştur","nProjectsExist":"{n} proje var","apiKeyPlaceholder":"API anahtarınızı girin","maskedKeyNote":"Mevcut anahtar maskeli g\xf6r\xfcn\xfcr. Değiştirmek istemiyorsan dokunma.","groups":{"storage":"Depolama","api":"Veri Zenginleştirme API\'leri","llm":"LLM (Disambiguation)"},"saveChanges":"Değişiklikleri kaydet","saved":"Kaydedildi","saveFailed":"Kaydetme başarısız","envFile":"Ortam dosyası","secretSet":"Tanımlı (gizli)","secretEmpty":"Tanımsız","pathValid":"Ge\xe7erli yol","pathInvalid":"Ge\xe7ersiz yol","providerLabel":"Sağlayıcı","customProvider":"\xd6zel","customBaseUrl":"Base URL","customApiKey":"API Anahtarı","fields":{"STORAGE_DIR":{"label":"Proje Depolama Klas\xf6r\xfc","hint":"T\xfcm projeler burada saklanır. Değiştirirseniz eski projeleri yeni klas\xf6re manuel taşıyın. Backend yeniden başlatılmalı."},"SCOPUS_API_KEY":{"label":"Scopus API Key","hint":"Yalnızca Scopus zenginleştirmesi i\xe7in gerekli (Elsevier, kurumsal/\xfccretli). Diğer t\xfcm kaynaklar \xfccretsizdir."},"SEMANTIC_SCHOLAR_API_KEY":{"label":"Semantic Scholar API Key","hint":"Opsiyonel. Anahtarsız da \xe7alışır; anahtar yalnızca hız limitini y\xfckseltir (\xfccretsiz)."},"UNPAYWALL_EMAIL":{"label":"Unpaywall Email","hint":"Opsiyonel. A\xe7ık erişim PDF bağlantıları i\xe7in; Unpaywall yalnızca bir e-posta ister (\xfccretsiz)."},"CROSSREF_EMAIL":{"label":"CrossRef Email (\xf6nerilir)","hint":"Opsiyonel ama \xf6nerilir. CrossRef \'polite pool\' ile daha y\xfcksek hız sağlar (\xfccretsiz)."},"LLM_PROVIDER":{"label":"LLM Sağlayıcısı","hint":"Disambiguation mod\xfcl\xfc i\xe7in kullanılır. OpenAI-uyumlu herhangi bir API kullanılabilir."},"LLM_API_KEY":{"label":"LLM API Key"},"LLM_BASE_URL":{"label":"LLM Base URL","hint":"Sağlayıcı \'\xd6zel\' se\xe7ilirse buraya tam endpoint URL\'i (\xf6r. https://api.together.ai/v1)."},"LLM_MODEL":{"label":"Model"},"DISAMBIGUATION_ENABLED":{"label":"Disambiguation Aktif"},"DISAMBIGUATION_BLOCKING_THRESHOLD":{"label":"Blocking eşiği"},"DISAMBIGUATION_AUTO_APPROVE_THRESHOLD":{"label":"Auto-approve eşiği"}},"infoNotes":["Ayarlar .env dosyasına yazılır.","Backend\'in yeniden başlatılması bazı değişikliklerin uygulanması i\xe7in gerekebilir.","API anahtarları maskelenmiş g\xf6sterilir; aynı değer kalsın istiyorsanız alana dokunmayın."],"pathStatus":{"ready":"Hazır","notWritable":"Yazılamıyor — yetki sorunu olabilir","missing":"Klas\xf6r mevcut değil","notDir":"Mevcut ama dizin değil","empty":"Path boş"},"providers":{"deepseek":"DeepSeek","openai":"OpenAI","openrouter":"OpenRouter","custom":"\xd6zel (OpenAI-uyumlu)"}},"report":{"title":"Operasyon Raporu","subtitle":"Bu proje \xfczerinde yapılan t\xfcm işlemlerin \xf6zeti","backToRecords":"Kayıtlara d\xf6n","totalOperations":"Toplam işlem","recordCount":"Kayıt sayısı","firstLast":"İlk → Son","categoryDist":"Kategori dağılımı","chronological":"Kronolojik liste","downloadLog":"G\xfcnl\xfcğ\xfc indir","rawLogs":{"title":"Ham Değişiklik G\xfcnl\xfcğ\xfc","desc":"T\xfcm işlem g\xfcnl\xfcğ\xfc olduğu gibi — her birleştirme, filtre, d\xfczenleme ve zenginleştirme, sırasıyla. Markdown, d\xfcz metin veya PDF olarak indir."},"methodology":{"title":"LLM Makale Raporu","desc":"Operasyon g\xfcnl\xfcğ\xfcn\xfcz\xfc, makalenizin Y\xf6ntem b\xf6l\xfcm\xfcne yapıştırmaya hazır İngilizce bir veri-hazırlama metodolojisi paragrafına d\xf6n\xfcşt\xfcr\xfcr. Yalnızca ger\xe7ekten ger\xe7ekleştirdiğiniz adımlara dayanır.","generate":"Rapor \xfcret","regenerate":"Yeniden \xfcret","generating":"G\xfcnl\xfck modele g\xf6nderiliyor ve metodoloji yazılıyor…","notConfigured":"Yapılandırılmış bir dil modeli yok. Şuradan API anahtarı ekleyin:","settingsLink":"Ayarlar","noOperations":"Rapor \xfcretmek i\xe7in en az bir adım ger\xe7ekleştirin.","generatedAt":"\xdcretildi","draftNote":"AI tarafından \xfcretildi — yayımlamadan \xf6nce sayıları verinizle karşılaştırın. BibexPy atıfı metne eklenmiştir.","sampleLabel":"\xd6rnek \xe7ıktı (temsil\xee)","failed":"Metodoloji raporu \xfcretilemedi."}},"audit":{"title":"Operasyon Ge\xe7mişi","subtitle":"Merge, silme, zenginleştirme gibi işlemler otomatik kaydedilir.","operations":"işlem","noEntries":"Hen\xfcz operasyon kaydı yok.","totalOperations":"{n} kayıt \xb7 en yeniden eskiye","downloadMarkdown":"Markdown indir","clearAll":"Ge\xe7mişi temizle","clearConfirm":"T\xdcM operasyon kayıtları silinsin mi? Bu işlem geri alınamaz.","byKind":"Kategoriye g\xf6re","timeline":"Kronoloji","before":"\xf6nce","after":"sonra","showDetails":"detayı g\xf6ster","hideDetails":"detayı gizle","restore":"Geri al","restoreTitle":"Bu snapshot\'a d\xf6n\xfcls\xfcn m\xfc?","restoreConfirm":"Veri bu snapshot\'a geri d\xf6nd\xfcr\xfclecek. Sonrasında yapılan değişiklikler kaybolur.","restoredToast":"Snapshot\'tan {n} kayıt geri y\xfcklendi.","restoreFailed":"Snapshot geri alınamadı","kinds":{"upload":"Y\xfckleme","convert":"D\xf6n\xfcş\xfcm","merge":"Birleştirme","filter_save":"Preset","records_delete":"Kayıt silme","enrich_api":"API zenginleştirme","enrich_ml":"ML zenginleştirme","enrich_selected":"Se\xe7imsel zenginleştirme","disambiguate":"Disambiguation","snapshot":"Snapshot","snapshot_restore":"Geri y\xfckleme","analysis_activate":"Analiz etkinleştir","analysis_delete":"Analiz sil","merge_borderline":"Belirsiz \xe7iftler","export":"Export","project_create":"Proje oluşturma","report":"Rapor","records_edit":"Kayıt d\xfczenleme"},"smart":{"rawInput":"Ham girdi","matched":"Eşleştirilen","borderline":"Borderline","pendingTotal":"bekleyen / toplam","output":"\xc7ıktı","conflictResolution":"\xc7akışma \xe7\xf6z\xfcm\xfc ({conflict} alan \xb7 Caputo 2024)","seconds":"sn","filesProduced":"{n} dosya \xfcretildi","dedupShort":"tekil","lostShort":"kayıp"},"kindLabels":{"upload":"\uD83D\uDCE5 Dosya y\xfckleme","convert":"\uD83D\uDD04 D\xf6n\xfcş\xfcm","merge":"\uD83E\uDDE9 Birleştirme","merge_borderline":"\uD83D\uDD0D Borderline kararı","analysis_activate":"\uD83C\uDFAF Aktif analiz değiştirildi","analysis_delete":"\uD83D\uDDD1️ Analiz silindi","filter_save":"⭐ Preset kaydı","records_delete":"\uD83D\uDDD1️ Kayıt silme","enrich_api":"\uD83C\uDF10 API zenginleştirme","enrich_ml":"\uD83E\uDDE0 ML zenginleştirme","enrich_field":"\uD83D\uDD27 Alan zenginleştirme","enrich_selected":"\uD83D\uDD27 Se\xe7imsel zenginleştirme","disambiguate":"✨ Disambiguation","disambiguate_authors":"✨ Yazar disambiguation","disambiguate_affiliations":"\uD83C\uDFE2 Affiliation disambiguation","snapshot":"\uD83D\uDCF8 Snapshot","snapshot_restore":"↩️ Snapshot geri y\xfckleme","export":"\uD83D\uDCE4 Export"},"titles":{"disambiguationApplied":"Disambiguation uygulandı ({kind}) — {n} değişiklik","disambiguationRestored":"Disambiguation snapshot geri y\xfcklendi","filesCopiedToFolder":"{n} dosya lokal klas\xf6re kopyalandı","merge":"Birleştirme ({method})","autoPrepare":"Otomatik hazırlık — {csv} CSV + {txt} TXT","prepareReset":"Hazırlık sıfırlandı — {n} işlenmiş dosya silindi (ham dosyalar korundu)","processedFileDeleted":"Hazırlanmış dosya silindi: {name}","recordsDeleted":"{n} kayıt silindi","snapshotRestored":"Snapshot geri y\xfcklendi: {name}","fieldEnrichment":"Alan zenginleştirme: {field} ({label})","selectedEnrichment":"{n} se\xe7ili kayıt i\xe7in zenginleştirme","filesUploaded":"{n} dosya y\xfcklendi","authorDisambiguation":"Yazar Ayrıştırma","affiliationStandardization":"Kurum Normalizasyonu","projectCreated":"Proje oluşturuldu: {name}","apiEnrichment":"API ile zenginleştirme","mlEnrichment":"ML ile zenginleştirme","methodologyGenerated":"Metodoloji raporu \xfcretildi (LLM)","fillAll":"Eksik alanları doldur (API + ML)","countryStandardization":"\xdclke standartlaştırma","orgRollup":"Kurum toplama (\xfcst kurum)","recordEdited":"Kayıt d\xfczenlendi ({n} alan)","analysisActivated":"Aktif analiz: {label}","analysisDeleted":"Analiz silindi: {label}","presetSaved":"Preset kaydedildi: {name}","presetDeleted":"Preset silindi: {name}","exported":"Dışa aktarma ({fmt}): {name}","exportDeleted":"Dışa aktarma silindi: {name}","converted":"D\xf6n\xfcşt\xfcr\xfcld\xfc: {name}","fileDeleted":"Dosya silindi: {name}","borderlineDecisions":"Belirsiz \xe7iftler: {accept} kabul / {reject} red / {skip} atlandı"}},"recordDetail":{"title":"Kayıt detayı","noTitle":"başlık yok","otherFields":"Diğer alanlar","groups":{"citation":"K\xfcnye","authors":"Yazarlar & Adres","categories":"Kategoriler & Anahtar Kelimeler","citations":"Atıflar","abstract":"\xd6zet & Tam Metin"},"fields":{"TI":"Başlık","SO":"Dergi/Kaynak","JI":"Dergi (ISO)","PY":"Yıl","VL":"Cilt","IS":"Sayı","BP":"Başlangı\xe7 s.","EP":"Bitiş s.","PG":"Sayfa adedi","DT":"Dok\xfcman tipi","LA":"Dil","DI":"DOI","UT":"WoS ID","PM":"PubMed ID","PU":"Yayıncı","DB":"Kaynak DB","AU":"Yazarlar (kısa)","AF":"Yazarlar (tam)","C1":"Adresler","RP":"İletişim yazarı","EM":"Email","OI":"ORCID","RI":"Researcher ID","DE":"Anahtar Kelimeler (Yazar)","ID":"Keywords Plus","WC":"WoS Kategorileri","SC":"Konu Kategorileri","TC":"WoS Atıf Sayısı","Z9":"Toplam Atıf","U1":"Son 180 g\xfcn","U2":"Son 5 yıl","NR":"Referans sayısı","CR":"Referans listesi","AB":"\xd6zet (Abstract)"},"edit":"D\xfczenle","save":"Kaydet","saved":"{n} alan g\xfcncellendi.","saveFailed":"Kayıt kaydedilemedi.","editHint":"Aşağıdaki alanları d\xfczenleyin — boş alanlar da elle doldurulabilir. Aktif veri setine kaydedilir (snapshot alınır)."},"bulk":{"recordsSelected":"kayıt se\xe7ildi","enrich":"API ile tamamla","enrichBtn":"Zenginleştir","enrichDescription":"Se\xe7ilen kayıtların t\xfcm eksik alanları CrossRef \xb7 OpenAlex \xb7 Europe PMC \xb7 DataCite\'tan \xe7ekilecek.","clearSelection":"Se\xe7imi iptal","reasonPlaceholder":"Silme nedeni (opsiyonel) — \xf6rn: \'duplicate, eksik DOI\'","noSelected":"Se\xe7ilen kayıt yok","deleteFailed":"Silme başarısız","requestFailed":"İstek başarısız","recordsUpdated":"{enriched}/{target} kayıt g\xfcncellendi","cellsFilled":"{n} alan dolduruldu","noDoiSkipped":"{n} DOI\'siz (atlandı)","apiNotFound":"{n} API\'de bulunamadı","deletedToast":"{deleted} kayıt silindi, {kept} kayıt korundu."},"jobs":{"starting":"Başlatılıyor…","running":"\xc7alışıyor","completed":"Tamamlandı","failed":"Başarısız","cancelled":"İptal edildi","queued":"Sırada","cancel":"İptal","result":"Sonu\xe7 (JSON)"},"errors":{"generic":"Bir hata oluştu","networkError":"Ağ hatası","projectNotFound":"Proje bulunamadı","fileNotFound":"Dosya bulunamadı","permissionDenied":"Yetki reddedildi","invalidInput":"Ge\xe7ersiz giriş","project_not_found":"Proje bulunamadı","analysis_not_found":"Analiz bulunamadı","no_active_merged_dataset":"Aktif merged dataset bulunamadı","analysis_delete_failed":"Analiz silinemedi (dosya kilitli olabilir, daha sonra tekrar deneyin)","folder_access_denied":"Bu klas\xf6re erişim izniniz yok","csv_encoding_failed":"CSV encoding okunamadı (UTF-8 / cp1254 / latin-1 denendi)","disambiguation_disabled_hint":"Disambiguation kapalı (Ayarlar\'dan a\xe7ın)","disambiguation_disabled":"Disambiguation kapalı","file_empty":"Dosya boş — d\xf6n\xfcşt\xfcr\xfclecek kayıt yok","file_not_found":"Dosya bulunamadı","not_a_folder":"Dosya, klas\xf6r değil","invalid_filename":"Ge\xe7ersiz dosya adı","invalid_mode_disambig":"Ge\xe7ersiz mod (auto/broad/full_llm)","invalid_mode":"Ge\xe7ersiz mod","target_folder_missing":"Hedef klas\xf6r mevcut değil","target_folder_not_absolute":"Hedef klas\xf6r mutlak path olmalı (\xf6rn. C:\\\\... veya /home/...)","no_raw_files":"Hen\xfcz ham dosya y\xfcklenmemiş","path_not_found":"Path bulunamadı","scopus_convert_failed":"Scopus CSV → XLSX d\xf6n\xfcş\xfcm\xfc başarısız. Dosya ger\xe7ekten Scopus CSV mi?","no_records_to_delete":"Silinecek kayıt belirtilmedi (uids, dois veya indices)","tsv_encoding_failed":"TSV encoding okunamadı","wos_convert_failed":"WoS TXT → XLSX d\xf6n\xfcş\xfcm\xfc başarısız. Dosya ger\xe7ekten WoS plain text mi?","decisions_empty":"decisions boş olamaz","invalid_if_exists":"if_exists \'rename\' | \'replace\' | \'abort\' olmalı","invalid_kind":"kind \'authors\' veya \'affiliations\' olmalı","invalid_method":"method \'simple\', \'enhanced\' veya \'smart\' olmalı","name_empty":"name boş olamaz","uids_or_dois_required":"uids veya dois gerekli","output_file_missing":"\xc7ıktı \xfcretildi ama dosya bulunamadı","job_not_found_or_uncancelable":"İş bulunamadı veya iptal edilemiyor","job_not_found":"İş bulunamadı","no_files_to_process":"İşlenecek CSV veya TXT dosyası yok (XLSX zaten direkt kullanılır)","unknown_key":"Bilinmeyen anahtar","unknown_source_format":"Bilinmeyen kaynak formatı","format_files_exist":"bu formattan dosya zaten mevcut","unsupported_target_format":"Desteklenmeyen hedef formatı","file_read_failed":"Dosya okunamadı","file_write_failed":"Dosya yazılamadı","invalid_decision":"Ge\xe7ersiz decision","invalid_target_format":"Ge\xe7ersiz hedef formatı","invalid_source_format":"Ge\xe7ersiz kaynak formatı","invalid_folder":"Ge\xe7ersiz klas\xf6r","invalid_path":"Ge\xe7ersiz path","folder_list_failed":"Klas\xf6r listelenemedi","folder_create_failed":"Klas\xf6r oluşturulamadı","delete_failed":"Silme başarısız","snapshot_not_found":"Snapshot bulunamadı","field_must_be_numeric":"sayısal olmalı","no_source_data":"Kaynak veri bulunamadı — 1. Adım\'a (Hazırlık) gidip Scopus CSV veya Web of Science TXT y\xfckleyin.","not_prepared":"Veri hen\xfcz hazırlanmadı. Birleştirmeden \xf6nce 1. Adım\'a (Hazırlık) gidip “Hazırla”yı \xe7alıştırın.","no_merged_data":"Birleştirilmiş veri yok — \xf6nce Merge \xe7alıştırın","llm_key_missing":"LLM API anahtarı tanımlı değil — Ayarlar\'dan ekleyin","no_au_column":"AU (yazarlar) s\xfctunu yok","no_c1_column":"C1 (kurum) s\xfctunu yok","no_operations":"Hen\xfcz raporlanacak işlem yok. \xd6nce en az bir adım ger\xe7ekleştirin.","methodology_not_generated":"Metodoloji raporu hen\xfcz \xfcretilmedi.","llm_request_failed":"Dil modeli isteği başarısız oldu. L\xfctfen tekrar deneyin.","project_delete_failed":"Proje silinemedi. Bir dosya a\xe7ık veya kilitli olabilir — onu kullanan programı (Excel, dosya gezgini) kapatıp tekrar deneyin.","no_fields_to_update":"G\xfcncellenecek alan yok.","record_not_found":"Kayıt bulunamadı."},"folderPicker":{"title":"Klas\xf6r Se\xe7","subtitle":"Sistem gezgini \xb7 macOS / Windows / Linux uyumlu","nativePicker":"Native picker","nativePickerTip":"Tarayıcı native dosya se\xe7icisini a\xe7 (Chrome/Edge) — backend klas\xf6r adını arayıp tam yolu bulur","nativePickerLoadError":"Y\xfcklenemedi","nativePickerNoPath":"\\"{name}\\" klas\xf6r\xfc i\xe7in tam yol bulunamadı. Sol panelden manuel gezinerek se\xe7in.","nativePickerMultipleMatches":"\\"{name}\\" i\xe7in {count} olası yol bulundu — hangisini istiyorsun?","nativePickerError":"Native picker hatası","cancelManual":"Vazge\xe7, manuel gez","upBtn":"Yukarı","computerTip":"Bilgisayar / k\xf6k","computer":"Bilgisayar","quickAccess":"Hızlı Erişim","loading":"Y\xfckleniyor…","backToRoot":"K\xf6ke d\xf6n","emptyFolder":"Bu klas\xf6r boş (alt klas\xf6r yok)","toSelect":"Se\xe7ilecek","nothingSelected":"(se\xe7im yok)","cancel":"Vazge\xe7","selectThis":"Bu klas\xf6r\xfc se\xe7"}}')},o=(0,r.createContext)(null),n="bibexpy.locale";function s(e,a){if(!e||"object"!=typeof e)return;let t=e;for(let e of a.split(".")){if(!t||"object"!=typeof t||!(e in t))return;t=t[e]}return t}function d(e,a){return a?e.replace(/\{(\w+)\}/g,(e,t)=>t in a?String(a[t]):"{".concat(t,"}")):e}function c(e){let{children:a,initialLocale:t}=e,[c,u]=(0,r.useState)(null!=t?t:"en");(0,r.useEffect)(()=>{let e=window.localStorage.getItem(n);("en"===e||"tr"===e)&&u(e)},[]);let m=(0,r.useCallback)(e=>{u(e),window.localStorage.setItem(n,e),document.documentElement.lang=e},[]),p=(0,r.useCallback)((e,a)=>{let t=s(l[c],e);return("string"!=typeof t&&"en"!==c&&(t=s(l.en,e)),"string"!=typeof t)?e:d(t,a)},[c]),y=(0,r.useCallback)(e=>{let a=s(l[c],e);return(Array.isArray(a)||"en"===c||(a=s(l.en,e)),Array.isArray(a))?a.filter(e=>"string"==typeof e):[]},[c]),k=(0,r.useCallback)(e=>{let a=s(l[c],e);return(Array.isArray(a)||"en"===c||(a=s(l.en,e)),Array.isArray(a))?a:[]},[c]),f=(0,r.useMemo)(()=>({locale:c,setLocale:m,t:p,tArr:y,tObjArr:k}),[c,m,p,y,k]);return(0,i.jsx)(o.Provider,{value:f,children:a})}function u(){return(0,r.useContext)(o)||{locale:"en",setLocale:()=>{},t:(e,a)=>{let t=s(l.en,e);return"string"!=typeof t?e:d(t,a)},tArr:e=>{let a=s(l.en,e);return Array.isArray(a)?a.filter(e=>"string"==typeof e):[]},tObjArr:e=>{let a=s(l.en,e);return Array.isArray(a)?a:[]}}}function m(){return u().t}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[367],{470:function(e,t,s){s.d(t,{N:function(){return Z}});var a=s(7437),n=s(2265),r=s(7648),l=s(7689),i=s(8736),c=s(3953),d=s(6595),o=s(8930),x=s(2023),m=s(4972),u=s(3581),h=s(9076),b=s(2735),p=s(8124),g=s(5621),f=s(6362),j=s(2489),N=s(91),w=s(7855),v=s(3554),y=s(5499),k=s(4502);let _={upload:{icon:(0,a.jsx)(l.Z,{className:"h-3.5 w-3.5"}),color:"text-info",labelKey:"audit.kinds.upload"},convert:{icon:(0,a.jsx)(i.Z,{className:"h-3.5 w-3.5"}),color:"text-info",labelKey:"audit.kinds.convert"},merge:{icon:(0,a.jsx)(c.Z,{className:"h-3.5 w-3.5"}),color:"text-brand-500",labelKey:"audit.kinds.merge"},filter_save:{icon:(0,a.jsx)(d.Z,{className:"h-3.5 w-3.5"}),color:"text-warning",labelKey:"audit.kinds.filter_save"},records_delete:{icon:(0,a.jsx)(o.Z,{className:"h-3.5 w-3.5"}),color:"text-danger",labelKey:"audit.kinds.records_delete"},enrich_api:{icon:(0,a.jsx)(x.Z,{className:"h-3.5 w-3.5"}),color:"text-brand-500",labelKey:"audit.kinds.enrich_api"},enrich_ml:{icon:(0,a.jsx)(m.Z,{className:"h-3.5 w-3.5"}),color:"text-brand-500",labelKey:"audit.kinds.enrich_ml"},enrich_selected_requested:{icon:(0,a.jsx)(x.Z,{className:"h-3.5 w-3.5"}),color:"text-brand-500",labelKey:"audit.kinds.enrich_selected"},disambiguate:{icon:(0,a.jsx)(x.Z,{className:"h-3.5 w-3.5"}),color:"text-accent",labelKey:"audit.kinds.disambiguate"},snapshot:{icon:(0,a.jsx)(u.Z,{className:"h-3.5 w-3.5"}),color:"text-muted",labelKey:"audit.kinds.snapshot"},snapshot_restore:{icon:(0,a.jsx)(h.Z,{className:"h-3.5 w-3.5"}),color:"text-warning",labelKey:"audit.kinds.snapshot_restore"},export:{icon:(0,a.jsx)(b.Z,{className:"h-3.5 w-3.5"}),color:"text-success",labelKey:"audit.kinds.export"},analysis_activate:{icon:(0,a.jsx)(c.Z,{className:"h-3.5 w-3.5"}),color:"text-brand-500",labelKey:"audit.kinds.analysis_activate"},analysis_delete:{icon:(0,a.jsx)(o.Z,{className:"h-3.5 w-3.5"}),color:"text-danger",labelKey:"audit.kinds.analysis_delete"},merge_borderline:{icon:(0,a.jsx)(p.Z,{className:"h-3.5 w-3.5"}),color:"text-warning",labelKey:"audit.kinds.merge_borderline"}};function Z(e){let{projectId:t,open:s,onClose:l}=e,i=(0,v.NT)(),c=(0,y.N)(),d=(0,y.p)(),[x,m]=(0,n.useState)([]),[u,h]=(0,n.useState)(!1),[p,N]=(0,n.useState)(!1),_=(0,n.useRef)(l);async function Z(){h(!0);try{let e=await w.hi.listAudit(t,200);m(e.reverse())}finally{h(!1)}}async function K(e){if(await c({title:i("audit.restoreTitle"),message:i("audit.restoreConfirm"),confirmLabel:i("audit.restore"),tone:"danger"}))try{let s=await w.hi.restoreRecordSnapshot(t,e);d(i("audit.restoredToast",{n:s.restored}),{tone:"success"}),await Z()}catch(e){d((0,w.NS)(i,e,"audit.restoreFailed"),{tone:"danger"})}}async function S(){if(await c({message:i("audit.clearConfirm"),tone:"danger"}))try{await w.hi.clearAudit(t),await Z()}catch(e){}}return(_.current=l,(0,n.useEffect)(()=>{if(!s){N(!1);return}requestAnimationFrame(()=>N(!0)),h(!0),w.hi.listAudit(t,200).then(e=>m(e.reverse())).catch(()=>m([])).finally(()=>h(!1));let e=e=>{"Escape"===e.key&&_.current()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[s,t]),s)?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{onClick:l,className:(0,k.cn)("fixed inset-0 bg-ink/30 backdrop-blur-sm z-40 transition-opacity",p?"opacity-100":"opacity-0")}),(0,a.jsxs)("div",{className:(0,k.cn)("fixed top-0 right-0 h-full w-full max-w-xl bg-white shadow-2xl z-50 flex flex-col","transition-transform duration-200 ease-out",p?"translate-x-0":"translate-x-full"),children:[(0,a.jsxs)("div",{className:"px-5 py-3.5 border-b border-border flex items-center gap-3",children:[(0,a.jsx)(g.Z,{className:"h-4 w-4 text-brand-500"}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("h2",{className:"font-semibold text-sm",children:i("audit.title")}),(0,a.jsx)("p",{className:"text-[11px] text-muted",children:i("audit.totalOperations",{n:x.length})})]}),(0,a.jsxs)(r.default,{href:"/projects/".concat(t,"/report"),className:"text-xs text-brand-600 hover:underline flex items-center gap-1",children:[i("nav.report")," ",(0,a.jsx)(f.Z,{className:"h-3 w-3"})]}),(0,a.jsx)("a",{href:w.hi.auditReportUrl(t),target:"_blank",rel:"noreferrer",className:"text-xs text-muted hover:text-brand-600 flex items-center gap-1",title:i("audit.downloadMarkdown"),children:(0,a.jsx)(b.Z,{className:"h-3 w-3"})}),(0,a.jsx)("button",{onClick:l,className:"p-1.5 rounded-md hover:bg-bg-soft text-muted hover:text-ink",children:(0,a.jsx)(j.Z,{className:"h-5 w-5"})})]}),(0,a.jsx)("div",{className:"flex-1 overflow-y-auto",children:u?(0,a.jsx)("p",{className:"text-center py-12 text-muted text-sm",children:i("common.loading")}):0===x.length?(0,a.jsxs)("div",{className:"text-center py-12 px-6",children:[(0,a.jsx)(g.Z,{className:"h-8 w-8 mx-auto text-muted/40 mb-3"}),(0,a.jsx)("p",{className:"text-sm text-muted",children:i("audit.noEntries")}),(0,a.jsx)("p",{className:"text-[11px] text-muted mt-1",children:i("audit.subtitle")})]}):(0,a.jsx)("ol",{className:"relative",children:x.map((e,t)=>(0,a.jsx)(C,{entry:e,onRestore:K},t))})}),x.length>0&&(0,a.jsx)("div",{className:"px-5 py-3 border-t border-border flex items-center justify-between",children:(0,a.jsxs)("button",{onClick:S,className:"text-[11px] text-muted hover:text-danger flex items-center gap-1",children:[(0,a.jsx)(o.Z,{className:"h-3 w-3"})," ",i("audit.clearAll")]})})]})]}):null}function K(e){var t,s,n,r,l,i,c,d,o;let{details:x}=e,m=(0,v.NT)(),u=Number(null!==(t=x.wos_input)&&void 0!==t?t:0),h=Number(null!==(s=x.scopus_input)&&void 0!==s?s:0),b=Number(null!==(n=x.merged_count)&&void 0!==n?n:0),g=Number(null!==(r=x.matched_pairs)&&void 0!==r?r:0),f=Number(null!==(l=x.borderline_count)&&void 0!==l?l:0),j=Number(null!==(i=x.borderline_pending)&&void 0!==i?i:0),w=Number(null!==(c=x.conflict_count)&&void 0!==c?c:0),y=Number(null!==(d=x.lost_wos_count)&&void 0!==d?d:0),k=Number(null!==(o=x.lost_scopus_count)&&void 0!==o?o:0),_=x.match_stages||{},Z=x.field_source_distribution||{},K=null!=x.duration_seconds?Number(x.duration_seconds):null,C=Array.isArray(x.output_files)?x.output_files:[],O=u+h;return(0,a.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,a.jsxs)("div",{className:"grid grid-cols-4 gap-1.5",children:[(0,a.jsx)(S,{label:m("audit.smart.rawInput"),value:"".concat(O),sub:"".concat(u," + ").concat(h),tone:"muted"}),(0,a.jsx)(S,{label:m("audit.smart.matched"),value:"".concat(g),sub:"".concat((O>0?(O-b)/O*100:0).toFixed(1),"% ").concat(m("audit.smart.dedupShort")),tone:"brand"}),(0,a.jsx)(S,{label:m("audit.smart.borderline"),value:"".concat(j,"/").concat(f),sub:m("audit.smart.pendingTotal"),tone:j>0?"warning":"muted"}),(0,a.jsx)(S,{label:m("audit.smart.output"),value:"".concat(b),sub:"".concat(y,"+").concat(k," ").concat(m("audit.smart.lostShort")),tone:"success"})]}),Object.keys(_).length>0&&(0,a.jsxs)("div",{className:"rounded-md border border-border bg-bg-soft/40 px-2 py-1.5",children:[(0,a.jsxs)("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted mb-1 flex items-center gap-1",children:[(0,a.jsx)(p.Z,{className:"h-2.5 w-2.5"})," ",m("merge.smart.matchStagesHeader")]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:Object.entries(_).map(e=>{let[t,s]=e;return(0,a.jsxs)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-white border border-border",children:[(0,a.jsxs)("span",{className:"font-mono text-muted",children:[t,":"]})," ",(0,a.jsx)("strong",{children:String(s)})]},t)})})]}),Object.keys(Z).length>0&&(0,a.jsxs)("div",{className:"rounded-md border border-border bg-bg-soft/40 px-2 py-1.5",children:[(0,a.jsxs)("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted mb-1 flex items-center gap-1",children:[(0,a.jsx)(N.Z,{className:"h-2.5 w-2.5"})," ",m("audit.smart.conflictResolution",{conflict:w})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:Object.entries(Z).map(e=>{let[t,s]=e,n=Object.values(Z).reduce((e,t)=>e+t,0),r=n>0?(s/n*100).toFixed(0):"0";return(0,a.jsxs)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-white border border-border",children:[(0,a.jsxs)("span",{className:"font-mono text-muted",children:[t,":"]})," ",(0,a.jsx)("strong",{children:String(s)})," ",(0,a.jsxs)("span",{className:"text-muted",children:["(",r,"%)"]})]},t)})})]}),(null!=K||C.length>0)&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-muted",children:[null!=K&&(0,a.jsxs)("span",{children:["⏱ ",K.toFixed(1)," ",m("audit.smart.seconds")]}),C.length>0&&(0,a.jsxs)("span",{children:["\uD83D\uDCE6 ",m("audit.smart.filesProduced",{n:C.length})]})]})]})}function S(e){let{label:t,value:s,sub:n,tone:r}=e;return(0,a.jsxs)("div",{className:(0,k.cn)("rounded border px-2 py-1",{muted:"bg-bg-soft text-ink border-border",brand:"bg-brand-50 text-brand-700 border-brand-200",success:"bg-success-soft text-emerald-700 border-success/30",warning:"bg-warning-soft text-amber-700 border-warning/30"}[r]),children:[(0,a.jsx)("div",{className:"text-[9px] font-semibold uppercase tracking-wider opacity-75",children:t}),(0,a.jsx)("div",{className:"text-sm font-bold tabular-nums leading-tight",children:s}),n&&(0,a.jsx)("div",{className:"text-[9px] opacity-70",children:n})]})}function C(e){var t,s;let{entry:r,onRestore:l}=e,c=(0,v.NT)(),d=null!==(s=_[r.kind])&&void 0!==s?s:{icon:(0,a.jsx)(i.Z,{className:"h-3.5 w-3.5"}),color:"text-muted",labelKey:""},o=d.labelKey?c(d.labelKey):r.kind,x=new Date(1e3*r.ts).toLocaleString(void 0,{dateStyle:"short",timeStyle:"medium"}),[m,b]=(0,n.useState)(!1),p=r.before||r.after,g="merge"===r.kind&&(null===(t=r.details)||void 0===t?void 0:t.method)==="smart";return(0,a.jsx)("li",{className:"px-5 py-3 border-b border-border hover:bg-bg-soft/50",children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)("div",{className:(0,k.cn)("mt-0.5 flex-shrink-0",d.color),children:d.icon}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,a.jsx)("span",{className:(0,k.cn)("text-[10px] font-semibold uppercase tracking-wide",d.color),children:o}),g&&(0,a.jsx)("span",{className:"text-[9px] font-bold uppercase tracking-wider px-1.5 py-0.5 rounded bg-success-soft text-emerald-700 border border-success/30",children:"Smart"}),(0,a.jsx)("span",{className:"text-[10px] text-muted ml-auto",children:x})]}),(0,a.jsx)("p",{className:"text-sm text-ink font-medium mt-0.5",children:(0,w.Pr)(c,r)}),g&&r.details&&(0,a.jsx)(K,{details:r.details}),p&&(0,a.jsxs)("div",{className:"mt-1 text-[11px] text-muted flex gap-2 items-center",children:[r.before&&(0,a.jsxs)("span",{children:[c("audit.before"),": ",(0,a.jsx)("code",{className:"text-ink",children:JSON.stringify(r.before)})]}),r.after&&(0,a.jsxs)("span",{children:["→ ",c("audit.after"),": ",(0,a.jsx)("code",{className:"text-ink",children:JSON.stringify(r.after)})]})]}),r.details&&Object.keys(r.details).length>0&&!g&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{onClick:()=>b(!m),className:"text-[11px] text-brand-600 hover:underline mt-1",children:c(m?"audit.hideDetails":"audit.showDetails")}),m&&(0,a.jsx)("pre",{className:"text-[10px] mt-1 bg-bg-soft rounded p-2 overflow-x-auto text-muted",children:JSON.stringify(r.details,null,2)})]}),r.snapshot&&(0,a.jsxs)("div",{className:"mt-1.5 flex items-center gap-2 flex-wrap",children:[(0,a.jsxs)("span",{className:"text-[10px] text-muted font-mono flex items-center gap-1",children:[(0,a.jsx)(u.Z,{className:"h-3 w-3"})," ",r.snapshot.split(/[\\/]/).pop()]}),(0,a.jsxs)("button",{onClick:()=>l(r.snapshot),className:"text-[10px] font-semibold text-amber-700 hover:text-amber-900 flex items-center gap-1 px-2 py-0.5 rounded-md border border-warning/40 bg-warning-soft/60 hover:bg-warning-soft transition",title:c("audit.restoreTitle"),children:[(0,a.jsx)(h.Z,{className:"h-3 w-3"})," ",c("audit.restore")]})]})]})]})})}},4765:function(e,t,s){s.d(t,{L:function(){return h}});var a=s(7437),n=s(7648),r=s(9376),l=s(5621),i=s(2660),c=s(6858),d=s(3554),o=s(4502),x=s(1348),m=s(8763);let u={cyan:"bg-teal-600 hover:bg-teal-500 ring-teal-300/40",brand:"bg-brand-600 hover:bg-brand-500 ring-brand-300/40",emerald:"bg-emerald-600 hover:bg-emerald-500 ring-emerald-300/40"};function h(e){let{onHistory:t,nextOptions:s}=e,h=(0,x.v)(),b=(0,r.usePathname)(),p=(0,d.NT)(),{isEnabled:g}=(0,m.vH)(h),f=m.u$.findIndex(e=>null==b?void 0:b.includes("/projects/".concat(h,"/").concat(e.slug))),j=null;for(let e=f-1;e>=0;e--)if(g(m.u$[e].slug)){j=m.u$[e];break}let N=null!=s?s:[];if(0===N.length&&f>=0){for(let e=f+1;e<m.u$.length;e++)if(g(m.u$[e].slug)){N=[{href:"/projects/".concat(h,"/").concat(m.u$[e].slug),label:p(m.u$[e].labelKey),tone:"cyan"}];break}}let w=1===N.length,v=f>=0&&(j||N.length>0);return(0,a.jsxs)("div",{className:"flex items-stretch gap-2.5",children:[t&&(0,a.jsxs)("button",{onClick:t,title:p("common.history"),className:"flex flex-col items-center justify-center gap-1 rounded-xl bg-white/10 px-4 text-white ring-1 ring-white/15 transition hover:bg-white/20",children:[(0,a.jsx)(l.Z,{className:"h-6 w-6"}),(0,a.jsx)("span",{className:"text-sm font-semibold",children:p("common.history")})]}),v&&(0,a.jsxs)("div",{className:"flex min-w-[210px] flex-col gap-1.5",children:[j&&(0,a.jsxs)(n.default,{href:"/projects/".concat(h,"/").concat(j.slug),className:"group flex items-center gap-2.5 rounded-lg bg-white/10 px-3.5 py-2.5 text-white ring-1 ring-white/15 transition hover:bg-white/20",children:[(0,a.jsx)(i.Z,{className:"h-4 w-4 flex-shrink-0 text-white/70 transition group-hover:-translate-x-0.5"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col items-start leading-none",children:[(0,a.jsx)("span",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-white/55",children:p("common.prevStep")}),(0,a.jsx)("span",{className:"mt-0.5 truncate text-base font-bold",children:p(j.labelKey)})]})]}),N.map(e=>{var t;return(0,a.jsxs)(n.default,{href:e.href,onClick:e.onClick,className:(0,o.cn)("group flex items-center justify-between gap-2.5 rounded-lg px-3.5 py-2.5 text-white shadow-[0_10px_28px_-12px_rgba(15,118,110,0.55)] ring-1 transition",u[null!==(t=e.tone)&&void 0!==t?t:"cyan"]),children:[(0,a.jsxs)("span",{className:"flex min-w-0 flex-col items-start leading-none",children:[w&&(0,a.jsx)("span",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-white/80",children:p("common.nextStep")}),(0,a.jsx)("span",{className:(0,o.cn)("truncate font-extrabold",w?"mt-0.5 text-base":"text-base"),children:e.label})]}),(0,a.jsx)(c.Z,{className:"h-4 w-4 flex-shrink-0 transition group-hover:translate-x-0.5"})]},e.href)})]})]})}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[382],{9835:function(e,t,n){n.d(t,{Ol:function(){return a},Zb:function(){return l},eW:function(){return i}});var r=n(7437),s=n(4502);function l(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,s.cn)("rounded-xl border border-border bg-bg-card shadow-card",t),...n})}function a(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,s.cn)("px-5 py-3.5 flex items-center gap-2 rounded-t-xl bg-[#0c2847] text-white","[&_h2]:text-white [&_h3]:text-white [&_.text-muted]:text-slate-400",t),...n})}function i(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,s.cn)("p-5",t),...n})}},5499:function(e,t,n){n.d(t,{DialogProvider:function(){return f},N:function(){return b},p:function(){return h}});var r=n(7437),s=n(2265),l=n(4887),a=n(6865),i=n(5368),o=n(2489),c=n(2934),d=n(3245),u=n(3554),x=n(4502);let m=(0,s.createContext)(null);function b(){let e=(0,s.useContext)(m);if(!e)throw Error("useConfirm must be used within <DialogProvider>");return e.confirm}function h(){let e=(0,s.useContext)(m);if(!e)throw Error("useToast must be used within <DialogProvider>");return e.toast}function f(e){let{children:t}=e,[n,a]=(0,s.useState)(!1),[i,o]=(0,s.useState)(null),[c,d]=(0,s.useState)([]),u=(0,s.useRef)(0);(0,s.useEffect)(()=>a(!0),[]);let x=(0,s.useCallback)(e=>new Promise(t=>o({...e,resolve:t})),[]),b=(0,s.useCallback)(e=>{o(t=>(null==t||t.resolve(e),null))},[]),h=(0,s.useCallback)((e,t)=>{var n,r;let s=++u.current,l=null!==(n=null==t?void 0:t.tone)&&void 0!==n?n:"info";d(n=>[...n,{id:s,message:e,title:null==t?void 0:t.title,tone:l}]),setTimeout(()=>d(e=>e.filter(e=>e.id!==s)),null!==(r=null==t?void 0:t.duration)&&void 0!==r?r:"danger"===l?7e3:4500)},[]),f=(0,s.useCallback)(e=>{d(t=>t.filter(t=>t.id!==e))},[]);return(0,r.jsxs)(m.Provider,{value:{confirm:x,toast:h},children:[t,n&&i&&(0,l.createPortal)((0,r.jsx)(g,{state:i,onClose:b}),document.body),n&&(0,l.createPortal)((0,r.jsx)(v,{toasts:c,onDismiss:f}),document.body)]})}function g(e){var t,n,l;let{state:c,onClose:d}=e,m=(0,u.NT)(),b="danger"===c.tone;(0,s.useEffect)(()=>{let e=e=>{"Escape"===e.key&&d(!1),"Enter"===e.key&&d(!0)};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[d]);let h=null!==(t=c.title)&&void 0!==t?t:m("common.confirmTitle"),f=null!==(n=c.cancelLabel)&&void 0!==n?n:m("common.cancel"),g=null!==(l=c.confirmLabel)&&void 0!==l?l:m(b?"common.delete":"common.confirm");return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"fixed inset-0 bg-ink/40 backdrop-blur-sm z-[80]",onClick:()=>d(!1)}),(0,r.jsx)("div",{className:"fixed inset-0 z-[90] flex items-center justify-center p-4 pointer-events-none",children:(0,r.jsxs)("div",{role:"dialog","aria-modal":"true",className:"bg-white rounded-2xl shadow-2xl w-full max-w-md overflow-hidden pointer-events-auto animate-in",children:[(0,r.jsxs)("div",{className:(0,x.cn)("px-5 py-3.5 border-b flex items-center gap-2.5",b?"bg-danger-soft/50 border-danger/20":"bg-brand-50/60 border-brand-100"),children:[(0,r.jsx)("span",{className:(0,x.cn)("w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0",b?"bg-danger-soft text-danger":"bg-brand-100 text-brand-600"),children:b?(0,r.jsx)(a.Z,{className:"h-4 w-4"}):(0,r.jsx)(i.Z,{className:"h-4 w-4"})}),(0,r.jsx)("h3",{className:"font-semibold text-sm text-ink flex-1",children:h}),(0,r.jsx)("button",{onClick:()=>d(!1),className:"text-muted hover:text-ink p-1 rounded",children:(0,r.jsx)(o.Z,{className:"h-4 w-4"})})]}),(0,r.jsxs)("div",{className:"px-5 py-4 space-y-2",children:[(0,r.jsx)("p",{className:"text-sm text-ink whitespace-pre-line leading-relaxed",children:c.message}),c.detail&&(0,r.jsx)("p",{className:"text-xs text-muted whitespace-pre-line bg-bg-soft rounded-lg px-3 py-2",children:c.detail})]}),(0,r.jsxs)("div",{className:"px-5 py-3 bg-bg-soft/40 border-t border-border flex items-center justify-end gap-2",children:[(0,r.jsx)("button",{onClick:()=>d(!1),className:"px-4 py-2 rounded-lg text-sm font-medium text-muted hover:text-ink hover:bg-bg-soft transition",children:f}),(0,r.jsx)("button",{autoFocus:!0,onClick:()=>d(!0),className:(0,x.cn)("px-4 py-2 rounded-lg text-sm font-semibold text-white shadow-soft transition",b?"bg-danger hover:bg-red-600":"bg-brand-500 hover:bg-brand-600"),children:g})]})]})})]})}let p={success:{icon:(0,r.jsx)(c.Z,{className:"h-4 w-4"}),ring:"border-success/30",iconColor:"text-emerald-600"},danger:{icon:(0,r.jsx)(a.Z,{className:"h-4 w-4"}),ring:"border-danger/30",iconColor:"text-danger"},warning:{icon:(0,r.jsx)(a.Z,{className:"h-4 w-4"}),ring:"border-warning/40",iconColor:"text-warning"},info:{icon:(0,r.jsx)(d.Z,{className:"h-4 w-4"}),ring:"border-info/30",iconColor:"text-blue-600"}};function v(e){let{toasts:t,onDismiss:n}=e;return 0===t.length?null:(0,r.jsx)("div",{className:"fixed top-4 right-4 z-[100] flex flex-col gap-2 w-[min(92vw,22rem)] pointer-events-none",children:t.map(e=>{let t=p[e.tone];return(0,r.jsxs)("div",{className:(0,x.cn)("pointer-events-auto bg-white rounded-xl border shadow-card px-3.5 py-2.5 flex items-start gap-2.5 animate-in",t.ring),children:[(0,r.jsx)("span",{className:(0,x.cn)("mt-0.5 flex-shrink-0",t.iconColor),children:t.icon}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[e.title&&(0,r.jsx)("div",{className:"text-sm font-semibold text-ink",children:e.title}),(0,r.jsx)("div",{className:"text-xs text-muted whitespace-pre-line break-words leading-relaxed",children:e.message})]}),(0,r.jsx)("button",{onClick:()=>n(e.id),className:"text-muted/60 hover:text-ink p-0.5 flex-shrink-0",children:(0,r.jsx)(o.Z,{className:"h-3.5 w-3.5"})})]},e.id)})})}},2669:function(e,t,n){n.d(t,{m:function(){return b}});var r=n(7437),s=n(4502),l=n(7648),a=n(9376),i=n(401),o=n(6337),c=n(3554),d=n(1348),u=n(8763);function x(){let e=(0,d.v)(),t=(0,a.usePathname)(),n=(0,c.NT)(),{isEnabled:x}=(0,u.vH)(e);if(!(t&&/^\/projects\/[^/]+\/[^/]+/.test(t)))return null;let m=u.u$.findIndex(n=>null==t?void 0:t.startsWith("/projects/".concat(e,"/").concat(n.slug)));return(0,r.jsx)("nav",{className:"border-b border-border bg-gradient-to-b from-white to-bg-soft/30",children:(0,r.jsx)("ol",{className:"mx-auto flex max-w-6xl items-center px-4 py-3.5 sm:px-6",children:u.u$.map((t,a)=>{var c;let d="/projects/".concat(e,"/").concat(t.slug),b=a===m,h=b||x(t.slug),f=h&&m>=0&&a<m,g=t.icon,p=a===u.u$.length-1,v=!p&&x(u.u$[a+1].slug),w=(0,r.jsxs)("span",{className:"flex items-center gap-2.5",children:[(0,r.jsx)("span",{className:(0,s.cn)("flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-full text-sm font-bold transition",b?"bg-brand-500 text-white ring-4 ring-brand-100":f?"bg-brand-500 text-white":h?"border-2 border-border bg-white text-muted group-hover:border-brand-300":"border-2 border-dashed border-border bg-bg-soft text-muted/40"),children:f?(0,r.jsx)(i.Z,{className:"h-4 w-4"}):h?a+1:(0,r.jsx)(o.Z,{className:"h-3.5 w-3.5"})}),(0,r.jsxs)("span",{className:"hidden items-center gap-1.5 sm:flex",children:[(0,r.jsx)(g,{className:(0,s.cn)("h-4 w-4 flex-shrink-0",b?"text-brand-600":f?"text-brand-500":h?"text-muted":"text-muted/40")}),(0,r.jsx)("span",{className:(0,s.cn)("whitespace-nowrap text-[13px] font-medium leading-tight",b?"font-bold text-brand-700":h?"text-ink":"text-muted/40"),children:n(t.labelKey)})]})]});return(0,r.jsxs)("li",{className:(0,s.cn)("flex items-center",p?"flex-initial":"flex-1"),children:[h?(0,r.jsx)(l.default,{href:d,"aria-current":b?"step":void 0,className:"group flex-shrink-0 rounded-lg px-1.5 py-1 transition hover:bg-white/70",children:w}):(0,r.jsx)("span",{title:n("records"===(c=t.slug)||"enrich"===c?"nav.lockNeedAdvanced":"nav.lockNeedMerge"),"aria-disabled":"true",className:"flex-shrink-0 cursor-not-allowed select-none px-1.5 py-1",children:w}),!p&&(0,r.jsx)("span",{className:(0,s.cn)("mx-2 h-0.5 flex-1 rounded-full transition sm:mx-3",f?"bg-brand-400":v?"bg-brand-200":"bg-border")})]},t.slug)})})})}let m={neutral:"bg-white/15 text-white border-white/20",live:"bg-emerald-400/20 text-emerald-50 border-emerald-300/40",info:"bg-cyan-400/20 text-cyan-50 border-cyan-300/40"};function b(e){let{title:t,subtitle:n,badges:l,right:a,className:i}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("section",{className:(0,s.cn)("bg-[#081c32] text-white",i),children:(0,r.jsxs)("div",{className:"max-w-6xl mx-auto px-6 py-8",children:[l&&l.length>0&&(0,r.jsx)("div",{className:"flex flex-wrap items-center gap-2 mb-3",children:l.map((e,t)=>{var n;return(0,r.jsx)("span",{className:(0,s.cn)("inline-flex items-center px-2.5 py-1 rounded-md border text-[11px] font-semibold uppercase tracking-wide",m[null!==(n=e.tone)&&void 0!==n?n:"neutral"]),children:e.label},t)})}),(0,r.jsxs)("div",{className:"flex flex-wrap items-end justify-between gap-4",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h1",{className:"text-3xl font-bold leading-tight",children:t}),n&&(0,r.jsx)("p",{className:"text-white/80 mt-1.5 text-sm max-w-2xl",children:n})]}),a&&(0,r.jsx)("div",{className:"text-white/90 text-sm",children:a})]})]})}),(0,r.jsx)(x,{})]})}},8763:function(e,t,n){n.d(t,{T0:function(){return x},u$:function(){return u},vH:function(){return m}});var r=n(2265),s=n(9376),l=n(3953),a=n(5751),i=n(4972),o=n(8872),c=n(8920),d=n(7855);let u=[{slug:"merge",labelKey:"nav.analyses",icon:l.Z},{slug:"records",labelKey:"nav.records",icon:a.Z},{slug:"enrich",labelKey:"nav.ai",icon:i.Z},{slug:"export",labelKey:"nav.export",icon:o.Z},{slug:"report",labelKey:"nav.report",icon:c.Z}],x=(e,t)=>"bibexpy_adv_".concat(e,"_").concat(t);function m(e){let t=(0,s.usePathname)(),[n,l]=(0,r.useState)(!1),[a,i]=(0,r.useState)(!1),[o,c]=(0,r.useState)(!1),u=(0,r.useCallback)(async()=>{if(e)try{var t;let n=await d.hi.mergeSummary(e),r=!!(null==n?void 0:n.has_merge);l(r);let s=null==n?void 0:null===(t=n.analysis)||void 0===t?void 0:t.id,a=!1;if(r&&s)try{a="1"===localStorage.getItem(x(e,s))}catch(e){}i(a)}catch(e){}finally{c(!0)}},[e]);(0,r.useEffect)(()=>{u()},[u,t]),(0,r.useEffect)(()=>{let e=()=>u();return window.addEventListener("bibexpy:status",e),()=>window.removeEventListener("bibexpy:status",e)},[u]);let m=(0,r.useCallback)(e=>{if(!o)return!0;switch(e){case"merge":default:return!0;case"export":case"report":return n;case"records":case"enrich":return n&&a}},[o,n,a]);return{merged:n,advanced:a,loaded:o,isEnabled:m,refresh:u}}},1348:function(e,t,n){n.d(t,{v:function(){return s}});var r=n(9376);function s(){let e=(0,r.useParams)(),t=null==e?void 0:e.id;if(t&&"_"!==t)return decodeURIComponent(t);{let e=window.location.pathname.match(/\/projects\/([^/]+)/);if(e&&e[1]&&"_"!==e[1])return decodeURIComponent(e[1])}return null!=t?t:"_"}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[392],{265:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]])},4972:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]])},401:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},407:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},9322:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},2934:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},5368:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},3953:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Combine",[["path",{d:"M10 18H5a3 3 0 0 1-3-3v-1",key:"ru65g8"}],["path",{d:"M14 2a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2",key:"e30een"}],["path",{d:"M20 2a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2",key:"2ahx8o"}],["path",{d:"m7 21 3-3-3-3",key:"127cv2"}],["rect",{x:"14",y:"14",width:"8",height:"8",rx:"2",key:"1b0bso"}],["rect",{x:"2",y:"2",width:"8",height:"8",rx:"2",key:"1x09vl"}]])},4822:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]])},91:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]])},2735:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},6362:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]])},7769:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]])},2208:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},8872:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FileOutput",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2",key:"1vk7w2"}],["path",{d:"M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6",key:"1jink5"}],["path",{d:"m5 11-3 3",key:"1dgrs4"}],["path",{d:"m5 17-3-3h10",key:"1mvvaf"}]])},5751:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FilterX",[["path",{d:"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055",key:"1fi1da"}],["path",{d:"m22 3-5 5",key:"12jva0"}],["path",{d:"m17 3 5 5",key:"k36vhe"}]])},9548:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FolderInput",[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1",key:"fm4g5t"}],["path",{d:"M2 13h10",key:"pgb2dq"}],["path",{d:"m9 16 3-3-3-3",key:"6m91ic"}]])},6475:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]])},4924:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]])},4428:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]])},4938:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]])},3245:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},6748:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]])},7945:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]])},1817:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},6337:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]])},9897:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]])},9076:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]])},3229:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]])},8920:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ScrollText",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]])},2023:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]])},2489:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[507],{2660:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},6858:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]])},4972:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]])},3581:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]])},401:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]])},875:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]])},2934:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},5368:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},3953:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Combine",[["path",{d:"M10 18H5a3 3 0 0 1-3-3v-1",key:"ru65g8"}],["path",{d:"M14 2a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2",key:"e30een"}],["path",{d:"M20 2a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2",key:"2ahx8o"}],["path",{d:"m7 21 3-3-3-3",key:"127cv2"}],["rect",{x:"14",y:"14",width:"8",height:"8",rx:"2",key:"1b0bso"}],["rect",{x:"2",y:"2",width:"8",height:"8",rx:"2",key:"1x09vl"}]])},91:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]])},2735:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]])},6362:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]])},8872:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FileOutput",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2",key:"1vk7w2"}],["path",{d:"M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6",key:"1jink5"}],["path",{d:"m5 11-3 3",key:"1dgrs4"}],["path",{d:"m5 17-3-3h10",key:"1mvvaf"}]])},5751:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("FilterX",[["path",{d:"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055",key:"1fi1da"}],["path",{d:"m22 3-5 5",key:"12jva0"}],["path",{d:"m17 3 5 5",key:"k36vhe"}]])},5621:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]])},3245:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},8124:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]])},1817:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},6337:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]])},9076:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]])},8920:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("ScrollText",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]])},2023:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]])},6595:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]])},8930:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},6865:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},7689:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]])},2489:function(t,e,a){a.d(e,{Z:function(){return n}});let n=(0,a(9205).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])}}]);
|