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.
Files changed (55) hide show
  1. package/README.md +27 -1
  2. package/docs/astro.config.mjs +39 -8
  3. package/docs/public/favicon.ico +0 -0
  4. package/docs/public/favicon.svg +25 -0
  5. package/docs/src/assets/Chip.svg +25 -0
  6. package/docs/src/assets/Chip.webp +0 -0
  7. package/docs/src/assets/Logo.svg +113 -0
  8. package/docs/src/assets/Logo.webp +0 -0
  9. package/docs/src/assets/houston.webp +0 -0
  10. package/docs/src/components/YoutubeEmbed.astro +13 -0
  11. package/docs/src/content/config.ts +7 -0
  12. package/docs/src/{pages/en → content/docs}/features/doctor.md +0 -1
  13. package/docs/src/{pages/en → content/docs}/features/include.md +0 -1
  14. package/docs/src/{pages/en → content/docs}/features/init.md +0 -1
  15. package/docs/src/{pages/en → content/docs}/features/run.md +0 -1
  16. package/docs/src/{pages/en → content/docs}/features/scan.md +0 -1
  17. package/docs/src/{pages/en → content/docs}/features/setup.md +1 -2
  18. package/docs/src/{pages/en → content/docs}/features/teardown.md +0 -1
  19. package/docs/src/{pages/en → content/docs}/features/update.md +0 -1
  20. package/docs/src/{pages/en → content/docs}/guide/00-prepare.md +1 -2
  21. package/docs/src/{pages/en → content/docs}/guide/01-hello-console.md +0 -1
  22. package/docs/src/{pages/en → content/docs}/guide/02-blinky.md +2 -1
  23. package/docs/src/content/docs/index.mdx +66 -0
  24. package/docs/src/env.d.ts +2 -1
  25. package/docs/tsconfig.json +1 -16
  26. package/package.json +7 -10
  27. package/docs/public/make-scrollable-code-focusable.js +0 -3
  28. package/docs/public/run-hello-world.png +0 -0
  29. package/docs/src/components/Footer/AvatarList.astro +0 -149
  30. package/docs/src/components/Footer/Footer.astro +0 -16
  31. package/docs/src/components/HeadCommon.astro +0 -38
  32. package/docs/src/components/HeadSEO.astro +0 -28
  33. package/docs/src/components/Header/Header.astro +0 -133
  34. package/docs/src/components/Header/LanguageSelect.css +0 -47
  35. package/docs/src/components/Header/LanguageSelect.tsx +0 -47
  36. package/docs/src/components/Header/Search.css +0 -39
  37. package/docs/src/components/Header/Search.tsx +0 -61
  38. package/docs/src/components/Header/SidebarToggle.tsx +0 -43
  39. package/docs/src/components/Header/SkipToContent.astro +0 -22
  40. package/docs/src/components/LeftSidebar/LeftSidebar.astro +0 -118
  41. package/docs/src/components/PageContent/PageContent.astro +0 -40
  42. package/docs/src/components/RightSidebar/MoreMenu.astro +0 -78
  43. package/docs/src/components/RightSidebar/RightSidebar.astro +0 -26
  44. package/docs/src/components/RightSidebar/TableOfContents.tsx +0 -52
  45. package/docs/src/components/RightSidebar/ThemeToggleButton.css +0 -37
  46. package/docs/src/components/RightSidebar/ThemeToggleButton.tsx +0 -75
  47. package/docs/src/config.ts +0 -48
  48. package/docs/src/languages.ts +0 -10
  49. package/docs/src/layouts/MainLayout.astro +0 -122
  50. package/docs/src/pages/en/introduction.md +0 -82
  51. package/docs/src/pages/index.astro +0 -5
  52. package/docs/src/pages/search-index.json.ts +0 -18
  53. package/docs/src/styles/index.css +0 -382
  54. package/docs/src/styles/theme.css +0 -125
  55. 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;
@@ -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
- }
@@ -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
-