@abreen/tada 1.9.0 → 1.10.2

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 (75) hide show
  1. package/README.md +24 -34
  2. package/bin/tada.ts +1 -1
  3. package/build/apply-base-path-plugin.ts +79 -17
  4. package/build/bundle.ts +9 -1
  5. package/build/content-watch.ts +3 -3
  6. package/build/copy.ts +30 -0
  7. package/build/generate-content-assets.ts +45 -59
  8. package/build/globals.ts +1 -1
  9. package/build/pagefind.ts +0 -7
  10. package/build/serve.ts +4 -0
  11. package/build/types.d.ts +19 -1
  12. package/build/util.ts +3 -0
  13. package/build/utils/content-files.ts +98 -0
  14. package/build/utils/include.ts +4 -0
  15. package/build/utils/python-runner/trace_runner.py +272 -0
  16. package/build/utils/render.ts +34 -8
  17. package/build/utils/trace-core.ts +203 -0
  18. package/build/utils/trace-java.ts +132 -0
  19. package/build/utils/trace-layout.ts +31 -3
  20. package/build/utils/trace-python.ts +26 -0
  21. package/build/utils/trace.ts +174 -294
  22. package/build/validate-internal-links-plugin.ts +16 -4
  23. package/build/watch/assets.ts +111 -0
  24. package/build/watch/build-full.ts +124 -0
  25. package/build/watch/build-incremental.ts +139 -0
  26. package/build/watch/compiler-types.d.ts +19 -0
  27. package/build/watch/compiler.ts +112 -0
  28. package/build/watch/index.ts +22 -0
  29. package/build/watch/mutations.ts +75 -0
  30. package/build/watch/planner.ts +230 -0
  31. package/build/watch/records.ts +190 -0
  32. package/build/watch/runtime.ts +143 -0
  33. package/build/watch/snapshot.ts +602 -0
  34. package/build/watch/validation.ts +36 -0
  35. package/build/watch-reload-client.ts +10 -5
  36. package/init/content/labs/01/index.md +6 -0
  37. package/init/content/labs/01/trace_demo.py +16 -0
  38. package/package.json +47 -24
  39. package/python/command.ts +95 -0
  40. package/python/module.ts +18 -0
  41. package/src/_alerts.scss +11 -8
  42. package/src/_base.scss +25 -29
  43. package/src/_layout.scss +17 -14
  44. package/src/_mixins.scss +10 -9
  45. package/src/anchor/style.scss +4 -2
  46. package/src/code/index.ts +9 -2
  47. package/src/code/style.scss +14 -13
  48. package/src/code.scss +14 -13
  49. package/src/header/_base.scss +21 -24
  50. package/src/header/style.scss +16 -12
  51. package/src/index.ts +3 -0
  52. package/src/literate/style.scss +4 -4
  53. package/src/navigate/index.ts +43 -279
  54. package/src/navigate/lifecycle.ts +1 -1
  55. package/src/navigate/runtime.ts +341 -0
  56. package/src/page-update/README.md +4 -0
  57. package/src/page-update/index.ts +280 -0
  58. package/src/page-update/style.scss +53 -0
  59. package/src/print/style.scss +4 -4
  60. package/src/question/style.scss +10 -6
  61. package/src/search/index.ts +9 -12
  62. package/src/search/style.scss +44 -42
  63. package/src/style.scss +63 -58
  64. package/src/timezone/index.ts +13 -3
  65. package/src/timezone/style.scss +11 -5
  66. package/src/toc/style.scss +17 -16
  67. package/src/trace/style.scss +27 -27
  68. package/src/validators.ts +45 -0
  69. package/templates/_footer.html +1 -1
  70. package/templates/_theme.scss +8 -19
  71. package/watch/engine.ts +296 -0
  72. package/watch/events.ts +10 -0
  73. package/watch/fs-commit.ts +102 -0
  74. package/watch/types.d.ts +103 -0
  75. package/build/watch.ts +0 -493
@@ -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
- margin-right: var(--gap);
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
  }
@@ -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 (max-width: 400px) {
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
  }
@@ -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 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 (min-width: 740px) {
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
- padding-bottom: 2px;
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;
@@ -3,11 +3,11 @@ body.literate {
3
3
  }
4
4
 
5
5
  body.literate .body pre:has(.code-row) {
6
- background: var(--bg2-color);
7
- border-radius: var(--mono-border-radius);
6
+ padding: 0;
8
7
  overflow-x: auto;
9
8
  overscroll-behavior-x: none;
10
- padding: 0;
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