This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-website.git
The following commit(s) were added to refs/heads/master by this push:
new 03750fc feat: add events page & improve the Download page (#188)
03750fc is described below
commit 03750fcd30f32cc98e7fe6a29aff7b51fa4a08cb
Author: qier222 <[email protected]>
AuthorDate: Thu Feb 18 11:10:00 2021 +0800
feat: add events page & improve the Download page (#188)
---
.gitignore | 1 +
website/.babelrc | 3 +
website/docs/download.md | 67 -----
website/docusaurus.config.js | 318 ++++-----------------
...lease-apache-apisix-ingress-controller-0.1.0.md | 24 ++
...lease-apache-apisix-ingress-controller-0.2.0.md | 22 ++
.../events/2021-02-09-release-apache-apisix-2.3.md | 41 +++
...lease-apache-apisix-ingress-controller-0.3.0.md | 25 ++
...21-02-12-release-apache-apisix-dashboard-2.4.md | 48 ++++
website/package.json | 10 +-
website/src/assets/icons/document-text.svg | 3 +
website/src/assets/icons/download.svg | 3 +
website/src/assets/icons/hexagon.svg | 1 +
website/src/assets/icons/info.svg | 3 +
website/src/assets/icons/square.svg | 1 +
website/src/assets/icons/star.svg | 3 +
website/src/assets/icons/triangle.svg | 1 +
website/src/css/customTheme.css | 92 +++++-
website/src/hooks/useOutsideClick.js | 19 ++
website/src/pages/downloads/ProjectCard.js | 286 ++++++++++++++++++
website/src/pages/downloads/index.js | 100 +++++++
website/src/pages/index.js | 55 +++-
website/src/pages/users.js | 52 ----
website/static/data/events.json | 22 ++
website/static/data/showcases.json | 255 +++++++++++++++++
website/static/robots.txt | 2 +
website/yarn.lock | 174 ++++++++++-
27 files changed, 1226 insertions(+), 405 deletions(-)
diff --git a/.gitignore b/.gitignore
index 777a50a..a51c56a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,4 @@ website/.cache-loader
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+.vscode
diff --git a/website/.babelrc b/website/.babelrc
new file mode 100644
index 0000000..84a20a0
--- /dev/null
+++ b/website/.babelrc
@@ -0,0 +1,3 @@
+{
+ "plugins": ["babel-plugin-styled-components"]
+}
diff --git a/website/docs/download.md b/website/docs/download.md
deleted file mode 100644
index 4bbf6b7..0000000
--- a/website/docs/download.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-id: downloads
-title: Downloads
----
-
-Apache APISIX is a dynamic, real-time, high-performance Cloud-Native API
gateway, based on the Nginx library and etcd.
-
-Apache APISIX software provides rich traffic management features such as load
balancing, dynamic upstream, canary release, circuit breaking, authentication,
observability, and more.
-
-Use the links below to download the Apache APISIX™ from one of our mirrors.
-
-## APISIX™
-
-| Version | Release Date | Downloads
|
-| ------- | ------------ |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-| 2.3 | 10/02/2021 |
[source](https://www.apache.org/dyn/closer.cgi/apisix/2.3/apache-apisix-2.3-src.tgz)
([asc](https://downloads.apache.org/apisix/2.3/apache-apisix-2.3-src.tgz.asc)
[sha512](https://downloads.apache.org/apisix/2.3/apache-apisix-2.3-src.tgz.sha512))
|
-
-## APISIX™ Dashboard
-
-| Version | Release Date | Downloads
|
-| ------- | ------------ |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-| 2.4 | 12/02/2021 |
[source](https://www.apache.org/dyn/closer.cgi/apisix/dashboard/2.4/apache-apisix-dashboard-2.4-src.tgz)
([asc](https://downloads.apache.org/apisix/dashboard/2.4/apache-apisix-dashboard-2.4-src.tgz.asc)
[sha512](https://downloads.apache.org/apisix/dashboard/2.4/apache-apisix-dashboard-2.4-src.tgz.sha512))
|
-| 2.3 | 11/01/2021 |
[source](https://www.apache.org/dyn/closer.cgi/apisix/dashboard/2.3/apisix-dashboard-2.3-src.tgz)
([asc](https://downloads.apache.org/apisix/dashboard/2.3/apisix-dashboard-2.3-src.tgz.asc)
[sha512](https://downloads.apache.org/apisix/dashboard/2.3/apisix-dashboard-2.3-src.tgz.sha512))
|
-
-## APISIX™ Ingress Controller
-
-| Version | Release Date | Downloads
|
-| ------- | ------------ |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-| 0.3.0 | 06/02/2021 |
[source](https://www.apache.org/dyn/closer.cgi/apisix/ingress-controller/0.3.0/apache-apisix-ingress-controller-0.3.0-src.tgz)
([asc](https://downloads.apache.org/apisix/ingress-controller/0.3.0/apache-apisix-ingress-controller-0.3.0-src.tgz.asc)
[sha512](https://downloads.apache.org/apisix/ingress-controller/0.3.0/apache-apisix-ingress-controller-0.3.0-src.tgz.sha512))
|
-
-## All Releases
-
-Find all APISIX releases in the [Archive
repository](https://archive.apache.org/dist/apisix/).
-
-[Incubating Archive
repository](https://archive.apache.org/dist/incubator/apisix/) hosts older
releases when APISIX was an incubator project.
-
-## Verify the releases
-
-[PGP signatures KEYS](https://downloads.apache.org/apisix/KEYS)
-
-It is essential that you verify the integrity of the downloaded files using
the PGP or SHA signatures. The PGP signatures can be verified using GPG or PGP.
Please download the KEYS as well as the asc signature files for relevant
distribution. It is recommended to get these files from the main distribution
directory and not from the mirrors.
-
-```sh
-gpg -i KEYS
-
-# or
-
-pgpk -a KEYS
-
-# or
-
-pgp -ka KEYS
-```
-
-To verify the binaries/sources you can download the relevant asc files for it
from main distribution directory and follow the below guide.
-
-```sh
-gpg --verify apache-apisix-********.asc apache-apisix-********
-
-or
-
-pgpv apache-apisix-********.asc
-
-or
-
-pgp apache-apisix-********.asc
-```
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index a4411b4..54612e8 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -6,268 +6,44 @@ module.exports = {
baseUrl: "/",
organizationName: "Apache",
projectName: "apisix-website",
- scripts: ["https://buttons.github.io/buttons.js"],
favicon: "img/favicon.png",
customFields: {
tagline2:
"Apache APISIX software provides rich traffic management features such
as load balancing, dynamic upstream, canary release, circuit breaking,
authentication, observability, and more.",
- users: [
- {
- caption: "360 奇虎",
- image: "https://static.apiseven.com/logo/360.png",
- infoLink: "https://www.360.cn/",
- pinned: true,
- },
- {
- caption: "大商天狗",
- image: "https://static.apiseven.com/logo/51tiangou.svg",
- infoLink: "http://51tiangou.com/",
- pinned: true,
- },
- {
- caption: "妙笔 AI",
- image: "https://static.apiseven.com/logo/aimiaobi.png",
- infoLink: "http://aimiaobi.com/",
- pinned: true,
- },
- {
- caption: "超链云商",
- image: "https://static.apiseven.com/logo/chaolian360.png",
- infoLink: "https://www.chaolian360.com/",
- pinned: true,
- },
- {
- caption: "DaoCloud",
- image: "https://static.apiseven.com/logo/daocloud.png",
- infoLink: "https://www.daocloud.io/",
- pinned: true,
- },
- {
- caption: "小电科技",
- image: "https://static.apiseven.com/logo/dian.png",
- infoLink: "http://dian.so/",
- pinned: true,
- },
- {
- caption: "嘀嗒出行",
- image: "https://static.apiseven.com/logo/didachuxing.jpg",
- infoLink: "https://www.didachuxing.com/",
- pinned: true,
- },
- {
- caption: "湖南新云网",
- image: "https://static.apiseven.com/logo/cunw.png",
- infoLink: "http://www.cunw.com.cn/",
- pinned: true,
- },
- {
- caption: "大搜车",
- image: "https://static.apiseven.com/logo/dasouche.png",
- infoLink: "https://www.dasouche.com/",
- pinned: true,
- },
- {
- caption: "大淘客",
- image: "https://static.apiseven.com/logo/dataoke.png",
- infoLink: "https://www.dataoke.com/",
- pinned: true,
- },
- {
- caption: "eFactory",
- image: "https://static.apiseven.com/logo/eFactory.webp",
- infoLink: "https://www.efactory-project.eu/",
- pinned: true,
- },
- {
- caption: "理房通",
- image: "https://static.apiseven.com/logo/ehomepay.png",
- infoLink: "https://www.ehomepay.com.cn/",
- pinned: true,
- },
- {
- caption: "简单一点科技",
- image: "https://static.apiseven.com/logo/eZone.png",
- infoLink: "https://ezone.work/",
- pinned: true,
- },
- {
- caption: "fansup",
- image: "https://static.apiseven.com/logo/fansup.png",
- infoLink: "https://fansup.mobi/",
- pinned: true,
- },
- {
- caption: "海尔优家",
- image: "https://static.apiseven.com/logo/haier.webp",
- infoLink: "http://haieruplus.com/",
- pinned: true,
- },
- {
- caption: "中移杭研",
- image: "https://static.apiseven.com/logo/hy10086.png",
- infoLink: "https://hy.10086.cn/",
- pinned: true,
- },
- {
- caption: "航天网信",
- image: "https://static.apiseven.com/logo/htzhiyun.png",
- infoLink: "https://www.htzhiyun.cn/",
- pinned: true,
- },
- {
- caption: "好洛维",
- image: "https://static.apiseven.com/logo/hellowin.jpg",
- infoLink: "http://www.hellowin.cn/",
- pinned: true,
- },
- {
- caption: "HelloTalk",
- image: "https://static.apiseven.com/logo/HelloTalk.png",
- infoLink: "https://www.hellotalk.com/",
- pinned: true,
- },
- {
- caption: "华为",
- image: "https://static.apiseven.com/logo/huawei.png",
- infoLink: "http://huawei.com/",
- pinned: true,
- },
- {
- caption: "虎牙",
- image: "https://static.apiseven.com/logo/huya.jpeg",
- infoLink: "https://www.huya.com/",
- pinned: true,
- },
- {
- caption: "艾佳生活",
- image: "https://static.apiseven.com/logo/ihomefnt.gif",
- infoLink: "https://www.ihomefnt.com/",
- pinned: true,
- },
- {
- caption: "简单心理",
- image: "https://static.apiseven.com/logo/jiandanxinli.png",
- infoLink: "https://www.jiandanxinli.com/",
- pinned: true,
- },
- {
- caption: "同程金服",
- image: "https://static.apiseven.com/logo/jr_ly.png",
- infoLink: "https://jr.ly.com/",
- pinned: true,
- },
- {
- caption: "贝壳找房",
- image: "https://static.apiseven.com/logo/ke.png",
- infoLink: "https://www.ke.com/",
- pinned: true,
- },
- {
- caption: "魅族",
- image: "https://static.apiseven.com/logo/meizu.jpg",
- infoLink: "https://www.meizu.com/",
- pinned: true,
- },
- {
- caption: "明源云客",
- image: "https://static.apiseven.com/logo/mingyuanyun.jpg",
- infoLink: "https://www.mingyuanyun.com/",
- pinned: true,
- },
- {
- caption: "NASA",
- image: "https://static.apiseven.com/logo/nasa.png",
- infoLink: "https://www.jpl.nasa.gov/",
- pinned: true,
- },
- {
- caption: "网易",
- image: "https://static.apiseven.com/logo/163.png",
- infoLink: "http://www.163.com/",
- pinned: true,
- },
- {
- caption: "湖南国科云通",
- image: "https://static.apiseven.com/logo/sinog2c.png",
- infoLink: "http://sinog2c.com/",
- pinned: true,
- },
- {
- caption: "炎黄新星",
- image: "https://static.apiseven.com/logo/sinovatech.gif",
- infoLink: "https://www.sinovatech.com/",
- pinned: true,
- },
- {
- caption: "泰康云",
- image: "https://static.apiseven.com/logo/taikang.svg",
- infoLink: "http://taikang.com/",
- pinned: true,
- },
- {
- caption: "糖豆网",
- image: "https://static.apiseven.com/logo/tangdou.png",
- infoLink: "http://www.tangdou.com/",
- pinned: true,
- },
- {
- caption: "腾讯云",
- image: "https://static.apiseven.com/logo/TencentCloud.jpg",
- infoLink: "https://cloud.tencent.com/",
- pinned: true,
- },
-
- {
- caption: "腾讯优图",
- image: "https://static.apiseven.com/logo/youtu.jpg",
- infoLink: "https://open.youtu.qq.com/",
- pinned: true,
- },
- {
- caption: "万思",
- image: "https://static.apiseven.com/logo/teamones.png",
- infoLink: "https://www.teamones.cn/",
- pinned: true,
- },
- {
- caption: "中国航信",
- image: "https://static.apiseven.com/logo/TravelSky.png",
- infoLink: "http://travelsky.com/",
- pinned: true,
- },
- {
- caption: "随行付",
- image: "https://static.apiseven.com/logo/vbill.png",
- infoLink: "https://vbill.cn/",
- pinned: true,
- },
- {
- caption: "优信二手车",
- image: "https://static.apiseven.com/logo/xin.png",
- infoLink: "https://www.xin.com/",
- pinned: true,
- },
- {
- caption: "雪球",
- image: "https://static.apiseven.com/logo/xueqiu.jpeg",
- infoLink: "https://xueqiu.com/",
- pinned: true,
- },
- {
- caption: "租租车",
- image: "https://static.apiseven.com/logo/zuzuche.png",
- infoLink: "https://www.zuzuche.com/",
- pinned: true,
- },
- {
- caption: "作业帮",
- image: "https://static.apiseven.com/logo/zybang.png",
- infoLink: "https://www.zybang.com/",
- pinned: true,
- },
- ],
+ showcases: require("./static/data/showcases.json"),
+ events: require("./static/data/events.json"),
repoUrl: "https://github.com/apache/apisix",
docsUrl: "",
+ downloads: [
+ {
+ name: "APISIX™",
+ description: "A dynamic, real-time, high-performance API gateway.",
+ shape: "triangle",
+ color: "var(--ifm-color-primary)",
+ githubRepo: "apache/apisix",
+ version: "2.3",
+ releaseDate: "2021-02-09",
+ },
+ {
+ name: "APISIX™ Dashboard",
+ description:
+ "Designed to make it as easy as possible for users to operate Apache
APISIX through a frontend interface.",
+ shape: "square",
+ color: "#10B981",
+ githubRepo: "apache/apisix-dashboard",
+ version: "2.4",
+ releaseDate: "2021-02-12",
+ },
+ {
+ name: "APISIX™ Ingress Controller",
+ description: "An Apache APISIX control plane component.",
+ shape: "hexagon",
+ color: "#2563EB",
+ githubRepo: "apache/apisix-ingress-controller",
+ version: "0.3.0",
+ releaseDate: "2021-02-11",
+ },
+ ],
},
onBrokenLinks: "log",
onBrokenMarkdownLinks: "log",
@@ -293,7 +69,16 @@ module.exports = {
},
],
],
- plugins: [],
+ plugins: [
+ [
+ "@docusaurus/plugin-content-blog",
+ {
+ id: "events",
+ routeBasePath: "events",
+ path: "events",
+ },
+ ],
+ ],
themeConfig: {
navbar: {
title: "Apache APISIX™",
@@ -312,6 +97,11 @@ module.exports = {
position: "right",
},
{
+ to: "/events",
+ label: "Events",
+ position: "right",
+ },
+ {
to: "/downloads",
label: "Downloads",
position: "right",
@@ -380,10 +170,6 @@ module.exports = {
title: "More",
items: [
{
- label: "User Showcase",
- to: "https://apisix.apache.org/users/",
- },
- {
label: "Blog",
to: "https://apisix.apache.org/blog/",
},
@@ -403,6 +189,16 @@ module.exports = {
apiKey: "ad95c83c2872f173de8bcc4a0351c5c2",
indexName: "apache-apisix-website",
},
+ colorMode: {
+ disableSwitch: true,
+ },
+ metadatas: [
+ {
+ name: "description",
+ content:
+ "Apache APISIX is a dynamic, real-time, high-performance
Cloud-Native API gateway, based on the Nginx library and etcd.",
+ },
+ ],
},
stylesheets: [
"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap",
diff --git
a/website/events/2020-12-23-release-apache-apisix-ingress-controller-0.1.0.md
b/website/events/2020-12-23-release-apache-apisix-ingress-controller-0.1.0.md
new file mode 100644
index 0000000..176f49e
--- /dev/null
+++
b/website/events/2020-12-23-release-apache-apisix-ingress-controller-0.1.0.md
@@ -0,0 +1,24 @@
+---
+title: Release Apache APISIX Ingress Controller 0.1.0
+---
+
+This release mainly improve basic features, bugfix and adds test cases.
+
+<!--truncate-->
+
+## Core
+
+- Enriched documentation.
+- CI Integration.
[#75](https://github.com/apache/apisix-ingress-controller/pull/75)
[#80](https://github.com/apache/apisix-ingress-controller/pull/80)
[#84](https://github.com/apache/apisix-ingress-controller/pull/84)
[#87](https://github.com/apache/apisix-ingress-controller/pull/87)
[#89](https://github.com/apache/apisix-ingress-controller/pull/89)
[#97](https://github.com/apache/apisix-ingress-controller/pull/97)
+- Support retry when sync failed.
[#103](https://github.com/apache/apisix-ingress-controller/pull/103)
+- Support using kustomize install all resources.
[#72](https://github.com/apache/apisix-ingress-controller/pull/72)
+- Support command line configuration.
[#61](https://github.com/apache/apisix-ingress-controller/pull/61)
+- Support to define SSL by CRD.
[#95](https://github.com/apache/apisix-ingress-controller/pull/95)
+
+## Test case
+
+- Add E2E test enviroment.
[#101](https://github.com/apache/apisix-ingress-controller/pull/101)
+
+## Bugfix
+
+- invalid memory address or nil pointer dereference.
[#9](https://github.com/api7/seven/pull/9)
diff --git
a/website/events/2021-01-19-release-apache-apisix-ingress-controller-0.2.0.md
b/website/events/2021-01-19-release-apache-apisix-ingress-controller-0.2.0.md
new file mode 100644
index 0000000..fa2c3dd
--- /dev/null
+++
b/website/events/2021-01-19-release-apache-apisix-ingress-controller-0.2.0.md
@@ -0,0 +1,22 @@
+---
+title: Release Apache APISIX Ingress Controller 0.2.0
+---
+
+This release mainly improve basic features, bugfix and adds test cases.
+
+<!--truncate-->
+
+## Core
+
+- Enhanced documentation, easier to read and execute
[#129](https://github.com/apache/apisix-ingress-controller/pull/129)
+- API specification for CRDs
[#151](https://github.com/apache/apisix-ingress-controller/pull/151)
+- Support Canary plugin (Base on the
[feature](https://github.com/apache/apisix/pull/2935) in Apache APISIX)
[#13](https://github.com/apache/apisix-ingress-controller/issues/13)
+- Support prometheus metrics
[#143](https://github.com/apache/apisix-ingress-controller/pull/143)
+- Support install ingress controller by Helm Chart
[#153](https://github.com/apache/apisix-ingress-controller/pull/153)
+- Support reconcile loop.
[#149](https://github.com/apache/apisix-ingress-controller/pull/149)
[#157](https://github.com/apache/apisix-ingress-controller/pull/157)
[#163](https://github.com/apache/apisix-ingress-controller/pull/163)
+- Support namespaces filtering.
[#162](https://github.com/apache/apisix-ingress-controller/pull/162)
+- Some Refactor.
[#147](https://github.com/apache/apisix-ingress-controller/pull/147)
[#155](https://github.com/apache/apisix-ingress-controller/pull/155)
[#134](https://github.com/apache/apisix-ingress-controller/pull/134)
+
+## Test case
+
+more e2e case
[#156](https://github.com/apache/apisix-ingress-controller/pull/156)
[#142](https://github.com/apache/apisix-ingress-controller/pull/142)
diff --git a/website/events/2021-02-09-release-apache-apisix-2.3.md
b/website/events/2021-02-09-release-apache-apisix-2.3.md
new file mode 100644
index 0000000..e9d2141
--- /dev/null
+++ b/website/events/2021-02-09-release-apache-apisix-2.3.md
@@ -0,0 +1,41 @@
+---
+title: Release Apache APISIX 2.3
+---
+
+<!--truncate-->
+
+### Change
+
+- fix: use luajit by default when run apisix
[#3335](https://github.com/apache/apisix/pull/3335)
+- feat: use luasocket instead of curl in etcd.lua
[#2965](https://github.com/apache/apisix/pull/2965)
+
+### Core
+
+- :sunrise: feat: support to communicate with etcd by TLS without verification
in command line [#3415](https://github.com/apache/apisix/pull/3415)
+- :sunrise: feat: chaos test on route could still works when etcd is down
[#3404](https://github.com/apache/apisix/pull/3404)
+- :sunrise: feat: ewma use p2c to improve performance
[#3300](https://github.com/apache/apisix/pull/3300)
+- :sunrise: feat: support specifying https in upstream to talk with https
backend [#3430](https://github.com/apache/apisix/pull/3430)
+- :sunrise: feat: allow customizing lua_package_path & lua_package_cpath
[#3417](https://github.com/apache/apisix/pull/3417)
+- :sunrise: feat: allow to pass SNI in HTTPS proxy
[#3420](https://github.com/apache/apisix/pull/3420)
+- :sunrise: feat: support gRPCS
[#3411](https://github.com/apache/apisix/pull/3411)
+- :sunrise: feat: allow getting upstream health check status via control API
[#3345](https://github.com/apache/apisix/pull/3345)
+- :sunrise: feat: support dubbo
[#3224](https://github.com/apache/apisix/pull/3224)
+- :sunrise: feat: load balance by least connections
[#3304](https://github.com/apache/apisix/pull/3304)
+
+### Plugin
+
+- :sunrise: feat: kafka-logger implemented reuse kafka producer
[#3429](https://github.com/apache/apisix/pull/3429)
+- :sunrise: feat(authz-keycloak): dynamic scope and resource mapping.
[#3308](https://github.com/apache/apisix/pull/3308)
+- :sunrise: feat: proxy-rewrite host support host with port
[#3428](https://github.com/apache/apisix/pull/3428)
+- :sunrise: feat(fault-injection): support conditional fault injection using
nginx variables [#3363](https://github.com/apache/apisix/pull/3363)
+
+### Bugfix
+
+- fix(standalone): require consumer's id to be the same as username
[#3394](https://github.com/apache/apisix/pull/3394)
+- fix: support upstream_id & consumer with grpc
[#3387](https://github.com/apache/apisix/pull/3387)
+- fix: set conf info when global rule is hit without matched rule
[#3332](https://github.com/apache/apisix/pull/3332)
+- fix: avoid caching outdated discovery upstream nodes
[#3295](https://github.com/apache/apisix/pull/3295)
+- fix: create the health checker in `access` phase
[#3240](https://github.com/apache/apisix/pull/3240)
+- fix: make set_more_retries() work when upstream_type is chash
[#2676](https://github.com/apache/apisix/pull/2676)
+
+For more changes, please refer to
[Milestone](https://github.com/apache/apisix/milestone/12)
diff --git
a/website/events/2021-02-11-release-apache-apisix-ingress-controller-0.3.0.md
b/website/events/2021-02-11-release-apache-apisix-ingress-controller-0.3.0.md
new file mode 100644
index 0000000..b17ab7d
--- /dev/null
+++
b/website/events/2021-02-11-release-apache-apisix-ingress-controller-0.3.0.md
@@ -0,0 +1,25 @@
+---
+title: Release Apache APISIX Ingress Controller 0.3.0
+---
+
+This release mainly improves the program robustness and adds some features.
+
+<!--truncate-->
+
+## Core
+
+- Support Leader election to let only the leader process resources
[#173](https://github.com/apache/apisix-ingress-controller/pull/173);
+- Let Controller itself generates resource ids instead of relying on APISIX
[#199](https://github.com/apache/apisix-ingress-controller/pull/199);
+- Change go module name from `github.com/api7/ingress-controller` to
`github.com/apache/apisix-ingress-controller`
[#220](https://github.com/apache/apisix-ingress-controller/pull/220);
+- Re draw the design diagram
[#214](https://github.com/apache/apisix-ingress-controller/pull/214);
+- Support gRPC scheme in ApisixUpstream
[#225](https://github.com/apache/apisix-ingress-controller/pull/225);
+- SSL resource cache optimization
[#203](https://github.com/apache/apisix-ingress-controller/pull/203);
+
+## Deploy
+
+- Complete the compatibility tests on Amazon EKS, Google Cloud GKE, Ali Cloud
ACK and etc
[#177](https://github.com/apache/apisix-ingress-controller/pull/177),
[#180](https://github.com/apache/apisix-ingress-controller/pull/180),
[#183](https://github.com/apache/apisix-ingress-controller/pull/183);
+- Refactor the helm charts, merging ingress-apisix and ingress-apisix-base
into apisix-ingress-controller
[#213](https://github.com/apache/apisix-ingress-controller/pull/213);
+
+## Test
+
+- Now CI runs e2e test suites in parallel
[#172](https://github.com/apache/apisix-ingress-controller/pull/172);
diff --git a/website/events/2021-02-12-release-apache-apisix-dashboard-2.4.md
b/website/events/2021-02-12-release-apache-apisix-dashboard-2.4.md
new file mode 100644
index 0000000..914762a
--- /dev/null
+++ b/website/events/2021-02-12-release-apache-apisix-dashboard-2.4.md
@@ -0,0 +1,48 @@
+---
+title: Release Apache APISIX Dashboard 2.4
+---
+
+This release mainly improves basic features, bugfix and adds test cases.
+
+`Manager API` 2.4 should be used with [Apache APISIX
2.3](https://github.com/apache/apisix/releases/tag/2.3). It is not recommended
to use with other Apache APISIX versions.
+
+<!--truncate-->
+
+### Core
+
+- Support to show warning notification when dashboard version not matching
apisix. [#1435](https://github.com/apache/apisix-dashboard/pull/1435)
+- Support mTLS connection to ETCD.
[#1437](https://github.com/apache/apisix-dashboard/pull/1437)
+- Support IP allow list.
[#1424](https://github.com/apache/apisix-dashboard/pull/1424)
+- Support to get manager-api version through API.
[#1429](https://github.com/apache/apisix-dashboard/pull/1429)
+- Support import route from OpenAPI specification3.0.
[#1102](https://github.com/apache/apisix-dashboard/pull/1102)
+- Support export route from OpenAPI specification3.0.
[#1245](https://github.com/apache/apisix-dashboard/pull/1245)
+- Support string type for the script field in Route.
[#1289](https://github.com/apache/apisix-dashboard/pull/1289)
+- Feat: add script_id field in Route.entity.
[#1386](https://github.com/apache/apisix-dashboard/pull/1386)
+- Feat: add stop subcommand.
[#741](https://github.com/apache/apisix-dashboard/pull/741)
+- Feat: add e2e test coverage.
[#1270](https://github.com/apache/apisix-dashboard/pull/1270)
+- Feat: add returning value for HTTP PUT and PATCH methods.
[#1322](https://github.com/apache/apisix-dashboard/pull/1322)
+- Feat: user can skip upstream when select service_id
[#1302](https://github.com/apache/apisix-dashboard/pull/1302)
+
+### Bugfix
+
+- Fix: add defer recover for goroutines to prevent abnormal crash.
[#1419](https://github.com/apache/apisix-dashboard/pull/1419)
+- Fix: add version ldflags when building manager-api in Dockerfile.
[#1393](https://github.com/apache/apisix-dashboard/pull/1393)
+- Fix: Upgrade gjson and protobuf to avoid security problem.
[#1366](https://github.com/apache/apisix-dashboard/pull/1366)
+- Fix: Incomplete label display.
[#1252](https://github.com/apache/apisix-dashboard/pull/1252)
+- Fix: Redirect plugin should not show in route step3
[#1276](https://github.com/apache/apisix-dashboard/pull/1276)
+- Fix: Editing a Service, the upstream info will be lost.
[#1347](https://github.com/apache/apisix-dashboard/pull/1347)
+
+### Test Case
+
+- Use ginkgo framwork to do backend E2E testing.
[#1319](https://github.com/apache/apisix-dashboard/pull/1319)
+- Add action to check the version for release.
[#1418](https://github.com/apache/apisix-dashboard/pull/1418)
+- Add test for make build.
[#1421](https://github.com/apache/apisix-dashboard/pull/1421)
+- Remove the etcd dependency in part of unit test.
[#1169](https://github.com/apache/apisix-dashboard/pull/1469)
+- Skip Cypress binary install when build.
[#1248](https://github.com/apache/apisix-dashboard/pull/1248)
+- Enhance plugin schema smoke test
[#1261](https://github.com/apache/apisix-dashboard/pull/1261)
+- Delete unnecessary wait in front-end test.
[#1370](https://github.com/apache/apisix-dashboard/pull/1370)
+- Add edit the plugin testcase
[#1372](https://github.com/apache/apisix-dashboard/pull/1372)
+
+### Doc
+
+- Doc: add document for introducing bakend e2e test.
[#1381](https://github.com/apache/apisix-dashboard/pull/1381)
diff --git a/website/package.json b/website/package.json
index 0feb907..5b6decf 100644
--- a/website/package.json
+++ b/website/package.json
@@ -12,15 +12,18 @@
"docusaurus": "docusaurus"
},
"devDependencies": {
- "@svgr/webpack": "^5.5.0"
+ "@svgr/webpack": "^5.5.0",
+ "babel-plugin-styled-components": "^1.12.0"
},
"dependencies": {
"@docusaurus/core": "2.0.0-alpha.70",
"@docusaurus/preset-classic": "2.0.0-alpha.70",
+ "change-case": "^4.1.2",
"clsx": "^1.1.1",
"react": "^16.10.2",
"react-dom": "^16.10.2",
- "react-transition-group": "^4.4.1"
+ "react-transition-group": "^4.4.1",
+ "styled-components": "^5.2.1"
},
"browserslist": {
"production": [
@@ -33,5 +36,8 @@
"last 1 firefox version",
"last 1 safari version"
]
+ },
+ "resolutions": {
+ "styled-components": "^5"
}
}
diff --git a/website/src/assets/icons/document-text.svg
b/website/src/assets/icons/document-text.svg
new file mode 100644
index 0000000..5b3ce28
--- /dev/null
+++ b/website/src/assets/icons/document-text.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9
12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414
5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
+</svg>
diff --git a/website/src/assets/icons/download.svg
b/website/src/assets/icons/download.svg
new file mode 100644
index 0000000..037d5b5
--- /dev/null
+++ b/website/src/assets/icons/download.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4
16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
+</svg>
diff --git a/website/src/assets/icons/hexagon.svg
b/website/src/assets/icons/hexagon.svg
new file mode 100644
index 0000000..cf9ef4d
--- /dev/null
+++ b/website/src/assets/icons/hexagon.svg
@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="fas"
data-icon="hexagon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0
576 512" class="svg-inline--fa fa-hexagon fa-w-18 fa-7x"><path
fill="currentColor" d="M441.5 39.8C432.9 25.1 417.1 16 400 16H176c-17.1 0-32.9
9.1-41.5 23.8l-112 192c-8.7 14.9-8.7 33.4 0 48.4l112 192c8.6 14.7 24.4 23.8
41.5 23.8h224c17.1 0 32.9-9.1 41.5-23.8l112-192c8.7-14.9 8.7-33.4
0-48.4l-112-192z" class=""></path></svg>
diff --git a/website/src/assets/icons/info.svg
b/website/src/assets/icons/info.svg
new file mode 100644
index 0000000..4552339
--- /dev/null
+++ b/website/src/assets/icons/info.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13
16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
+</svg>
diff --git a/website/src/assets/icons/square.svg
b/website/src/assets/icons/square.svg
new file mode 100644
index 0000000..ea0e5bc
--- /dev/null
+++ b/website/src/assets/icons/square.svg
@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square"
class="svg-inline--fa fa-square fa-w-14" role="img"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path
fill="currentColor" d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48
48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>
diff --git a/website/src/assets/icons/star.svg
b/website/src/assets/icons/star.svg
new file mode 100644
index 0000000..3882d9b
--- /dev/null
+++ b/website/src/assets/icons/star.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0
00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363
1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176
0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0
00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0
00.951-.69l1.519-4.674z" />
+</svg>
diff --git a/website/src/assets/icons/triangle.svg
b/website/src/assets/icons/triangle.svg
new file mode 100644
index 0000000..283227b
--- /dev/null
+++ b/website/src/assets/icons/triangle.svg
@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="fas"
data-icon="triangle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0
576 512" class="svg-inline--fa fa-triangle fa-w-18 fa-7x"><path
fill="currentColor" d="M329.6 24c-18.4-32-64.7-32-83.2 0L6.5 440c-18.4 31.9 4.6
72 41.6 72H528c36.9 0 60-40 41.6-72l-240-416z" class=""></path></svg>
diff --git a/website/src/css/customTheme.css b/website/src/css/customTheme.css
index 2509fd8..078a43b 100644
--- a/website/src/css/customTheme.css
+++ b/website/src/css/customTheme.css
@@ -39,21 +39,19 @@ div.inner {
padding-top: 50px;
}
+.color-primary {
+ color: var(--ifm-color-primary);
+}
+
header h2 {
color: var(--color-primary);
}
/* navbar */
-.navbar .react-toggle {
- display: none;
-}
.navbar__link:hover,
.navbar__link--active {
color: var(--color-primary);
}
-.navbar-sidebar {
- box-shadow: unset;
-}
/* home splash */
.home-splash {
@@ -97,7 +95,6 @@ header h2 {
color: var(--color-primary);
}
.showcase {
- padding-bottom: 8rem;
padding-left: 0;
padding-right: 0;
margin-left: 0;
@@ -167,9 +164,80 @@ header h2 {
}
}
+/* events section */
+.events-section .events-container {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap;
+ width: 100%;
+ margin: 16px 0;
+}
+.events-section .event-item {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ text-align: left;
+ border: 1px solid #eee;
+ margin: 8px;
+ padding: 8px 18px;
+ border-radius: 6px;
+ flex: 1;
+ cursor: pointer;
+ transition: all 0.3s;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.03);
+ text-decoration: none;
+ min-width: 256px;
+}
+@media (max-width: 574px) {
+ .events-section .event-item .event-read-button {
+ display: none;
+ }
+}
+.events-section .event-item .event-title {
+ font-weight: 500;
+ color: #000;
+ opacity: 0.88;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ transition: all 0.3s;
+}
+.events-section .event-item .event-publish-time {
+ color: #000;
+ opacity: 0.58;
+ font-size: 12px;
+}
+.events-section .event-item .event-read-button {
+ margin-top: 16px;
+ font-weight: 500;
+ color: #000;
+ opacity: 0.58;
+ font-size: 12px;
+ transition: all 0.3s;
+}
+.events-section .event-item .event-read-button svg {
+ height: 8px;
+ margin-left: 1px;
+ transition: all 0.3s;
+}
+.events-section .event-item:hover .event-title {
+ color: var(--ifm-color-primary);
+}
+.events-section .event-item:hover .event-read-button {
+ opacity: 0.88;
+}
+.events-section .event-item:hover {
+ border-color: rgb(231, 231, 231);
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.06);
+}
+.events-section .events-view-all-button {
+ margin-top: 8px;
+ font-size: 14px;
+}
+
/* learn how */
.learn-how {
- background: var(--ifm-color-primary-light);
width: 100%;
border-radius: 16px;
background: var(--color-secondary-bg);
@@ -233,8 +301,14 @@ a {
a:hover {
color: var(--color-primary);
}
+.markdown a {
+ color: var(--color-primary);
+}
/* footer */
+.footer {
+ margin-top: 2rem;
+}
.footer__links .footer__title {
font-weight: 700;
font-size: 1.1rem;
@@ -272,7 +346,7 @@ a:hover {
opacity: 0.88;
}
-/*
+/*
Animations
*/
diff --git a/website/src/hooks/useOutsideClick.js
b/website/src/hooks/useOutsideClick.js
new file mode 100644
index 0000000..690f8eb
--- /dev/null
+++ b/website/src/hooks/useOutsideClick.js
@@ -0,0 +1,19 @@
+import { useEffect } from "react";
+
+const useOutsideClick = (ref, callback) => {
+ const handleClick = (e) => {
+ if (ref.current && !ref.current.contains(e.target)) {
+ callback();
+ }
+ };
+
+ useEffect(() => {
+ document.addEventListener("click", handleClick);
+
+ return () => {
+ document.removeEventListener("click", handleClick);
+ };
+ });
+};
+
+export default useOutsideClick;
diff --git a/website/src/pages/downloads/ProjectCard.js
b/website/src/pages/downloads/ProjectCard.js
new file mode 100644
index 0000000..4949d51
--- /dev/null
+++ b/website/src/pages/downloads/ProjectCard.js
@@ -0,0 +1,286 @@
+import React, { useState, useRef, useEffect } from "react";
+import styled from "styled-components";
+import useOutsideClick from "../../hooks/useOutsideClick";
+import { paramCase } from "change-case";
+
+import IconInfo from "../../assets/icons/info.svg";
+import IconStar from "../../assets/icons/star.svg";
+import IconDocumentText from "../../assets/icons/document-text.svg";
+import IconDownload from "../../assets/icons/download.svg";
+import IconTriangle from "../../assets/icons/triangle.svg";
+import IconSquare from "../../assets/icons/square.svg";
+import IconHexagon from "../../assets/icons/hexagon.svg";
+
+const Dropdown = (props) => {
+ const ref = useRef();
+ const { isDropdownOpen, setIsDropdownOpen } = props;
+ useOutsideClick(ref, () => {
+ if (isDropdownOpen) {
+ setIsDropdownOpen(false);
+ }
+ });
+ return (
+ <StyledDropdown ref={ref} open={isDropdownOpen}>
+ {props.children}
+ </StyledDropdown>
+ );
+};
+
+const ProjectCard = (props) => {
+ const [isDropdownOpen, setIsDropdownOpen] = useState(false);
+ const [repoStats, setRepoStats] = useState({ stars: 0, issues: 0 });
+ const {
+ name,
+ description,
+ shape,
+ color,
+ version,
+ releaseDate,
+ githubRepo,
+ } = props;
+ const shapeComponent =
+ shape === "triangle" ? (
+ <IconTriangle />
+ ) : shape === "square" ? (
+ <IconSquare />
+ ) : (
+ <IconHexagon />
+ );
+ const downloadLink = `https://www.apache.org/dyn/closer.cgi/apisix${
+ "/" + paramCase(name.replace("APISIX™", ""))
+ }/${version}/apache-${paramCase(name.replace("™", ""))}-${version}-src`;
+
+ useEffect(() => {
+ getGitHubRepoStats(githubRepo).then((stats) => {
+ setRepoStats({
+ stars: stats.stargazers_count,
+ issues: stats.open_issues_count,
+ });
+ });
+ }, []);
+
+ return (
+ <Card>
+ <LeftSide>
+ <Title>
+ <ShapeBeforeTitle color={color}>{shapeComponent}</ShapeBeforeTitle>
+ {name}
+ </Title>
+ <Description>{description}</Description>
+ <LeftSideLinks>
+ <LeftSideLink
+ href={`https://github.com/${githubRepo}`}
+ target="_blank"
+ title="Stars"
+ >
+ <IconStar /> {repoStats.stars}
+ </LeftSideLink>
+ <LeftSideLink
+ href={`https://github.com/${githubRepo}/issues`}
+ target="_blank"
+ title="Issues"
+ >
+ <IconInfo /> {repoStats.issues}
+ </LeftSideLink>
+ <LeftSideLink
+ href={`https://github.com/${githubRepo}/blob/master/CHANGELOG.md`}
+ target="_blank"
+ >
+ <IconDocumentText /> CHANGELOG
+ </LeftSideLink>
+ </LeftSideLinks>
+ </LeftSide>
+ <RightSide>
+ <VersionInfo>
+ Latest Version · <span>{version}</span>
+ <br />
+ Release Date · <span>{releaseDate}</span>
+ </VersionInfo>
+ <div>
+ <Button
+ onClick={() => setIsDropdownOpen(!isDropdownOpen)}
+ background={color}
+ >
+ <IconDownload /> Download
+ </Button>
+ <Dropdown
+ isDropdownOpen={isDropdownOpen}
+ setIsDropdownOpen={setIsDropdownOpen}
+ >
+ <DropdownItem href={`${downloadLink}.tgz`} target="_blank">
+ Source
+ </DropdownItem>
+ <DropdownItem href={`${downloadLink}.tgz.asc`} target="_blank">
+ ASC
+ </DropdownItem>
+ <DropdownItem href={`${downloadLink}.tgz.sha512`} target="_blank">
+ SHA512
+ </DropdownItem>
+ </Dropdown>
+ </div>
+ </RightSide>
+ </Card>
+ );
+};
+
+const getGitHubRepoStats = (repo) => {
+ return fetch(`https://api.github.com/repos/${repo}`, {
+ headers: {
+ "content-type": "application/json",
+ Accept: "application / vnd.github.v3 + json",
+ },
+ }).then((response) => response.json());
+};
+
+// styles
+const Card = styled.div`
+ border-radius: 0.75rem;
+ border: 1px solid #eee;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.03);
+ padding: 2rem;
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 3rem;
+
+ @media (max-width: 600px) {
+ flex-direction: column;
+ padding: 1rem;
+ }
+`;
+const LeftSide = styled.div`
+ flex-shrink: 2;
+ padding-left: 0.6rem;
+`;
+const Title = styled.div`
+ font-size: 2.4rem;
+ font-weight: bold;
+ margin-top: -6px;
+ @media (max-width: 600px) {
+ margin-top: 0px;
+ font-size: 1.6rem;
+ }
+`;
+const Description = styled.div`
+ color: #374151;
+ font-size: 1.2rem;
+ margin-top: 0px;
+ @media (max-width: 600px) {
+ margin-top: 6px;
+ }
+`;
+const ShapeBeforeTitle = styled.span`
+ margin-right: 12px;
+ & svg {
+ height: 1.75rem;
+ color: ${(props) => props.color || "var(--ifm-color-primary)"};
+ }
+ @media (max-width: 600px) {
+ margin-right: 8px;
+ & svg {
+ height: 1.3rem;
+ }
+ }
+`;
+const LeftSideLinks = styled.div`
+ display: inline-flex;
+ font-size: 1rem;
+ color: #4b5563;
+ margin-top: 24px;
+ & svg {
+ height: 1rem;
+ margin-right: 4px;
+ }
+`;
+const LeftSideLink = styled.a`
+ display: flex;
+ align-items: center;
+ margin-right: 18px;
+ border-radius: 6px;
+ cursor: pointer;
+ transition: all 0.3s;
+ color: inherit;
+ &:hover {
+ color: #111827;
+ text-decoration: none;
+ }
+`;
+
+const RightSide = styled.div`
+ padding-left: 2rem;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ position: relative;
+ flex-shrink: 0;
+ @media (max-width: 600px) {
+ margin-top: 1rem;
+ padding-top: 1rem;
+ border-top: 1px solid #eee;
+ padding-left: 0;
+ }
+`;
+const Button = styled.button`
+ padding: 12px 18px;
+ font-size: 18px;
+ font-weight: 600;
+ border-radius: 0.5rem;
+ transition: all 0.3s;
+ background: ${(props) => props.background || "var(--ifm-color-primary)"};
+ color: white;
+ border: none;
+ box-sizing: border-box;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ &:hover {
+ filter: brightness(105%);
+ }
+ svg {
+ height: 22px;
+ margin-right: 4px;
+ padding-bottom: 2px;
+ }
+`;
+const StyledDropdown = styled.div`
+ right: 0;
+ position: absolute;
+ margin-top: 0.25rem;
+ background: #fff;
+ border-radius: 0.5rem;
+ border: 1px solid #eee;
+ z-index: 100;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ visibility: ${(props) => (props.open ? "visitable" : "hidden")};
+`;
+const DropdownItem = styled.a`
+ margin: 0.4rem;
+ padding: 0.2rem 1rem 0.2rem 0.5rem;
+ border-radius: 5px;
+ cursor: pointer;
+ font-weight: 500;
+ display: block;
+ color: inherit;
+ &:hover {
+ color: inherit;
+ background: var(--color-secondary-bg);
+ text-decoration: none;
+ }
+`;
+const VersionInfo = styled.div`
+ color: #6b7280;
+ text-align: right;
+ font-size: 0.9rem;
+ span {
+ color: #374151;
+ font-weight: 500;
+ }
+ @media (max-width: 600px) {
+ margin-bottom: 1rem;
+ text-align: left;
+ }
+`;
+
+export default ProjectCard;
diff --git a/website/src/pages/downloads/index.js
b/website/src/pages/downloads/index.js
new file mode 100644
index 0000000..0998f3a
--- /dev/null
+++ b/website/src/pages/downloads/index.js
@@ -0,0 +1,100 @@
+import React from "react";
+import styled from "styled-components";
+import Layout from "@theme/Layout";
+import CodeBlock from "@theme/CodeBlock";
+import ProjectCard from "./ProjectCard";
+import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
+
+const DownloadsPage = styled.div`
+ max-width: var(--ifm-container-width);
+ margin: 0 auto;
+ padding: 2rem var(--ifm-spacing-horizontal);
+ width: 100%;
+`;
+const PageTitle = styled.h1`
+ text-align: center;
+ margin-top: 2rem;
+ margin-bottom: 3rem;
+ font-size: 3rem;
+`;
+const Description = styled.div`
+ margin-top: 6rem;
+
+ h2 {
+ margin-top: 4rem;
+ margin-bottom: 0.8rem;
+ }
+`;
+
+const StyledCodeBlock = styled(CodeBlock)`
+ margin-top: 1rem;
+`;
+
+export default (props) => {
+ const { siteConfig } = useDocusaurusContext();
+ if (!(siteConfig.customFields.downloads || []).length) {
+ return null;
+ }
+ const projects = siteConfig.customFields.downloads.map((project) => {
+ return <ProjectCard {...project} />;
+ });
+
+ return (
+ <Layout>
+ <DownloadsPage>
+ <PageTitle>Downloads</PageTitle>
+ {projects}
+ <Description>
+ <h2>History Versions</h2>
+ <div class="markdown">
+ Find all APISIX releases in the
+ <a href="https://archive.apache.org/dist/apisix/" target="_blank">
+ Archive repository
+ </a>
+ .
+ <br />
+ <a
+ href="https://archive.apache.org/dist/incubator/apisix/"
+ target="_blank"
+ >
+ Incubating Archive repository
+ </a>
+ hosts older releases when APISIX was an incubator project.
+ </div>
+ <h2>Verify the releases</h2>
+ <div class="markdown">
+ <a href="https://downloads.apache.org/apisix/KEYS" target="_blank">
+ Get PGP signatures KEYS
+ </a>
+ <br />
+ It is essential that you verify the integrity of the downloaded
+ files using the PGP or SHA signatures. The PGP signatures can be
+ verified using GPG or PGP. Please download the KEYS as well as the
+ asc signature files for relevant distribution. It is recommended to
+ get these files from the main distribution directory and not from
+ the mirrors.
+ <br />
+ <StyledCodeBlock>{`gpg -i KEYS
+
+# or
+pgpk -a KEYS
+
+# or
+pgp -ka KEYS`}</StyledCodeBlock>
+ <br />
+ To verify the binaries/sources you can download the relevant asc
+ files for it from main distribution directory and follow the below
+ guide.
+ <StyledCodeBlock>{`gpg --verify apache-apisix-********.asc
apache-apisix-********
+
+# or
+pgpv apache-apisix-********.asc
+
+# or
+pgp apache-apisix-********.asc`}</StyledCodeBlock>
+ </div>
+ </Description>
+ </DownloadsPage>
+ </Layout>
+ );
+};
diff --git a/website/src/pages/index.js b/website/src/pages/index.js
index 98574ad..b9f152e 100644
--- a/website/src/pages/index.js
+++ b/website/src/pages/index.js
@@ -6,6 +6,7 @@ import Layout from "@theme/Layout";
import GitHubLogo from "../assets/icons/github-logo.svg";
import { useState, useEffect } from "react";
import { CSSTransition } from "react-transition-group";
+import ChevronRight from "../assets/icons/chevron-right.svg";
const HomeSplash = () => {
const [featureWordIndex, setFeatureWordIndex] = useState(0);
@@ -120,15 +121,15 @@ const LearnHow = () => (
const Showcase = () => {
const { siteConfig } = useDocusaurusContext();
- if ((siteConfig.customFields.users || []).length === 0) {
+ if (!(siteConfig.customFields.showcases || []).length) {
return null;
}
- const showcase = siteConfig.customFields.users.map((user) => (
+ const showcases = siteConfig.customFields.showcases.map((user) => (
<a href={user.infoLink} key={user.infoLink} target="_blank">
<img className="user-logo" src={user.image} alt={user.caption} />
</a>
));
- const middleIndex = (showcase.length / 2).toFixed(0);
+ const middleIndex = (showcases.length / 2).toFixed(0);
return (
<div className="hero text--center showcase">
@@ -152,16 +153,16 @@ const Showcase = () => {
<div className="logo-row">
<span className="user-logos-container">
<section>
- <span>{showcase.slice(0, middleIndex)}</span>
- <span>{showcase.slice(0, middleIndex)}</span>
+ <span>{showcases.slice(0, middleIndex)}</span>
+ <span>{showcases.slice(0, middleIndex)}</span>
</section>
</span>
</div>
<div className="logo-row">
<span className="user-logos-container">
<section>
- <span>{showcase.slice(middleIndex, showcase.length)}</span>
- <span>{showcase.slice(middleIndex, showcase.length)}</span>
+ <span>{showcases.slice(middleIndex, showcases.length)}</span>
+ <span>{showcases.slice(middleIndex, showcases.length)}</span>
</section>
</span>
</div>
@@ -171,11 +172,51 @@ const Showcase = () => {
);
};
+const EventsSection = () => {
+ const { siteConfig } = useDocusaurusContext();
+ const events = (siteConfig.customFields.events || [])
+ .slice(0, 4)
+ .map((event) => {
+ const publishTime = event.fileName.slice(0, 10);
+ const splittedFileName = event.fileName.split("-");
+ const url = `/events/${splittedFileName
+ .slice(0, 3)
+ .join("/")}/${splittedFileName.slice(3).join("-")}`;
+ return (
+ <a className="event-item" key={event.title} href={url} target="_blank">
+ <div>
+ <div className="event-title">{event.title}</div>
+ <div className="event-publish-time">{publishTime}</div>
+ </div>
+ <div className="event-read-button">
+ Read <ChevronRight />
+ </div>
+ </a>
+ );
+ });
+ return (
+ <div className="hero text--center events-section">
+ <div className="container">
+ <div>
+ <h1 className="color-primary">Events</h1>
+ </div>
+ <div className="events-view-all-button">
+ <a href="/events" target="_blank">
+ <u>View All Events</u>
+ </a>
+ </div>
+ <div className="events-container">{events}</div>
+ </div>
+ </div>
+ );
+};
+
const Index = (props) => {
return (
<Layout>
<HomeSplash />
<LearnHow />
+ <EventsSection />
<Showcase />
</Layout>
);
diff --git a/website/src/pages/users.js b/website/src/pages/users.js
deleted file mode 100644
index 3f22463..0000000
--- a/website/src/pages/users.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const React = require("react");
-import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
-import Layout from "@theme/Layout";
-import Link from "@docusaurus/Link";
-
-function Users() {
- const { siteConfig } = useDocusaurusContext();
-
- if ((siteConfig.customFields.users || []).length === 0) {
- return null;
- }
-
- const showcase = siteConfig.customFields.users
- .filter((user) => user.pinned)
- .map((user) => (
- <a href={user.infoLink} key={user.infoLink}>
- <img
- className="logo"
- src={user.image}
- alt={user.caption}
- title={user.caption}
- />
- </a>
- ));
-
- return (
- <Layout>
- <div className="hero text--center">
- <div className="container">
- <div className="product-showcase-section">
- <h1>Who is Using This?</h1>
- </div>
- <p>This project is used by many folks</p>
- <div className="logos">{showcase}</div>
- {siteConfig.customFields.repoUrl && (
- <React.Fragment>
- <p>Are you using this project?</p>
- <Link
-
to="https://github.com/apache/apisix/blob/master/doc/powered-by.md"
- className="button button--primary button--outline "
- >
- ADD YOUR COMPANY
- </Link>
- </React.Fragment>
- )}
- </div>
- </div>
- </Layout>
- );
-}
-
-export default Users;
diff --git a/website/static/data/events.json b/website/static/data/events.json
new file mode 100644
index 0000000..4b46066
--- /dev/null
+++ b/website/static/data/events.json
@@ -0,0 +1,22 @@
+[
+ {
+ "title": "Release Apache APISIX Dashboard 2.4",
+ "fileName": "2021-02-12-release-apache-apisix-dashboard-2.4"
+ },
+ {
+ "title": "Release Apache APISIX Ingress Controller 0.3.0",
+ "fileName": "2021-02-11-release-apache-apisix-ingress-controller-0.3.0"
+ },
+ {
+ "title": "Release Apache APISIX 2.3",
+ "fileName": "2021-02-09-release-apache-apisix-2.3"
+ },
+ {
+ "title": "Release Apache APISIX Ingress Controller 0.2.0",
+ "fileName": "2021-01-19-release-apache-apisix-ingress-controller-0.2.0"
+ },
+ {
+ "title": "Release Apache APISIX Ingress Controller 0.1.0",
+ "fileName": "2020-12-23-release-apache-apisix-ingress-controller-0.1.0"
+ }
+]
diff --git a/website/static/data/showcases.json
b/website/static/data/showcases.json
new file mode 100644
index 0000000..9139f34
--- /dev/null
+++ b/website/static/data/showcases.json
@@ -0,0 +1,255 @@
+[
+ {
+ "caption": "360 奇虎",
+ "image": "https://static.apiseven.com/logo/360.png",
+ "infoLink": "https://www.360.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "大商天狗",
+ "image": "https://static.apiseven.com/logo/51tiangou.svg",
+ "infoLink": "http://51tiangou.com/",
+ "pinned": true
+ },
+ {
+ "caption": "妙笔 AI",
+ "image": "https://static.apiseven.com/logo/aimiaobi.png",
+ "infoLink": "http://aimiaobi.com/",
+ "pinned": true
+ },
+ {
+ "caption": "超链云商",
+ "image": "https://static.apiseven.com/logo/chaolian360.png",
+ "infoLink": "https://www.chaolian360.com/",
+ "pinned": true
+ },
+ {
+ "caption": "DaoCloud",
+ "image": "https://static.apiseven.com/logo/daocloud.png",
+ "infoLink": "https://www.daocloud.io/",
+ "pinned": true
+ },
+ {
+ "caption": "小电科技",
+ "image": "https://static.apiseven.com/logo/dian.png",
+ "infoLink": "http://dian.so/",
+ "pinned": true
+ },
+ {
+ "caption": "嘀嗒出行",
+ "image": "https://static.apiseven.com/logo/didachuxing.jpg",
+ "infoLink": "https://www.didachuxing.com/",
+ "pinned": true
+ },
+ {
+ "caption": "湖南新云网",
+ "image": "https://static.apiseven.com/logo/cunw.png",
+ "infoLink": "http://www.cunw.com.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "大搜车",
+ "image": "https://static.apiseven.com/logo/dasouche.png",
+ "infoLink": "https://www.dasouche.com/",
+ "pinned": true
+ },
+ {
+ "caption": "大淘客",
+ "image": "https://static.apiseven.com/logo/dataoke.png",
+ "infoLink": "https://www.dataoke.com/",
+ "pinned": true
+ },
+ {
+ "caption": "eFactory",
+ "image": "https://static.apiseven.com/logo/eFactory.webp",
+ "infoLink": "https://www.efactory-project.eu/",
+ "pinned": true
+ },
+ {
+ "caption": "理房通",
+ "image": "https://static.apiseven.com/logo/ehomepay.png",
+ "infoLink": "https://www.ehomepay.com.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "简单一点科技",
+ "image": "https://static.apiseven.com/logo/eZone.png",
+ "infoLink": "https://ezone.work/",
+ "pinned": true
+ },
+ {
+ "caption": "fansup",
+ "image": "https://static.apiseven.com/logo/fansup.png",
+ "infoLink": "https://fansup.mobi/",
+ "pinned": true
+ },
+ {
+ "caption": "海尔优家",
+ "image": "https://static.apiseven.com/logo/haier.webp",
+ "infoLink": "http://haieruplus.com/",
+ "pinned": true
+ },
+ {
+ "caption": "中移杭研",
+ "image": "https://static.apiseven.com/logo/hy10086.png",
+ "infoLink": "https://hy.10086.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "航天网信",
+ "image": "https://static.apiseven.com/logo/htzhiyun.png",
+ "infoLink": "https://www.htzhiyun.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "好洛维",
+ "image": "https://static.apiseven.com/logo/hellowin.jpg",
+ "infoLink": "http://www.hellowin.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "HelloTalk",
+ "image": "https://static.apiseven.com/logo/HelloTalk.png",
+ "infoLink": "https://www.hellotalk.com/",
+ "pinned": true
+ },
+ {
+ "caption": "华为",
+ "image": "https://static.apiseven.com/logo/huawei.png",
+ "infoLink": "http://huawei.com/",
+ "pinned": true
+ },
+ {
+ "caption": "虎牙",
+ "image": "https://static.apiseven.com/logo/huya.jpeg",
+ "infoLink": "https://www.huya.com/",
+ "pinned": true
+ },
+ {
+ "caption": "艾佳生活",
+ "image": "https://static.apiseven.com/logo/ihomefnt.gif",
+ "infoLink": "https://www.ihomefnt.com/",
+ "pinned": true
+ },
+ {
+ "caption": "简单心理",
+ "image": "https://static.apiseven.com/logo/jiandanxinli.png",
+ "infoLink": "https://www.jiandanxinli.com/",
+ "pinned": true
+ },
+ {
+ "caption": "同程金服",
+ "image": "https://static.apiseven.com/logo/jr_ly.png",
+ "infoLink": "https://jr.ly.com/",
+ "pinned": true
+ },
+ {
+ "caption": "贝壳找房",
+ "image": "https://static.apiseven.com/logo/ke.png",
+ "infoLink": "https://www.ke.com/",
+ "pinned": true
+ },
+ {
+ "caption": "魅族",
+ "image": "https://static.apiseven.com/logo/meizu.jpg",
+ "infoLink": "https://www.meizu.com/",
+ "pinned": true
+ },
+ {
+ "caption": "明源云客",
+ "image": "https://static.apiseven.com/logo/mingyuanyun.jpg",
+ "infoLink": "https://www.mingyuanyun.com/",
+ "pinned": true
+ },
+ {
+ "caption": "NASA",
+ "image": "https://static.apiseven.com/logo/nasa.png",
+ "infoLink": "https://www.jpl.nasa.gov/",
+ "pinned": true
+ },
+ {
+ "caption": "网易",
+ "image": "https://static.apiseven.com/logo/163.png",
+ "infoLink": "http://www.163.com/",
+ "pinned": true
+ },
+ {
+ "caption": "湖南国科云通",
+ "image": "https://static.apiseven.com/logo/sinog2c.png",
+ "infoLink": "http://sinog2c.com/",
+ "pinned": true
+ },
+ {
+ "caption": "炎黄新星",
+ "image": "https://static.apiseven.com/logo/sinovatech.gif",
+ "infoLink": "https://www.sinovatech.com/",
+ "pinned": true
+ },
+ {
+ "caption": "泰康云",
+ "image": "https://static.apiseven.com/logo/taikang.svg",
+ "infoLink": "http://taikang.com/",
+ "pinned": true
+ },
+ {
+ "caption": "糖豆网",
+ "image": "https://static.apiseven.com/logo/tangdou.png",
+ "infoLink": "http://www.tangdou.com/",
+ "pinned": true
+ },
+ {
+ "caption": "腾讯云",
+ "image": "https://static.apiseven.com/logo/TencentCloud.jpg",
+ "infoLink": "https://cloud.tencent.com/",
+ "pinned": true
+ },
+
+ {
+ "caption": "腾讯优图",
+ "image": "https://static.apiseven.com/logo/youtu.jpg",
+ "infoLink": "https://open.youtu.qq.com/",
+ "pinned": true
+ },
+ {
+ "caption": "万思",
+ "image": "https://static.apiseven.com/logo/teamones.png",
+ "infoLink": "https://www.teamones.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "中国航信",
+ "image": "https://static.apiseven.com/logo/TravelSky.png",
+ "infoLink": "http://travelsky.com/",
+ "pinned": true
+ },
+ {
+ "caption": "随行付",
+ "image": "https://static.apiseven.com/logo/vbill.png",
+ "infoLink": "https://vbill.cn/",
+ "pinned": true
+ },
+ {
+ "caption": "优信二手车",
+ "image": "https://static.apiseven.com/logo/xin.png",
+ "infoLink": "https://www.xin.com/",
+ "pinned": true
+ },
+ {
+ "caption": "雪球",
+ "image": "https://static.apiseven.com/logo/xueqiu.jpeg",
+ "infoLink": "https://xueqiu.com/",
+ "pinned": true
+ },
+ {
+ "caption": "租租车",
+ "image": "https://static.apiseven.com/logo/zuzuche.png",
+ "infoLink": "https://www.zuzuche.com/",
+ "pinned": true
+ },
+ {
+ "caption": "作业帮",
+ "image": "https://static.apiseven.com/logo/zybang.png",
+ "infoLink": "https://www.zybang.com/",
+ "pinned": true
+ }
+]
diff --git a/website/static/robots.txt b/website/static/robots.txt
new file mode 100644
index 0000000..6f27bb6
--- /dev/null
+++ b/website/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
\ No newline at end of file
diff --git a/website/yarn.lock b/website/yarn.lock
index 658ca58..8f24f5d 100644
--- a/website/yarn.lock
+++ b/website/yarn.lock
@@ -196,7 +196,7 @@
jsesc "^2.5.1"
source-map "^0.5.0"
-"@babel/helper-annotate-as-pure@^7.10.4",
"@babel/helper-annotate-as-pure@^7.12.13":
+"@babel/helper-annotate-as-pure@^7.0.0",
"@babel/helper-annotate-as-pure@^7.10.4",
"@babel/helper-annotate-as-pure@^7.12.13":
version "7.12.13"
resolved
"https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
integrity
sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==
@@ -277,7 +277,7 @@
dependencies:
"@babel/types" "^7.12.13"
-"@babel/helper-module-imports@^7.12.13":
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13":
version "7.12.13"
resolved
"https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"
integrity
sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==
@@ -1053,7 +1053,7 @@
"@babel/parser" "^7.12.13"
"@babel/types" "^7.12.13"
-"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.5",
"@babel/traverse@^7.12.9":
+"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.5",
"@babel/traverse@^7.12.9", "@babel/traverse@^7.4.5":
version "7.12.13"
resolved
"https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0"
integrity
sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==
@@ -1422,6 +1422,28 @@
lodash.kebabcase "^4.1.1"
resolve-pathname "^3.0.0"
+"@emotion/is-prop-valid@^0.8.8":
+ version "0.8.8"
+ resolved
"https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
+ integrity
sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
+ dependencies:
+ "@emotion/memoize" "0.7.4"
+
+"@emotion/[email protected]":
+ version "0.7.4"
+ resolved
"https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
+ integrity
sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
+
+"@emotion/stylis@^0.8.4":
+ version "0.8.5"
+ resolved
"https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity
sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@^0.7.4":
+ version "0.7.5"
+ resolved
"https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity
sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
"@endiliey/static-site-generator-webpack-plugin@^4.0.0":
version "4.0.0"
resolved
"https://registry.yarnpkg.com/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz#94bfe58fd83aeda355de797fcb5112adaca3a6b1"
@@ -2283,6 +2305,21 @@ [email protected]:
dependencies:
"@babel/helper-plugin-utils" "7.10.4"
+"babel-plugin-styled-components@>= 1", babel-plugin-styled-components@^1.12.0:
+ version "1.12.0"
+ resolved
"https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9"
+ integrity
sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-module-imports" "^7.0.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ lodash "^4.17.11"
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved
"https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
+
bail@^1.0.0:
version "1.0.5"
resolved
"https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
@@ -2698,7 +2735,7 @@ callsites@^3.0.0:
resolved
"https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity
sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-camel-case@^4.1.1:
+camel-case@^4.1.1, camel-case@^4.1.2:
version "4.1.2"
resolved
"https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity
sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
@@ -2721,6 +2758,11 @@ camelcase@^6.2.0:
resolved
"https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
integrity
sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+camelize@^1.0.0:
+ version "1.0.0"
+ resolved
"https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
+ integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=
+
caniuse-api@^3.0.0:
version "3.0.0"
resolved
"https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
@@ -2736,6 +2778,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981,
caniuse-lite@^1.0.30001035, can
resolved
"https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001183.tgz#7a57ba9d6584119bb5f2bc76d3cc47ba9356b3e2"
integrity
sha512-7JkwTEE1hlRKETbCFd8HDZeLiQIUcl8rC6JgNjvHCNaxOeNmQ9V4LvQXRUsKIV2CC73qKxljwVhToaA3kLRqTw==
+capital-case@^1.0.4:
+ version "1.0.4"
+ resolved
"https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
+ integrity
sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
ccount@^1.0.0, ccount@^1.0.3:
version "1.1.0"
resolved
"https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
@@ -2777,6 +2828,24 @@ chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+change-case@^4.1.2:
+ version "4.1.2"
+ resolved
"https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
+ integrity
sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==
+ dependencies:
+ camel-case "^4.1.2"
+ capital-case "^1.0.4"
+ constant-case "^3.0.4"
+ dot-case "^3.0.4"
+ header-case "^2.0.4"
+ no-case "^3.0.4"
+ param-case "^3.0.4"
+ pascal-case "^3.1.2"
+ path-case "^3.0.4"
+ sentence-case "^3.0.4"
+ snake-case "^3.0.4"
+ tslib "^2.0.3"
+
character-entities-legacy@^1.0.0:
version "1.1.4"
resolved
"https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
@@ -3126,6 +3195,15 @@ console-browserify@^1.1.0:
resolved
"https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity
sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+constant-case@^3.0.4:
+ version "3.0.4"
+ resolved
"https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1"
+ integrity
sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case "^2.0.2"
+
constants-browserify@^1.0.0:
version "1.0.0"
resolved
"https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
@@ -3344,6 +3422,11 @@ css-blank-pseudo@^0.1.4:
dependencies:
postcss "^7.0.5"
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved
"https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=
+
[email protected], css-color-names@^0.0.4:
version "0.0.4"
resolved
"https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
@@ -3416,6 +3499,15 @@ css-select@~1.2.0:
domutils "1.5.1"
nth-check "~1.0.1"
+css-to-react-native@^3.0.0:
+ version "3.0.0"
+ resolved
"https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
+ integrity
sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
[email protected]:
version "1.0.0-alpha.37"
resolved
"https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
@@ -4952,6 +5044,14 @@ he@^1.2.0:
resolved
"https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity
sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+header-case@^2.0.4:
+ version "2.0.4"
+ resolved
"https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
+ integrity
sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
+ dependencies:
+ capital-case "^1.0.4"
+ tslib "^2.0.3"
+
hex-color-regex@^1.1.0:
version "1.1.0"
resolved
"https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
@@ -4978,7 +5078,7 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^3.1.0:
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0:
version "3.3.2"
resolved
"https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity
sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -6965,7 +7065,7 @@ parallel-transform@^1.1.0:
inherits "^2.0.3"
readable-stream "^2.1.5"
-param-case@^3.0.3:
+param-case@^3.0.3, param-case@^3.0.4:
version "3.0.4"
resolved
"https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
integrity
sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
@@ -7059,6 +7159,14 @@ [email protected]:
resolved
"https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
integrity
sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+path-case@^3.0.4:
+ version "3.0.4"
+ resolved
"https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f"
+ integrity
sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
path-dirname@^1.0.0:
version "1.0.2"
resolved
"https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
@@ -8802,6 +8910,15 @@ [email protected]:
range-parser "~1.2.1"
statuses "~1.5.0"
+sentence-case@^3.0.4:
+ version "3.0.4"
+ resolved
"https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
+ integrity
sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
serialize-javascript@^4.0.0:
version "4.0.0"
resolved
"https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
@@ -8891,6 +9008,11 @@ sha.js@^2.4.0, sha.js@^2.4.8:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved
"https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity
sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
shebang-command@^1.2.0:
version "1.2.0"
resolved
"https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -8961,6 +9083,14 @@ slash@^3.0.0:
resolved
"https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity
sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+snake-case@^3.0.4:
+ version "3.0.4"
+ resolved
"https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+ integrity
sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
snapdragon-node@^2.0.1:
version "2.1.1"
resolved
"https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -9294,6 +9424,22 @@ [email protected], style-to-object@^0.3.0:
dependencies:
inline-style-parser "0.1.1"
+styled-components@^5, styled-components@^5.2.1:
+ version "5.2.1"
+ resolved
"https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.1.tgz#6ed7fad2dc233825f64c719ffbdedd84ad79101a"
+ integrity
sha512-sBdgLWrCFTKtmZm/9x7jkIabjFNVzCUeKfoQsM6R3saImkUnjx0QYdLwJHBjY9ifEcmjDamJDVfknWm1yxZPxQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/traverse" "^7.4.5"
+ "@emotion/is-prop-valid" "^0.8.8"
+ "@emotion/stylis" "^0.8.4"
+ "@emotion/unitless" "^0.7.4"
+ babel-plugin-styled-components ">= 1"
+ css-to-react-native "^3.0.0"
+ hoist-non-react-statics "^3.0.0"
+ shallowequal "^1.1.0"
+ supports-color "^5.5.0"
+
stylehacks@^4.0.0:
version "4.0.3"
resolved
"https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@@ -9308,7 +9454,7 @@ supports-color@^2.0.0:
resolved
"https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-supports-color@^5.3.0:
+supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
resolved
"https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity
sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -9814,6 +9960,20 @@ update-notifier@^4.1.0:
semver-diff "^3.1.1"
xdg-basedir "^4.0.0"
+upper-case-first@^2.0.2:
+ version "2.0.2"
+ resolved
"https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
+ integrity
sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
+ dependencies:
+ tslib "^2.0.3"
+
+upper-case@^2.0.2:
+ version "2.0.2"
+ resolved
"https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a"
+ integrity
sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==
+ dependencies:
+ tslib "^2.0.3"
+
uri-js@^4.2.2:
version "4.4.1"
resolved
"https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"