@researai/deepscientist 1.5.8 → 1.5.11
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.
- package/LICENSE +186 -21
- package/README.md +108 -95
- package/assets/branding/connector-qq.png +0 -0
- package/assets/branding/connector-rokid.png +0 -0
- package/assets/branding/connector-weixin.png +0 -0
- package/assets/branding/projects.png +0 -0
- package/bin/ds.js +172 -13
- package/docs/assets/branding/projects.png +0 -0
- package/docs/en/00_QUICK_START.md +308 -70
- package/docs/en/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/en/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
- package/docs/en/09_DOCTOR.md +41 -5
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
- package/docs/en/11_LICENSE_AND_RISK.md +256 -0
- package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +427 -0
- package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/en/README.md +79 -0
- package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
- package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
- package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
- package/docs/images/weixin/weixin-settings-bind.svg +57 -0
- package/docs/zh/00_QUICK_START.md +315 -74
- package/docs/zh/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/zh/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
- package/docs/zh/09_DOCTOR.md +41 -5
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
- package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
- package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +423 -0
- package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/zh/README.md +126 -0
- package/install.sh +0 -34
- package/package.json +3 -3
- package/pyproject.toml +2 -2
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/annotations.py +343 -0
- package/src/deepscientist/artifact/arxiv.py +484 -37
- package/src/deepscientist/artifact/metrics.py +1 -3
- package/src/deepscientist/artifact/service.py +1347 -111
- package/src/deepscientist/arxiv_library.py +275 -0
- package/src/deepscientist/bash_exec/service.py +9 -0
- package/src/deepscientist/bridges/builtins.py +2 -0
- package/src/deepscientist/bridges/connectors.py +447 -0
- package/src/deepscientist/channels/__init__.py +2 -0
- package/src/deepscientist/channels/builtins.py +3 -1
- package/src/deepscientist/channels/qq.py +1 -1
- package/src/deepscientist/channels/qq_gateway.py +1 -1
- package/src/deepscientist/channels/relay.py +7 -1
- package/src/deepscientist/channels/weixin.py +59 -0
- package/src/deepscientist/channels/weixin_ilink.py +317 -0
- package/src/deepscientist/config/models.py +22 -2
- package/src/deepscientist/config/service.py +431 -60
- package/src/deepscientist/connector/__init__.py +4 -0
- package/src/deepscientist/connector/connector_profiles.py +481 -0
- package/src/deepscientist/connector/lingzhu_support.py +668 -0
- package/src/deepscientist/connector/qq_profiles.py +206 -0
- package/src/deepscientist/connector/weixin_support.py +663 -0
- package/src/deepscientist/connector_profiles.py +1 -374
- package/src/deepscientist/connector_runtime.py +2 -0
- package/src/deepscientist/daemon/api/handlers.py +295 -5
- package/src/deepscientist/daemon/api/router.py +16 -1
- package/src/deepscientist/daemon/app.py +1130 -61
- package/src/deepscientist/doctor.py +5 -2
- package/src/deepscientist/gitops/diff.py +120 -29
- package/src/deepscientist/lingzhu_support.py +1 -182
- package/src/deepscientist/mcp/server.py +14 -5
- package/src/deepscientist/prompts/builder.py +29 -1
- package/src/deepscientist/qq_profiles.py +1 -196
- package/src/deepscientist/quest/node_traces.py +152 -2
- package/src/deepscientist/quest/service.py +169 -43
- package/src/deepscientist/quest/stage_views.py +172 -9
- package/src/deepscientist/registries/baseline.py +56 -4
- package/src/deepscientist/runners/codex.py +55 -3
- package/src/deepscientist/weixin_support.py +1 -0
- package/src/prompts/connectors/lingzhu.md +3 -1
- package/src/prompts/connectors/weixin.md +230 -0
- package/src/prompts/system.md +9 -0
- package/src/skills/idea/SKILL.md +16 -0
- package/src/skills/idea/references/literature-survey-template.md +24 -0
- package/src/skills/idea/references/related-work-playbook.md +4 -0
- package/src/skills/idea/references/selection-gate.md +9 -0
- package/src/skills/write/SKILL.md +1 -1
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-m2FNtwbn.js → AiManusChatView-D0mTXG4-.js} +156 -48
- package/src/ui/dist/assets/{AnalysisPlugin-BMTF8EGL.js → AnalysisPlugin-Db0cTXxm.js} +1 -1
- package/src/ui/dist/assets/{CliPlugin-BEOWgxCI.js → CliPlugin-DrV8je02.js} +164 -9
- package/src/ui/dist/assets/{CodeEditorPlugin-BCXvjqmb.js → CodeEditorPlugin-QXMSCH71.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-DaJcy3nD.js → CodeViewerPlugin-7hhtWj_E.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-ByfeIq4K.js → DocViewerPlugin-BWMSnRJe.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-Cksf3VZ-.js → GitDiffViewerPlugin-7J9h9Vy_.js} +20 -21
- package/src/ui/dist/assets/{ImageViewerPlugin-CFz-OsTS.js → ImageViewerPlugin-CHJl_0lr.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-CJ1cJzoX.js → LabCopilotPanel-1qSow1es.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-BF3dVJwa.js → LabPlugin-eQpPPCEp.js} +2 -1
- package/src/ui/dist/assets/{LatexPlugin-DDkwZ6Sj.js → LatexPlugin-BwRfi89Z.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-HAuvurcT.js → MarkdownViewerPlugin-836PVQWV.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-BtoTYy2C.js → MarketplacePlugin-C2y_556i.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-CSJYx7b-.js → NotebookEditor-BRzJbGsn.js} +12 -12
- package/src/ui/dist/assets/{NotebookEditor-DQgRezm_.js → NotebookEditor-DIX7Mlzu.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-DPa_-fv6.js → PdfLoader-DzRaTAlq.js} +14 -7
- package/src/ui/dist/assets/{PdfMarkdownPlugin-BZpXOEjm.js → PdfMarkdownPlugin-DZUfIUnp.js} +73 -6
- package/src/ui/dist/assets/{PdfViewerPlugin-BT8a6wGR.js → PdfViewerPlugin-BwtICzue.js} +103 -34
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
- package/src/ui/dist/assets/{SearchPlugin-D_blveZi.js → SearchPlugin-DHeIAMsx.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-Btx0M3hX.js → TextViewerPlugin-C3tCmFox.js} +5 -4
- package/src/ui/dist/assets/{VNCViewer-DImJO4rO.js → VNCViewer-CQsKVm3t.js} +10 -10
- package/src/ui/dist/assets/bot-BEA2vWuK.js +21 -0
- package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
- package/src/ui/dist/assets/{code-BUfXGJSl.js → code-XfbSR8K2.js} +1 -1
- package/src/ui/dist/assets/{file-content-VqamwI3X.js → file-content-BjxNaIfy.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-C_wOoS7a.js → file-diff-panel-D_lLVQk0.js} +1 -1
- package/src/ui/dist/assets/{file-socket-D2bTuMVP.js → file-socket-D9x_5vlY.js} +1 -1
- package/src/ui/dist/assets/{image-BZkGJ4mM.js → image-BhWT33W1.js} +1 -1
- package/src/ui/dist/assets/{index-DdRW6RMJ.js → index--c4iXtuy.js} +12 -12
- package/src/ui/dist/assets/{index-CxkvSeKw.js → index-BDxipwrC.js} +2 -2
- package/src/ui/dist/assets/{index-DjggJovS.js → index-DZTZ8mWP.js} +14934 -9613
- package/src/ui/dist/assets/{index-DXZ1daiJ.css → index-Dqj-Mjb4.css} +2 -13
- package/src/ui/dist/assets/index-PJbSbPTy.js +25 -0
- package/src/ui/dist/assets/{monaco-DHMc7kKM.js → monaco-K8izTGgo.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DfBors6y.js} +16 -1
- package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/src/ui/dist/assets/{popover-B85oCgCS.js → popover-yFK1J4fL.js} +1 -1
- package/src/ui/dist/assets/{project-sync-DOMCcPac.js → project-sync-PENr2zcz.js} +1 -74
- package/src/ui/dist/assets/select-CAbJDfYv.js +1690 -0
- package/src/ui/dist/assets/{sigma-BO2rQrl3.js → sigma-DEuYJqTl.js} +1 -1
- package/src/ui/dist/assets/{index-D9QIGcmc.js → square-check-big-omoSUmcd.js} +2 -13
- package/src/ui/dist/assets/{trash-BsVEH_dV.js → trash--F119N47.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-b8L6JuZm.js → useCliAccess-D31UR23I.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-BY7uA9hV.js → useFileDiffOverlay-BH6KcMzq.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-BwyVuUIK.js → wrap-text-CZ613PM5.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-RDpLugQP.js → zoom-out-BgDLAv3z.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
- package/src/ui/dist/assets/AutoFigurePlugin-DxPdMUNb.js +0 -8149
- package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
- package/src/ui/dist/assets/Stepper-DH2k75Vo.js +0 -158
- package/src/ui/dist/assets/bibtex-B-Hqu0Sg.js +0 -189
- package/src/ui/dist/assets/file-utils--zJCPN1i.js +0 -109
- package/src/ui/dist/assets/message-square-FUIPIhU2.js +0 -16
- package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
- package/src/ui/dist/assets/tooltip-B1OspAkx.js +0 -108
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
._tip_14ms1_1 {
|
|
2
|
-
transform-origin: top left;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
@keyframes _tip-pop_14ms1_1 {
|
|
6
|
-
0% {
|
|
7
|
-
opacity: 0;
|
|
8
|
-
transform: translateY(6px) scale(0.98);
|
|
9
|
-
}
|
|
10
|
-
100% {
|
|
11
|
-
opacity: 1;
|
|
12
|
-
transform: translateY(0) scale(1);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
@keyframes _tip-slide_14ms1_1 {
|
|
17
|
-
0% {
|
|
18
|
-
opacity: 0;
|
|
19
|
-
transform: translateX(-10px);
|
|
20
|
-
}
|
|
21
|
-
100% {
|
|
22
|
-
opacity: 1;
|
|
23
|
-
transform: translateX(0);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@keyframes _tip-fade_14ms1_1 {
|
|
28
|
-
0% {
|
|
29
|
-
opacity: 0;
|
|
30
|
-
transform: translateY(8px);
|
|
31
|
-
}
|
|
32
|
-
100% {
|
|
33
|
-
opacity: 1;
|
|
34
|
-
transform: translateY(0);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
._tipNote_14ms1_38 {
|
|
39
|
-
animation: _tip-pop_14ms1_1 160ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
._tipQuestion_14ms1_42 {
|
|
43
|
-
animation: _tip-slide_14ms1_1 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
._tipTask_14ms1_46 {
|
|
47
|
-
animation: _tip-fade_14ms1_1 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
48
|
-
}
|
|
49
|
-
._highlight_dilkk_1 {
|
|
50
|
-
position: absolute;
|
|
51
|
-
left: 0;
|
|
52
|
-
right: 0;
|
|
53
|
-
top: 0;
|
|
54
|
-
bottom: 0;
|
|
55
|
-
width: auto;
|
|
56
|
-
pointer-events: none;
|
|
57
|
-
overflow: visible;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
._parts_dilkk_12 {
|
|
61
|
-
opacity: 1;
|
|
62
|
-
pointer-events: none;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
._part_dilkk_12 {
|
|
66
|
-
cursor: pointer;
|
|
67
|
-
position: absolute;
|
|
68
|
-
pointer-events: auto;
|
|
69
|
-
border-radius: 3px;
|
|
70
|
-
/* Make highlight feel “under” the text (canvas) instead of washing it out. */
|
|
71
|
-
mix-blend-mode: multiply;
|
|
72
|
-
transition:
|
|
73
|
-
background 0.2s ease,
|
|
74
|
-
box-shadow 0.2s ease,
|
|
75
|
-
filter 0.2s ease;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
._partFocused_dilkk_30 {
|
|
79
|
-
outline: 2.5px solid rgba(128, 107, 62, 0.96);
|
|
80
|
-
outline-offset: 0;
|
|
81
|
-
box-shadow:
|
|
82
|
-
inset 0 0 0 1px rgba(128, 107, 62, 0.4),
|
|
83
|
-
0 0 0 2px rgba(128, 107, 62, 0.24);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
._scrolledTo_dilkk_38 ._part_dilkk_12 {
|
|
87
|
-
outline: 1.5px solid rgba(138, 120, 78, 0.95);
|
|
88
|
-
outline-offset: 0;
|
|
89
|
-
box-shadow:
|
|
90
|
-
inset 0 0 0 1px rgba(138, 120, 78, 0.32),
|
|
91
|
-
0 0 0 2px rgba(138, 120, 78, 0.22);
|
|
92
|
-
filter: saturate(1.04);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
@keyframes _hl-fade-in_dilkk_1 {
|
|
96
|
-
from {
|
|
97
|
-
opacity: 0.35;
|
|
98
|
-
filter: saturate(1.15);
|
|
99
|
-
}
|
|
100
|
-
to {
|
|
101
|
-
opacity: 1;
|
|
102
|
-
filter: saturate(1);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@keyframes _hl-pulse_dilkk_1 {
|
|
107
|
-
0%,
|
|
108
|
-
100% {
|
|
109
|
-
box-shadow: 0 0 0 0 rgba(99, 102, 241, 0);
|
|
110
|
-
}
|
|
111
|
-
50% {
|
|
112
|
-
box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.35);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
@keyframes _hl-sheen_dilkk_1 {
|
|
117
|
-
0% {
|
|
118
|
-
background-position: 0% 0%;
|
|
119
|
-
}
|
|
120
|
-
100% {
|
|
121
|
-
background-position: 100% 0%;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
._partNote_dilkk_77 {
|
|
126
|
-
background: transparent;
|
|
127
|
-
animation: _hl-fade-in_dilkk_1 180ms ease-out both;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
._partQuestion_dilkk_82 {
|
|
131
|
-
background: transparent;
|
|
132
|
-
box-shadow: inset 0 -2px 0 rgba(99, 102, 241, 0.65);
|
|
133
|
-
animation: _hl-pulse_dilkk_1 900ms ease-in-out 2;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
._partTask_dilkk_88 {
|
|
137
|
-
background: transparent;
|
|
138
|
-
box-shadow: inset 0 -2px 0 rgba(34, 197, 94, 0.65);
|
|
139
|
-
animation: _hl-fade-in_dilkk_1 180ms ease-out both;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
._hintChip_dilkk_94 {
|
|
143
|
-
position: absolute;
|
|
144
|
-
left: 12px;
|
|
145
|
-
z-index: 4;
|
|
146
|
-
min-height: 40px;
|
|
147
|
-
width: 220px;
|
|
148
|
-
max-width: 220px;
|
|
149
|
-
display: flex;
|
|
150
|
-
flex-direction: column;
|
|
151
|
-
justify-content: flex-start;
|
|
152
|
-
gap: 4px;
|
|
153
|
-
align-items: flex-start;
|
|
154
|
-
min-width: 170px;
|
|
155
|
-
padding: 7px 11px;
|
|
156
|
-
border-radius: 9px;
|
|
157
|
-
pointer-events: auto;
|
|
158
|
-
border: 1px solid rgba(123, 132, 151, 0.42);
|
|
159
|
-
background: rgba(255, 255, 255, 0.92);
|
|
160
|
-
color: rgba(28, 36, 52, 0.92);
|
|
161
|
-
font-size: 12px;
|
|
162
|
-
line-height: 1.25;
|
|
163
|
-
font-weight: 500;
|
|
164
|
-
font-family:
|
|
165
|
-
"DS-Project",
|
|
166
|
-
"DS-Inter",
|
|
167
|
-
"Inter",
|
|
168
|
-
"Noto Sans",
|
|
169
|
-
"Noto Sans Math",
|
|
170
|
-
"STIX Two Math",
|
|
171
|
-
"Cambria Math",
|
|
172
|
-
"Segoe UI Symbol",
|
|
173
|
-
"Apple Symbols",
|
|
174
|
-
"Symbola",
|
|
175
|
-
"DejaVu Sans",
|
|
176
|
-
sans-serif;
|
|
177
|
-
letter-spacing: 0.005em;
|
|
178
|
-
text-align: left;
|
|
179
|
-
overflow: visible;
|
|
180
|
-
box-shadow: 0 1px 5px rgba(15, 23, 42, 0.08);
|
|
181
|
-
transition:
|
|
182
|
-
border-color 120ms ease,
|
|
183
|
-
background-color 120ms ease,
|
|
184
|
-
box-shadow 120ms ease;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
._hintChipFocused_dilkk_139 {
|
|
188
|
-
border-width: 1.5px;
|
|
189
|
-
box-shadow:
|
|
190
|
-
0 2px 8px rgba(15, 23, 42, 0.14),
|
|
191
|
-
0 0 0 1px rgba(128, 107, 62, 0.14);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
._hintPrimaryLine_dilkk_146 {
|
|
195
|
-
display: block;
|
|
196
|
-
width: 100%;
|
|
197
|
-
font-size: 11px;
|
|
198
|
-
line-height: 1.2;
|
|
199
|
-
font-weight: 600;
|
|
200
|
-
color: inherit;
|
|
201
|
-
-webkit-text-fill-color: currentColor;
|
|
202
|
-
white-space: nowrap;
|
|
203
|
-
overflow: hidden;
|
|
204
|
-
text-overflow: ellipsis;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
._hintSecondaryLine_dilkk_159 {
|
|
208
|
-
display: block;
|
|
209
|
-
width: 100%;
|
|
210
|
-
font-size: 12px;
|
|
211
|
-
line-height: 1.4;
|
|
212
|
-
font-weight: 500;
|
|
213
|
-
color: inherit;
|
|
214
|
-
-webkit-text-fill-color: currentColor;
|
|
215
|
-
opacity: 0.9;
|
|
216
|
-
white-space: normal;
|
|
217
|
-
overflow-wrap: anywhere;
|
|
218
|
-
word-break: break-word;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
._hintChip_dilkk_94:hover {
|
|
222
|
-
border-color: rgba(126, 113, 82, 0.75);
|
|
223
|
-
background: rgba(255, 255, 255, 0.97);
|
|
224
|
-
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.12);
|
|
225
|
-
}
|
|
226
|
-
._areaHighlight_7ldrr_1 {
|
|
227
|
-
border: 1px solid rgba(120, 109, 87, 0.6);
|
|
228
|
-
background-color: rgba(214, 204, 182, 0.2);
|
|
229
|
-
opacity: 1;
|
|
230
|
-
mix-blend-mode: multiply;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
._part_7ldrr_8 {
|
|
234
|
-
cursor: pointer;
|
|
235
|
-
position: absolute;
|
|
236
|
-
border: 1px solid transparent;
|
|
237
|
-
box-sizing: border-box;
|
|
238
|
-
background: rgba(214, 204, 182, 0.24);
|
|
239
|
-
transition:
|
|
240
|
-
background 0.2s,
|
|
241
|
-
border-color 0.2s,
|
|
242
|
-
box-shadow 0.2s;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
._scrolledTo_7ldrr_20 ._part_7ldrr_8 {
|
|
246
|
-
border-color: rgba(138, 120, 78, 0.95);
|
|
247
|
-
box-shadow:
|
|
248
|
-
inset 0 0 0 1px rgba(138, 120, 78, 0.3),
|
|
249
|
-
0 0 0 2px rgba(138, 120, 78, 0.22);
|
|
250
|
-
background: rgba(214, 204, 182, 0.32);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
._focused_7ldrr_28 ._part_7ldrr_8 {
|
|
254
|
-
border-color: rgba(128, 107, 62, 0.96);
|
|
255
|
-
border-width: 2px;
|
|
256
|
-
box-shadow:
|
|
257
|
-
inset 0 0 0 1px rgba(128, 107, 62, 0.34),
|
|
258
|
-
0 0 0 2px rgba(128, 107, 62, 0.26);
|
|
259
|
-
background: rgba(214, 204, 182, 0.35);
|
|
260
|
-
}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { z as createLucideIcon, r as reactExports, j as jsxRuntimeExports, d as Check, b as cn, a3 as Button } from './index-DjggJovS.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @license lucide-react v0.511.0 - ISC
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the ISC license.
|
|
7
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const __iconNode = [
|
|
12
|
-
["path", { d: "M12 13v8", key: "1l5pq0" }],
|
|
13
|
-
["path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242", key: "1pljnt" }],
|
|
14
|
-
["path", { d: "m8 17 4-4 4 4", key: "1quai1" }]
|
|
15
|
-
];
|
|
16
|
-
const CloudUpload = createLucideIcon("cloud-upload", __iconNode);
|
|
17
|
-
|
|
18
|
-
function Step({ children }) {
|
|
19
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children });
|
|
20
|
-
}
|
|
21
|
-
const clampStep = (step, totalSteps) => {
|
|
22
|
-
if (totalSteps <= 0) return 1;
|
|
23
|
-
return Math.min(Math.max(step, 1), totalSteps);
|
|
24
|
-
};
|
|
25
|
-
function Stepper({
|
|
26
|
-
initialStep = 1,
|
|
27
|
-
onStepChange,
|
|
28
|
-
onFinalStepCompleted,
|
|
29
|
-
backButtonText = "Previous",
|
|
30
|
-
nextButtonText = "Next",
|
|
31
|
-
nextDisabled,
|
|
32
|
-
backDisabled,
|
|
33
|
-
contentAnimation = false,
|
|
34
|
-
className,
|
|
35
|
-
children
|
|
36
|
-
}) {
|
|
37
|
-
const steps = reactExports.useMemo(
|
|
38
|
-
() => reactExports.Children.toArray(children).filter((child) => reactExports.isValidElement(child)),
|
|
39
|
-
[children]
|
|
40
|
-
);
|
|
41
|
-
const totalSteps = steps.length;
|
|
42
|
-
const [currentStep, setCurrentStep] = reactExports.useState(() => clampStep(initialStep, totalSteps));
|
|
43
|
-
const previousStepRef = reactExports.useRef(currentStep);
|
|
44
|
-
reactExports.useEffect(() => {
|
|
45
|
-
setCurrentStep(clampStep(initialStep, totalSteps));
|
|
46
|
-
}, [initialStep, totalSteps]);
|
|
47
|
-
reactExports.useEffect(() => {
|
|
48
|
-
onStepChange?.(currentStep);
|
|
49
|
-
}, [currentStep, onStepChange]);
|
|
50
|
-
reactExports.useEffect(() => {
|
|
51
|
-
previousStepRef.current = currentStep;
|
|
52
|
-
}, [currentStep]);
|
|
53
|
-
const resolveDisabled = (value, step, total) => {
|
|
54
|
-
if (typeof value === "function") return value(step, total);
|
|
55
|
-
return Boolean(value);
|
|
56
|
-
};
|
|
57
|
-
const isFinalStep = currentStep >= totalSteps;
|
|
58
|
-
const isNextDisabled = resolveDisabled(nextDisabled, currentStep, totalSteps);
|
|
59
|
-
const isBackDisabled = resolveDisabled(backDisabled, currentStep, totalSteps);
|
|
60
|
-
const canGoBack = currentStep > 1 && !isBackDisabled;
|
|
61
|
-
const nextLabel = typeof nextButtonText === "function" ? nextButtonText(currentStep, totalSteps) : nextButtonText;
|
|
62
|
-
const handleNext = () => {
|
|
63
|
-
if (isFinalStep) {
|
|
64
|
-
if (!isNextDisabled) {
|
|
65
|
-
onFinalStepCompleted?.();
|
|
66
|
-
}
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (isNextDisabled) return;
|
|
70
|
-
setCurrentStep((prev) => clampStep(prev + 1, totalSteps));
|
|
71
|
-
};
|
|
72
|
-
const handleBack = () => {
|
|
73
|
-
if (!canGoBack) return;
|
|
74
|
-
setCurrentStep((prev) => clampStep(prev - 1, totalSteps));
|
|
75
|
-
};
|
|
76
|
-
if (totalSteps === 0) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
const activeStep = steps[currentStep - 1];
|
|
80
|
-
const activeTitle = activeStep?.props?.title ?? `Step ${currentStep}`;
|
|
81
|
-
const activeDescription = activeStep?.props?.description;
|
|
82
|
-
const stepDirection = currentStep >= previousStepRef.current ? "forward" : "back";
|
|
83
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("stepper-root flex flex-col gap-5", className), children: [
|
|
84
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "stepper-header flex flex-wrap items-center justify-between gap-3", children: [
|
|
85
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap items-center gap-3", children: steps.map((step, index) => {
|
|
86
|
-
const stepNumber = index + 1;
|
|
87
|
-
const isComplete = stepNumber < currentStep;
|
|
88
|
-
const isActive = stepNumber === currentStep;
|
|
89
|
-
const title = step.props.title ?? `Step ${stepNumber}`;
|
|
90
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
91
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
92
|
-
"div",
|
|
93
|
-
{
|
|
94
|
-
className: cn(
|
|
95
|
-
"stepper-dot flex h-8 w-8 items-center justify-center rounded-full border text-xs font-semibold transition",
|
|
96
|
-
isComplete && "border-transparent bg-[var(--cli-accent-olive)] text-[var(--cli-ink-0)]",
|
|
97
|
-
isActive && "border-[var(--cli-accent-olive)] bg-white/90 text-[var(--cli-ink-1)]",
|
|
98
|
-
!isComplete && !isActive && "border-white/60 bg-white/60 text-[var(--cli-muted-1)]"
|
|
99
|
-
),
|
|
100
|
-
"data-state": isComplete ? "complete" : isActive ? "active" : "upcoming",
|
|
101
|
-
children: isComplete ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "h-4 w-4" }) : stepNumber
|
|
102
|
-
}
|
|
103
|
-
),
|
|
104
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
|
|
105
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
|
|
106
|
-
"Step ",
|
|
107
|
-
stepNumber
|
|
108
|
-
] }),
|
|
109
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
110
|
-
"span",
|
|
111
|
-
{
|
|
112
|
-
className: cn(
|
|
113
|
-
"text-xs font-semibold",
|
|
114
|
-
isActive ? "text-[var(--cli-ink-1)]" : "text-[var(--cli-muted-1)]"
|
|
115
|
-
),
|
|
116
|
-
children: title
|
|
117
|
-
}
|
|
118
|
-
)
|
|
119
|
-
] }),
|
|
120
|
-
index < totalSteps - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-px w-8 bg-white/60", "aria-hidden": "true" }) : null
|
|
121
|
-
] }, `${title}-${stepNumber}`);
|
|
122
|
-
}) }),
|
|
123
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-full border border-white/50 bg-white/80 px-3 py-1 text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
|
|
124
|
-
currentStep,
|
|
125
|
-
" / ",
|
|
126
|
-
totalSteps
|
|
127
|
-
] })
|
|
128
|
-
] }),
|
|
129
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
130
|
-
"div",
|
|
131
|
-
{
|
|
132
|
-
className: "stepper-content rounded-xl border border-white/40 bg-white/80 p-4",
|
|
133
|
-
"data-step": currentStep,
|
|
134
|
-
"data-direction": stepDirection,
|
|
135
|
-
children: [
|
|
136
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
137
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
138
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold text-[var(--cli-ink-1)]", children: activeTitle }),
|
|
139
|
-
activeDescription ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-[var(--cli-muted-1)]", children: activeDescription }) : null
|
|
140
|
-
] }),
|
|
141
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "rounded-full border border-white/60 bg-white/70 px-2 py-1 text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
|
|
142
|
-
"Step ",
|
|
143
|
-
currentStep
|
|
144
|
-
] })
|
|
145
|
-
] }),
|
|
146
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4", children: activeStep })
|
|
147
|
-
]
|
|
148
|
-
},
|
|
149
|
-
contentAnimation ? `step-${currentStep}` : "step-static"
|
|
150
|
-
),
|
|
151
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "stepper-actions flex flex-wrap items-center justify-between gap-3", children: [
|
|
152
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "secondary", onClick: handleBack, disabled: !canGoBack, children: backButtonText }),
|
|
153
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Button, { onClick: handleNext, disabled: isNextDisabled, children: nextLabel })
|
|
154
|
-
] })
|
|
155
|
-
] });
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export { CloudUpload as C, Stepper as S, Step as a };
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { z as createLucideIcon, j as jsxRuntimeExports, ac as Modal, L as LoaderCircle, b as cn, C as CircleAlert, ad as ModalFooter, ae as ExternalLink } from './index-DjggJovS.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @license lucide-react v0.511.0 - ISC
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the ISC license.
|
|
7
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const __iconNode = [
|
|
12
|
-
["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
|
|
13
|
-
["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2", key: "4jdomd" }],
|
|
14
|
-
["path", { d: "M16 4h2a2 2 0 0 1 2 2v4", key: "3hqy98" }],
|
|
15
|
-
["path", { d: "M21 14H11", key: "1bme5i" }],
|
|
16
|
-
["path", { d: "m15 10-4 4 4 4", key: "5dvupr" }]
|
|
17
|
-
];
|
|
18
|
-
const ClipboardCopy = createLucideIcon("clipboard-copy", __iconNode);
|
|
19
|
-
|
|
20
|
-
function formatError(code) {
|
|
21
|
-
switch (code) {
|
|
22
|
-
case "invalid_id":
|
|
23
|
-
return "Invalid ID";
|
|
24
|
-
case "metadata_failed":
|
|
25
|
-
return "Not found or metadata failed";
|
|
26
|
-
case "download_failed":
|
|
27
|
-
return "Download failed";
|
|
28
|
-
case "already_exists":
|
|
29
|
-
return "Already imported";
|
|
30
|
-
case "storage_failed":
|
|
31
|
-
return "Storage failed";
|
|
32
|
-
case "timeout":
|
|
33
|
-
return "Import timed out";
|
|
34
|
-
default:
|
|
35
|
-
return "Import failed";
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function formatDate(value) {
|
|
39
|
-
if (!value) return "-";
|
|
40
|
-
const [date] = value.split("T");
|
|
41
|
-
return date || value;
|
|
42
|
-
}
|
|
43
|
-
function ArxivInfoModal({
|
|
44
|
-
open,
|
|
45
|
-
onClose,
|
|
46
|
-
paper,
|
|
47
|
-
errorCode,
|
|
48
|
-
onCopyBibtex,
|
|
49
|
-
onOpenArxiv
|
|
50
|
-
}) {
|
|
51
|
-
const isProcessing = paper?.status === "processing";
|
|
52
|
-
const isFailed = paper?.status === "failed" || Boolean(errorCode);
|
|
53
|
-
const statusLabel = isFailed ? "Failed" : isProcessing ? "Processing" : "Imported";
|
|
54
|
-
const statusClass = isFailed ? "bg-red-500/15 text-red-600" : isProcessing ? "bg-amber-500/15 text-amber-700" : "bg-emerald-500/15 text-emerald-700";
|
|
55
|
-
const title = paper?.title || paper?.displayName || paper?.arxivId || "Paper info";
|
|
56
|
-
const authors = paper?.authors && paper.authors.length > 0 ? paper.authors.join(", ") : "Unknown authors";
|
|
57
|
-
const categories = paper?.categories && paper.categories.length > 0 ? paper.categories.join(", ") : "-";
|
|
58
|
-
const publishedAt = paper ? formatDate(paper.publishedAt) : "-";
|
|
59
|
-
const canShowActions = Boolean(paper && (onCopyBibtex || onOpenArxiv));
|
|
60
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Modal, { open, onClose, title: "Paper info", size: "lg", children: [
|
|
61
|
-
paper ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-h-[55vh] space-y-4 overflow-y-auto pr-1 text-sm", children: [
|
|
62
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
63
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-base font-semibold text-soft-text-primary", children: title }),
|
|
64
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
65
|
-
"span",
|
|
66
|
-
{
|
|
67
|
-
className: cn(
|
|
68
|
-
"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide",
|
|
69
|
-
statusClass
|
|
70
|
-
),
|
|
71
|
-
children: [
|
|
72
|
-
isProcessing ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "h-3 w-3 animate-spin" }) : null,
|
|
73
|
-
statusLabel
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
] }),
|
|
78
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-[90px_minmax(0,1fr)] gap-2 text-xs", children: [
|
|
79
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-secondary", children: "Authors" }),
|
|
80
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 text-soft-text-primary", children: authors }),
|
|
81
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-secondary", children: "Published" }),
|
|
82
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-primary", children: publishedAt }),
|
|
83
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-secondary", children: "Categories" }),
|
|
84
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 text-soft-text-primary", children: categories }),
|
|
85
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-secondary", children: "arXiv ID" }),
|
|
86
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-soft-text-primary", children: paper.arxivId || "-" })
|
|
87
|
-
] }),
|
|
88
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-soft-border bg-soft-bg-elevated/40 p-3", children: [
|
|
89
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[11px] font-semibold text-soft-text-secondary", children: "Abstract" }),
|
|
90
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-xs leading-relaxed text-soft-text-primary", children: paper.abstract || "No abstract available." })
|
|
91
|
-
] }),
|
|
92
|
-
isFailed && errorCode ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 text-[11px] text-red-600", children: [
|
|
93
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "h-3.5 w-3.5" }),
|
|
94
|
-
formatError(errorCode)
|
|
95
|
-
] }) : null
|
|
96
|
-
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-soft-text-secondary", children: "Select a paper to view details." }),
|
|
97
|
-
canShowActions ? /* @__PURE__ */ jsxRuntimeExports.jsxs(ModalFooter, { className: "-mx-6 -mb-4 mt-4", children: [
|
|
98
|
-
onCopyBibtex ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
99
|
-
"button",
|
|
100
|
-
{
|
|
101
|
-
type: "button",
|
|
102
|
-
onClick: onCopyBibtex,
|
|
103
|
-
className: cn(
|
|
104
|
-
"inline-flex items-center gap-2 rounded-md border border-soft-border bg-white px-3 py-1.5",
|
|
105
|
-
"text-xs text-soft-text-primary transition-colors",
|
|
106
|
-
"hover:bg-soft-bg-elevated"
|
|
107
|
-
),
|
|
108
|
-
children: [
|
|
109
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(ClipboardCopy, { className: "h-3.5 w-3.5" }),
|
|
110
|
-
"Copy BibTeX"
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
) : null,
|
|
114
|
-
onOpenArxiv ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
115
|
-
"button",
|
|
116
|
-
{
|
|
117
|
-
type: "button",
|
|
118
|
-
onClick: onOpenArxiv,
|
|
119
|
-
className: cn(
|
|
120
|
-
"inline-flex items-center gap-2 rounded-md border border-soft-border bg-white px-3 py-1.5",
|
|
121
|
-
"text-xs text-soft-text-primary transition-colors",
|
|
122
|
-
"hover:bg-soft-bg-elevated"
|
|
123
|
-
),
|
|
124
|
-
children: [
|
|
125
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(ExternalLink, { className: "h-3.5 w-3.5" }),
|
|
126
|
-
"Open arXiv"
|
|
127
|
-
]
|
|
128
|
-
}
|
|
129
|
-
) : null
|
|
130
|
-
] }) : null
|
|
131
|
-
] });
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function InfoTriangleIcon({ className }) {
|
|
135
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
136
|
-
"svg",
|
|
137
|
-
{
|
|
138
|
-
viewBox: "0 0 24 24",
|
|
139
|
-
className: cn("h-4 w-4", className),
|
|
140
|
-
role: "img",
|
|
141
|
-
"aria-hidden": "true",
|
|
142
|
-
children: [
|
|
143
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 4L21 20H3L12 4Z", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
|
|
144
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
145
|
-
"text",
|
|
146
|
-
{
|
|
147
|
-
x: "12",
|
|
148
|
-
y: "14.5",
|
|
149
|
-
textAnchor: "middle",
|
|
150
|
-
dominantBaseline: "middle",
|
|
151
|
-
fontSize: "10",
|
|
152
|
-
fontFamily: "sans-serif",
|
|
153
|
-
fill: "currentColor",
|
|
154
|
-
children: "?"
|
|
155
|
-
}
|
|
156
|
-
)
|
|
157
|
-
]
|
|
158
|
-
}
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function getLastName(name) {
|
|
163
|
-
const parts = name.trim().split(/\s+/);
|
|
164
|
-
return parts[parts.length - 1] || "unknown";
|
|
165
|
-
}
|
|
166
|
-
function generateBibTeX(paper) {
|
|
167
|
-
const authorStr = (paper.authors || []).join(" and ");
|
|
168
|
-
const year = paper.publishedAt && !Number.isNaN(Date.parse(paper.publishedAt)) ? new Date(paper.publishedAt).getFullYear() : (/* @__PURE__ */ new Date()).getFullYear();
|
|
169
|
-
const firstAuthor = paper.authors?.[0] ? getLastName(paper.authors[0]).toLowerCase() : "unknown";
|
|
170
|
-
const baseId = paper.arxivId.replace(/v\d+$/, "").replace(".", "");
|
|
171
|
-
const key = `${firstAuthor}${year}${baseId}`;
|
|
172
|
-
const primaryClass = paper.categories?.[0] || "";
|
|
173
|
-
const lines = [
|
|
174
|
-
`@misc{${key},`,
|
|
175
|
-
` title={${paper.title || ""}},`,
|
|
176
|
-
` author={${authorStr}},`,
|
|
177
|
-
` year={${year}},`,
|
|
178
|
-
` eprint={${paper.arxivId}},`,
|
|
179
|
-
` archivePrefix={arXiv},`
|
|
180
|
-
];
|
|
181
|
-
if (primaryClass) {
|
|
182
|
-
lines.push(` primaryClass={${primaryClass}},`);
|
|
183
|
-
}
|
|
184
|
-
lines[lines.length - 1] = lines[lines.length - 1].replace(/,$/, "");
|
|
185
|
-
lines.push("}");
|
|
186
|
-
return lines.join("\n");
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export { ArxivInfoModal as A, InfoTriangleIcon as I, generateBibTeX as g };
|