xs-dev 0.25.4 → 0.25.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/docs/astro.config.mjs +39 -8
- package/docs/public/favicon.ico +0 -0
- package/docs/public/favicon.svg +25 -0
- package/docs/src/assets/Chip.svg +25 -0
- package/docs/src/assets/Chip.webp +0 -0
- package/docs/src/assets/Logo.svg +113 -0
- package/docs/src/assets/Logo.webp +0 -0
- package/docs/src/assets/houston.webp +0 -0
- package/docs/src/components/YoutubeEmbed.astro +13 -0
- package/docs/src/content/config.ts +7 -0
- package/docs/src/{pages/en → content/docs}/features/doctor.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/include.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/init.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/run.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/scan.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/setup.md +1 -2
- package/docs/src/{pages/en → content/docs}/features/teardown.md +0 -1
- package/docs/src/{pages/en → content/docs}/features/update.md +0 -1
- package/docs/src/{pages/en → content/docs}/guide/00-prepare.md +1 -2
- package/docs/src/{pages/en → content/docs}/guide/01-hello-console.md +0 -1
- package/docs/src/{pages/en → content/docs}/guide/02-blinky.md +2 -1
- package/docs/src/content/docs/index.mdx +66 -0
- package/docs/src/env.d.ts +2 -1
- package/docs/tsconfig.json +1 -16
- package/package.json +7 -10
- package/docs/public/make-scrollable-code-focusable.js +0 -3
- package/docs/public/run-hello-world.png +0 -0
- package/docs/src/components/Footer/AvatarList.astro +0 -149
- package/docs/src/components/Footer/Footer.astro +0 -16
- package/docs/src/components/HeadCommon.astro +0 -38
- package/docs/src/components/HeadSEO.astro +0 -28
- package/docs/src/components/Header/Header.astro +0 -133
- package/docs/src/components/Header/LanguageSelect.css +0 -47
- package/docs/src/components/Header/LanguageSelect.tsx +0 -47
- package/docs/src/components/Header/Search.css +0 -39
- package/docs/src/components/Header/Search.tsx +0 -61
- package/docs/src/components/Header/SidebarToggle.tsx +0 -43
- package/docs/src/components/Header/SkipToContent.astro +0 -22
- package/docs/src/components/LeftSidebar/LeftSidebar.astro +0 -118
- package/docs/src/components/PageContent/PageContent.astro +0 -40
- package/docs/src/components/RightSidebar/MoreMenu.astro +0 -78
- package/docs/src/components/RightSidebar/RightSidebar.astro +0 -26
- package/docs/src/components/RightSidebar/TableOfContents.tsx +0 -52
- package/docs/src/components/RightSidebar/ThemeToggleButton.css +0 -37
- package/docs/src/components/RightSidebar/ThemeToggleButton.tsx +0 -75
- package/docs/src/config.ts +0 -48
- package/docs/src/languages.ts +0 -10
- package/docs/src/layouts/MainLayout.astro +0 -122
- package/docs/src/pages/en/introduction.md +0 -82
- package/docs/src/pages/index.astro +0 -5
- package/docs/src/pages/search-index.json.ts +0 -18
- package/docs/src/styles/index.css +0 -382
- package/docs/src/styles/theme.css +0 -125
- package/docs/tailwind.config.cjs +0 -7
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { getLanguageFromURL } from '../../languages.ts';
|
|
3
|
-
import { SIDEBAR } from '../../config.ts';
|
|
4
|
-
const { currentPage } = Astro.props;
|
|
5
|
-
const currentPageMatch = currentPage.slice(1);
|
|
6
|
-
const langCode = getLanguageFromURL(currentPage);
|
|
7
|
-
// SIDEBAR is a flat array. Group it by sections to properly render.
|
|
8
|
-
const sidebarSections = SIDEBAR[langCode].reduce((col, item, i) => {
|
|
9
|
-
// If the first item is not a section header, create a new container section.
|
|
10
|
-
if (i === 0) {
|
|
11
|
-
if (!item.header) {
|
|
12
|
-
const pesudoSection = { text: "" };
|
|
13
|
-
col.push({ ...pesudoSection, children: [] });
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
if (item.header) {
|
|
17
|
-
col.push({ ...item, children: [] });
|
|
18
|
-
} else {
|
|
19
|
-
col[col.length - 1].children.push(item);
|
|
20
|
-
}
|
|
21
|
-
return col;
|
|
22
|
-
}, []);
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
<nav aria-labelledby="grid-left">
|
|
26
|
-
<ul class="nav-groups">
|
|
27
|
-
{sidebarSections.map((section) => (
|
|
28
|
-
<li>
|
|
29
|
-
<div class="nav-group">
|
|
30
|
-
<h2 class="nav-group-title">{section.text}</h2>
|
|
31
|
-
<ul>
|
|
32
|
-
{section.children.map((child) => (
|
|
33
|
-
<li class="nav-link">
|
|
34
|
-
<a href={`${import.meta.env.BASE_URL}${child.link}`} aria-current={`${currentPageMatch === child.link ? 'page' : 'false'}`}>
|
|
35
|
-
{child.text}
|
|
36
|
-
</a>
|
|
37
|
-
</li>
|
|
38
|
-
))}
|
|
39
|
-
</ul>
|
|
40
|
-
</div>
|
|
41
|
-
</li>
|
|
42
|
-
))}
|
|
43
|
-
</ul>
|
|
44
|
-
</nav>
|
|
45
|
-
|
|
46
|
-
<script is:inline>
|
|
47
|
-
window.addEventListener('DOMContentLoaded', (event) => {
|
|
48
|
-
var target = document.querySelector('[aria-current="page"]');
|
|
49
|
-
if (target && target.offsetTop > window.innerHeight - 100) {
|
|
50
|
-
document.querySelector('.nav-groups').scrollTop = target.offsetTop;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
</script>
|
|
54
|
-
|
|
55
|
-
<style>
|
|
56
|
-
nav {
|
|
57
|
-
width: 100%;
|
|
58
|
-
margin-right: 1rem;
|
|
59
|
-
}
|
|
60
|
-
.nav-groups {
|
|
61
|
-
height: 100%;
|
|
62
|
-
padding: 2rem 0;
|
|
63
|
-
overflow-x: visible;
|
|
64
|
-
overflow-y: auto;
|
|
65
|
-
max-height: 100vh;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.nav-groups > li + li {
|
|
69
|
-
margin-top: 2rem;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.nav-groups > :first-child {
|
|
73
|
-
padding-top: var(--doc-padding);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.nav-groups > :last-child {
|
|
77
|
-
padding-bottom: 2rem;
|
|
78
|
-
margin-bottom: var(--theme-navbar-height);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.nav-group-title {
|
|
82
|
-
font-size: 1rem;
|
|
83
|
-
font-weight: 700;
|
|
84
|
-
padding: 0.1rem 1rem;
|
|
85
|
-
text-transform: uppercase;
|
|
86
|
-
margin-bottom: 0.5rem;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.nav-link a {
|
|
90
|
-
font-size: 1rem;
|
|
91
|
-
margin: 1px;
|
|
92
|
-
padding: 0.3rem 1rem;
|
|
93
|
-
font: inherit;
|
|
94
|
-
color: inherit;
|
|
95
|
-
text-decoration: none;
|
|
96
|
-
display: block;
|
|
97
|
-
}
|
|
98
|
-
.nav-link a:hover,
|
|
99
|
-
.nav-link a:focus {
|
|
100
|
-
background-color: var(--theme-bg-hover);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.nav-link a[aria-current='page'] {
|
|
104
|
-
color: var(--theme-text-accent);
|
|
105
|
-
background-color: var(--theme-bg-accent);
|
|
106
|
-
font-weight: 600;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
:global(:root.theme-dark) .nav-link a[aria-current='page'] {
|
|
110
|
-
color: hsla(var(--color-base-white), 100%, 1);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
@media (min-width: 50em) {
|
|
114
|
-
.nav-groups {
|
|
115
|
-
padding: 0;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
</style>
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import MoreMenu from '../RightSidebar/MoreMenu.astro'
|
|
3
|
-
import TableOfContents from '../RightSidebar/TableOfContents.tsx'
|
|
4
|
-
|
|
5
|
-
const { content, githubEditUrl } = Astro.props
|
|
6
|
-
const title = content.title
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
<article id="article" class="content">
|
|
10
|
-
<section class="main-section">
|
|
11
|
-
<h1 class="content-title" id="overview">{title}</h1>
|
|
12
|
-
<slot />
|
|
13
|
-
</section>
|
|
14
|
-
<nav class="block sm:hidden">
|
|
15
|
-
<MoreMenu editHref={githubEditUrl} />
|
|
16
|
-
</nav>
|
|
17
|
-
</article>
|
|
18
|
-
|
|
19
|
-
<style>
|
|
20
|
-
.content {
|
|
21
|
-
padding: 0;
|
|
22
|
-
max-width: 75ch;
|
|
23
|
-
width: 100%;
|
|
24
|
-
height: 100%;
|
|
25
|
-
display: flex;
|
|
26
|
-
flex-direction: column;
|
|
27
|
-
}
|
|
28
|
-
.content > section {
|
|
29
|
-
margin-bottom: 4rem;
|
|
30
|
-
}
|
|
31
|
-
.block {
|
|
32
|
-
display: block;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@media (min-width: 50em) {
|
|
36
|
-
.sm\:hidden {
|
|
37
|
-
display: none;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
</style>
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import ThemeToggleButton from './ThemeToggleButton.tsx'
|
|
3
|
-
import * as CONFIG from '../../config'
|
|
4
|
-
const { editHref } = Astro.props
|
|
5
|
-
const showMoreSection = CONFIG.COMMUNITY_INVITE_URL || editHref
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
{showMoreSection && <h2 class="heading">More</h2>}
|
|
9
|
-
<ul>
|
|
10
|
-
{
|
|
11
|
-
editHref && (
|
|
12
|
-
<li class={`header-link depth-2`}>
|
|
13
|
-
<a
|
|
14
|
-
class="edit-on-github"
|
|
15
|
-
href={editHref.replace(/pages\/xs\-dev/, 'pages')}
|
|
16
|
-
target="_blank"
|
|
17
|
-
>
|
|
18
|
-
<svg
|
|
19
|
-
aria-hidden="true"
|
|
20
|
-
focusable="false"
|
|
21
|
-
data-prefix="fas"
|
|
22
|
-
data-icon="pen"
|
|
23
|
-
class="svg-inline--fa fa-pen fa-w-16"
|
|
24
|
-
role="img"
|
|
25
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
26
|
-
viewBox="0 0 512 512"
|
|
27
|
-
height="1em"
|
|
28
|
-
width="1em"
|
|
29
|
-
>
|
|
30
|
-
<path
|
|
31
|
-
fill="currentColor"
|
|
32
|
-
d="M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"
|
|
33
|
-
/>
|
|
34
|
-
</svg>
|
|
35
|
-
<span>Edit this page</span>
|
|
36
|
-
</a>
|
|
37
|
-
</li>
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
{
|
|
41
|
-
CONFIG.COMMUNITY_INVITE_URL && (
|
|
42
|
-
<li class={`header-link depth-2`}>
|
|
43
|
-
<a href={CONFIG.COMMUNITY_INVITE_URL} target="_blank">
|
|
44
|
-
<svg
|
|
45
|
-
aria-hidden="true"
|
|
46
|
-
focusable="false"
|
|
47
|
-
data-prefix="fas"
|
|
48
|
-
data-icon="comment-alt"
|
|
49
|
-
class="svg-inline--fa fa-comment-alt fa-w-16"
|
|
50
|
-
role="img"
|
|
51
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
52
|
-
viewBox="0 0 512 512"
|
|
53
|
-
height="1em"
|
|
54
|
-
width="1em"
|
|
55
|
-
>
|
|
56
|
-
<path
|
|
57
|
-
fill="currentColor"
|
|
58
|
-
d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"
|
|
59
|
-
/>
|
|
60
|
-
</svg>
|
|
61
|
-
<span>Join our community</span>
|
|
62
|
-
</a>
|
|
63
|
-
</li>
|
|
64
|
-
)
|
|
65
|
-
}
|
|
66
|
-
</ul>
|
|
67
|
-
<div style="margin: 2rem 0; text-align: center;">
|
|
68
|
-
<ThemeToggleButton client:visible />
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
<style>
|
|
72
|
-
.edit-on-github {
|
|
73
|
-
text-decoration: none;
|
|
74
|
-
font: inherit;
|
|
75
|
-
color: inherit;
|
|
76
|
-
font-size: 1rem;
|
|
77
|
-
}
|
|
78
|
-
</style>
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import TableOfContents from './TableOfContents.tsx';
|
|
3
|
-
import MoreMenu from './MoreMenu.astro';
|
|
4
|
-
const { content, githubEditUrl, headings } = Astro.props;
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<nav class="sidebar-nav" aria-labelledby="grid-right">
|
|
8
|
-
<div class="sidebar-nav-inner">
|
|
9
|
-
<TableOfContents client:media="(min-width: 50em)" {headings} />
|
|
10
|
-
<MoreMenu editHref={githubEditUrl} />
|
|
11
|
-
</div>
|
|
12
|
-
</nav>
|
|
13
|
-
|
|
14
|
-
<style>
|
|
15
|
-
.sidebar-nav {
|
|
16
|
-
width: 100%;
|
|
17
|
-
position: sticky;
|
|
18
|
-
top: 0;
|
|
19
|
-
}
|
|
20
|
-
.sidebar-nav-inner {
|
|
21
|
-
height: 100%;
|
|
22
|
-
padding: 0;
|
|
23
|
-
padding-top: var(--doc-padding);
|
|
24
|
-
overflow: auto;
|
|
25
|
-
}
|
|
26
|
-
</style>
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { type Component, createSignal, onMount, onCleanup } from 'solid-js';
|
|
2
|
-
import type { MarkdownHeading } from 'astro'
|
|
3
|
-
|
|
4
|
-
const TableOfContents: Component<{ headings: MarkdownHeading[] }> = ({
|
|
5
|
-
headings = [],
|
|
6
|
-
}) => {
|
|
7
|
-
let itemOffsets = []
|
|
8
|
-
const [activeId] = createSignal<string>(undefined)
|
|
9
|
-
const getItemOffsets = () => {
|
|
10
|
-
const titles = document.querySelectorAll('article :is(h1, h2, h3, h4)')
|
|
11
|
-
itemOffsets = Array.from(titles).map((title) => ({
|
|
12
|
-
id: title.id,
|
|
13
|
-
topOffset: title.getBoundingClientRect().top + window.scrollY,
|
|
14
|
-
}))
|
|
15
|
-
}
|
|
16
|
-
onMount(() => {
|
|
17
|
-
getItemOffsets()
|
|
18
|
-
window.addEventListener('resize', getItemOffsets)
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
onCleanup(() => {
|
|
22
|
-
if (typeof window !== 'undefined' && 'removeEventListener' in window) {
|
|
23
|
-
window.removeEventListener('resize', getItemOffsets)
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<>
|
|
29
|
-
<h2 class="heading">On this page</h2>
|
|
30
|
-
<ul>
|
|
31
|
-
<li
|
|
32
|
-
class={`header-link depth-2 ${activeId() === 'overview' ? 'active' : ''
|
|
33
|
-
}`.trim()}
|
|
34
|
-
>
|
|
35
|
-
<a href="#overview">Overview</a>
|
|
36
|
-
</li>
|
|
37
|
-
{headings
|
|
38
|
-
.filter(({ depth }) => depth > 1 && depth < 4)
|
|
39
|
-
.map((header) => (
|
|
40
|
-
<li
|
|
41
|
-
class={`header-link depth-${header.depth} ${activeId() === header.slug ? 'active' : ''
|
|
42
|
-
}`.trim()}
|
|
43
|
-
>
|
|
44
|
-
<a href={`#${header.slug}`}>{header.text}</a>
|
|
45
|
-
</li>
|
|
46
|
-
))}
|
|
47
|
-
</ul>
|
|
48
|
-
</>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default TableOfContents
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
.theme-toggle {
|
|
2
|
-
display: inline-flex;
|
|
3
|
-
align-items: center;
|
|
4
|
-
gap: 0.25em;
|
|
5
|
-
padding: 0.33em 0.67em;
|
|
6
|
-
border-radius: 99em;
|
|
7
|
-
background-color: var(--theme-code-inline-bg);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.theme-toggle > label:focus-within {
|
|
11
|
-
outline: 2px solid transparent;
|
|
12
|
-
box-shadow: 0 0 0 0.08em var(--theme-accent), 0 0 0 0.12em white;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.theme-toggle > label {
|
|
16
|
-
color: var(--theme-code-inline-text);
|
|
17
|
-
position: relative;
|
|
18
|
-
display: flex;
|
|
19
|
-
align-items: center;
|
|
20
|
-
justify-content: center;
|
|
21
|
-
opacity: 0.5;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.theme-toggle .checked {
|
|
25
|
-
color: var(--theme-accent);
|
|
26
|
-
opacity: 1;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
input[name='theme-toggle'] {
|
|
30
|
-
position: absolute;
|
|
31
|
-
opacity: 0;
|
|
32
|
-
top: 0;
|
|
33
|
-
right: 0;
|
|
34
|
-
bottom: 0;
|
|
35
|
-
left: 0;
|
|
36
|
-
z-index: -1;
|
|
37
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { type Component, createSignal, createEffect } from 'solid-js';
|
|
2
|
-
import './ThemeToggleButton.css';
|
|
3
|
-
|
|
4
|
-
const themes = ['light', 'dark'] as const;
|
|
5
|
-
|
|
6
|
-
const icons = [
|
|
7
|
-
<svg
|
|
8
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
9
|
-
width="20"
|
|
10
|
-
height="20"
|
|
11
|
-
viewBox="0 0 20 20"
|
|
12
|
-
fill="currentColor"
|
|
13
|
-
>
|
|
14
|
-
<path
|
|
15
|
-
fill-rule="evenodd"
|
|
16
|
-
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
|
|
17
|
-
clip-rule="evenodd"
|
|
18
|
-
/>
|
|
19
|
-
</svg>,
|
|
20
|
-
<svg
|
|
21
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
22
|
-
width="20"
|
|
23
|
-
height="20"
|
|
24
|
-
viewBox="0 0 20 20"
|
|
25
|
-
fill="currentColor"
|
|
26
|
-
>
|
|
27
|
-
<path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z" />
|
|
28
|
-
</svg>,
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
const ThemeToggle: Component = () => {
|
|
32
|
-
let [theme, setTheme] = createSignal('light');
|
|
33
|
-
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
|
34
|
-
[theme, setTheme] = createSignal(localStorage.getItem('theme'))
|
|
35
|
-
} else if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
36
|
-
[theme, setTheme] = createSignal('dark')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
createEffect(() => {
|
|
40
|
-
const root = document.documentElement;
|
|
41
|
-
if (theme() === 'light') {
|
|
42
|
-
root.classList.remove('theme-dark');
|
|
43
|
-
} else {
|
|
44
|
-
root.classList.add('theme-dark');
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
return (
|
|
49
|
-
<div class="theme-toggle">
|
|
50
|
-
{themes.map((t, i) => {
|
|
51
|
-
const icon = icons[i];
|
|
52
|
-
const checked = t === theme();
|
|
53
|
-
return (
|
|
54
|
-
<label class={checked ? ' checked' : ''}>
|
|
55
|
-
{icon}
|
|
56
|
-
<input
|
|
57
|
-
type="radio"
|
|
58
|
-
name="theme-toggle"
|
|
59
|
-
checked={checked}
|
|
60
|
-
value={t}
|
|
61
|
-
title={`Use ${t} theme`}
|
|
62
|
-
aria-label={`Use ${t} theme`}
|
|
63
|
-
onChange={() => {
|
|
64
|
-
localStorage.setItem('theme', t);
|
|
65
|
-
setTheme(t);
|
|
66
|
-
}}
|
|
67
|
-
/>
|
|
68
|
-
</label>
|
|
69
|
-
);
|
|
70
|
-
})}
|
|
71
|
-
</div>
|
|
72
|
-
);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export default ThemeToggle;
|
package/docs/src/config.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export const SITE = {
|
|
2
|
-
title: 'xs-dev Documentation',
|
|
3
|
-
description: 'CLI for automating the setup and usage of Moddable XS tools',
|
|
4
|
-
defaultLanguage: 'en_US',
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export const OPEN_GRAPH = {
|
|
8
|
-
twitter: 'hipsterbrown',
|
|
9
|
-
github: 'hipsterbrown',
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const KNOWN_LANGUAGES = {
|
|
13
|
-
English: 'en',
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Uncomment this to add an "Edit this page" button to every page of documentation.
|
|
17
|
-
export const GITHUB_EDIT_URL = `https://github.com/hipsterbrown/xs-dev/blob/main/docs/`
|
|
18
|
-
|
|
19
|
-
// Uncomment this to add an "Join our Community" button to every page of documentation.
|
|
20
|
-
// export const COMMUNITY_INVITE_URL = `https://astro.build/chat`;
|
|
21
|
-
|
|
22
|
-
// Uncomment this to enable site search.
|
|
23
|
-
// See "Algolia" section of the README for more information.
|
|
24
|
-
// export const ALGOLIA = {
|
|
25
|
-
// indexName: 'XXXXXXXXXX',
|
|
26
|
-
// appId: 'XXXXXXXXXX',
|
|
27
|
-
// apiKey: 'XXXXXXXXXX',
|
|
28
|
-
// }
|
|
29
|
-
|
|
30
|
-
export const SIDEBAR = {
|
|
31
|
-
en: [
|
|
32
|
-
{ text: '', header: true },
|
|
33
|
-
{ text: 'Features', header: true },
|
|
34
|
-
{ text: 'Introduction', link: 'en/introduction' },
|
|
35
|
-
{ text: 'Setup', link: 'en/features/setup' },
|
|
36
|
-
{ text: 'Updates', link: 'en/features/update' },
|
|
37
|
-
{ text: 'Teardown', link: 'en/features/teardown' },
|
|
38
|
-
{ text: 'Env Info', link: 'en/features/doctor' },
|
|
39
|
-
{ text: 'Device Discovery', link: 'en/features/scan' },
|
|
40
|
-
{ text: 'Project Creation', link: 'en/features/init' },
|
|
41
|
-
{ text: 'Build & Run', link: 'en/features/run' },
|
|
42
|
-
{ text: 'SDK Module Management', link: 'en/features/include' },
|
|
43
|
-
{ text: 'Guide', header: true },
|
|
44
|
-
{ text: '00. Prepare', link: 'en/guide/00-prepare' },
|
|
45
|
-
{ text: '01. Hello Console', link: 'en/guide/01-hello-console' },
|
|
46
|
-
{ text: '02. Guiding Light', link: 'en/guide/02-blinky' },
|
|
47
|
-
],
|
|
48
|
-
}
|
package/docs/src/languages.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { KNOWN_LANGUAGES } from './config'
|
|
2
|
-
|
|
3
|
-
export { KNOWN_LANGUAGES }
|
|
4
|
-
export const KNOWN_LANGUAGE_CODES = Object.values(KNOWN_LANGUAGES)
|
|
5
|
-
export const langPathRegex = /\/([a-z]{2}-?[A-Z]{0,2})\//
|
|
6
|
-
|
|
7
|
-
export function getLanguageFromURL(pathname: string) {
|
|
8
|
-
const langCodeMatch = pathname.match(langPathRegex)
|
|
9
|
-
return langCodeMatch ? langCodeMatch[1] : 'en'
|
|
10
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import HeadCommon from '../components/HeadCommon.astro';
|
|
3
|
-
import HeadSEO from '../components/HeadSEO.astro';
|
|
4
|
-
import Header from '../components/Header/Header.astro';
|
|
5
|
-
import Footer from '../components/Footer/Footer.astro';
|
|
6
|
-
import PageContent from '../components/PageContent/PageContent.astro';
|
|
7
|
-
import LeftSidebar from '../components/LeftSidebar/LeftSidebar.astro';
|
|
8
|
-
import RightSidebar from '../components/RightSidebar/RightSidebar.astro';
|
|
9
|
-
import * as CONFIG from '../config';
|
|
10
|
-
|
|
11
|
-
const { content = {}, headings = [] } = Astro.props;
|
|
12
|
-
const currentPage = new URL(Astro.request.url).pathname;
|
|
13
|
-
const currentFile = `src/pages${currentPage.replace(/\/$/, '')}.md`;
|
|
14
|
-
const githubEditUrl = CONFIG.GITHUB_EDIT_URL && CONFIG.GITHUB_EDIT_URL + currentFile;
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
<html dir={content.dir ?? 'ltr'} lang={content.lang ?? 'en-us'} class="initial">
|
|
18
|
-
<head>
|
|
19
|
-
<HeadCommon />
|
|
20
|
-
<HeadSEO {content} />
|
|
21
|
-
<title>{content.title ? `${content.title} 🚀 ${CONFIG.SITE.title}` : CONFIG.SITE.title}</title>
|
|
22
|
-
<style>
|
|
23
|
-
body {
|
|
24
|
-
width: 100%;
|
|
25
|
-
display: grid;
|
|
26
|
-
grid-template-rows: var(--theme-navbar-height) 1fr;
|
|
27
|
-
--gutter: 0.5rem;
|
|
28
|
-
--doc-padding: 2rem;
|
|
29
|
-
}
|
|
30
|
-
.layout {
|
|
31
|
-
display: grid;
|
|
32
|
-
grid-auto-flow: column;
|
|
33
|
-
grid-template-columns:
|
|
34
|
-
minmax(var(--gutter), 1fr)
|
|
35
|
-
minmax(0, var(--max-width))
|
|
36
|
-
minmax(var(--gutter), 1fr);
|
|
37
|
-
overflow-x: hidden;
|
|
38
|
-
}
|
|
39
|
-
.layout :global(> *) {
|
|
40
|
-
width: 100%;
|
|
41
|
-
height: 100%;
|
|
42
|
-
}
|
|
43
|
-
.grid-sidebar {
|
|
44
|
-
height: 100vh;
|
|
45
|
-
position: sticky;
|
|
46
|
-
top: 0;
|
|
47
|
-
padding: 0;
|
|
48
|
-
}
|
|
49
|
-
#grid-left {
|
|
50
|
-
position: fixed;
|
|
51
|
-
background-color: var(--theme-bg);
|
|
52
|
-
z-index: 10;
|
|
53
|
-
display: none;
|
|
54
|
-
}
|
|
55
|
-
#grid-main {
|
|
56
|
-
padding: var(--doc-padding) var(--gutter);
|
|
57
|
-
grid-column: 2;
|
|
58
|
-
display: flex;
|
|
59
|
-
flex-direction: column;
|
|
60
|
-
height: 100%;
|
|
61
|
-
}
|
|
62
|
-
#grid-right {
|
|
63
|
-
display: none;
|
|
64
|
-
}
|
|
65
|
-
:global(.mobile-sidebar-toggle) {
|
|
66
|
-
overflow: hidden;
|
|
67
|
-
}
|
|
68
|
-
:global(.mobile-sidebar-toggle) #grid-left {
|
|
69
|
-
display: block;
|
|
70
|
-
top: 2rem;
|
|
71
|
-
}
|
|
72
|
-
@media (min-width: 50em) {
|
|
73
|
-
.layout {
|
|
74
|
-
overflow: initial;
|
|
75
|
-
grid-template-columns:
|
|
76
|
-
20rem
|
|
77
|
-
minmax(0, var(--max-width));
|
|
78
|
-
gap: 1em;
|
|
79
|
-
}
|
|
80
|
-
#grid-left {
|
|
81
|
-
display: flex;
|
|
82
|
-
padding-left: 2rem;
|
|
83
|
-
position: sticky;
|
|
84
|
-
grid-column: 1;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@media (min-width: 72em) {
|
|
89
|
-
.layout {
|
|
90
|
-
grid-template-columns:
|
|
91
|
-
20rem
|
|
92
|
-
minmax(0, var(--max-width))
|
|
93
|
-
18rem;
|
|
94
|
-
padding-left: 0;
|
|
95
|
-
padding-right: 0;
|
|
96
|
-
margin: 0 auto;
|
|
97
|
-
}
|
|
98
|
-
#grid-right {
|
|
99
|
-
grid-column: 3;
|
|
100
|
-
display: flex;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
</style>
|
|
104
|
-
</head>
|
|
105
|
-
|
|
106
|
-
<body>
|
|
107
|
-
<Header {currentPage} />
|
|
108
|
-
<main class="layout">
|
|
109
|
-
<aside id="grid-left" class="grid-sidebar" title="Site Navigation">
|
|
110
|
-
<LeftSidebar {currentPage} />
|
|
111
|
-
</aside>
|
|
112
|
-
<div id="grid-main">
|
|
113
|
-
<PageContent {content} {githubEditUrl}>
|
|
114
|
-
<slot />
|
|
115
|
-
</PageContent>
|
|
116
|
-
</div>
|
|
117
|
-
<aside id="grid-right" class="grid-sidebar" title="Table of Contents">
|
|
118
|
-
<RightSidebar {content} {headings} {githubEditUrl} />
|
|
119
|
-
</aside>
|
|
120
|
-
</main>
|
|
121
|
-
</body>
|
|
122
|
-
</html>
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
description: xs-dev intro
|
|
4
|
-
layout: ../../layouts/MainLayout.astro
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# **Welcome to xs-dev!**
|
|
8
|
-
|
|
9
|
-
CLI for automating the setup and usage of [Moddable XS tools](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md)
|
|
10
|
-
|
|
11
|
-
The Moddable SDK and associated dev board tooling is incredibly empowering for embedded JS hardware development, however the set up process can be tedious to follow when getting started. This project aims to streamline the installation and environment configuration requirements across platforms in just a few commands.
|
|
12
|
-
|
|
13
|
-
**This project is a work in progress and currently pre-1.0, so there may be breaking changes.**
|
|
14
|
-
|
|
15
|
-
**Features:**
|
|
16
|
-
|
|
17
|
-
- [X] [Moddable SDK setup](/en/features/setup)
|
|
18
|
-
- [X] [SDK updates](/en/features/update)
|
|
19
|
-
- [X] [Teardown](/en/features/teardown)
|
|
20
|
-
- [X] [Device discovery](/en/features/scan)
|
|
21
|
-
- [X] [Project creation](/en/features/init)
|
|
22
|
-
- [X] [Run a project or example](/en/features/run)
|
|
23
|
-
- [X] [SDK module management](/en/features/include)
|
|
24
|
-
- [X] [Get dev environment info](/en/features/doctor)
|
|
25
|
-
- [ ] Third-party dependency management ([coming soon](https://github.com/HipsterBrown/xs-dev/issues/49))
|
|
26
|
-
|
|
27
|
-
**Platform support:**
|
|
28
|
-
|
|
29
|
-
- [X] Mac
|
|
30
|
-
- [-] Windows (currently in beta)
|
|
31
|
-
- [X] Linux
|
|
32
|
-
|
|
33
|
-
**Check out the getting started video from the Moddable team**
|
|
34
|
-
|
|
35
|
-
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/1gxFWBnDl18" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
|
36
|
-
|
|
37
|
-
**Read through the starter guide for a detailed walkthrough**
|
|
38
|
-
|
|
39
|
-
0. [Prepare for embedded JS development](/en/guide/00-prepare)
|
|
40
|
-
1. [Hello Console](/en/guide/01-hello-console)
|
|
41
|
-
2. [Guiding light](/en/guide/02-blinky)
|
|
42
|
-
|
|
43
|
-
## Requirements
|
|
44
|
-
|
|
45
|
-
[Node.js >= v16](https://nodejs.org/en/)
|
|
46
|
-
|
|
47
|
-
_If you've never installed Node.js before, check out the [getting started guide for xs-dev](/xs-dev/en/guide/00-prepare#nodejs-package-manager-optional)._
|
|
48
|
-
|
|
49
|
-
**On Linux:**
|
|
50
|
-
|
|
51
|
-
Setup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/bionic/ssh-askpass) to prompt for permission when installing other tools and dependencies.
|
|
52
|
-
|
|
53
|
-
## Installation
|
|
54
|
-
|
|
55
|
-
Install the package globally from `npm`:
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
npm install -g xs-dev
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
pnpm install -g xs-dev
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
yarn global add xs-dev
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Update to latest release
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
npm update -g xs-dev
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
pnpm update -g xs-dev
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
yarn global upgrade xs-dev
|
|
81
|
-
```
|
|
82
|
-
|