Skip to content

Commit 23dcacb

Browse files
committed
feat: upgrades zero module
1 parent 0818cba commit 23dcacb

File tree

93 files changed

+7829
-235
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+7829
-235
lines changed

.eslintrc.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module.exports = {
55
extends: [
66
'@nuxt/eslint-config',
77
'./.nuxt/.eslint.nuxt3-globals.json',
8-
'plugin:vue/essential'
8+
'plugin:vue/vue3-recommended'
99
],
1010
ignorePatterns: [
1111
'.nuxt/',
@@ -40,6 +40,7 @@ module.exports = {
4040
"max": 3
4141
}
4242
}],
43-
'vue/script-setup-uses-vars': 'error'
43+
'vue/script-setup-uses-vars': 'error',
44+
'vue/no-v-for-template-key': 'off'
4445
}
4546
}

data/components/footer.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

data/components/navigation.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

data/seo.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"_": {
3+
"title": "Singularity",
4+
"description": "Singularity facilitates onboarding of large quantaties of data (PB-scale) to the Filecoin network in an efficient, secure, and flexible way.",
5+
"siteName": "Singularity",
6+
"ogImage": "/images/singularity-open-graph.jpg"
7+
}
8+
}

modules/zero-components/button/index.js

-8
This file was deleted.

modules/zero-components/button/stores/button.js

-34
This file was deleted.

modules/zero-components/dropdown/index.js

-7
This file was deleted.

modules/zero-components/index.js

-82
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
<template>
2+
<div class="api-explorer">
3+
<div
4+
v-for="(slider, i) in props.sliders"
5+
:key="`slider-${i}`"
6+
class="api-slider">
7+
8+
<div class="slider-heading">
9+
<div v-if="slider.metadata" class="metadata">
10+
<span
11+
v-for="(value, key) in slider.metadata"
12+
:key="key"
13+
:class="['monospace', key]">
14+
{{ value }}
15+
</span>
16+
</div>
17+
</div>
18+
19+
<div class="slider">
20+
21+
<div class="slider-tabs">
22+
<div
23+
v-for="slide in slider.slides"
24+
:key="`tab-${slide.id}`"
25+
:class="['tab', { active: slide.id === activeSlides[slide.sliderId] }]"
26+
@click="setActiveSlide(slide)">
27+
{{ slide.tab }}
28+
</div>
29+
</div>
30+
31+
<div class="slide-content">
32+
<div
33+
v-for="slide in slider.slides"
34+
:key="`slide-${slide.id}`"
35+
:class="['code-wrapper', { active: slide.id === activeSlides[slide.sliderId] }]"
36+
:data-language="slide.language">
37+
<button
38+
class="copy-button"
39+
@click="copyText(slide.id, slide.highlighted)">
40+
{{ copiedCodeBlock === slide.id ? 'Copied!' : 'Copy' }}
41+
</button>
42+
<pre><code class="code-block" v-html="slide.highlighted"></code></pre>
43+
</div>
44+
</div>
45+
46+
</div>
47+
48+
</div>
49+
</div>
50+
</template>
51+
52+
<script setup>
53+
// ===================================================================== Imports
54+
import hljs from 'highlight.js/lib/core'
55+
import javascript from 'highlight.js/lib/languages/javascript'
56+
import json from 'highlight.js/lib/languages/json'
57+
import hljsCurl from 'highlightjs-curl'
58+
59+
// ======================================================================= Props
60+
const props = defineProps({
61+
sliders: {
62+
type: Array,
63+
required: true,
64+
default: () => []
65+
}
66+
})
67+
68+
// ======================================================================== Data
69+
const generalStore = useGeneralStore()
70+
const activeSlides = ref({})
71+
const copiedCodeBlock = ref(null)
72+
73+
// ===================================================================== Methods
74+
/**
75+
* @method setActiveSlide
76+
*/
77+
const setActiveSlide = (slide) => {
78+
activeSlides.value[slide.sliderId] = slide.id
79+
}
80+
81+
/**
82+
* @method copyText
83+
*/
84+
const copyText = (id, text) => {
85+
useAddTextToClipboard(text)
86+
generalStore.setClipboard(text)
87+
copiedCodeBlock.value = id
88+
}
89+
90+
// ======================================================================= Hooks
91+
hljs.registerLanguage('javascript', javascript)
92+
hljs.registerLanguage('json', json)
93+
hljs.registerLanguage('curl', hljsCurl)
94+
props.sliders.forEach(slider => {
95+
const sliderId = useUuid().v4()
96+
slider.slides.forEach(slide => {
97+
const content = typeof slide.content === 'object' ?
98+
JSON.stringify(slide.content, undefined, 2).trim() :
99+
slide.content.trim()
100+
slide.id = useUuid().v4()
101+
slide.sliderId = sliderId
102+
slide.highlighted = hljs.highlight(content, { language: slide.language }).value
103+
})
104+
setActiveSlide(slider.slides[0])
105+
})
106+
</script>
107+
108+
<style lang="scss" scoped>
109+
// ///////////////////////////////////////////////////////////////////// General
110+
.slider-heading {
111+
display: flex;
112+
padding: 0 toRem(18);
113+
margin-bottom: toRem(9);
114+
}
115+
116+
.metadata {
117+
display: flex;
118+
align-items: center;
119+
// font-family: $font_Mono;
120+
font-family: $fontSuisseIntlMono;
121+
}
122+
123+
.monospace {
124+
@include inlineCode;
125+
font-size: toRem(16);
126+
color: var(--theme-color);
127+
background-color: transparent;
128+
transition: color 500ms;
129+
&:not(:last-child) {
130+
margin-right: toRem(7);
131+
}
132+
}
133+
134+
.tag {
135+
font-size: toRem(14);
136+
font-weight: 500;
137+
color: var(--api-explorer__http-status-code__color);
138+
padding: toRem(3) toRem(7);
139+
padding-bottom: toRem(1);
140+
background-color: var(--api-explorer__http-status-code__background-color);
141+
border-radius: toRem(2);
142+
transition: background-color 500ms, color 500ms;
143+
}
144+
145+
.slider {
146+
border: solid 2px var(--divider);
147+
border-radius: toRem(5);
148+
margin-bottom: toRem(18);
149+
overflow: hidden;
150+
transition: border-color 500ms;
151+
}
152+
153+
.slider-tabs {
154+
display: flex;
155+
border-bottom: solid 2px var(--divider);
156+
background-color: var(--background-color__secondary);
157+
transition: background-color 500ms, color 500ms, border-color 500ms;
158+
}
159+
160+
.slide-content {
161+
padding: toRem(12) toRem(24);
162+
background-color: var(--background-color);
163+
transition: background-color 500ms, color 500ms;
164+
pre {
165+
display: flex;
166+
margin: 0;
167+
}
168+
}
169+
170+
.tab {
171+
@include h5;
172+
position: relative;
173+
padding: toRem(7) toRem(24);
174+
cursor: pointer;
175+
color: var(--theme-color);
176+
transition: color 500ms;
177+
&:after {
178+
content: '';
179+
position: absolute;
180+
top: calc(100% - 0.5px);
181+
left: toRem(24);
182+
width: calc(100% - #{toRem(48)});
183+
}
184+
&.active {
185+
&:after {
186+
border-bottom: solid 3px var(--link-color);
187+
transition: border-color 500ms;
188+
}
189+
}
190+
&:not(:last-child) {
191+
margin-right: toRem(5);
192+
}
193+
}
194+
195+
.code-block {
196+
@include blockCode;
197+
margin: 0;
198+
padding: 0;
199+
background-color: transparent;
200+
}
201+
202+
.copy-button {
203+
top: 0;
204+
right: 0;
205+
}
206+
207+
.code-wrapper {
208+
display: none;
209+
&.active {
210+
display: block;
211+
}
212+
}
213+
</style>

0 commit comments

Comments
 (0)