@tutorialkit-rb/astro 0.1.4

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -0
  3. package/dist/default/components/DownloadButton.tsx +44 -0
  4. package/dist/default/components/HeadTags.astro +3 -0
  5. package/dist/default/components/LoginButton.tsx +55 -0
  6. package/dist/default/components/Logo.astro +30 -0
  7. package/dist/default/components/MainContainer.astro +86 -0
  8. package/dist/default/components/MetaTags.astro +44 -0
  9. package/dist/default/components/MobileContentToggle.astro +44 -0
  10. package/dist/default/components/NavCard.astro +23 -0
  11. package/dist/default/components/NavWrapper.tsx +11 -0
  12. package/dist/default/components/OpenInStackblitzLink.tsx +37 -0
  13. package/dist/default/components/PageLoadingIndicator.astro +66 -0
  14. package/dist/default/components/ResizablePanel.astro +247 -0
  15. package/dist/default/components/ThemeSwitch.tsx +24 -0
  16. package/dist/default/components/TopBar.astro +20 -0
  17. package/dist/default/components/TopBarWrapper.astro +30 -0
  18. package/dist/default/components/TutorialContent.astro +48 -0
  19. package/dist/default/components/WorkspacePanelWrapper.tsx +25 -0
  20. package/dist/default/components/setup.ts +20 -0
  21. package/dist/default/components/webcontainer.ts +46 -0
  22. package/dist/default/env-default.d.ts +19 -0
  23. package/dist/default/layouts/Layout.astro +98 -0
  24. package/dist/default/pages/[...slug].astro +39 -0
  25. package/dist/default/pages/index.astro +25 -0
  26. package/dist/default/stores/auth-store.ts +6 -0
  27. package/dist/default/stores/theme-store.ts +32 -0
  28. package/dist/default/stores/view-store.ts +5 -0
  29. package/dist/default/styles/base.css +11 -0
  30. package/dist/default/styles/markdown.css +400 -0
  31. package/dist/default/styles/panel.css +7 -0
  32. package/dist/default/styles/variables.css +396 -0
  33. package/dist/default/utils/constants.ts +6 -0
  34. package/dist/default/utils/content/files-ref.ts +25 -0
  35. package/dist/default/utils/content/squash.ts +37 -0
  36. package/dist/default/utils/content.ts +446 -0
  37. package/dist/default/utils/logger.ts +56 -0
  38. package/dist/default/utils/logo.ts +17 -0
  39. package/dist/default/utils/nav.ts +65 -0
  40. package/dist/default/utils/publicAsset.ts +27 -0
  41. package/dist/default/utils/routes.ts +34 -0
  42. package/dist/default/utils/url.ts +22 -0
  43. package/dist/default/utils/workspace.ts +31 -0
  44. package/dist/index.d.ts +57 -0
  45. package/dist/index.js +972 -0
  46. package/dist/integrations.d.ts +10 -0
  47. package/dist/remark/callouts.d.ts +3 -0
  48. package/dist/remark/import-file.d.ts +7 -0
  49. package/dist/remark/index.d.ts +2 -0
  50. package/dist/types.d.ts +9 -0
  51. package/dist/utils.d.ts +2 -0
  52. package/dist/vite-plugins/core.d.ts +2 -0
  53. package/dist/vite-plugins/css.d.ts +4 -0
  54. package/dist/vite-plugins/override-components.d.ts +78 -0
  55. package/dist/vite-plugins/store.d.ts +2 -0
  56. package/dist/webcontainer-files/cache.d.ts +21 -0
  57. package/dist/webcontainer-files/cache.spec.d.ts +1 -0
  58. package/dist/webcontainer-files/constants.d.ts +4 -0
  59. package/dist/webcontainer-files/filesmap.d.ts +38 -0
  60. package/dist/webcontainer-files/filesmap.spec.d.ts +1 -0
  61. package/dist/webcontainer-files/index.d.ts +8 -0
  62. package/dist/webcontainer-files/utils.d.ts +6 -0
  63. package/package.json +80 -0
  64. package/types.d.ts +12 -0
@@ -0,0 +1,32 @@
1
+ import { atom } from 'nanostores';
2
+
3
+ export type Theme = 'dark' | 'light';
4
+
5
+ export const kTheme = 'tk_theme';
6
+
7
+ export function themeIsDark() {
8
+ return themeStore.get() === 'dark';
9
+ }
10
+
11
+ export const themeStore = atom<Theme>(initStore());
12
+
13
+ function initStore() {
14
+ if (!import.meta.env.SSR) {
15
+ const themeAttribute = document.querySelector('html')?.getAttribute('data-theme');
16
+
17
+ return (themeAttribute as Theme) ?? 'light';
18
+ }
19
+
20
+ return 'light';
21
+ }
22
+
23
+ export function toggleTheme() {
24
+ const currentTheme = themeStore.get();
25
+ const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
26
+
27
+ themeStore.set(newTheme);
28
+
29
+ localStorage.setItem(kTheme, newTheme);
30
+
31
+ document.querySelector('html')?.setAttribute('data-theme', newTheme);
32
+ }
@@ -0,0 +1,5 @@
1
+ import { atom } from 'nanostores';
2
+
3
+ export type View = 'content' | 'editor';
4
+
5
+ export const viewStore = atom<View>('content');
@@ -0,0 +1,11 @@
1
+ @import './variables.css';
2
+ @import './markdown.css';
3
+ @import './panel.css';
4
+
5
+ body {
6
+ font-family: 'Inter', sans-serif;
7
+ font-optical-sizing: auto;
8
+ font-weight: 400;
9
+ font-style: normal;
10
+ font-variation-settings: 'slnt' 0;
11
+ }
@@ -0,0 +1,400 @@
1
+ .markdown-content {
2
+ --code-background-color: var(--tk-background-secondary);
3
+ --code-border-color: var(--tk-border-secondary);
4
+ --code-font-family: 'Roboto Mono', monospace;
5
+ --code-font-size: 14px;
6
+ --code-margin: 0 2px;
7
+ --code-padding: 4px 6px;
8
+ --code-color: var(--tk-text-primary);
9
+ --code-border-radius: 4px;
10
+ --code-border-width: 1px;
11
+ --code-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.5);
12
+ --link-color: var(--tk-elements-link-primaryColor);
13
+ --link-color-hover: var(--tk-elements-link-primaryColorHover);
14
+ --blockquote-border-color: theme('colors.gray.500');
15
+ --blockquote-background: var(--code-background-color);
16
+ --content-font-size: 16px;
17
+ --content-line-height: 28px;
18
+ --heading-font-weight: 600;
19
+ --footnotes-border-color: var(--tk-border-primary);
20
+ --hr-border-width: 1px;
21
+ --hr-border-color: var(--tk-border-primary);
22
+ --table-border-width: 1px;
23
+ --table-border-color: var(--tk-border-primary);
24
+ --table-header-background: var(--tk-background-secondary);
25
+ --table-header-font-size: 1em;
26
+ --table-header-font-weight: 500;
27
+ }
28
+
29
+ /* Ignore top margin if it's the first element in the container */
30
+ .markdown-content :first-child {
31
+ margin-block-start: 0;
32
+ }
33
+
34
+ /* Headings */
35
+
36
+ .markdown-content :is(h1, h2, h3, h4, h5, h6) {
37
+ --at-apply: text-tk-elements-content-headingTextColor;
38
+ margin-block-start: 32px;
39
+ margin-block-end: 16px;
40
+ font-weight: var(--heading-font-weight);
41
+ letter-spacing: -0.25px;
42
+ line-height: 1.15;
43
+ }
44
+
45
+ .markdown-content :is(h1, h2, h3, h4, h5, h6) :is(a, code) {
46
+ font-weight: var(--heading-font-weight);
47
+ padding: 2px 6px;
48
+ }
49
+
50
+ .markdown-content hr + :is(h1, h2, h3, h4, h5, h6) {
51
+ margin-block-start: 0;
52
+ }
53
+
54
+ .markdown-content :is(h1, h2, h3, h4, h5, h6) + :is(h1, h2, h3, h4, h5, h6) {
55
+ margin-block-start: 8px;
56
+ }
57
+
58
+ .markdown-content h1,
59
+ .markdown-content h1 :is(code, a) {
60
+ font-size: 38px;
61
+ }
62
+
63
+ .markdown-content h2,
64
+ .markdown-content h2 :is(code, a) {
65
+ font-size: 32px;
66
+ }
67
+
68
+ .markdown-content h3,
69
+ .markdown-content h3 :is(code, a) {
70
+ font-size: 28px;
71
+ }
72
+
73
+ .markdown-content h4,
74
+ .markdown-content h4 :is(code, a) {
75
+ font-size: 24px;
76
+ }
77
+
78
+ .markdown-content h5,
79
+ .markdown-content h5 :is(code, a) {
80
+ font-size: 20px;
81
+ }
82
+
83
+ .markdown-content h6,
84
+ .markdown-content h6 :is(code, a) {
85
+ font-size: 16px;
86
+ }
87
+
88
+ .markdown-content :is(h1, h2, h3, h4, h5, h6) code {
89
+ margin: 0;
90
+ padding: 0 8px;
91
+ line-height: 1;
92
+ }
93
+
94
+ .markdown-content h1 code,
95
+ .markdown-content h2 code {
96
+ padding: 0 6px;
97
+ letter-spacing: -2px;
98
+ }
99
+
100
+ .markdown-content h3 code,
101
+ .markdown-content h4 code {
102
+ margin: 0 2px;
103
+ padding: 0 6px;
104
+ letter-spacing: -1px;
105
+ }
106
+
107
+ .markdown-content h5 code,
108
+ .markdown-content h6 code {
109
+ margin: 0 2px;
110
+ padding: 0 6px;
111
+ letter-spacing: -0.5px;
112
+ }
113
+
114
+ .markdown-content :is(h1, h2, h3) code a,
115
+ .markdown-content :is(h1, h2, h3) a:has(code) {
116
+ text-underline-offset: 4px;
117
+ text-decoration-thickness: 2px;
118
+ }
119
+
120
+ .markdown-content h4 code a,
121
+ .markdown-content h4 a:has(code) {
122
+ text-underline-offset: 3px;
123
+ }
124
+
125
+ /* Callouts */
126
+
127
+ :root[data-theme='light'] .markdown-content .callout {
128
+ --code-border-color: rgba(0, 0, 0, 0.05);
129
+ }
130
+
131
+ :root[data-theme='dark'] .markdown-content .callout {
132
+ --code-border-color: rgba(255, 255, 255, 0.1);
133
+ }
134
+
135
+ .markdown-content .callout {
136
+ --code-color: var(--tk-elements-markdown-callouts-titleTextColor);
137
+ }
138
+
139
+ .markdown-content .callout-tip {
140
+ --tk-elements-markdown-callouts-backgroundColor: var(--tk-elements-callouts-tip-backgroundColor);
141
+ --tk-elements-markdown-callouts-textColor: var(--tk-elements-callouts-tip-textColor);
142
+ --tk-elements-markdown-callouts-borderColor: var(--tk-elements-callouts-tip-borderColor);
143
+ --tk-elements-markdown-callouts-titleTextColor: var(--tk-elements-callouts-tip-titleTextColor);
144
+ --tk-elements-markdown-callouts-iconColor: var(--tk-elements-callouts-tip-iconColor);
145
+ --code-background-color: var(--tk-elements-callouts-tip-codeBackgroundColor);
146
+ --code-color: var(--tk-elements-callouts-tip-codeColor);
147
+ }
148
+
149
+ .markdown-content .callout-info {
150
+ --tk-elements-markdown-callouts-backgroundColor: var(--tk-elements-callouts-info-backgroundColor);
151
+ --tk-elements-markdown-callouts-textColor: var(--tk-elements-callouts-info-textColor);
152
+ --tk-elements-markdown-callouts-borderColor: var(--tk-elements-callouts-info-borderColor);
153
+ --tk-elements-markdown-callouts-titleTextColor: var(--tk-elements-callouts-info-titleTextColor);
154
+ --tk-elements-markdown-callouts-iconColor: var(--tk-elements-callouts-info-iconColor);
155
+ --code-background-color: var(--tk-elements-callouts-info-codeBackgroundColor);
156
+ --code-color: var(--tk-elements-callouts-info-codeColor);
157
+ }
158
+
159
+ .markdown-content .callout-warn {
160
+ --tk-elements-markdown-callouts-backgroundColor: var(--tk-elements-callouts-warning-backgroundColor);
161
+ --tk-elements-markdown-callouts-textColor: var(--tk-elements-callouts-warning-textColor);
162
+ --tk-elements-markdown-callouts-borderColor: var(--tk-elements-callouts-warning-borderColor);
163
+ --tk-elements-markdown-callouts-titleTextColor: var(--tk-elements-callouts-warning-titleTextColor);
164
+ --tk-elements-markdown-callouts-iconColor: var(--tk-elements-callouts-warning-iconColor);
165
+ --code-background-color: var(--tk-elements-callouts-warning-codeBackgroundColor);
166
+ --code-color: var(--tk-elements-callouts-warning-codeColor);
167
+ }
168
+
169
+ .markdown-content .callout-danger {
170
+ --tk-elements-markdown-callouts-backgroundColor: var(--tk-elements-callouts-danger-backgroundColor);
171
+ --tk-elements-markdown-callouts-textColor: var(--tk-elements-callouts-danger-textColor);
172
+ --tk-elements-markdown-callouts-borderColor: var(--tk-elements-callouts-danger-borderColor);
173
+ --tk-elements-markdown-callouts-titleTextColor: var(--tk-elements-callouts-danger-titleTextColor);
174
+ --tk-elements-markdown-callouts-iconColor: var(--tk-elements-callouts-danger-iconColor);
175
+ --code-background-color: var(--tk-elements-callouts-danger-codeBackgroundColor);
176
+ --code-color: var(--tk-elements-callouts-danger-codeColor);
177
+ }
178
+
179
+ .markdown-content .callout-success {
180
+ --tk-elements-markdown-callouts-backgroundColor: var(--tk-elements-callouts-success-backgroundColor);
181
+ --tk-elements-markdown-callouts-textColor: var(--tk-elements-callouts-success-textColor);
182
+ --tk-elements-markdown-callouts-borderColor: var(--tk-elements-callouts-success-borderColor);
183
+ --tk-elements-markdown-callouts-titleTextColor: var(--tk-elements-callouts-success-titleTextColor);
184
+ --tk-elements-markdown-callouts-iconColor: var(--tk-elements-callouts-success-iconColor);
185
+ --code-background-color: var(--tk-elements-callouts-success-codeBackgroundColor);
186
+ --code-color: var(--tk-elements-callouts-success-codeColor);
187
+ }
188
+
189
+ .markdown-content .callout a:has(> code):not(:hover) {
190
+ color: var(--code-color);
191
+ }
192
+
193
+ /* Code */
194
+
195
+ .markdown-content :is(div) + .expressive-code,
196
+ .markdown-content .expressive-code + :is(div) {
197
+ margin-block-start: 16px;
198
+ }
199
+
200
+ .markdown-content :is(code, pre, .expressive-code) + :is(p, ul, ol, .expressive-code) {
201
+ margin-block-start: 16px;
202
+ }
203
+
204
+ .markdown-content :is(p, code, pre, .expressive-code) + :is(code, pre, .expressive-code) {
205
+ margin-block-start: 16px;
206
+ }
207
+
208
+ .markdown-content :is(pre, code) {
209
+ font-family: var(--code-font-family);
210
+ margin: var(--code-margin);
211
+ padding: var(--code-padding);
212
+ color: var(--code-color);
213
+ font-weight: 400;
214
+ line-height: 1.2;
215
+ border-radius: var(--code-border-radius);
216
+ background-color: var(--code-background-color);
217
+ box-shadow: 0 0 0 var(--code-border-width) var(--code-border-color);
218
+ }
219
+
220
+ .markdown-content p code {
221
+ padding: 1px 6px;
222
+ font-size: var(--code-font-size);
223
+ }
224
+
225
+ .markdown-content pre {
226
+ align-self: stretch;
227
+ padding: 10px 14px;
228
+ padding-right: 32px;
229
+ line-height: 1.4;
230
+ font-size: var(--code-font-size);
231
+ white-space: pre-wrap;
232
+ }
233
+
234
+ /* Lists */
235
+
236
+ .markdown-content ul,
237
+ .markdown-content ol {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: 4px;
241
+ margin-left: 0;
242
+ padding-left: 20px;
243
+ }
244
+
245
+ .markdown-content li ol,
246
+ .markdown-content li ul {
247
+ margin-block-start: 6px;
248
+ margin-block-end: 2px;
249
+ }
250
+
251
+ .markdown-content :is(a, p) + :is(ul, ol) {
252
+ margin-block-start: 16px;
253
+ }
254
+
255
+ .markdown-content ul {
256
+ list-style-type: disc;
257
+ }
258
+
259
+ .markdown-content ol {
260
+ list-style-type: decimal;
261
+ }
262
+
263
+ .markdown-content ul ul {
264
+ list-style-type: circle;
265
+ padding-left: 28px;
266
+ }
267
+
268
+ .markdown-content ul ul ul {
269
+ list-style-type: square;
270
+ padding-left: 28px;
271
+ }
272
+
273
+ .markdown-content ol ol {
274
+ list-style-type: lower-alpha;
275
+ padding-left: 28px;
276
+ }
277
+
278
+ .markdown-content ol ol ol {
279
+ list-style-type: lower-roman;
280
+ padding-left: 28px;
281
+ }
282
+
283
+ .markdown-content :is(p, ul, ol) + .expressive-code {
284
+ margin-block-start: 16px;
285
+ }
286
+
287
+ /* Links */
288
+
289
+ .markdown-content a {
290
+ color: var(--link-color);
291
+ text-decoration: underline;
292
+ transition: 0.1s ease;
293
+ transition-property: color;
294
+ }
295
+
296
+ .markdown-content a code,
297
+ .markdown-content code a,
298
+ .markdown-content a:hover {
299
+ color: var(--link-color-hover);
300
+ }
301
+
302
+ /* Blockquotes */
303
+
304
+ .markdown-content blockquote {
305
+ border-left: 3px solid var(--blockquote-border-color);
306
+ margin: 0;
307
+ padding: 16px 20px;
308
+ background-color: var(--blockquote-background);
309
+ }
310
+
311
+ .markdown-content :is(blockquote, p, ul, ol, table) + :is(blockquote, p, ul, ol, table) {
312
+ margin-block-start: 20px;
313
+ }
314
+
315
+ /* Paragraphs */
316
+
317
+ .markdown-content p,
318
+ .markdown-content a,
319
+ .markdown-content li,
320
+ .markdown-content blockquote {
321
+ font-size: var(--content-font-size);
322
+ line-height: var(--content-line-height);
323
+ }
324
+
325
+ .markdown-content p + p {
326
+ margin-block-start: 14px;
327
+ }
328
+
329
+ .markdown-content a + p,
330
+ .markdown-content ul + p,
331
+ .markdown-content ol + p {
332
+ margin-block-start: 16px;
333
+ }
334
+
335
+ .markdown-content p strong {
336
+ font-weight: 600;
337
+ }
338
+
339
+ /* Table */
340
+
341
+ .markdown-content table {
342
+ display: block;
343
+ border-collapse: collapse;
344
+ overflow-x: auto;
345
+ }
346
+
347
+ .markdown-content thead tr th {
348
+ border: var(--table-border-width) solid var(--table-border-color);
349
+ background-color: var(--table-header-background);
350
+ font-size: var(--table-header-font-size);
351
+ font-weight: var(--table-header-font-weight);
352
+ padding: 8px 12px;
353
+ text-align: left;
354
+ }
355
+
356
+ .markdown-content thead tr th[align='center'] {
357
+ text-align: center;
358
+ }
359
+
360
+ .markdown-content thead tr th[align='right'] {
361
+ text-align: right;
362
+ }
363
+
364
+ .markdown-content tbody tr {
365
+ border-top: var(--table-border-width) solid var(--table-border-color);
366
+ }
367
+
368
+ .markdown-content tbody tr td {
369
+ border: var(--table-border-width) solid var(--table-border-color);
370
+ padding: 8px 12px;
371
+ font-size: 0.9em;
372
+ }
373
+
374
+ .markdown-content tbody tr td code {
375
+ padding: 2px 4px;
376
+ }
377
+
378
+ /* Misc */
379
+
380
+ .markdown-content hr {
381
+ width: 100%;
382
+ margin: 32px 0;
383
+ border: none;
384
+ border-bottom: var(--hr-border-width) solid var(--hr-border-color);
385
+ }
386
+
387
+ .markdown-content :is(ul, ol).contains-task-list {
388
+ list-style-type: none;
389
+ padding-left: 12px;
390
+ }
391
+
392
+ .markdown-content .footnotes {
393
+ border-top: 1px solid var(--footnotes-border-color);
394
+ padding-top: 24px;
395
+ margin-block-start: 56px;
396
+ }
397
+
398
+ .markdown-content sup a {
399
+ font-size: 12px;
400
+ }
@@ -0,0 +1,7 @@
1
+ .panel-button .panel-button-icon {
2
+ --at-apply: text-tk-elements-panel-headerButton-iconColor;
3
+ }
4
+
5
+ .panel-button:hover .panel-button-icon {
6
+ --at-apply: text-tk-elements-panel-headerButton-iconColorHover;
7
+ }