Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
39f9080e
authored
May 11, 2023
by
archer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: style
parent
3e4b165e
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
192 additions
and
32 deletions
+192
-32
public/docs/intro.md
+15
-25
public/js/particles.js
+10
-0
src/components/Layout/index.tsx
+4
-1
src/pages/_app.tsx
+1
-0
src/pages/index.module.scss
+5
-0
src/pages/index.tsx
+154
-4
src/pages/model/components/detail/components/SelectFileModal.tsx
+2
-2
src/types/index.d.ts
+1
-0
No files found.
public/docs/intro.md
View file @
39f9080e
## 欢迎使用 Fast GPT
## 欢迎使用 Fast GPT
[
Git 仓库
](
https://github.com/c121914yu/FastGPT
)
### 项目开源
### 交流群/问题反馈
FastGpt 项目完全开源,可随意私有化部署,去除平台风险忧虑。项目地址:
[
Git 仓库
](
https://github.com/c121914yu/FastGPT
)
如果群满了,可加个小号,定时拉
### 开始使用知识库
wx 号: fastgpt123
!
[
](/imgs/wxqun300.jpg)
!
[
](/imgs/wx300.jpg)
### 快速开始
1.
AI 助手详情里,有一个模型效果。打开知识库搜索开关即可使用知识库搜索功能。
2.
导入知识库数据。可以手动输入或文件导入。
3.
开始对话。
4.
对话结束后,会看到聊天下方有一个“查看提示词”,可以看到搜索到了哪些内容。
1.
使用手机号注册账号。
注意:使用知识库模型对话时,tokens 消耗会加快。
2.
进入账号页面,添加关联账号,目前只有 openai 的账号可以添加,直接去 openai 官网,把 API Key 粘贴过来。
3.
如果填写了自己的 openai 账号,使用时会直接用你的账号。如果没有填写,需要付费使用平台的账号。
4.
进入模型页,创建一个模型,建议直接用 ChatGPT。
5.
在模型列表点击【对话】,即可使用 API 进行聊天。
### 价格表
### 价格表
如果使用了自己的 Api Key,不会计费。可以在账号页,看到详细账单。
单纯使用 chatGPT 模型进行对话,只有一个计费项目。使用知识库时,包含
**对话**
和
**索引**
生成两个计费项。
如果使用了自己的 Api Key,不会计费。可以在账号页,看到详细账单。
| 计费项 | 价格: 元/ 1K tokens(包含上下文)|
| 计费项 | 价格: 元/ 1K tokens(包含上下文)|
| --- | --- |
| --- | --- |
| claude - 对话 | 免费 |
| claude - 对话 | 免费 |
...
@@ -28,17 +24,11 @@ wx 号: fastgpt123
...
@@ -28,17 +24,11 @@ wx 号: fastgpt123
| 知识库 - 索引 | 免费 |
| 知识库 - 索引 | 免费 |
| 文件拆分 | 0.03 |
| 文件拆分 | 0.03 |
### 定制 prompt
### 交流群/问题反馈
1.
进入模型编辑页
2.
调整温度和提示词
3.
使用该模型对话。每次对话时,提示词和温度都会自动注入,方便管理个人的模型。建议把自己日常经常需要使用的 5~10 个方向预设好。
### 知识库
1.
创建模型时选择【知识库】
如果群满了,可加个小助手,定时拉
2.
进入模型编辑页
wx 号: fastgpt123
3.
导入数据,可以选择手动导入,或者选择文件导入。文件导入会自动调用 chatGPT 理解文件内容,并生成知识库。
4.
使用该模型对话。
注意:使用知识库模型对话时,tokens 消耗会加快。
| 交流群 | 小助手 |
| ----------------------- | -------------------- |
| !
[
](/imgs/wxqun300.jpg) | 
|
public/js/particles.js
0 → 100644
View file @
39f9080e
/* -----------------------------------------------
/* Author : Vincent Garreau - vincentgarreau.com
/* MIT license: http://opensource.org/licenses/MIT
/* Demo / Generator : vincentgarreau.com/particles.js
/* GitHub : github.com/VincentGarreau/particles.js
/* How to use? : Check the GitHub README
/* v2.0.0
/* ----------------------------------------------- */
function
hexToRgb
(
e
){
var
a
=
/^#
?([
a-f
\d])([
a-f
\d])([
a-f
\d])
$/i
;
e
=
e
.
replace
(
a
,
function
(
e
,
a
,
t
,
i
){
return
a
+
a
+
t
+
t
+
i
+
i
});
var
t
=
/^#
?([
a-f
\d]{2})([
a-f
\d]{2})([
a-f
\d]{2})
$/i
.
exec
(
e
);
return
t
?{
r
:
parseInt
(
t
[
1
],
16
),
g
:
parseInt
(
t
[
2
],
16
),
b
:
parseInt
(
t
[
3
],
16
)}:
null
}
function
clamp
(
e
,
a
,
t
){
return
Math
.
min
(
Math
.
max
(
e
,
a
),
t
)}
function
isInArray
(
e
,
a
){
return
a
.
indexOf
(
e
)
>-
1
}
var
pJS
=
function
(
e
,
a
){
var
t
=
document
.
querySelector
(
"#"
+
e
+
" > .particles-js-canvas-el"
);
this
.
pJS
=
{
canvas
:{
el
:
t
,
w
:
t
.
offsetWidth
,
h
:
t
.
offsetHeight
},
particles
:{
number
:{
value
:
400
,
density
:{
enable
:
!
0
,
value_area
:
800
}},
color
:{
value
:
"#859bf4"
},
shape
:{
type
:
"circle"
,
stroke
:{
width
:
0
,
color
:
"#a4b4f7"
},
polygon
:{
nb_sides
:
5
},
image
:{
src
:
""
,
width
:
100
,
height
:
100
}},
opacity
:{
value
:
1
,
random
:
!
1
,
anim
:{
enable
:
!
1
,
speed
:
2
,
opacity_min
:
0
,
sync
:
!
1
}},
size
:{
value
:
20
,
random
:
!
1
,
anim
:{
enable
:
!
1
,
speed
:
20
,
size_min
:
0
,
sync
:
!
1
}},
line_linked
:{
enable
:
!
0
,
distance
:
100
,
color
:
"#859bf4"
,
opacity
:
1
,
width
:
1
},
move
:{
enable
:
!
0
,
speed
:
2
,
direction
:
"none"
,
random
:
!
1
,
straight
:
!
1
,
out_mode
:
"out"
,
bounce
:
!
1
,
attract
:{
enable
:
!
1
,
rotateX
:
3
e3
,
rotateY
:
3
e3
}},
array
:[]},
interactivity
:{
detect_on
:
"canvas"
,
events
:{
onhover
:{
enable
:
!
0
,
mode
:
"grab"
},
onclick
:{
enable
:
!
0
,
mode
:
"push"
},
resize
:
!
0
},
modes
:{
grab
:{
distance
:
100
,
line_linked
:{
opacity
:
1
}},
bubble
:{
distance
:
200
,
size
:
80
,
duration
:.
4
},
repulse
:{
distance
:
200
,
duration
:.
4
},
push
:{
particles_nb
:
4
},
remove
:{
particles_nb
:
2
}},
mouse
:{}},
retina_detect
:
!
1
,
fn
:{
interact
:{},
modes
:{},
vendors
:{}},
tmp
:{}};
var
i
=
this
.
pJS
;
a
&&
Object
.
deepExtend
(
i
,
a
),
i
.
tmp
.
obj
=
{
size_value
:
i
.
particles
.
size
.
value
,
size_anim_speed
:
i
.
particles
.
size
.
anim
.
speed
,
move_speed
:
i
.
particles
.
move
.
speed
,
line_linked_distance
:
i
.
particles
.
line_linked
.
distance
,
line_linked_width
:
i
.
particles
.
line_linked
.
width
,
mode_grab_distance
:
i
.
interactivity
.
modes
.
grab
.
distance
,
mode_bubble_distance
:
i
.
interactivity
.
modes
.
bubble
.
distance
,
mode_bubble_size
:
i
.
interactivity
.
modes
.
bubble
.
size
,
mode_repulse_distance
:
i
.
interactivity
.
modes
.
repulse
.
distance
},
i
.
fn
.
retinaInit
=
function
(){
i
.
retina_detect
&&
window
.
devicePixelRatio
>
1
?(
i
.
canvas
.
pxratio
=
window
.
devicePixelRatio
,
i
.
tmp
.
retina
=!
0
):(
i
.
canvas
.
pxratio
=
1
,
i
.
tmp
.
retina
=!
1
),
i
.
canvas
.
w
=
i
.
canvas
.
el
.
offsetWidth
*
i
.
canvas
.
pxratio
,
i
.
canvas
.
h
=
i
.
canvas
.
el
.
offsetHeight
*
i
.
canvas
.
pxratio
,
i
.
particles
.
size
.
value
=
i
.
tmp
.
obj
.
size_value
*
i
.
canvas
.
pxratio
,
i
.
particles
.
size
.
anim
.
speed
=
i
.
tmp
.
obj
.
size_anim_speed
*
i
.
canvas
.
pxratio
,
i
.
particles
.
move
.
speed
=
i
.
tmp
.
obj
.
move_speed
*
i
.
canvas
.
pxratio
,
i
.
particles
.
line_linked
.
distance
=
i
.
tmp
.
obj
.
line_linked_distance
*
i
.
canvas
.
pxratio
,
i
.
interactivity
.
modes
.
grab
.
distance
=
i
.
tmp
.
obj
.
mode_grab_distance
*
i
.
canvas
.
pxratio
,
i
.
interactivity
.
modes
.
bubble
.
distance
=
i
.
tmp
.
obj
.
mode_bubble_distance
*
i
.
canvas
.
pxratio
,
i
.
particles
.
line_linked
.
width
=
i
.
tmp
.
obj
.
line_linked_width
*
i
.
canvas
.
pxratio
,
i
.
interactivity
.
modes
.
bubble
.
size
=
i
.
tmp
.
obj
.
mode_bubble_size
*
i
.
canvas
.
pxratio
,
i
.
interactivity
.
modes
.
repulse
.
distance
=
i
.
tmp
.
obj
.
mode_repulse_distance
*
i
.
canvas
.
pxratio
},
i
.
fn
.
canvasInit
=
function
(){
i
.
canvas
.
ctx
=
i
.
canvas
.
el
.
getContext
(
"2d"
)},
i
.
fn
.
canvasSize
=
function
(){
i
.
canvas
.
el
.
width
=
i
.
canvas
.
w
,
i
.
canvas
.
el
.
height
=
i
.
canvas
.
h
,
i
&&
i
.
interactivity
.
events
.
resize
&&
window
.
addEventListener
(
"resize"
,
function
(){
i
.
canvas
.
w
=
i
.
canvas
.
el
.
offsetWidth
,
i
.
canvas
.
h
=
i
.
canvas
.
el
.
offsetHeight
,
i
.
tmp
.
retina
&&
(
i
.
canvas
.
w
*=
i
.
canvas
.
pxratio
,
i
.
canvas
.
h
*=
i
.
canvas
.
pxratio
),
i
.
canvas
.
el
.
width
=
i
.
canvas
.
w
,
i
.
canvas
.
el
.
height
=
i
.
canvas
.
h
,
i
.
particles
.
move
.
enable
||
(
i
.
fn
.
particlesEmpty
(),
i
.
fn
.
particlesCreate
(),
i
.
fn
.
particlesDraw
(),
i
.
fn
.
vendors
.
densityAutoParticles
()),
i
.
fn
.
vendors
.
densityAutoParticles
()})},
i
.
fn
.
canvasPaint
=
function
(){
i
.
canvas
.
ctx
.
fillRect
(
0
,
0
,
i
.
canvas
.
w
,
i
.
canvas
.
h
)},
i
.
fn
.
canvasClear
=
function
(){
i
.
canvas
.
ctx
.
clearRect
(
0
,
0
,
i
.
canvas
.
w
,
i
.
canvas
.
h
)},
i
.
fn
.
particle
=
function
(
e
,
a
,
t
){
if
(
this
.
radius
=
(
i
.
particles
.
size
.
random
?
Math
.
random
():
1
)
*
i
.
particles
.
size
.
value
,
i
.
particles
.
size
.
anim
.
enable
&&
(
this
.
size_status
=!
1
,
this
.
vs
=
i
.
particles
.
size
.
anim
.
speed
/
100
,
i
.
particles
.
size
.
anim
.
sync
||
(
this
.
vs
=
this
.
vs
*
Math
.
random
())),
this
.
x
=
t
?
t
.
x
:
Math
.
random
()
*
i
.
canvas
.
w
,
this
.
y
=
t
?
t
.
y
:
Math
.
random
()
*
i
.
canvas
.
h
,
this
.
x
>
i
.
canvas
.
w
-
2
*
this
.
radius
?
this
.
x
=
this
.
x
-
this
.
radius
:
this
.
x
<
2
*
this
.
radius
&&
(
this
.
x
=
this
.
x
+
this
.
radius
),
this
.
y
>
i
.
canvas
.
h
-
2
*
this
.
radius
?
this
.
y
=
this
.
y
-
this
.
radius
:
this
.
y
<
2
*
this
.
radius
&&
(
this
.
y
=
this
.
y
+
this
.
radius
),
i
.
particles
.
move
.
bounce
&&
i
.
fn
.
vendors
.
checkOverlap
(
this
,
t
),
this
.
color
=
{},
"object"
==
typeof
e
.
value
)
if
(
e
.
value
instanceof
Array
){
var
s
=
e
.
value
[
Math
.
floor
(
Math
.
random
()
*
i
.
particles
.
color
.
value
.
length
)];
this
.
color
.
rgb
=
hexToRgb
(
s
)}
else
void
0
!=
e
.
value
.
r
&&
void
0
!=
e
.
value
.
g
&&
void
0
!=
e
.
value
.
b
&&
(
this
.
color
.
rgb
=
{
r
:
e
.
value
.
r
,
g
:
e
.
value
.
g
,
b
:
e
.
value
.
b
}),
void
0
!=
e
.
value
.
h
&&
void
0
!=
e
.
value
.
s
&&
void
0
!=
e
.
value
.
l
&&
(
this
.
color
.
hsl
=
{
h
:
e
.
value
.
h
,
s
:
e
.
value
.
s
,
l
:
e
.
value
.
l
});
else
"random"
==
e
.
value
?
this
.
color
.
rgb
=
{
r
:
Math
.
floor
(
256
*
Math
.
random
())
+
0
,
g
:
Math
.
floor
(
256
*
Math
.
random
())
+
0
,
b
:
Math
.
floor
(
256
*
Math
.
random
())
+
0
}:
"string"
==
typeof
e
.
value
&&
(
this
.
color
=
e
,
this
.
color
.
rgb
=
hexToRgb
(
this
.
color
.
value
));
this
.
opacity
=
(
i
.
particles
.
opacity
.
random
?
Math
.
random
():
1
)
*
i
.
particles
.
opacity
.
value
,
i
.
particles
.
opacity
.
anim
.
enable
&&
(
this
.
opacity_status
=!
1
,
this
.
vo
=
i
.
particles
.
opacity
.
anim
.
speed
/
100
,
i
.
particles
.
opacity
.
anim
.
sync
||
(
this
.
vo
=
this
.
vo
*
Math
.
random
()));
var
n
=
{};
switch
(
i
.
particles
.
move
.
direction
){
case
"top"
:
n
=
{
x
:
0
,
y
:
-
1
};
break
;
case
"top-right"
:
n
=
{
x
:.
5
,
y
:
-
.
5
};
break
;
case
"right"
:
n
=
{
x
:
1
,
y
:
-
0
};
break
;
case
"bottom-right"
:
n
=
{
x
:.
5
,
y
:.
5
};
break
;
case
"bottom"
:
n
=
{
x
:
0
,
y
:
1
};
break
;
case
"bottom-left"
:
n
=
{
x
:
-
.
5
,
y
:
1
};
break
;
case
"left"
:
n
=
{
x
:
-
1
,
y
:
0
};
break
;
case
"top-left"
:
n
=
{
x
:
-
.
5
,
y
:
-
.
5
};
break
;
default
:
n
=
{
x
:
0
,
y
:
0
}}
i
.
particles
.
move
.
straight
?(
this
.
vx
=
n
.
x
,
this
.
vy
=
n
.
y
,
i
.
particles
.
move
.
random
&&
(
this
.
vx
=
this
.
vx
*
Math
.
random
(),
this
.
vy
=
this
.
vy
*
Math
.
random
())):(
this
.
vx
=
n
.
x
+
Math
.
random
()
-
.
5
,
this
.
vy
=
n
.
y
+
Math
.
random
()
-
.
5
),
this
.
vx_i
=
this
.
vx
,
this
.
vy_i
=
this
.
vy
;
var
r
=
i
.
particles
.
shape
.
type
;
if
(
"object"
==
typeof
r
){
if
(
r
instanceof
Array
){
var
c
=
r
[
Math
.
floor
(
Math
.
random
()
*
r
.
length
)];
this
.
shape
=
c
}}
else
this
.
shape
=
r
;
if
(
"image"
==
this
.
shape
){
var
o
=
i
.
particles
.
shape
;
this
.
img
=
{
src
:
o
.
image
.
src
,
ratio
:
o
.
image
.
width
/
o
.
image
.
height
},
this
.
img
.
ratio
||
(
this
.
img
.
ratio
=
1
),
"svg"
==
i
.
tmp
.
img_type
&&
void
0
!=
i
.
tmp
.
source_svg
&&
(
i
.
fn
.
vendors
.
createSvgImg
(
this
),
i
.
tmp
.
pushing
&&
(
this
.
img
.
loaded
=!
1
))}},
i
.
fn
.
particle
.
prototype
.
draw
=
function
(){
function
e
(){
i
.
canvas
.
ctx
.
drawImage
(
r
,
a
.
x
-
t
,
a
.
y
-
t
,
2
*
t
,
2
*
t
/
a
.
img
.
ratio
)}
var
a
=
this
;
if
(
void
0
!=
a
.
radius_bubble
)
var
t
=
a
.
radius_bubble
;
else
var
t
=
a
.
radius
;
if
(
void
0
!=
a
.
opacity_bubble
)
var
s
=
a
.
opacity_bubble
;
else
var
s
=
a
.
opacity
;
if
(
a
.
color
.
rgb
)
var
n
=
"rgba("
+
a
.
color
.
rgb
.
r
+
","
+
a
.
color
.
rgb
.
g
+
","
+
a
.
color
.
rgb
.
b
+
","
+
s
+
")"
;
else
var
n
=
"hsla("
+
a
.
color
.
hsl
.
h
+
","
+
a
.
color
.
hsl
.
s
+
"%,"
+
a
.
color
.
hsl
.
l
+
"%,"
+
s
+
")"
;
switch
(
i
.
canvas
.
ctx
.
fillStyle
=
n
,
i
.
canvas
.
ctx
.
beginPath
(),
a
.
shape
){
case
"circle"
:
i
.
canvas
.
ctx
.
arc
(
a
.
x
,
a
.
y
,
t
,
0
,
2
*
Math
.
PI
,
!
1
);
break
;
case
"edge"
:
i
.
canvas
.
ctx
.
rect
(
a
.
x
-
t
,
a
.
y
-
t
,
2
*
t
,
2
*
t
);
break
;
case
"triangle"
:
i
.
fn
.
vendors
.
drawShape
(
i
.
canvas
.
ctx
,
a
.
x
-
t
,
a
.
y
+
t
/
1.66
,
2
*
t
,
3
,
2
);
break
;
case
"polygon"
:
i
.
fn
.
vendors
.
drawShape
(
i
.
canvas
.
ctx
,
a
.
x
-
t
/
(
i
.
particles
.
shape
.
polygon
.
nb_sides
/
3.5
),
a
.
y
-
t
/
.
76
,
2.66
*
t
/
(
i
.
particles
.
shape
.
polygon
.
nb_sides
/
3
),
i
.
particles
.
shape
.
polygon
.
nb_sides
,
1
);
break
;
case
"star"
:
i
.
fn
.
vendors
.
drawShape
(
i
.
canvas
.
ctx
,
a
.
x
-
2
*
t
/
(
i
.
particles
.
shape
.
polygon
.
nb_sides
/
4
),
a
.
y
-
t
/
1.52
,
2
*
t
*
2.66
/
(
i
.
particles
.
shape
.
polygon
.
nb_sides
/
3
),
i
.
particles
.
shape
.
polygon
.
nb_sides
,
2
);
break
;
case
"image"
:
if
(
"svg"
==
i
.
tmp
.
img_type
)
var
r
=
a
.
img
.
obj
;
else
var
r
=
i
.
tmp
.
img_obj
;
r
&&
e
()}
i
.
canvas
.
ctx
.
closePath
(),
i
.
particles
.
shape
.
stroke
.
width
>
0
&&
(
i
.
canvas
.
ctx
.
strokeStyle
=
i
.
particles
.
shape
.
stroke
.
color
,
i
.
canvas
.
ctx
.
lineWidth
=
i
.
particles
.
shape
.
stroke
.
width
,
i
.
canvas
.
ctx
.
stroke
()),
i
.
canvas
.
ctx
.
fill
()},
i
.
fn
.
particlesCreate
=
function
(){
for
(
var
e
=
0
;
e
<
i
.
particles
.
number
.
value
;
e
++
)
i
.
particles
.
array
.
push
(
new
i
.
fn
.
particle
(
i
.
particles
.
color
,
i
.
particles
.
opacity
.
value
))},
i
.
fn
.
particlesUpdate
=
function
(){
for
(
var
e
=
0
;
e
<
i
.
particles
.
array
.
length
;
e
++
){
var
a
=
i
.
particles
.
array
[
e
];
if
(
i
.
particles
.
move
.
enable
){
var
t
=
i
.
particles
.
move
.
speed
/
2
;
a
.
x
+=
a
.
vx
*
t
,
a
.
y
+=
a
.
vy
*
t
}
if
(
i
.
particles
.
opacity
.
anim
.
enable
&&
(
1
==
a
.
opacity_status
?(
a
.
opacity
>=
i
.
particles
.
opacity
.
value
&&
(
a
.
opacity_status
=!
1
),
a
.
opacity
+=
a
.
vo
):(
a
.
opacity
<=
i
.
particles
.
opacity
.
anim
.
opacity_min
&&
(
a
.
opacity_status
=!
0
),
a
.
opacity
-=
a
.
vo
),
a
.
opacity
<
0
&&
(
a
.
opacity
=
0
)),
i
.
particles
.
size
.
anim
.
enable
&&
(
1
==
a
.
size_status
?(
a
.
radius
>=
i
.
particles
.
size
.
value
&&
(
a
.
size_status
=!
1
),
a
.
radius
+=
a
.
vs
):(
a
.
radius
<=
i
.
particles
.
size
.
anim
.
size_min
&&
(
a
.
size_status
=!
0
),
a
.
radius
-=
a
.
vs
),
a
.
radius
<
0
&&
(
a
.
radius
=
0
)),
"bounce"
==
i
.
particles
.
move
.
out_mode
)
var
s
=
{
x_left
:
a
.
radius
,
x_right
:
i
.
canvas
.
w
,
y_top
:
a
.
radius
,
y_bottom
:
i
.
canvas
.
h
};
else
var
s
=
{
x_left
:
-
a
.
radius
,
x_right
:
i
.
canvas
.
w
+
a
.
radius
,
y_top
:
-
a
.
radius
,
y_bottom
:
i
.
canvas
.
h
+
a
.
radius
};
switch
(
a
.
x
-
a
.
radius
>
i
.
canvas
.
w
?(
a
.
x
=
s
.
x_left
,
a
.
y
=
Math
.
random
()
*
i
.
canvas
.
h
):
a
.
x
+
a
.
radius
<
0
&&
(
a
.
x
=
s
.
x_right
,
a
.
y
=
Math
.
random
()
*
i
.
canvas
.
h
),
a
.
y
-
a
.
radius
>
i
.
canvas
.
h
?(
a
.
y
=
s
.
y_top
,
a
.
x
=
Math
.
random
()
*
i
.
canvas
.
w
):
a
.
y
+
a
.
radius
<
0
&&
(
a
.
y
=
s
.
y_bottom
,
a
.
x
=
Math
.
random
()
*
i
.
canvas
.
w
),
i
.
particles
.
move
.
out_mode
){
case
"bounce"
:
a
.
x
+
a
.
radius
>
i
.
canvas
.
w
?
a
.
vx
=-
a
.
vx
:
a
.
x
-
a
.
radius
<
0
&&
(
a
.
vx
=-
a
.
vx
),
a
.
y
+
a
.
radius
>
i
.
canvas
.
h
?
a
.
vy
=-
a
.
vy
:
a
.
y
-
a
.
radius
<
0
&&
(
a
.
vy
=-
a
.
vy
)}
if
(
isInArray
(
"grab"
,
i
.
interactivity
.
events
.
onhover
.
mode
)
&&
i
.
fn
.
modes
.
grabParticle
(
a
),(
isInArray
(
"bubble"
,
i
.
interactivity
.
events
.
onhover
.
mode
)
||
isInArray
(
"bubble"
,
i
.
interactivity
.
events
.
onclick
.
mode
))
&&
i
.
fn
.
modes
.
bubbleParticle
(
a
),(
isInArray
(
"repulse"
,
i
.
interactivity
.
events
.
onhover
.
mode
)
||
isInArray
(
"repulse"
,
i
.
interactivity
.
events
.
onclick
.
mode
))
&&
i
.
fn
.
modes
.
repulseParticle
(
a
),
i
.
particles
.
line_linked
.
enable
||
i
.
particles
.
move
.
attract
.
enable
)
for
(
var
n
=
e
+
1
;
n
<
i
.
particles
.
array
.
length
;
n
++
){
var
r
=
i
.
particles
.
array
[
n
];
i
.
particles
.
line_linked
.
enable
&&
i
.
fn
.
interact
.
linkParticles
(
a
,
r
),
i
.
particles
.
move
.
attract
.
enable
&&
i
.
fn
.
interact
.
attractParticles
(
a
,
r
),
i
.
particles
.
move
.
bounce
&&
i
.
fn
.
interact
.
bounceParticles
(
a
,
r
)}}},
i
.
fn
.
particlesDraw
=
function
(){
i
.
canvas
.
ctx
.
clearRect
(
0
,
0
,
i
.
canvas
.
w
,
i
.
canvas
.
h
),
i
.
fn
.
particlesUpdate
();
for
(
var
e
=
0
;
e
<
i
.
particles
.
array
.
length
;
e
++
){
var
a
=
i
.
particles
.
array
[
e
];
a
.
draw
()}},
i
.
fn
.
particlesEmpty
=
function
(){
i
.
particles
.
array
=
[]},
i
.
fn
.
particlesRefresh
=
function
(){
cancelRequestAnimFrame
(
i
.
fn
.
checkAnimFrame
),
cancelRequestAnimFrame
(
i
.
fn
.
drawAnimFrame
),
i
.
tmp
.
source_svg
=
void
0
,
i
.
tmp
.
img_obj
=
void
0
,
i
.
tmp
.
count_svg
=
0
,
i
.
fn
.
particlesEmpty
(),
i
.
fn
.
canvasClear
(),
i
.
fn
.
vendors
.
start
()},
i
.
fn
.
interact
.
linkParticles
=
function
(
e
,
a
){
var
t
=
e
.
x
-
a
.
x
,
s
=
e
.
y
-
a
.
y
,
n
=
Math
.
sqrt
(
t
*
t
+
s
*
s
);
if
(
n
<=
i
.
particles
.
line_linked
.
distance
){
var
r
=
i
.
particles
.
line_linked
.
opacity
-
n
/
(
1
/
i
.
particles
.
line_linked
.
opacity
)
/
i
.
particles
.
line_linked
.
distance
;
if
(
r
>
0
){
var
c
=
i
.
particles
.
line_linked
.
color_rgb_line
;
i
.
canvas
.
ctx
.
strokeStyle
=
"rgba("
+
c
.
r
+
","
+
c
.
g
+
","
+
c
.
b
+
","
+
r
+
")"
,
i
.
canvas
.
ctx
.
lineWidth
=
i
.
particles
.
line_linked
.
width
,
i
.
canvas
.
ctx
.
beginPath
(),
i
.
canvas
.
ctx
.
moveTo
(
e
.
x
,
e
.
y
),
i
.
canvas
.
ctx
.
lineTo
(
a
.
x
,
a
.
y
),
i
.
canvas
.
ctx
.
stroke
(),
i
.
canvas
.
ctx
.
closePath
()}}},
i
.
fn
.
interact
.
attractParticles
=
function
(
e
,
a
){
var
t
=
e
.
x
-
a
.
x
,
s
=
e
.
y
-
a
.
y
,
n
=
Math
.
sqrt
(
t
*
t
+
s
*
s
);
if
(
n
<=
i
.
particles
.
line_linked
.
distance
){
var
r
=
t
/
(
1
e3
*
i
.
particles
.
move
.
attract
.
rotateX
),
c
=
s
/
(
1
e3
*
i
.
particles
.
move
.
attract
.
rotateY
);
e
.
vx
-=
r
,
e
.
vy
-=
c
,
a
.
vx
+=
r
,
a
.
vy
+=
c
}},
i
.
fn
.
interact
.
bounceParticles
=
function
(
e
,
a
){
var
t
=
e
.
x
-
a
.
x
,
i
=
e
.
y
-
a
.
y
,
s
=
Math
.
sqrt
(
t
*
t
+
i
*
i
),
n
=
e
.
radius
+
a
.
radius
;
n
>=
s
&&
(
e
.
vx
=-
e
.
vx
,
e
.
vy
=-
e
.
vy
,
a
.
vx
=-
a
.
vx
,
a
.
vy
=-
a
.
vy
)},
i
.
fn
.
modes
.
pushParticles
=
function
(
e
,
a
){
i
.
tmp
.
pushing
=!
0
;
for
(
var
t
=
0
;
e
>
t
;
t
++
)
i
.
particles
.
array
.
push
(
new
i
.
fn
.
particle
(
i
.
particles
.
color
,
i
.
particles
.
opacity
.
value
,{
x
:
a
?
a
.
pos_x
:
Math
.
random
()
*
i
.
canvas
.
w
,
y
:
a
?
a
.
pos_y
:
Math
.
random
()
*
i
.
canvas
.
h
})),
t
==
e
-
1
&&
(
i
.
particles
.
move
.
enable
||
i
.
fn
.
particlesDraw
(),
i
.
tmp
.
pushing
=!
1
)},
i
.
fn
.
modes
.
removeParticles
=
function
(
e
){
i
.
particles
.
array
.
splice
(
0
,
e
),
i
.
particles
.
move
.
enable
||
i
.
fn
.
particlesDraw
()},
i
.
fn
.
modes
.
bubbleParticle
=
function
(
e
){
function
a
(){
e
.
opacity_bubble
=
e
.
opacity
,
e
.
radius_bubble
=
e
.
radius
}
function
t
(
a
,
t
,
s
,
n
,
c
){
if
(
a
!=
t
)
if
(
i
.
tmp
.
bubble_duration_end
){
if
(
void
0
!=
s
){
var
o
=
n
-
p
*
(
n
-
a
)
/
i
.
interactivity
.
modes
.
bubble
.
duration
,
l
=
a
-
o
;
d
=
a
+
l
,
"size"
==
c
&&
(
e
.
radius_bubble
=
d
),
"opacity"
==
c
&&
(
e
.
opacity_bubble
=
d
)}}
else
if
(
r
<=
i
.
interactivity
.
modes
.
bubble
.
distance
){
if
(
void
0
!=
s
)
var
v
=
s
;
else
var
v
=
n
;
if
(
v
!=
a
){
var
d
=
n
-
p
*
(
n
-
a
)
/
i
.
interactivity
.
modes
.
bubble
.
duration
;
"size"
==
c
&&
(
e
.
radius_bubble
=
d
),
"opacity"
==
c
&&
(
e
.
opacity_bubble
=
d
)}}
else
"size"
==
c
&&
(
e
.
radius_bubble
=
void
0
),
"opacity"
==
c
&&
(
e
.
opacity_bubble
=
void
0
)}
if
(
i
.
interactivity
.
events
.
onhover
.
enable
&&
isInArray
(
"bubble"
,
i
.
interactivity
.
events
.
onhover
.
mode
)){
var
s
=
e
.
x
-
i
.
interactivity
.
mouse
.
pos_x
,
n
=
e
.
y
-
i
.
interactivity
.
mouse
.
pos_y
,
r
=
Math
.
sqrt
(
s
*
s
+
n
*
n
),
c
=
1
-
r
/
i
.
interactivity
.
modes
.
bubble
.
distance
;
if
(
r
<=
i
.
interactivity
.
modes
.
bubble
.
distance
){
if
(
c
>=
0
&&
"mousemove"
==
i
.
interactivity
.
status
){
if
(
i
.
interactivity
.
modes
.
bubble
.
size
!=
i
.
particles
.
size
.
value
)
if
(
i
.
interactivity
.
modes
.
bubble
.
size
>
i
.
particles
.
size
.
value
){
var
o
=
e
.
radius
+
i
.
interactivity
.
modes
.
bubble
.
size
*
c
;
o
>=
0
&&
(
e
.
radius_bubble
=
o
)}
else
{
var
l
=
e
.
radius
-
i
.
interactivity
.
modes
.
bubble
.
size
,
o
=
e
.
radius
-
l
*
c
;
o
>
0
?
e
.
radius_bubble
=
o
:
e
.
radius_bubble
=
0
}
if
(
i
.
interactivity
.
modes
.
bubble
.
opacity
!=
i
.
particles
.
opacity
.
value
)
if
(
i
.
interactivity
.
modes
.
bubble
.
opacity
>
i
.
particles
.
opacity
.
value
){
var
v
=
i
.
interactivity
.
modes
.
bubble
.
opacity
*
c
;
v
>
e
.
opacity
&&
v
<=
i
.
interactivity
.
modes
.
bubble
.
opacity
&&
(
e
.
opacity_bubble
=
v
)}
else
{
var
v
=
e
.
opacity
-
(
i
.
particles
.
opacity
.
value
-
i
.
interactivity
.
modes
.
bubble
.
opacity
)
*
c
;
v
<
e
.
opacity
&&
v
>=
i
.
interactivity
.
modes
.
bubble
.
opacity
&&
(
e
.
opacity_bubble
=
v
)}}}
else
a
();
"mouseleave"
==
i
.
interactivity
.
status
&&
a
()}
else
if
(
i
.
interactivity
.
events
.
onclick
.
enable
&&
isInArray
(
"bubble"
,
i
.
interactivity
.
events
.
onclick
.
mode
)){
if
(
i
.
tmp
.
bubble_clicking
){
var
s
=
e
.
x
-
i
.
interactivity
.
mouse
.
click_pos_x
,
n
=
e
.
y
-
i
.
interactivity
.
mouse
.
click_pos_y
,
r
=
Math
.
sqrt
(
s
*
s
+
n
*
n
),
p
=
((
new
Date
).
getTime
()
-
i
.
interactivity
.
mouse
.
click_time
)
/
1
e3
;
p
>
i
.
interactivity
.
modes
.
bubble
.
duration
&&
(
i
.
tmp
.
bubble_duration_end
=!
0
),
p
>
2
*
i
.
interactivity
.
modes
.
bubble
.
duration
&&
(
i
.
tmp
.
bubble_clicking
=!
1
,
i
.
tmp
.
bubble_duration_end
=!
1
)}
i
.
tmp
.
bubble_clicking
&&
(
t
(
i
.
interactivity
.
modes
.
bubble
.
size
,
i
.
particles
.
size
.
value
,
e
.
radius_bubble
,
e
.
radius
,
"size"
),
t
(
i
.
interactivity
.
modes
.
bubble
.
opacity
,
i
.
particles
.
opacity
.
value
,
e
.
opacity_bubble
,
e
.
opacity
,
"opacity"
))}},
i
.
fn
.
modes
.
repulseParticle
=
function
(
e
){
function
a
(){
var
a
=
Math
.
atan2
(
d
,
p
);
if
(
e
.
vx
=
u
*
Math
.
cos
(
a
),
e
.
vy
=
u
*
Math
.
sin
(
a
),
"bounce"
==
i
.
particles
.
move
.
out_mode
){
var
t
=
{
x
:
e
.
x
+
e
.
vx
,
y
:
e
.
y
+
e
.
vy
};
t
.
x
+
e
.
radius
>
i
.
canvas
.
w
?
e
.
vx
=-
e
.
vx
:
t
.
x
-
e
.
radius
<
0
&&
(
e
.
vx
=-
e
.
vx
),
t
.
y
+
e
.
radius
>
i
.
canvas
.
h
?
e
.
vy
=-
e
.
vy
:
t
.
y
-
e
.
radius
<
0
&&
(
e
.
vy
=-
e
.
vy
)}}
if
(
i
.
interactivity
.
events
.
onhover
.
enable
&&
isInArray
(
"repulse"
,
i
.
interactivity
.
events
.
onhover
.
mode
)
&&
"mousemove"
==
i
.
interactivity
.
status
){
var
t
=
e
.
x
-
i
.
interactivity
.
mouse
.
pos_x
,
s
=
e
.
y
-
i
.
interactivity
.
mouse
.
pos_y
,
n
=
Math
.
sqrt
(
t
*
t
+
s
*
s
),
r
=
{
x
:
t
/
n
,
y
:
s
/
n
},
c
=
i
.
interactivity
.
modes
.
repulse
.
distance
,
o
=
100
,
l
=
clamp
(
1
/
c
*
(
-
1
*
Math
.
pow
(
n
/
c
,
2
)
+
1
)
*
c
*
o
,
0
,
50
),
v
=
{
x
:
e
.
x
+
r
.
x
*
l
,
y
:
e
.
y
+
r
.
y
*
l
};
"bounce"
==
i
.
particles
.
move
.
out_mode
?(
v
.
x
-
e
.
radius
>
0
&&
v
.
x
+
e
.
radius
<
i
.
canvas
.
w
&&
(
e
.
x
=
v
.
x
),
v
.
y
-
e
.
radius
>
0
&&
v
.
y
+
e
.
radius
<
i
.
canvas
.
h
&&
(
e
.
y
=
v
.
y
)):(
e
.
x
=
v
.
x
,
e
.
y
=
v
.
y
)}
else
if
(
i
.
interactivity
.
events
.
onclick
.
enable
&&
isInArray
(
"repulse"
,
i
.
interactivity
.
events
.
onclick
.
mode
))
if
(
i
.
tmp
.
repulse_finish
||
(
i
.
tmp
.
repulse_count
++
,
i
.
tmp
.
repulse_count
==
i
.
particles
.
array
.
length
&&
(
i
.
tmp
.
repulse_finish
=!
0
)),
i
.
tmp
.
repulse_clicking
){
var
c
=
Math
.
pow
(
i
.
interactivity
.
modes
.
repulse
.
distance
/
6
,
3
),
p
=
i
.
interactivity
.
mouse
.
click_pos_x
-
e
.
x
,
d
=
i
.
interactivity
.
mouse
.
click_pos_y
-
e
.
y
,
m
=
p
*
p
+
d
*
d
,
u
=-
c
/
m
*
1
;
c
>=
m
&&
a
()}
else
0
==
i
.
tmp
.
repulse_clicking
&&
(
e
.
vx
=
e
.
vx_i
,
e
.
vy
=
e
.
vy_i
)},
i
.
fn
.
modes
.
grabParticle
=
function
(
e
){
if
(
i
.
interactivity
.
events
.
onhover
.
enable
&&
"mousemove"
==
i
.
interactivity
.
status
){
var
a
=
e
.
x
-
i
.
interactivity
.
mouse
.
pos_x
,
t
=
e
.
y
-
i
.
interactivity
.
mouse
.
pos_y
,
s
=
Math
.
sqrt
(
a
*
a
+
t
*
t
);
if
(
s
<=
i
.
interactivity
.
modes
.
grab
.
distance
){
var
n
=
i
.
interactivity
.
modes
.
grab
.
line_linked
.
opacity
-
s
/
(
1
/
i
.
interactivity
.
modes
.
grab
.
line_linked
.
opacity
)
/
i
.
interactivity
.
modes
.
grab
.
distance
;
if
(
n
>
0
){
var
r
=
i
.
particles
.
line_linked
.
color_rgb_line
;
i
.
canvas
.
ctx
.
strokeStyle
=
"rgba("
+
r
.
r
+
","
+
r
.
g
+
","
+
r
.
b
+
","
+
n
+
")"
,
i
.
canvas
.
ctx
.
lineWidth
=
i
.
particles
.
line_linked
.
width
,
i
.
canvas
.
ctx
.
beginPath
(),
i
.
canvas
.
ctx
.
moveTo
(
e
.
x
,
e
.
y
),
i
.
canvas
.
ctx
.
lineTo
(
i
.
interactivity
.
mouse
.
pos_x
,
i
.
interactivity
.
mouse
.
pos_y
),
i
.
canvas
.
ctx
.
stroke
(),
i
.
canvas
.
ctx
.
closePath
()}}}},
i
.
fn
.
vendors
.
eventsListeners
=
function
(){
"window"
==
i
.
interactivity
.
detect_on
?
i
.
interactivity
.
el
=
window
:
i
.
interactivity
.
el
=
i
.
canvas
.
el
,(
i
.
interactivity
.
events
.
onhover
.
enable
||
i
.
interactivity
.
events
.
onclick
.
enable
)
&&
(
i
.
interactivity
.
el
.
addEventListener
(
"mousemove"
,
function
(
e
){
if
(
i
.
interactivity
.
el
==
window
)
var
a
=
e
.
clientX
,
t
=
e
.
clientY
;
else
var
a
=
e
.
offsetX
||
e
.
clientX
,
t
=
e
.
offsetY
||
e
.
clientY
;
i
.
interactivity
.
mouse
.
pos_x
=
a
,
i
.
interactivity
.
mouse
.
pos_y
=
t
,
i
.
tmp
.
retina
&&
(
i
.
interactivity
.
mouse
.
pos_x
*=
i
.
canvas
.
pxratio
,
i
.
interactivity
.
mouse
.
pos_y
*=
i
.
canvas
.
pxratio
),
i
.
interactivity
.
status
=
"mousemove"
}),
i
.
interactivity
.
el
.
addEventListener
(
"mouseleave"
,
function
(
e
){
i
.
interactivity
.
mouse
.
pos_x
=
null
,
i
.
interactivity
.
mouse
.
pos_y
=
null
,
i
.
interactivity
.
status
=
"mouseleave"
})),
i
.
interactivity
.
events
.
onclick
.
enable
&&
i
.
interactivity
.
el
.
addEventListener
(
"click"
,
function
(){
if
(
i
.
interactivity
.
mouse
.
click_pos_x
=
i
.
interactivity
.
mouse
.
pos_x
,
i
.
interactivity
.
mouse
.
click_pos_y
=
i
.
interactivity
.
mouse
.
pos_y
,
i
.
interactivity
.
mouse
.
click_time
=
(
new
Date
).
getTime
(),
i
.
interactivity
.
events
.
onclick
.
enable
)
switch
(
i
.
interactivity
.
events
.
onclick
.
mode
){
case
"push"
:
i
.
particles
.
move
.
enable
?
i
.
fn
.
modes
.
pushParticles
(
i
.
interactivity
.
modes
.
push
.
particles_nb
,
i
.
interactivity
.
mouse
):
1
==
i
.
interactivity
.
modes
.
push
.
particles_nb
?
i
.
fn
.
modes
.
pushParticles
(
i
.
interactivity
.
modes
.
push
.
particles_nb
,
i
.
interactivity
.
mouse
):
i
.
interactivity
.
modes
.
push
.
particles_nb
>
1
&&
i
.
fn
.
modes
.
pushParticles
(
i
.
interactivity
.
modes
.
push
.
particles_nb
);
break
;
case
"remove"
:
i
.
fn
.
modes
.
removeParticles
(
i
.
interactivity
.
modes
.
remove
.
particles_nb
);
break
;
case
"bubble"
:
i
.
tmp
.
bubble_clicking
=!
0
;
break
;
case
"repulse"
:
i
.
tmp
.
repulse_clicking
=!
0
,
i
.
tmp
.
repulse_count
=
0
,
i
.
tmp
.
repulse_finish
=!
1
,
setTimeout
(
function
(){
i
.
tmp
.
repulse_clicking
=!
1
},
1
e3
*
i
.
interactivity
.
modes
.
repulse
.
duration
)}})},
i
.
fn
.
vendors
.
densityAutoParticles
=
function
(){
if
(
i
.
particles
.
number
.
density
.
enable
){
var
e
=
i
.
canvas
.
el
.
width
*
i
.
canvas
.
el
.
height
/
1
e3
;
i
.
tmp
.
retina
&&
(
e
/=
2
*
i
.
canvas
.
pxratio
);
var
a
=
e
*
i
.
particles
.
number
.
value
/
i
.
particles
.
number
.
density
.
value_area
,
t
=
i
.
particles
.
array
.
length
-
a
;
0
>
t
?
i
.
fn
.
modes
.
pushParticles
(
Math
.
abs
(
t
)):
i
.
fn
.
modes
.
removeParticles
(
t
)}},
i
.
fn
.
vendors
.
checkOverlap
=
function
(
e
,
a
){
for
(
var
t
=
0
;
t
<
i
.
particles
.
array
.
length
;
t
++
){
var
s
=
i
.
particles
.
array
[
t
],
n
=
e
.
x
-
s
.
x
,
r
=
e
.
y
-
s
.
y
,
c
=
Math
.
sqrt
(
n
*
n
+
r
*
r
);
c
<=
e
.
radius
+
s
.
radius
&&
(
e
.
x
=
a
?
a
.
x
:
Math
.
random
()
*
i
.
canvas
.
w
,
e
.
y
=
a
?
a
.
y
:
Math
.
random
()
*
i
.
canvas
.
h
,
i
.
fn
.
vendors
.
checkOverlap
(
e
))}},
i
.
fn
.
vendors
.
createSvgImg
=
function
(
e
){
var
a
=
i
.
tmp
.
source_svg
,
t
=
/#
([
0-9A-F
]{3,6})
/gi
,
s
=
a
.
replace
(
t
,
function
(
a
,
t
,
i
,
s
){
if
(
e
.
color
.
rgb
)
var
n
=
"rgba("
+
e
.
color
.
rgb
.
r
+
","
+
e
.
color
.
rgb
.
g
+
","
+
e
.
color
.
rgb
.
b
+
","
+
e
.
opacity
+
")"
;
else
var
n
=
"hsla("
+
e
.
color
.
hsl
.
h
+
","
+
e
.
color
.
hsl
.
s
+
"%,"
+
e
.
color
.
hsl
.
l
+
"%,"
+
e
.
opacity
+
")"
;
return
n
}),
n
=
new
Blob
([
s
],{
type
:
"image/svg+xml;charset=utf-8"
}),
r
=
window
.
URL
||
window
.
webkitURL
||
window
,
c
=
r
.
createObjectURL
(
n
),
o
=
new
Image
;
o
.
addEventListener
(
"load"
,
function
(){
e
.
img
.
obj
=
o
,
e
.
img
.
loaded
=!
0
,
r
.
revokeObjectURL
(
c
),
i
.
tmp
.
count_svg
++
}),
o
.
src
=
c
},
i
.
fn
.
vendors
.
destroypJS
=
function
(){
cancelAnimationFrame
(
i
.
fn
.
drawAnimFrame
),
t
.
remove
(),
pJSDom
=
null
},
i
.
fn
.
vendors
.
drawShape
=
function
(
e
,
a
,
t
,
i
,
s
,
n
){
var
r
=
s
*
n
,
c
=
s
/
n
,
o
=
180
*
(
c
-
2
)
/
c
,
l
=
Math
.
PI
-
Math
.
PI
*
o
/
180
;
e
.
save
(),
e
.
beginPath
(),
e
.
translate
(
a
,
t
),
e
.
moveTo
(
0
,
0
);
for
(
var
v
=
0
;
r
>
v
;
v
++
)
e
.
lineTo
(
i
,
0
),
e
.
translate
(
i
,
0
),
e
.
rotate
(
l
);
e
.
fill
(),
e
.
restore
()},
i
.
fn
.
vendors
.
exportImg
=
function
(){
window
.
open
(
i
.
canvas
.
el
.
toDataURL
(
"image/png"
),
"_blank"
)},
i
.
fn
.
vendors
.
loadImg
=
function
(
e
){
if
(
i
.
tmp
.
img_error
=
void
0
,
""
!=
i
.
particles
.
shape
.
image
.
src
)
if
(
"svg"
==
e
){
var
a
=
new
XMLHttpRequest
;
a
.
open
(
"GET"
,
i
.
particles
.
shape
.
image
.
src
),
a
.
onreadystatechange
=
function
(
e
){
4
==
a
.
readyState
&&
(
200
==
a
.
status
?(
i
.
tmp
.
source_svg
=
e
.
currentTarget
.
response
,
i
.
fn
.
vendors
.
checkBeforeDraw
()):(
console
.
log
(
"Error pJS - Image not found"
),
i
.
tmp
.
img_error
=!
0
))},
a
.
send
()}
else
{
var
t
=
new
Image
;
t
.
addEventListener
(
"load"
,
function
(){
i
.
tmp
.
img_obj
=
t
,
i
.
fn
.
vendors
.
checkBeforeDraw
()}),
t
.
src
=
i
.
particles
.
shape
.
image
.
src
}
else
console
.
log
(
"Error pJS - No image.src"
),
i
.
tmp
.
img_error
=!
0
},
i
.
fn
.
vendors
.
draw
=
function
(){
"image"
==
i
.
particles
.
shape
.
type
?
"svg"
==
i
.
tmp
.
img_type
?
i
.
tmp
.
count_svg
>=
i
.
particles
.
number
.
value
?(
i
.
fn
.
particlesDraw
(),
i
.
particles
.
move
.
enable
?
i
.
fn
.
drawAnimFrame
=
requestAnimFrame
(
i
.
fn
.
vendors
.
draw
):
cancelRequestAnimFrame
(
i
.
fn
.
drawAnimFrame
)):
i
.
tmp
.
img_error
||
(
i
.
fn
.
drawAnimFrame
=
requestAnimFrame
(
i
.
fn
.
vendors
.
draw
)):
void
0
!=
i
.
tmp
.
img_obj
?(
i
.
fn
.
particlesDraw
(),
i
.
particles
.
move
.
enable
?
i
.
fn
.
drawAnimFrame
=
requestAnimFrame
(
i
.
fn
.
vendors
.
draw
):
cancelRequestAnimFrame
(
i
.
fn
.
drawAnimFrame
)):
i
.
tmp
.
img_error
||
(
i
.
fn
.
drawAnimFrame
=
requestAnimFrame
(
i
.
fn
.
vendors
.
draw
)):(
i
.
fn
.
particlesDraw
(),
i
.
particles
.
move
.
enable
?
i
.
fn
.
drawAnimFrame
=
requestAnimFrame
(
i
.
fn
.
vendors
.
draw
):
cancelRequestAnimFrame
(
i
.
fn
.
drawAnimFrame
))},
i
.
fn
.
vendors
.
checkBeforeDraw
=
function
(){
"image"
==
i
.
particles
.
shape
.
type
?
"svg"
==
i
.
tmp
.
img_type
&&
void
0
==
i
.
tmp
.
source_svg
?
i
.
tmp
.
checkAnimFrame
=
requestAnimFrame
(
check
):(
cancelRequestAnimFrame
(
i
.
tmp
.
checkAnimFrame
),
i
.
tmp
.
img_error
||
(
i
.
fn
.
vendors
.
init
(),
i
.
fn
.
vendors
.
draw
())):(
i
.
fn
.
vendors
.
init
(),
i
.
fn
.
vendors
.
draw
())},
i
.
fn
.
vendors
.
init
=
function
(){
i
.
fn
.
retinaInit
(),
i
.
fn
.
canvasInit
(),
i
.
fn
.
canvasSize
(),
i
.
fn
.
canvasPaint
(),
i
.
fn
.
particlesCreate
(),
i
.
fn
.
vendors
.
densityAutoParticles
(),
i
.
particles
.
line_linked
.
color_rgb_line
=
hexToRgb
(
i
.
particles
.
line_linked
.
color
)},
i
.
fn
.
vendors
.
start
=
function
(){
isInArray
(
"image"
,
i
.
particles
.
shape
.
type
)?(
i
.
tmp
.
img_type
=
i
.
particles
.
shape
.
image
.
src
.
substr
(
i
.
particles
.
shape
.
image
.
src
.
length
-
3
),
i
.
fn
.
vendors
.
loadImg
(
i
.
tmp
.
img_type
)):
i
.
fn
.
vendors
.
checkBeforeDraw
()},
i
.
fn
.
vendors
.
eventsListeners
(),
i
.
fn
.
vendors
.
start
()};
Object
.
deepExtend
=
function
(
e
,
a
){
for
(
var
t
in
a
)
a
[
t
]
&&
a
[
t
].
constructor
&&
a
[
t
].
constructor
===
Object
?(
e
[
t
]
=
e
[
t
]
||
{},
arguments
.
callee
(
e
[
t
],
a
[
t
])):
e
[
t
]
=
a
[
t
];
return
e
},
window
.
requestAnimFrame
=
function
(){
return
window
.
requestAnimationFrame
||
window
.
webkitRequestAnimationFrame
||
window
.
mozRequestAnimationFrame
||
window
.
oRequestAnimationFrame
||
window
.
msRequestAnimationFrame
||
function
(
e
){
window
.
setTimeout
(
e
,
1
e3
/
60
)}}(),
window
.
cancelRequestAnimFrame
=
function
(){
return
window
.
cancelAnimationFrame
||
window
.
webkitCancelRequestAnimationFrame
||
window
.
mozCancelRequestAnimationFrame
||
window
.
oCancelRequestAnimationFrame
||
window
.
msCancelRequestAnimationFrame
||
clearTimeout
}(),
window
.
pJSDom
=
[],
window
.
particlesJS
=
function
(
e
,
a
){
"string"
!=
typeof
e
&&
(
a
=
e
,
e
=
"particles-js"
),
e
||
(
e
=
"particles-js"
);
var
t
=
document
.
getElementById
(
e
),
i
=
"particles-js-canvas-el"
,
s
=
t
.
getElementsByClassName
(
i
);
if
(
s
.
length
)
for
(;
s
.
length
>
0
;)
t
.
removeChild
(
s
[
0
]);
var
n
=
document
.
createElement
(
"canvas"
);
n
.
className
=
i
,
n
.
style
.
width
=
"100%"
,
n
.
style
.
height
=
"100%"
;
var
r
=
document
.
getElementById
(
e
).
appendChild
(
n
);
null
!=
r
&&
pJSDom
.
push
(
new
pJS
(
e
,
a
))},
window
.
particlesJS
.
load
=
function
(
e
,
a
,
t
){
var
i
=
new
XMLHttpRequest
;
i
.
open
(
"GET"
,
a
),
i
.
onreadystatechange
=
function
(
a
){
if
(
4
==
i
.
readyState
)
if
(
200
==
i
.
status
){
var
s
=
JSON
.
parse
(
a
.
currentTarget
.
response
);
window
.
particlesJS
(
e
,
s
),
t
&&
t
()}
else
console
.
log
(
"Error pJS - XMLHttpRequest status: "
+
i
.
status
),
console
.
log
(
"Error pJS - File config not found"
)},
i
.
send
()};
\ No newline at end of file
src/components/Layout/index.tsx
View file @
39f9080e
...
@@ -35,7 +35,10 @@ const Layout = ({ children, isPcDevice }: { children: JSX.Element; isPcDevice: b
...
@@ -35,7 +35,10 @@ const Layout = ({ children, isPcDevice }: { children: JSX.Element; isPcDevice: b
return
(
return
(
<>
<>
<
Box
h=
{
'100%'
}
bg=
{
'gray.100'
}
>
<
Box
h=
{
'100%'
}
bgGradient=
{
'linear(to-t,rgba(173, 206, 255, 0.05) 0%, rgba(173, 206, 255, 0.12) 100%)'
}
>
{
isPc
?
(
{
isPc
?
(
pcUnShowLayoutRoute
[
router
.
pathname
]
?
(
pcUnShowLayoutRoute
[
router
.
pathname
]
?
(
<
Auth
>
{
children
}
</
Auth
>
<
Auth
>
{
children
}
</
Auth
>
...
...
src/pages/_app.tsx
View file @
39f9080e
...
@@ -55,6 +55,7 @@ export default function App({ Component, pageProps }: AppProps) {
...
@@ -55,6 +55,7 @@ export default function App({ Component, pageProps }: AppProps) {
<
Script
src=
"/js/qrcode.min.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/qrcode.min.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/pdf.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/pdf.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/html2pdf.bundle.min.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/html2pdf.bundle.min.js"
strategy=
"lazyOnload"
></
Script
>
<
Script
src=
"/js/particles.js"
strategy=
"lazyOnload"
></
Script
>
<
QueryClientProvider
client=
{
queryClient
}
>
<
QueryClientProvider
client=
{
queryClient
}
>
<
ChakraProvider
theme=
{
theme
}
>
<
ChakraProvider
theme=
{
theme
}
>
<
ColorModeScript
initialColorMode=
{
theme
.
config
.
initialColorMode
}
/>
<
ColorModeScript
initialColorMode=
{
theme
.
config
.
initialColorMode
}
/>
...
...
src/pages/index.module.scss
0 → 100644
View file @
39f9080e
.home
{
*
{
position
:
relative
;
}
}
src/pages/index.tsx
View file @
39f9080e
import
React
,
{
useEffect
}
from
'react'
;
import
React
,
{
useEffect
}
from
'react'
;
import
{
Card
,
Box
,
Link
}
from
'@chakra-ui/react'
;
import
{
Card
,
Box
,
Link
,
Flex
,
Image
,
Button
}
from
'@chakra-ui/react'
;
import
Markdown
from
'@/components/Markdown'
;
import
Markdown
from
'@/components/Markdown'
;
import
{
useMarkdown
}
from
'@/hooks/useMarkdown'
;
import
{
useMarkdown
}
from
'@/hooks/useMarkdown'
;
import
{
useRouter
}
from
'next/router'
;
import
{
getFilling
}
from
'@/api/system'
;
import
{
getFilling
}
from
'@/api/system'
;
import
{
useQuery
}
from
'@tanstack/react-query'
;
import
{
useQuery
}
from
'@tanstack/react-query'
;
import
{
useScreen
}
from
'@/hooks/useScreen'
;
import
{
useRouter
}
from
'next/router'
;
import
styles
from
'./index.module.scss'
;
const
Home
=
()
=>
{
const
Home
=
()
=>
{
const
{
inviterId
}
=
useRouter
().
query
as
{
inviterId
:
string
};
const
router
=
useRouter
();
const
{
inviterId
}
=
router
.
query
as
{
inviterId
:
string
};
const
{
data
}
=
useMarkdown
({
url
:
'/intro.md'
});
const
{
data
}
=
useMarkdown
({
url
:
'/intro.md'
});
const
{
isPc
}
=
useScreen
();
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
inviterId
)
{
if
(
inviterId
)
{
...
@@ -18,8 +23,152 @@ const Home = () => {
...
@@ -18,8 +23,152 @@ const Home = () => {
const
{
data
:
{
beianText
=
''
}
=
{}
}
=
useQuery
([
'init'
],
getFilling
);
const
{
data
:
{
beianText
=
''
}
=
{}
}
=
useQuery
([
'init'
],
getFilling
);
/* 加载动画 */
useEffect
(()
=>
{
setTimeout
(()
=>
{
window
.
particlesJS
?.(
'particles-js'
,
{
particles
:
{
number
:
{
value
:
40
,
density
:
{
enable
:
true
,
value_area
:
500
}
},
color
:
{
value
:
'#4e83fd'
},
shape
:
{
type
:
'circle'
,
stroke
:
{
width
:
0
,
color
:
'#000000'
},
polygon
:
{
nb_sides
:
5
}
},
opacity
:
{
value
:
0.5
,
random
:
false
,
anim
:
{
enable
:
false
,
speed
:
0.1
,
opacity_min
:
0.1
,
sync
:
false
}
},
size
:
{
value
:
3
,
random
:
true
,
anim
:
{
enable
:
false
,
speed
:
10
,
size_min
:
0.1
,
sync
:
false
}
},
line_linked
:
{
enable
:
true
,
distance
:
150
,
color
:
'#adceff'
,
opacity
:
0.4
,
width
:
1
},
move
:
{
enable
:
true
,
speed
:
2
,
direction
:
'none'
,
random
:
true
,
straight
:
false
,
out_mode
:
'out'
,
bounce
:
false
,
attract
:
{
enable
:
false
,
rotateX
:
600
,
rotateY
:
1200
}
}
},
interactivity
:
{
detect_on
:
'canvas'
,
events
:
{
onhover
:
{
enable
:
true
,
mode
:
'grab'
},
onclick
:
{
enable
:
true
,
mode
:
'push'
},
resize
:
true
},
modes
:
{
grab
:
{
distance
:
140
,
line_linked
:
{
opacity
:
1
}
},
bubble
:
{
distance
:
400
,
size
:
40
,
duration
:
2
,
opacity
:
8
,
speed
:
3
},
repulse
:
{
distance
:
200
,
duration
:
0.4
},
push
:
{
particles_nb
:
4
},
remove
:
{
particles_nb
:
2
}
}
},
retina_detect
:
true
});
},
1000
);
},
[
isPc
]);
return
(
return
(
<
Box
p=
{
[
5
,
10
]
}
>
<
Flex
className=
{
styles
.
home
}
position=
{
'relative'
}
flexDirection=
{
'column'
}
alignItems=
{
'center'
}
pt=
{
'20vh'
}
>
<
Box
id=
{
'particles-js'
}
position=
{
'absolute'
}
top=
{
0
}
left=
{
0
}
right=
{
0
}
bottom=
{
0
}
/>
<
Image
src=
"/icon/logo.png"
w=
{
[
'70px'
,
'120px'
]
}
h=
{
[
'70px'
,
'120px'
]
}
alt=
{
''
}
></
Image
>
<
Box
fontWeight=
{
'bold'
}
fontSize=
{
[
'40px'
,
'70px'
]
}
letterSpacing=
{
'5px'
}
color=
{
'myBlue.600'
}
>
FastGpt
</
Box
>
<
Box
color=
{
'myBlue.600'
}
fontSize=
{
[
'30px'
,
'50px'
]
}
>
三分钟
</
Box
>
<
Box
color=
{
'myBlue.600'
}
fontSize=
{
[
'30px'
,
'50px'
]
}
>
搭建 AI 知识库
</
Box
>
<
Button
my=
{
5
}
fontSize=
{
[
'xl'
,
'3xl'
]
}
h=
{
[
'35px'
,
'40px'
]
}
onClick=
{
()
=>
router
.
push
(
`/model`
)
}
>
点击开始
</
Button
>
<
Box
mt=
{
'20vh'
}
w=
{
'100%'
}
p=
{
[
5
,
10
]
}
>
<
Card
p=
{
5
}
lineHeight=
{
2
}
>
<
Card
p=
{
5
}
lineHeight=
{
2
}
>
<
Markdown
source=
{
data
}
isChatting=
{
false
}
/>
<
Markdown
source=
{
data
}
isChatting=
{
false
}
/>
</
Card
>
</
Card
>
...
@@ -34,6 +183,7 @@ const Home = () => {
...
@@ -34,6 +183,7 @@ const Home = () => {
<
Box
>
Made by FastGpt Team.
</
Box
>
<
Box
>
Made by FastGpt Team.
</
Box
>
</
Card
>
</
Card
>
</
Box
>
</
Box
>
</
Flex
>
);
);
};
};
...
...
src/pages/model/components/detail/components/SelectFileModal.tsx
View file @
39f9080e
...
@@ -185,8 +185,8 @@ const SelectFileModal = ({
...
@@ -185,8 +185,8 @@ const SelectFileModal = ({
<
Radio
<
Radio
ml=
{
3
}
ml=
{
3
}
list=
{
[
list=
{
[
{
label
:
'
QA拆分'
,
value
:
'qa
'
},
{
label
:
'
直接分段'
,
value
:
'subsection
'
},
{
label
:
'
直接分段'
,
value
:
'subsection
'
}
{
label
:
'
QA拆分'
,
value
:
'qa
'
}
]
}
]
}
value=
{
mode
}
value=
{
mode
}
onChange=
{
(
e
)
=>
setMode
(
e
as
'subsection'
|
'qa'
)
}
onChange=
{
(
e
)
=>
setMode
(
e
as
'subsection'
|
'qa'
)
}
...
...
src/types/index.d.ts
View file @
39f9080e
...
@@ -12,6 +12,7 @@ declare global {
...
@@ -12,6 +12,7 @@ declare global {
var
generatingVector
:
boolean
;
var
generatingVector
:
boolean
;
var
QRCode
:
any
;
var
QRCode
:
any
;
var
httpsAgent
:
Agent
;
var
httpsAgent
:
Agent
;
var
particlesJS
:
any
;
interface
Window
{
interface
Window
{
[
'pdfjs-dist/build/pdf'
]:
any
;
[
'pdfjs-dist/build/pdf'
]:
any
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment