Merge branch 'master' into dawood/i18n

This commit is contained in:
Abubakar Abid 2022-02-14 21:58:29 -05:00
commit 0c3e2b7782
39 changed files with 2279 additions and 70 deletions

View File

@ -1,4 +1,4 @@
Metadata-Version: 2.1
Metadata-Version: 1.0
Name: gradio
Version: 2.8.0b5
Summary: Python library for easily interacting with trained machine learning models
@ -6,9 +6,6 @@ Home-page: https://github.com/gradio-app/gradio-UI
Author: Abubakar Abid, Ali Abid, Ali Abdalla, Dawood Khan, Ahsen Khaliq
Author-email: team@gradio.app
License: Apache License 2.0
Description: UNKNOWN
Keywords: machine learning,visualization,reproducibility
Platform: UNKNOWN
License-File: LICENSE
UNKNOWN

View File

@ -1,5 +1,5 @@
analytics-python
aiohttp
analytics-python
fastapi
ffmpy
markdown-it-py[linkify,plugins]
@ -9,7 +9,7 @@ pandas
paramiko
pillow
pycryptodome
python-multipart
pydub
python-multipart
requests
uvicorn

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" style="min-height: 100%; margin: 0; padding: 0">
<html lang="en" style="height: 100%; margin: 0; padding: 0">
<head>
<meta charset="utf-8" />
<meta
@ -45,10 +45,10 @@
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
<title>Gradio</title>
<script type="module" crossorigin src="/assets/index.1efa643a.js"></script>
<link rel="modulepreload" href="/assets/vendor.a0afec2a.js">
<script type="module" crossorigin src="/assets/index.8bfab7fc.js"></script>
<link rel="modulepreload" href="/assets/vendor.086ddd97.js">
<link rel="stylesheet" href="/assets/vendor.327fceeb.css">
<link rel="stylesheet" href="/assets/index.dee61218.css">
<link rel="stylesheet" href="/assets/index.b7106307.css">
</head>
<body style="height: 100%; margin: 0; padding: 0">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

2146
ui/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" style="min-height: 100%; margin: 0; padding: 0">
<html lang="en" style="height: 100%; margin: 0; padding: 0">
<head>
<meta charset="utf-8" />
<meta

View File

@ -90,7 +90,7 @@
@apply border-gray-300 dark:border-gray-600;
}
tbody tr:hover {
@apply bg-yellow-500 dark:bg-red-700 text-white;
@apply bg-amber-500 dark:bg-red-700 text-white;
}
}
}
@ -99,7 +99,7 @@
@apply shadow;
}
.example:hover {
@apply bg-yellow-500 text-white;
@apply bg-amber-500 text-white;
}
}
}

View File

@ -366,7 +366,7 @@
@apply text-gray-400 cursor-not-allowed;
}
.panel-button.submit {
@apply bg-yellow-500 hover:bg-yellow-400 dark:bg-red-700 dark:hover:bg-red-600 text-white;
@apply bg-amber-500 hover:bg-amber-400 dark:bg-red-700 dark:hover:bg-red-600 text-white;
}
.examples {
.examples-table-holder:not(.gallery) {
@ -377,7 +377,7 @@
@apply border-gray-300 dark:border-gray-600;
}
tbody tr:hover {
@apply bg-yellow-500 dark:bg-red-700 text-white;
@apply bg-amber-500 dark:bg-red-700 text-white;
}
}
}
@ -386,7 +386,7 @@
@apply shadow;
}
tbody td:hover {
@apply bg-yellow-500 text-white;
@apply bg-amber-500 text-white;
}
}
}

View File

@ -17,7 +17,7 @@
<input class="p-2 block" type="password" name="password" />
<input
type="submit"
class="block bg-yellow-500 hover:bg-yellow-400 dark:hover:bg-yellow-600 transition px-4 py-2 rounded text-white font-semibold cursor-pointer mt-4"
class="block bg-amber-500 hover:bg-amber-400 dark:hover:bg-amber-600 transition px-4 py-2 rounded text-white font-semibold cursor-pointer mt-4"
/>
</form>
</div>

View File

@ -50,10 +50,10 @@
@apply bg-gray-100 dark:bg-gray-400 transition;
}
.checkbox-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white;
@apply bg-amber-500 dark:bg-red-600 text-white;
}
.selected .checkbox {
@apply bg-yellow-600 dark:bg-red-700;
@apply bg-amber-600 dark:bg-red-700;
}
}
</style>

View File

@ -52,7 +52,7 @@
@apply bg-white dark:bg-gray-800 shadow transition hover:shadow-md;
}
.checkbox-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white;
@apply bg-amber-500 dark:bg-red-600 text-white;
}
}
</style>

View File

@ -61,10 +61,10 @@
@apply bg-gray-100 dark:bg-gray-400 transition;
}
.checkbox-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white;
@apply bg-amber-500 dark:bg-red-600 text-white;
}
.selected .checkbox {
@apply bg-yellow-600 dark:bg-red-700;
@apply bg-amber-600 dark:bg-red-700;
}
}
</style>

View File

@ -60,10 +60,10 @@
@apply bg-gray-100 dark:bg-gray-400 transition;
}
.checkbox-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white;
@apply bg-amber-500 dark:bg-red-600 text-white;
}
.selected .checkbox {
@apply bg-yellow-600 dark:bg-red-700;
@apply bg-amber-600 dark:bg-red-700;
}
}
</style>

View File

@ -368,7 +368,7 @@
>
<button
on:click={add_row}
class="bg-yellow-500 hover:bg-yellow-400 dark:bg-red-700 dark:hover:bg-red-600 text-white shadow py-1 px-3 rounded transition focus:outline-none m-2 mr-0"
class="bg-amber-500 hover:bg-amber-400 dark:bg-red-700 dark:hover:bg-red-600 text-white shadow py-1 px-3 rounded transition focus:outline-none m-2 mr-0"
>New Row</button
>
</div>

View File

@ -41,7 +41,7 @@
@apply shadow;
}
.dropdown-item {
@apply bg-white dark:bg-gray-800 hover:bg-yellow-500 dark:hover:bg-red-600 hover:text-gray-50 hover:font-semibold;
@apply bg-white dark:bg-gray-800 hover:bg-amber-500 dark:hover:bg-red-600 hover:text-gray-50 hover:font-semibold;
}
}
</style>

View File

@ -38,9 +38,9 @@
<div class="input-image">
<div
class="image-preview w-full h-80 flex justify-center items-center dark:bg-gray-600 relative"
class="image-preview w-full h-60 flex justify-center items-center dark:bg-gray-600 relative"
class:bg-gray-200={value}
class:h-80={source !== "webcam"}
class:h-60={source !== "webcam"}
>
{#if source === "canvas"}
<ModifySketch

View File

@ -31,7 +31,7 @@
@apply w-4 h-4 rounded-full box-border;
}
.radio-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white shadow;
@apply bg-amber-500 dark:bg-red-600 text-white shadow;
}
}
</style>

View File

@ -27,13 +27,13 @@
@apply bg-gray-50 dark:bg-gray-400 border-4 border-gray-200 dark:border-gray-600;
}
.radio-item.selected {
@apply bg-yellow-500 dark:bg-red-600 text-white shadow;
@apply bg-amber-500 dark:bg-red-600 text-white shadow;
}
.radio-circle {
@apply w-4 h-4 bg-white transition rounded-full box-border;
}
.selected .radio-circle {
@apply border-yellow-600 dark:border-red-700;
@apply border-amber-600 dark:border-red-700;
}
}
</style>

View File

@ -44,10 +44,10 @@
@apply bg-white dark:bg-gray-800 shadow h-3 transition hover:shadow-md;
}
.range::-webkit-slider-thumb {
@apply bg-gradient-to-b from-yellow-400 to-yellow-500 dark:from-red-500 dark:to-red-600 shadow;
@apply bg-gradient-to-b from-amber-400 to-amber-500 dark:from-red-500 dark:to-red-600 shadow;
}
.range::-moz-range-thumb {
@apply bg-gradient-to-b from-yellow-400 to-yellow-500 shadow;
@apply bg-gradient-to-b from-amber-400 to-amber-500 shadow;
}
.value {
@apply bg-gray-100 dark:bg-gray-600 font-semibold;

View File

@ -38,10 +38,10 @@
@apply bg-white dark:bg-gray-800 shadow h-3 transition hover:shadow-md;
}
.range::-webkit-slider-thumb {
@apply bg-gradient-to-b from-yellow-400 to-yellow-500 dark:from-red-500 dark:to-red-600 shadow;
@apply bg-gradient-to-b from-amber-400 to-amber-500 dark:from-red-500 dark:to-red-600 shadow;
}
.range::-moz-range-thumb {
@apply bg-gradient-to-b from-yellow-400 to-yellow-500 shadow;
@apply bg-gradient-to-b from-amber-400 to-amber-500 shadow;
}
.value {
@apply bg-gray-100 dark:bg-gray-600 font-semibold;

View File

@ -1,4 +1,4 @@
import Component from "./Silder.svelte";
import Component from "./Slider.svelte";
import ExampleComponent from "./Example.svelte";
import Interpretation from "./Interpretation.svelte";

View File

@ -30,7 +30,7 @@
</script>
<div
class="video-preview w-full h-80 object-contain flex justify-center items-center dark:bg-gray-600 relative"
class="video-preview w-full h-60 object-contain flex justify-center items-center dark:bg-gray-600 relative"
class:bg-gray-200={value}
>
{#if value === null}

View File

@ -8,6 +8,9 @@
let mode: "categories" | "scores";
if (color_map === null) {
color_map = {};
}
if (value.length > 0) {
for (let [_, label] of value) {
if (label !== null) {

View File

@ -49,7 +49,7 @@
@apply font-mono box-border border-b-2 border-gray-300 bg-gray-200 dark:bg-gray-500 dark:border-gray-600 text-sm h-7 font-semibold rounded;
}
.confidence:first-child {
@apply border-yellow-600 bg-yellow-500 dark:bg-red-600 border-red-700 text-white;
@apply border-amber-600 bg-amber-500 dark:bg-red-600 border-red-700 text-white;
}
}
</style>

View File

@ -8,7 +8,7 @@
<div class="z-50 top-0 right-0 flex justify-end m-1 flex gap-1 absolute">
<button
class="bg-opacity-30 hover:bg-opacity-100 transition p-1.5 bg-yellow-500 dark:bg-red-600 rounded shadow w-8 h-8"
class="bg-opacity-30 hover:bg-opacity-100 transition p-1.5 bg-amber-500 dark:bg-red-600 rounded shadow w-8 h-8"
on:click={() => dispatch("undo")}
>
<img alt="undo sketch" src="{static_src}/static/img/undo-solid.svg" />

View File

@ -39,7 +39,7 @@
.modify-upload[theme="default"] {
@apply m-1 flex gap-1;
.edit {
@apply bg-yellow-500 dark:bg-red-600 rounded shadow;
@apply bg-amber-500 dark:bg-red-600 rounded shadow;
}
.clear {
@apply bg-gray-50 dark:bg-gray-500 rounded shadow;

View File

@ -1,5 +1,5 @@
.gradio-bg[theme="peach"] {
@apply bg-gradient-to-r from-red-50 to-yellow-100 dark:from-gray-900 dark:to-gray-800;
@apply bg-gradient-to-r from-red-50 to-amber-100 dark:from-gray-900 dark:to-gray-800;
}
.gradio-bg[theme="peach"] .gradio-interface {
.component-set {
@ -15,14 +15,14 @@
@apply rounded-lg bg-white dark:bg-gray-800 shadow;
}
.panel-button.submit {
@apply text-white bg-gradient-to-tr from-red-500 to-yellow-400;
@apply text-white bg-gradient-to-tr from-red-500 to-amber-400;
}
.examples {
.examples-holder:not(.gallery) {
.examples-table {
@apply bg-white dark:bg-gray-800;
tbody tr:hover {
@apply bg-yellow-500 dark:bg-red-800;
@apply bg-amber-500 dark:bg-red-800;
}
}
}
@ -31,7 +31,7 @@
@apply bg-white dark:bg-gray-800;
}
.example:hover {
@apply bg-yellow-500 dark:bg-red-800;
@apply bg-amber-500 dark:bg-red-800;
}
}
}
@ -48,10 +48,10 @@
@apply bg-gray-50 dark:bg-gray-700 rounded-lg;
}
.range::-webkit-slider-thumb {
@apply bg-gradient-to-tr from-red-500 to-yellow-400 rounded-lg shadow-sm;
@apply bg-gradient-to-tr from-red-500 to-amber-400 rounded-lg shadow-sm;
}
.range::-moz-range-thumb {
@apply bg-gradient-to-tr from-red-500 to-yellow-400 rounded-lg shadow-sm;
@apply bg-gradient-to-tr from-red-500 to-amber-400 rounded-lg shadow-sm;
}
.value {
@apply font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-50;
@ -62,7 +62,7 @@
@apply bg-gray-100 rounded-lg dark:bg-gray-700 dark:text-gray-50;
}
.radio-item.selected {
@apply bg-gradient-to-tr from-red-500 to-yellow-400 text-white shadow;
@apply bg-gradient-to-tr from-red-500 to-amber-400 text-white shadow;
}
.radio-circle {
@apply w-4 h-4 bg-white transition rounded-full box-border;
@ -75,7 +75,7 @@
@apply bg-gray-100 rounded-lg dark:bg-gray-700 dark:text-gray-50;
}
.checkbox-item.selected {
@apply bg-gradient-to-tr from-red-500 to-yellow-400 text-white shadow;
@apply bg-gradient-to-tr from-red-500 to-amber-400 text-white shadow;
}
.selected .checkbox {
@apply bg-gray-200 bg-opacity-20;
@ -102,7 +102,7 @@
@apply bg-gray-300 text-white dark:bg-gray-600 font-semibold rounded-lg;
}
.confidence:first-child {
@apply bg-gradient-to-tr from-red-500 to-yellow-400;
@apply bg-gradient-to-tr from-red-500 to-amber-400;
}
}
}

View File

@ -1,5 +1,5 @@
.gradio-bg[theme="seafoam"] {
@apply bg-yellow-100 dark:bg-gray-700;
@apply bg-amber-100 dark:bg-gray-700;
}
.gradio-bg[theme="seafoam"] .gradio-interface {
.component-set {

View File

@ -1,5 +1,5 @@
/node_modules
/dist
/generated
node_modules
dist
generated
client_secrets.json
google_credentials.json

View File

@ -1,16 +1,20 @@
FROM python:3.8
RUN apt-get update --fix-missing
RUN apt-get --assume-yes install npm nginx libcairo2-dev pkg-config python3-dev
RUN apt-get update
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g npm@latest
RUN apt-get --assume-yes install nginx libcairo2-dev pkg-config python3-dev
RUN pip install pandas matplotlib
RUN mkdir gradio
WORKDIR /gradio
COPY ./frontend ./frontend
COPY ./ui ./ui
RUN mkdir gradio
COPY ./gradio/version.txt ./gradio/version.txt
WORKDIR /gradio/frontend
RUN npm install
RUN npm run build
RUN npm i pnpm -g
WORKDIR /gradio/ui
RUN pnpm i
RUN pnpm build
WORKDIR /gradio
COPY ./gradio ./gradio
COPY ./setup.py ./setup.py
@ -25,6 +29,7 @@ COPY ./guides ./guides
COPY ./demo ./demo
WORKDIR /gradio/website/homepage
ARG COLAB_NOTEBOOK_LINKS
RUN mkdir -p generated dist
RUN echo $COLAB_NOTEBOOK_LINKS > generated/colab_links.json
RUN npm install
RUN npm run build
@ -36,3 +41,4 @@ RUN cp -r /gradio/website/homepage/dist/. ./
RUN cp /gradio/website/homepage/nginx.conf /etc/nginx/conf.d/default.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]

View File

@ -44,7 +44,7 @@ def render_index():
guides = []
for guide in sorted(os.listdir(GRADIO_GUIDES_DIR)):
if guide.lower() in ["getting_started.md", "readme.md"]:
if guide.lower() == "readme.md":
continue
guide_name = guide[:-3]
pretty_guide_name = " ".join(
@ -108,6 +108,7 @@ def render_guides():
code_tags = re.findall(r'\{\{ code\["([^\s]*)"\] \}\}', guide["content"])
demo_names = re.findall(r'\{\{ demos\["([^\s]*)"\] \}\}', guide["content"])
code, demos = {}, {}
guide["content"] = (
guide["content"]
.replace("website/src/assets", "/assets")
@ -144,14 +145,13 @@ def render_guides():
guide_output,
)
output_html = markdown2.markdown(guide_output, extras=["target-blank-links"])
for match in re.findall(r"<h3>([A-Za-z0-9 ]*)<\/h3>", output_html):
output_html = output_html.replace(
f"<h3>{match}</h3>",
f"<h3 id={match.lower().replace(' ', '_')}>{match}</h3>",
)
copy_button = "<button class='copy flex float-right cursor-pointer rounded-l-none rounded-r mx-0 my-2' " \
"onclick='copyCode(this)'><img class='copy-svg m0 w-7 flex-initial' " \
"src='/assets/img/copy-grey.svg'><div class='flex-auto'></div></button>"
guide_output = guide_output.replace("<pre>", "<div class='code-block' style='display: flex'><pre>")
guide_output = guide_output.replace("</pre>", f"</pre>{copy_button}</div>")
output_html = markdown2.markdown(guide_output, extras=["target-blank-links", "header-ids"])
os.makedirs("generated", exist_ok=True)
os.makedirs(os.path.join("generated", guide["name"]), exist_ok=True)
with open(

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="#808080" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M172.5 131.1C228.1 75.51 320.5 75.51 376.1 131.1C426.1 181.1 433.5 260.8 392.4 318.3L391.3 319.9C381 334.2 361 337.6 346.7 327.3C332.3 317 328.9 297 339.2 282.7L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2C300.3 145.8 249.2 145.8 217.7 177.2L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L172.5 131.1zM467.5 380C411 436.5 319.5 436.5 263 380C213 330 206.5 251.2 247.6 193.7L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7C307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8C339.7 366.2 390.8 366.2 422.3 334.8L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L467.5 380z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="fill: #808080;"><!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"/></svg>

After

Width:  |  Height:  |  Size: 591 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="fill: #eb9f59;"><!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"/></svg>

After

Width:  |  Height:  |  Size: 591 B

View File

@ -42,6 +42,8 @@
.prose .code,
.prose pre {
width: 95%;
border-radius: 4px 0 0 4px;
color: black;
background: rgb(249, 250, 251);
}
@ -53,6 +55,34 @@
.prose h1 {
font-weight: 600;
}
.anchor-img {
margin: 0 0 0 5px !important;
}
.anchor {
visibility: hidden;
}
.header:hover .anchor {
visibility: visible;
}
.copy {
padding-right: 1em;
background: #f9fafb;
}
.copy-svg {
visibility: hidden;
margin: 1em 0 0 0 !important;
width: 20px;
}
.code-block:hover .copy-svg {
visibility: visible;
}
</style>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-156449732-1"></script>
<script>
@ -133,7 +163,31 @@
});
});
});
function createAnchorTag(link) {
let a = document.createElement('a');
a.href = link;
a.classList.add("anchor");
let img = document.createElement('img');
img.classList.add("anchor-img", "w-7", "max-w-full", "inline-block", "mr-0", "ml-1")
img.src = "/assets/img/anchor.svg";
a.appendChild(img);
return a;
}
var headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6");
for (let i = 0; i < headers.length; i++) {
headers[i].classList.add("header");
let link = '#' + headers[i].id;
headers[i].appendChild(createAnchorTag(link))
}
function copyCode(elem) {
var text = elem.parentElement.innerText;
navigator.clipboard.writeText(text);
elem.firstChild.src = "/assets/img/copy-orange.svg"
setTimeout(function(){
elem.firstChild.src = "/assets/img/copy-grey.svg"
}, 600);
};
var spacesHolder, spaces;
spacesHolder = document.getElementById("spaces-holder");

View File

@ -17,7 +17,7 @@
<span>✍️</span>
<span>Docs</span>
</a>
<a class="link flex gap-3 items-center" href="/guides.html">
<a class="link flex gap-3 items-center" href="/guides">
<span>💡</span>
<span>Guides</span>
</a>
@ -33,7 +33,7 @@
<a class="link px-4 py-2 inline-block hover:bg-gray-100"
href="https://discuss.huggingface.co/c/gradio/26" target="_blank">Discuss</a>
<a class="link px-4 py-2 inline-block hover:bg-gray-100" target="_blank"
href="https://discord.gg/Vuujh8wt">Discord</a>
href="https://discord.gg/feTf9x3ZSB">Discord</a>
<a class="link px-4 py-2 inline-block hover:bg-gray-100" target="_blank"
href="https://gradio.curated.co/">Newsletter</a>
</div>