@abreen/tada 1.8.1 → 1.10.1
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 +24 -34
- package/bin/tada.ts +1 -1
- package/bin/validators.ts +1 -1
- package/build/apply-base-path-plugin.ts +79 -17
- package/build/bundle.ts +9 -1
- package/build/content-watch.ts +3 -3
- package/build/copy.ts +30 -0
- package/build/generate-content-assets.ts +45 -59
- package/build/pagefind.ts +0 -7
- package/build/serve.ts +4 -0
- package/build/templates.ts +0 -2
- package/build/types.d.ts +19 -1
- package/build/util.ts +3 -0
- package/build/utils/content-files.ts +98 -0
- package/build/utils/include.ts +4 -0
- package/build/utils/python-runner/trace_runner.py +272 -0
- package/build/utils/render.ts +47 -15
- package/build/utils/source-template.ts +27 -0
- package/build/utils/trace-core.ts +203 -0
- package/build/utils/trace-java.ts +132 -0
- package/build/utils/trace-layout.ts +31 -3
- package/build/utils/trace-python.ts +26 -0
- package/build/utils/trace.ts +174 -294
- package/build/validate-internal-links-plugin.ts +16 -4
- package/build/watch/assets.ts +111 -0
- package/build/watch/build-full.ts +124 -0
- package/build/watch/build-incremental.ts +139 -0
- package/build/watch/compiler-types.d.ts +19 -0
- package/build/watch/compiler.ts +112 -0
- package/build/watch/index.ts +22 -0
- package/build/watch/mutations.ts +75 -0
- package/build/watch/planner.ts +230 -0
- package/build/watch/records.ts +190 -0
- package/build/watch/runtime.ts +143 -0
- package/build/watch/snapshot.ts +602 -0
- package/build/watch/validation.ts +36 -0
- package/build/watch-reload-client.ts +10 -5
- package/init/content/labs/01/index.md +6 -0
- package/init/content/labs/01/trace_demo.py +16 -0
- package/init/content/lectures/01/Rectangle.java +2 -0
- package/init/content/lectures/01/index.md +6 -0
- package/init/content/lectures/01/rectangle.py +5 -0
- package/package.json +42 -23
- package/python/command.ts +95 -0
- package/python/module.ts +18 -0
- package/src/_alerts.scss +11 -8
- package/src/_base.scss +25 -29
- package/src/_layout.scss +17 -14
- package/src/_mixins.scss +10 -9
- package/src/anchor/style.scss +4 -2
- package/src/code/index.ts +9 -2
- package/src/code/style.scss +14 -13
- package/src/code.scss +14 -13
- package/src/header/_base.scss +21 -24
- package/src/header/style.scss +16 -12
- package/src/index.ts +3 -0
- package/src/literate/style.scss +4 -4
- package/src/navigate/index.ts +43 -279
- package/src/navigate/lifecycle.ts +1 -1
- package/src/navigate/runtime.ts +341 -0
- package/src/page-update/README.md +4 -0
- package/src/page-update/index.ts +280 -0
- package/src/page-update/style.scss +53 -0
- package/src/print/style.scss +4 -4
- package/src/question/style.scss +10 -6
- package/src/search/index.ts +9 -12
- package/src/search/style.scss +44 -42
- package/src/style.scss +63 -58
- package/src/timezone/style.scss +5 -5
- package/src/toc/style.scss +17 -16
- package/src/trace/style.scss +27 -27
- package/src/validators.ts +45 -0
- package/templates/_footer.html +1 -1
- package/templates/_theme.scss +8 -19
- package/watch/engine.ts +296 -0
- package/watch/events.ts +10 -0
- package/watch/fs-commit.ts +102 -0
- package/watch/types.d.ts +103 -0
- package/build/watch.ts +0 -493
package/src/code/index.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export default async function mount(
|
|
1
|
+
export default async function mount(
|
|
2
|
+
window: Window,
|
|
3
|
+
): Promise<void | (() => void)> {
|
|
2
4
|
const { document } = window;
|
|
3
5
|
if (!document.body.classList.contains('code')) {
|
|
4
6
|
return;
|
|
@@ -109,6 +111,11 @@ export default async function mount(window: Window): Promise<void> {
|
|
|
109
111
|
syncing = false;
|
|
110
112
|
});
|
|
111
113
|
|
|
112
|
-
new ResizeObserver(updateScrollbar)
|
|
114
|
+
const resizeObserver = new ResizeObserver(updateScrollbar);
|
|
115
|
+
resizeObserver.observe(codeBody);
|
|
113
116
|
updateScrollbar();
|
|
117
|
+
|
|
118
|
+
return () => {
|
|
119
|
+
resizeObserver.disconnect();
|
|
120
|
+
};
|
|
114
121
|
}
|
package/src/code/style.scss
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
body.code .file-header {
|
|
2
2
|
h1 {
|
|
3
|
-
margin: 0;
|
|
4
3
|
padding: 0;
|
|
4
|
+
margin: 0;
|
|
5
5
|
font-size: inherit;
|
|
6
6
|
font-weight: inherit;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
body.code .code-body {
|
|
11
|
-
background: var(--bg2-color);
|
|
12
|
-
border-radius: var(--border-radius);
|
|
13
|
-
clip-path: inset(0 round var(--border-radius));
|
|
14
11
|
display: grid;
|
|
15
12
|
grid-template-columns: minmax(100%, max-content);
|
|
16
13
|
overflow-x: auto;
|
|
17
14
|
overscroll-behavior-x: none;
|
|
18
15
|
scrollbar-width: none;
|
|
16
|
+
background: var(--bg2-color);
|
|
17
|
+
border-radius: var(--border-radius);
|
|
18
|
+
clip-path: inset(0 round var(--border-radius));
|
|
19
|
+
-webkit-text-size-adjust: 100%;
|
|
20
|
+
text-size-adjust: 100%;
|
|
21
|
+
|
|
19
22
|
&::-webkit-scrollbar {
|
|
20
23
|
display: none;
|
|
21
24
|
}
|
|
22
|
-
-webkit-text-size-adjust: 100%;
|
|
23
|
-
text-size-adjust: 100%;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
body.code .code-scrollbar {
|
|
27
28
|
position: sticky;
|
|
28
29
|
bottom: 0;
|
|
30
|
+
z-index: 10;
|
|
29
31
|
overflow-x: auto;
|
|
30
32
|
overscroll-behavior-x: none;
|
|
31
|
-
z-index: 10;
|
|
32
33
|
|
|
33
34
|
> div {
|
|
34
35
|
height: 1px;
|
|
@@ -68,25 +69,25 @@ body.code pre code {
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
body.code .code-prose {
|
|
71
|
-
background-color: var(--bg2-color);
|
|
72
72
|
display: grid;
|
|
73
73
|
grid-template-columns: var(--code-gutter-width) 1fr;
|
|
74
|
+
background-color: var(--bg2-color);
|
|
74
75
|
|
|
75
76
|
.code-prose-gutter {
|
|
76
77
|
position: sticky;
|
|
77
78
|
left: 0;
|
|
78
79
|
z-index: 1;
|
|
80
|
+
margin-right: var(--gap);
|
|
79
81
|
background: var(--bg2-color);
|
|
80
82
|
border-right: 1px solid var(--fg2-color);
|
|
81
|
-
margin-right: var(--gap);
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
.code-prose-content {
|
|
85
|
-
color: var(--fg2-color);
|
|
86
|
-
min-width: 0;
|
|
87
86
|
position: relative;
|
|
87
|
+
min-width: 0;
|
|
88
88
|
padding: var(--gap) var(--gap) var(--gap)
|
|
89
89
|
calc(var(--prose-indent, 0ch) - 0.2em);
|
|
90
|
+
color: var(--fg2-color);
|
|
90
91
|
|
|
91
92
|
*:first-of-type {
|
|
92
93
|
margin-top: 0;
|
|
@@ -107,8 +108,8 @@ body.code .code-prose {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
code {
|
|
110
|
-
background: inherit;
|
|
111
111
|
padding: inherit;
|
|
112
|
+
background: inherit;
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
}
|
|
@@ -118,7 +119,7 @@ body.code .code-search-index {
|
|
|
118
119
|
width: 1px;
|
|
119
120
|
height: 1px;
|
|
120
121
|
overflow: hidden;
|
|
122
|
+
white-space: nowrap;
|
|
121
123
|
clip: rect(0, 0, 0, 0);
|
|
122
124
|
clip-path: inset(50%);
|
|
123
|
-
white-space: nowrap;
|
|
124
125
|
}
|
package/src/code.scss
CHANGED
|
@@ -6,18 +6,18 @@ body.code {
|
|
|
6
6
|
|
|
7
7
|
.file-header {
|
|
8
8
|
display: flex;
|
|
9
|
+
gap: var(--gap);
|
|
9
10
|
align-items: center;
|
|
10
11
|
justify-content: center;
|
|
11
|
-
gap: var(--gap);
|
|
12
|
-
border: 1px solid var(--fg2-color);
|
|
13
|
-
border-radius: var(--border-radius);
|
|
14
12
|
padding: var(--gap);
|
|
15
13
|
margin-bottom: var(--gap);
|
|
14
|
+
border: 1px solid var(--fg2-color);
|
|
15
|
+
border-radius: var(--border-radius);
|
|
16
16
|
|
|
17
17
|
tt,
|
|
18
18
|
code {
|
|
19
|
-
background: none;
|
|
20
19
|
padding: 0;
|
|
20
|
+
background: none;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -27,19 +27,20 @@ body.code {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.line-number {
|
|
30
|
-
display: block;
|
|
31
|
-
padding: 0 0.75em 0 0.75em;
|
|
32
|
-
text-align: right;
|
|
33
|
-
@include user-select(none);
|
|
34
|
-
color: var(--fg2-color);
|
|
35
|
-
font-family: var(--mono-font);
|
|
36
|
-
text-decoration: none;
|
|
37
30
|
position: sticky;
|
|
38
31
|
left: 0;
|
|
39
32
|
z-index: 1;
|
|
33
|
+
display: block;
|
|
34
|
+
padding: 0 0.75em;
|
|
35
|
+
margin-right: var(--gap);
|
|
36
|
+
font-family: var(--mono-font);
|
|
37
|
+
color: var(--fg2-color);
|
|
38
|
+
text-align: right;
|
|
39
|
+
text-decoration: none;
|
|
40
40
|
background: var(--bg2-color);
|
|
41
41
|
border-right: 1px solid var(--fg2-color);
|
|
42
|
-
|
|
42
|
+
|
|
43
|
+
@include user-select(none);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
a.line-number {
|
|
@@ -50,7 +51,7 @@ a.line-number {
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
&:target {
|
|
53
|
-
background: var(--fg2-color);
|
|
54
54
|
color: var(--bg-color);
|
|
55
|
+
background: var(--fg2-color);
|
|
55
56
|
}
|
|
56
57
|
}
|
package/src/header/_base.scss
CHANGED
|
@@ -5,30 +5,26 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
header {
|
|
8
|
-
backdrop-filter: var(--backdrop-filter);
|
|
9
|
-
background: var(--bg-color-translucent);
|
|
10
|
-
|
|
11
|
-
width: 100%;
|
|
12
8
|
position: fixed;
|
|
13
9
|
top: 0;
|
|
14
|
-
|
|
15
10
|
z-index: 1000;
|
|
16
|
-
|
|
17
11
|
display: grid;
|
|
18
12
|
grid-template-columns: 1fr;
|
|
19
|
-
|
|
13
|
+
width: 100%;
|
|
14
|
+
background: var(--bg-color-translucent);
|
|
15
|
+
backdrop-filter: var(--backdrop-filter);
|
|
20
16
|
view-transition-name: site-header;
|
|
21
17
|
}
|
|
22
18
|
|
|
23
19
|
header details summary {
|
|
20
|
+
position: relative;
|
|
24
21
|
display: flex;
|
|
25
22
|
align-items: center;
|
|
26
23
|
height: var(--header-collapsed-height);
|
|
27
24
|
padding: 0 200px 0 0;
|
|
28
|
-
list-style-type: none;
|
|
29
|
-
cursor: pointer;
|
|
30
|
-
position: relative;
|
|
31
25
|
container-type: inline-size;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
list-style-type: none;
|
|
32
28
|
|
|
33
29
|
@media (hover: hover) {
|
|
34
30
|
&:hover {
|
|
@@ -62,9 +58,9 @@ header details summary::marker {
|
|
|
62
58
|
header summary::after {
|
|
63
59
|
order: -1;
|
|
64
60
|
height: 24px;
|
|
65
|
-
content: var(--icon-chevron);
|
|
66
|
-
margin-left: var(--gap);
|
|
67
61
|
margin-right: 8px;
|
|
62
|
+
margin-left: var(--gap);
|
|
63
|
+
content: var(--icon-chevron);
|
|
68
64
|
}
|
|
69
65
|
|
|
70
66
|
header details[open] summary::after {
|
|
@@ -77,24 +73,24 @@ header .content {
|
|
|
77
73
|
|
|
78
74
|
header summary .logo {
|
|
79
75
|
flex: 0 0 auto;
|
|
80
|
-
color: var(--text-on-theme);
|
|
81
|
-
background: var(--theme-color);
|
|
82
76
|
padding: 1px 6px;
|
|
83
77
|
margin: 0 8px 0 0;
|
|
84
78
|
font-size: var(--font-size-smaller);
|
|
85
79
|
font-weight: 600;
|
|
80
|
+
color: var(--text-on-theme);
|
|
86
81
|
pointer-events: none;
|
|
82
|
+
background: var(--theme-color);
|
|
87
83
|
}
|
|
88
84
|
|
|
89
85
|
header summary .site-title {
|
|
90
86
|
flex: 1 1 0;
|
|
87
|
+
min-width: 0;
|
|
88
|
+
margin: 0 8px 0 0;
|
|
91
89
|
overflow: hidden;
|
|
92
90
|
text-overflow: ellipsis;
|
|
93
|
-
white-space: nowrap;
|
|
94
|
-
min-width: 0;
|
|
95
91
|
font-weight: 500;
|
|
92
|
+
white-space: nowrap;
|
|
96
93
|
pointer-events: none;
|
|
97
|
-
margin: 0 8px 0 0;
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
@container (max-width: 200px) {
|
|
@@ -107,20 +103,20 @@ header > .header-controls {
|
|
|
107
103
|
position: absolute;
|
|
108
104
|
top: 0;
|
|
109
105
|
right: 0;
|
|
106
|
+
z-index: 1;
|
|
110
107
|
display: flex;
|
|
111
108
|
align-items: center;
|
|
112
109
|
height: var(--header-collapsed-height);
|
|
113
110
|
padding: 0 var(--gap) 0 0;
|
|
114
|
-
z-index: 1;
|
|
115
111
|
}
|
|
116
112
|
|
|
117
113
|
header .to-top-container {
|
|
118
114
|
display: none;
|
|
119
115
|
align-items: center;
|
|
120
116
|
height: var(--header-collapsed-height);
|
|
121
|
-
pointer-events: none;
|
|
122
|
-
white-space: nowrap;
|
|
123
117
|
padding: 0 var(--gap) 0 0;
|
|
118
|
+
white-space: nowrap;
|
|
119
|
+
pointer-events: none;
|
|
124
120
|
|
|
125
121
|
&:has(.is-visible) {
|
|
126
122
|
display: flex;
|
|
@@ -142,7 +138,7 @@ header .search-controls {
|
|
|
142
138
|
input.search {
|
|
143
139
|
width: 180px;
|
|
144
140
|
|
|
145
|
-
@media (
|
|
141
|
+
@media (width <= 400px) {
|
|
146
142
|
display: none;
|
|
147
143
|
}
|
|
148
144
|
}
|
|
@@ -153,25 +149,26 @@ header .search-controls {
|
|
|
153
149
|
15% {
|
|
154
150
|
background-position: 200% 0;
|
|
155
151
|
}
|
|
152
|
+
|
|
156
153
|
100% {
|
|
157
154
|
background-position: -200% 0;
|
|
158
155
|
}
|
|
159
156
|
}
|
|
160
157
|
|
|
161
158
|
header.loading::after {
|
|
162
|
-
content: '';
|
|
163
159
|
position: absolute;
|
|
160
|
+
right: 0;
|
|
164
161
|
bottom: 0;
|
|
165
162
|
left: 0;
|
|
166
|
-
right: 0;
|
|
167
163
|
height: 3px;
|
|
164
|
+
content: '';
|
|
168
165
|
background-image: linear-gradient(
|
|
169
166
|
90deg,
|
|
170
167
|
transparent 25%,
|
|
171
168
|
var(--theme-color) 50%,
|
|
172
169
|
transparent 75%
|
|
173
170
|
);
|
|
174
|
-
background-size: 200% 100%;
|
|
175
171
|
background-repeat: no-repeat;
|
|
172
|
+
background-size: 200% 100%;
|
|
176
173
|
animation: shimmer 3s ease-in-out infinite;
|
|
177
174
|
}
|
package/src/header/style.scss
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
header nav {
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-wrap: wrap;
|
|
7
|
+
|
|
7
8
|
@include user-select(none);
|
|
9
|
+
|
|
8
10
|
gap: var(--gap);
|
|
9
11
|
margin: var(--gap);
|
|
10
12
|
}
|
|
@@ -14,9 +16,9 @@ header nav div {
|
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
header nav ul {
|
|
17
|
-
list-style-type: none;
|
|
18
19
|
padding: 0;
|
|
19
|
-
margin: 8px 0 0
|
|
20
|
+
margin: 8px 0 0;
|
|
21
|
+
list-style-type: none;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
header nav ul li {
|
|
@@ -24,8 +26,9 @@ header nav ul li {
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
header nav a {
|
|
27
|
-
border: none;
|
|
28
29
|
display: inline;
|
|
30
|
+
border: none;
|
|
31
|
+
|
|
29
32
|
@include subdued-link;
|
|
30
33
|
}
|
|
31
34
|
|
|
@@ -33,17 +36,18 @@ header nav a.external {
|
|
|
33
36
|
border: none;
|
|
34
37
|
}
|
|
35
38
|
|
|
36
|
-
@media only screen and (
|
|
39
|
+
@media only screen and (width >= 740px) {
|
|
37
40
|
header details nav {
|
|
38
41
|
min-height: 100px;
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
header nav div > p {
|
|
46
|
+
padding-bottom: 2px;
|
|
43
47
|
font-style: italic;
|
|
44
|
-
@include user-select(none);
|
|
45
48
|
border-bottom: 1px solid var(--fg-color);
|
|
46
|
-
|
|
49
|
+
|
|
50
|
+
@include user-select(none);
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
@media (hover: hover) {
|
|
@@ -53,27 +57,27 @@ header nav div > p {
|
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
header .results-container {
|
|
56
|
-
display: block;
|
|
57
60
|
position: absolute;
|
|
58
61
|
top: var(--header-collapsed-height);
|
|
59
|
-
left: 0;
|
|
60
62
|
right: 0;
|
|
63
|
+
left: 0;
|
|
64
|
+
z-index: 1000;
|
|
61
65
|
box-sizing: border-box;
|
|
66
|
+
display: block;
|
|
62
67
|
max-width: 640px;
|
|
63
|
-
margin: 0 auto;
|
|
64
68
|
padding: var(--gap);
|
|
69
|
+
margin: 0 auto;
|
|
65
70
|
pointer-events: none;
|
|
66
|
-
z-index: 1000;
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
header ol {
|
|
70
|
-
padding: 0;
|
|
71
74
|
flex: 1;
|
|
72
75
|
min-height: 0;
|
|
76
|
+
padding: 0;
|
|
73
77
|
overflow-y: auto;
|
|
74
78
|
|
|
75
79
|
.excerpt {
|
|
76
|
-
line-height: 2.5ex;
|
|
77
80
|
height: 5ex;
|
|
81
|
+
line-height: 2.5ex;
|
|
78
82
|
}
|
|
79
83
|
}
|
package/src/index.ts
CHANGED
|
@@ -12,11 +12,13 @@ import './timezone/style.scss';
|
|
|
12
12
|
import './toc/style.scss';
|
|
13
13
|
import './trace/style.scss';
|
|
14
14
|
import './navigate/style.scss';
|
|
15
|
+
import './page-update/style.scss';
|
|
15
16
|
|
|
16
17
|
import mountSearch from './search';
|
|
17
18
|
import mountHeader from './header';
|
|
18
19
|
import mountTop from './top';
|
|
19
20
|
import mountNavigate from './navigate';
|
|
21
|
+
import mountPageUpdate from './page-update';
|
|
20
22
|
import { mountPerPageComponents } from './navigate/lifecycle';
|
|
21
23
|
|
|
22
24
|
import { scheduleTask, formatDuration } from './util';
|
|
@@ -29,6 +31,7 @@ const PERSISTENT_COMPONENTS: Record<
|
|
|
29
31
|
search: mountSearch,
|
|
30
32
|
top: mountTop,
|
|
31
33
|
navigate: mountNavigate,
|
|
34
|
+
pageUpdate: mountPageUpdate,
|
|
32
35
|
};
|
|
33
36
|
|
|
34
37
|
let startTime = -1;
|
package/src/literate/style.scss
CHANGED
|
@@ -3,11 +3,11 @@ body.literate {
|
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
body.literate .body pre:has(.code-row) {
|
|
6
|
-
|
|
7
|
-
border-radius: var(--mono-border-radius);
|
|
6
|
+
padding: 0;
|
|
8
7
|
overflow-x: auto;
|
|
9
8
|
overscroll-behavior-x: none;
|
|
10
|
-
|
|
9
|
+
background: var(--bg2-color);
|
|
10
|
+
border-radius: var(--mono-border-radius);
|
|
11
11
|
-webkit-text-size-adjust: 100%;
|
|
12
12
|
text-size-adjust: 100%;
|
|
13
13
|
|
|
@@ -49,11 +49,11 @@ body.literate .literate-code-output {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
> pre:last-child::before {
|
|
52
|
-
content: 'Output';
|
|
53
52
|
display: block;
|
|
54
53
|
font-size: var(--font-size-small);
|
|
55
54
|
font-style: italic;
|
|
56
55
|
color: var(--fg2-color);
|
|
56
|
+
content: 'Output';
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|