jingwora freddyaboulton HF staff commited on
Commit
16abb78
·
0 Parent(s):

Duplicate from gradio/theme-gallery

Browse files

Co-authored-by: Freddy Boulton <[email protected]>

Files changed (4) hide show
  1. .gitattributes +34 -0
  2. README.md +12 -0
  3. index.html +194 -0
  4. style.css +28 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Theme Gallery
3
+ emoji: 🌍
4
+ colorFrom: indigo
5
+ colorTo: indigo
6
+ sdk: static
7
+ pinned: false
8
+ license: mit
9
+ duplicated_from: gradio/theme-gallery
10
+ ---
11
+
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width" />
6
+
7
+ <title>Gradio theme gallery</title>
8
+ <meta name="description" content="Discover all gradio themes created by the community." />
9
+
10
+ <meta property="og:url" content="https://freddyaboulton-gradio-themes-gallery.hf.space/" />
11
+ <meta property="og:type" content="website" />
12
+ <meta property="og:title" content="Gradio - Theme Gallery" />
13
+ <meta property="og:description" content="Discover all gradio themes created by the community." />
14
+ <meta property="og:image" content="https://huggingface-projects-diffusers-gallery.hf.space/Fo6vR6JX0AEjbw1.jpeg" />
15
+
16
+ <meta name="twitter:card" content="player" />
17
+ <meta property="twitter:url" content="https://freddyaboulton-gradio-themes-gallery.hf.space/" />
18
+ <meta name="twitter:description" content="Discover all gradio themes created by the community." />
19
+
20
+ <meta name="twitter:site" content="@huggingface" />
21
+ <meta name="twitter:title" content="Gradio - Theme Gallery" />
22
+
23
+ <meta name="twitter:image" content="https://huggingface-projects-diffusers-gallery.hf.space/Fo6vR6JX0AEjbw1.jpeg" />
24
+ <meta name="twitter:player" content="https://freddyaboulton-gradio-themes-gallery.hf.space/index.html" />
25
+ <meta name="twitter:player:width" content="100%" />
26
+ <meta name="twitter:player:height" content="600" />
27
+
28
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
29
+ <script src="https://cdn.tailwindcss.com"></script>
30
+
31
+ <style>
32
+
33
+ iframe {
34
+ display: block;
35
+ border: none;
36
+ width: 100%;
37
+ height: 600px;
38
+ pointer-events: none;
39
+ }
40
+
41
+ .grid-container {
42
+ display: grid;
43
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
44
+ grid-gap: 10px;
45
+ margin-top: 3.5rem;
46
+ }
47
+
48
+ .grid-item {
49
+ position: relative;
50
+ overflow-y: hidden;
51
+ border-radius: 10px;
52
+ border: 1px solid rgb(55 65 81);
53
+ }
54
+ .grid-item:hover {
55
+ filter: brightness(75%);
56
+ }
57
+
58
+ .grid-item a {
59
+ position: absolute;
60
+ top: 0;
61
+ left: 0;
62
+ width: 100%;
63
+ height: 100%;
64
+ display: block;
65
+ z-index: 1;
66
+ }
67
+ </style>
68
+
69
+ <script type="module">
70
+ import Alpine from "https://cdn.skypack.dev/alpinejs";
71
+ import Intersect from "https://cdn.skypack.dev/@alpinejs/intersect";
72
+ Alpine.plugin(Intersect);
73
+
74
+ Alpine.data("themesData", () => ({
75
+ async init() {
76
+ const data = await this.getThemes(this.page, this.sort, this.useTestData);
77
+ this.themes = data.themes;
78
+ this.totalPages = data.totalPages;
79
+ },
80
+ themes: [],
81
+ filter: "all",
82
+ sort: "likes",
83
+ page: 1,
84
+ totalPages: -1,
85
+ mode: "light",
86
+ useTestData: false,
87
+ buttonClass(attr, filter) {
88
+ if (this[attr] === filter) {
89
+ return "text-orange-600 bg-gradient-to-br from-orange-300 to-orange-100 px-2 md:px-3 py-1 rounded-full";
90
+ }
91
+ return "text-gray-800 hover:to-orange-300/100 hover:text-orange-600 dark:hover:bg-white";
92
+ },
93
+ async switchData() {
94
+ this.page = 1;
95
+ this.useTestData = !this.useTestData;
96
+ const data = await this.getThemes(this.page, this.sort, this.useTestData);
97
+ this.themes = data.themes;
98
+ this.totalPages = data.totalPages;
99
+ },
100
+ async switchTheme() {
101
+ this.mode = this.mode === "light" ? "dark": "light";
102
+ console.log(this.mode);
103
+ },
104
+ async sortThemes(sort) {
105
+ this.sort = sort;
106
+ this.page = 1;
107
+ const data = await this.getThemes(this.page, this.sort, this.useTestData);
108
+ this.themes = data.themes;
109
+ this.totalPages = data.totalPages;
110
+ },
111
+ async getThemes(page, sort, useTestData) {
112
+ const filename = useTestData ? "test_data.json" : "subdomains.json"
113
+ const res = await fetch(
114
+ `https://huggingface.co/datasets/freddyaboulton/gradio-theme-subdomains/resolve/main/${filename}`
115
+ );
116
+ const data = await res.json();
117
+ if(sort === 'likes') {
118
+ data.sort((a, b) => (b.likes - a.likes));
119
+ }else {
120
+ data.sort((a, b) => (new Date(b.lastModified) - new Date(a.lastModified)));
121
+ }
122
+ const pageThemes = data.slice((page - 1) * 15, page * 15);
123
+
124
+ console.log(pageThemes);
125
+
126
+ return {
127
+ themes: pageThemes,
128
+ totalPages: Math.floor(data.length + 15 - 1, 15)
129
+ };
130
+ },
131
+ async nextPage() {
132
+ if (this.page < this.totalPages) {
133
+ this.page += 1;
134
+ const data = await this.getThemes(this.page, this.sort, this.useTestData);
135
+ this.themes = this.themes.concat(data.themes);
136
+ this.totalPages = data.totalPages;
137
+ }
138
+ },
139
+ }));
140
+ Alpine.start();
141
+ </script>
142
+ </head>
143
+
144
+ <body class="pb-10 pt-5 bg-white relative">
145
+ <section
146
+ x-data="themesData"
147
+ >
148
+ <section class="container px-6 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-14 mx-auto relative">
149
+ <div class="col-span-2 lg:col-span-1 flex flex-col gap-14 row-start">
150
+ <h1 class="text-lg font-semibold text-gray-800 whitespace-nowrap">Gradio Themes Gallery</h1>
151
+ </div>
152
+ <div class="col-span-2 md:col-span-3 flex items-center gap-14 flex flex-wrap lg-auto lg:ml-auto text-sm">
153
+ <div class="flex gap-2">
154
+ <span class="md:px-3 py-1 text-gray-800">sort by</span>
155
+ <button
156
+ :class="buttonClass('sort', 'likes')"
157
+ @click="sortThemes('likes')"
158
+ >
159
+ Most Likes
160
+ </button>
161
+ <button
162
+ :class="buttonClass('sort', 'recent')"
163
+ @click="sortThemes('recent')"
164
+ >
165
+ Recent
166
+ </button>
167
+ </div>
168
+ <div class="flex gap-0">
169
+ <!-- <input type="checkbox" @click="switchData()" class="rounded accent-orange-300">
170
+ <span class="md:px-3 py-1 text-gray-800 ml-0">Use Test Data</span> -->
171
+ <input type="checkbox" @click="switchTheme()" class="rounded accent-orange-300">
172
+ <span class="md:px-3 py-1 text-gray-800 ml-0">Show Dark Mode</span>
173
+ <!-- <button
174
+ :class="buttonClass('useTestData', false)"
175
+ class="px-2 md:px-3 py-1 rounded-full"
176
+ @click="switchData()"
177
+ >
178
+ Use Test Data
179
+ </button> -->
180
+ </div>
181
+ </div>
182
+ </section>
183
+ <div class="container px-6 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2 mx-auto my-8 relative">
184
+ <template x-for="theme in themes" :key="theme.id">
185
+ <div class="grid-item">
186
+ <iframe :src="`${theme.subdomain}?_=${new Date().getTime()}&__theme=${mode}`" :alt="theme.id" scrolling="no" frameborder="0"></iframe>
187
+ <a :href="`https://huggingface.co/spaces/${theme.id}`" target="_blank"></a>
188
+ </div>
189
+ </template>
190
+ </div>
191
+ <div class="h-12 relative" x-intersect="nextPage" data-iframe-height></div>
192
+ </section>
193
+ </body>
194
+ </html>
style.css ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ padding: 2rem;
3
+ font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
4
+ }
5
+
6
+ h1 {
7
+ font-size: 16px;
8
+ margin-top: 0;
9
+ }
10
+
11
+ p {
12
+ color: rgb(107, 114, 128);
13
+ font-size: 15px;
14
+ margin-bottom: 10px;
15
+ margin-top: 5px;
16
+ }
17
+
18
+ .card {
19
+ max-width: 620px;
20
+ margin: 0 auto;
21
+ padding: 16px;
22
+ border: 1px solid lightgray;
23
+ border-radius: 16px;
24
+ }
25
+
26
+ .card p:last-child {
27
+ margin-bottom: 0;
28
+ }