marimo-book 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,11 @@
1
+ """marimo-book: build static sites from marimo notebooks and Markdown."""
2
+
3
+ from importlib.metadata import PackageNotFoundError
4
+ from importlib.metadata import version as _pkg_version
5
+
6
+ try:
7
+ __version__ = _pkg_version("marimo-book")
8
+ except PackageNotFoundError:
9
+ # Editable install on an untagged commit before the build hook has
10
+ # materialised _version.py. Fall back to a sentinel.
11
+ __version__ = "0.0.0+unknown"
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '0.1.0'
22
+ __version_tuple__ = version_tuple = (0, 1, 0)
23
+
24
+ __commit_id__ = commit_id = None
@@ -0,0 +1,427 @@
1
+ /* marimo-book default stylesheet — Material-for-MkDocs overrides. */
2
+
3
+ /* --- Mono + violet-ink: modernized Material defaults --------------------- */
4
+ /* Neutrals (zinc scale), typography, spacing, and a deep-black dark scheme.
5
+ Palette primary/accent still come from book.yml via preprocessor injection
6
+ at :root {}; this block tunes everything else plus per-scheme contrast. */
7
+
8
+ :root {
9
+ --md-default-bg-color: #ffffff;
10
+ --md-default-bg-color--light: #fafafa;
11
+ --md-default-fg-color: #09090b; /* zinc 950 */
12
+ --md-default-fg-color--light: #3f3f46; /* zinc 700 */
13
+ --md-default-fg-color--lighter: #a1a1aa; /* zinc 400 */
14
+ --md-default-fg-color--lightest: #e4e4e7; /* zinc 200 — hairline borders */
15
+ --md-code-bg-color: #f4f4f5; /* zinc 100 */
16
+ --md-code-fg-color: #18181b;
17
+ --md-accent-fg-color--transparent: rgba(99, 102, 241, 0.08);
18
+ --md-typeset-a-color: var(--md-primary-fg-color);
19
+ }
20
+
21
+ [data-md-color-scheme="slate"] {
22
+ --md-default-bg-color: #0a0a0a;
23
+ --md-default-bg-color--light: #111113;
24
+ --md-default-bg-color--lighter: #17171a;
25
+ --md-default-fg-color: #fafafa;
26
+ --md-default-fg-color--light: #d4d4d8;
27
+ --md-default-fg-color--lighter: #71717a;
28
+ --md-default-fg-color--lightest: #27272a; /* zinc 800 */
29
+ --md-code-bg-color: #111113;
30
+ --md-code-fg-color: #e4e4e7;
31
+ /* Lift primary/accent in dark mode (indigo 400 instead of 500) */
32
+ --md-primary-fg-color: #818cf8 !important;
33
+ --md-accent-fg-color: #818cf8;
34
+ --md-accent-fg-color--transparent: rgba(129, 140, 248, 0.12);
35
+ --md-typeset-color: #e4e4e7;
36
+ --md-typeset-a-color: #a5b4fc; /* indigo 300 */
37
+ }
38
+
39
+ /* --- Typography: lighter headers, generous line-height ------------------- */
40
+ .md-typeset {
41
+ font-size: 0.82rem;
42
+ line-height: 1.7;
43
+ font-weight: 400;
44
+ }
45
+
46
+ /* h1: large but light — size carries the hierarchy, weight stays sleek.
47
+ Violet ink for the page title; everything below stays grayscale. */
48
+ .md-typeset h1 {
49
+ font-weight: 500;
50
+ letter-spacing: -0.03em;
51
+ font-size: 2.4rem;
52
+ line-height: 1.1;
53
+ margin-bottom: 1.6rem;
54
+ color: var(--md-primary-fg-color);
55
+ }
56
+
57
+ /* h2: section heading. Lighter weight, no top border (was too heavy). */
58
+ .md-typeset h2 {
59
+ font-weight: 550;
60
+ letter-spacing: -0.018em;
61
+ font-size: 1.45rem;
62
+ margin-top: 2.4em;
63
+ color: var(--md-default-fg-color);
64
+ }
65
+ .md-typeset h3 {
66
+ font-weight: 500;
67
+ letter-spacing: -0.012em;
68
+ color: var(--md-default-fg-color);
69
+ }
70
+
71
+ /* Wider content column — Material's default ~61rem feels cramped. */
72
+ .md-grid { max-width: 68rem; }
73
+
74
+ /* --- Sidebar hierarchy: distinguish sections from leaf links ------------- */
75
+ /* Material renders top-level section labels as `<label class="md-nav__link">`
76
+ inside `.md-nav__item--section` when `navigation.sections` is on. We
77
+ target both the link form and the label form for safety. */
78
+ .md-nav--primary .md-nav__item--section > .md-nav__link,
79
+ .md-nav--primary .md-nav__item--section > label.md-nav__link {
80
+ text-transform: uppercase;
81
+ font-size: 0.62rem;
82
+ font-weight: 600;
83
+ letter-spacing: 0.1em;
84
+ color: var(--md-default-fg-color--lighter);
85
+ margin-top: 1.5rem;
86
+ margin-bottom: 0.25rem;
87
+ cursor: default;
88
+ }
89
+ .md-nav--primary .md-nav__item--section:first-of-type > .md-nav__link,
90
+ .md-nav--primary .md-nav__item--section:first-of-type > label.md-nav__link {
91
+ margin-top: 0.4rem;
92
+ }
93
+ /* Indent leaf chapter links under their section header. */
94
+ .md-nav--primary .md-nav__item--section .md-nav__list .md-nav__item .md-nav__link {
95
+ padding-left: 0.9rem;
96
+ font-size: 0.74rem;
97
+ font-weight: 400;
98
+ }
99
+ /* Top-level (no-section) leaf links: keep flush. */
100
+ .md-nav--primary > .md-nav__list > .md-nav__item:not(.md-nav__item--section) > .md-nav__link {
101
+ font-size: 0.78rem;
102
+ font-weight: 500;
103
+ }
104
+
105
+ /* --- Footer: airy light mode, blended dark mode -------------------------- */
106
+ /* Material's default footer is a heavy dark bar in both schemes — fights
107
+ the minimal aesthetic. Make it match the page bg with a hairline border,
108
+ and bump text contrast so the prev/next nav and copyright actually read. */
109
+ .md-footer {
110
+ background: var(--md-default-bg-color);
111
+ color: var(--md-default-fg-color);
112
+ border-top: 1px solid var(--md-default-fg-color--lightest);
113
+ }
114
+ .md-footer__link {
115
+ opacity: 1;
116
+ }
117
+ .md-footer__link:hover {
118
+ opacity: 1;
119
+ }
120
+ .md-footer__title {
121
+ color: var(--md-default-fg-color);
122
+ font-weight: 500;
123
+ }
124
+ .md-footer__direction {
125
+ color: var(--md-default-fg-color--lighter);
126
+ text-transform: uppercase;
127
+ font-size: 0.62rem;
128
+ font-weight: 600;
129
+ letter-spacing: 0.1em;
130
+ opacity: 1;
131
+ }
132
+ .md-footer__button {
133
+ color: var(--md-default-fg-color--light);
134
+ }
135
+ .md-footer-meta {
136
+ background: var(--md-default-bg-color--light);
137
+ color: var(--md-default-fg-color--light);
138
+ }
139
+ .md-footer-meta.md-typeset a {
140
+ color: var(--md-default-fg-color--light);
141
+ }
142
+ .md-footer-meta.md-typeset a:hover {
143
+ color: var(--md-primary-fg-color);
144
+ }
145
+ .md-copyright {
146
+ color: var(--md-default-fg-color--light);
147
+ font-size: 0.72rem;
148
+ }
149
+ .md-copyright__highlight {
150
+ color: var(--md-default-fg-color);
151
+ }
152
+
153
+ /* --- Right-side TOC: mirror the left sidebar treatment ------------------- */
154
+ /* "Table of contents" header: uppercase, tracked, muted — same vocab as
155
+ the section labels in the left sidebar. */
156
+ .md-nav--secondary .md-nav__title {
157
+ text-transform: uppercase;
158
+ font-size: 0.62rem;
159
+ font-weight: 600;
160
+ letter-spacing: 0.1em;
161
+ color: var(--md-default-fg-color--lighter);
162
+ padding: 0 0 0.4rem 0;
163
+ margin-bottom: 0.4rem;
164
+ border-bottom: 1px solid var(--md-default-fg-color--lightest);
165
+ background: transparent;
166
+ box-shadow: none;
167
+ }
168
+ /* TOC entries: smaller, lighter, with the same indent feel as left sidebar. */
169
+ .md-nav--secondary .md-nav__link {
170
+ font-size: 0.74rem;
171
+ font-weight: 400;
172
+ padding-left: 0.9rem;
173
+ margin: 0.05rem 0;
174
+ border-left: 1px solid transparent;
175
+ transition: color 0.1s, border-color 0.1s;
176
+ }
177
+ /* Nested TOC entries (h3 inside h2) get an extra indent. */
178
+ .md-nav--secondary .md-nav__list .md-nav__list .md-nav__link {
179
+ padding-left: 1.5rem;
180
+ font-size: 0.7rem;
181
+ }
182
+ /* Active heading (toc.follow): violet text + matching left stripe. */
183
+ .md-nav--secondary .md-nav__link--active {
184
+ color: var(--md-primary-fg-color);
185
+ font-weight: 500;
186
+ border-left-color: var(--md-primary-fg-color);
187
+ }
188
+
189
+ /* --- Links: hairline underline, accent only on hover --------------------- */
190
+ .md-typeset a:not(.md-button):not(.headerlink) {
191
+ color: var(--md-default-fg-color);
192
+ text-decoration-thickness: 1px;
193
+ text-underline-offset: 0.22em;
194
+ text-decoration-color: var(--md-default-fg-color--lighter);
195
+ transition: color 0.12s, text-decoration-color 0.12s;
196
+ }
197
+ .md-typeset a:not(.md-button):not(.headerlink):hover {
198
+ color: var(--md-primary-fg-color);
199
+ text-decoration-color: var(--md-primary-fg-color);
200
+ }
201
+
202
+ /* --- Code: sharp corners, hairline border (not chunky) ------------------- */
203
+ .md-typeset pre > code,
204
+ .md-typeset .highlight > pre {
205
+ border-radius: 4px;
206
+ border: 1px solid var(--md-default-fg-color--lightest);
207
+ }
208
+ .md-typeset :not(pre) > code {
209
+ border-radius: 3px;
210
+ padding: 0.1em 0.38em;
211
+ font-size: 0.86em;
212
+ background: var(--md-code-bg-color);
213
+ border: 1px solid var(--md-default-fg-color--lightest);
214
+ }
215
+
216
+ /* --- Navigation: minimal, color-only active state ------------------------ */
217
+ .md-nav__link { transition: color 0.1s; }
218
+ .md-nav__link--active,
219
+ .md-nav__link[aria-current="page"] {
220
+ color: var(--md-primary-fg-color);
221
+ font-weight: 500;
222
+ }
223
+
224
+ /* --- Header: hairline bottom, no shadow ---------------------------------- */
225
+ .md-header {
226
+ box-shadow: none;
227
+ border-bottom: 1px solid var(--md-default-fg-color--lightest);
228
+ background: var(--md-default-bg-color);
229
+ color: var(--md-default-fg-color);
230
+ }
231
+ .md-header__title { font-weight: 600; }
232
+ /* Site title in the header bar — match the violet h1 treatment so the
233
+ accent reads consistently across page titles and chrome. */
234
+ .md-header__topic .md-ellipsis,
235
+ .md-header__topic > .md-header__button + .md-ellipsis {
236
+ color: var(--md-primary-fg-color);
237
+ font-weight: 600;
238
+ letter-spacing: -0.01em;
239
+ }
240
+
241
+ /* --- Admonitions: thin left stripe, no heavy fill ------------------------ */
242
+ .md-typeset .admonition,
243
+ .md-typeset details {
244
+ border-radius: 4px;
245
+ border: 1px solid var(--md-default-fg-color--lightest);
246
+ border-left-width: 3px;
247
+ box-shadow: none;
248
+ }
249
+
250
+ /* --- Tables: hairlines, sharp corners ------------------------------------ */
251
+ .md-typeset table:not([class]) {
252
+ border: 1px solid var(--md-default-fg-color--lightest);
253
+ border-radius: 4px;
254
+ overflow: hidden;
255
+ font-size: 0.78rem;
256
+ }
257
+ .md-typeset table:not([class]) th {
258
+ background: var(--md-default-bg-color--light);
259
+ font-weight: 600;
260
+ border-bottom: 1px solid var(--md-default-fg-color--lightest);
261
+ }
262
+
263
+ /* --- marimo-book-specific elements (preserved) --------------------------- */
264
+
265
+ /* Launch buttons row at the top of each page. */
266
+ .marimo-book-buttons {
267
+ display: flex;
268
+ flex-wrap: wrap;
269
+ gap: 0.5rem;
270
+ margin: 0 0 1.25rem 0;
271
+ }
272
+
273
+ .marimo-book-button {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ gap: 0.4rem;
277
+ padding: 0.3rem 0.7rem;
278
+ border-radius: 4px;
279
+ background: transparent;
280
+ color: var(--md-default-fg-color);
281
+ text-decoration: none;
282
+ font-size: 0.72rem;
283
+ font-weight: 500;
284
+ letter-spacing: 0.005em;
285
+ border: 1px solid var(--md-default-fg-color--lightest);
286
+ transition: border-color 0.12s, color 0.12s, background 0.12s;
287
+ }
288
+ .marimo-book-button:hover {
289
+ background: transparent;
290
+ border-color: var(--md-primary-fg-color);
291
+ color: var(--md-primary-fg-color);
292
+ text-decoration: none;
293
+ }
294
+
295
+ [data-md-color-scheme="slate"] .marimo-book-button {
296
+ background: transparent;
297
+ border-color: var(--md-default-fg-color--lightest);
298
+ color: var(--md-default-fg-color--light);
299
+ }
300
+ [data-md-color-scheme="slate"] .marimo-book-button:hover {
301
+ background: transparent;
302
+ border-color: var(--md-primary-fg-color);
303
+ color: var(--md-primary-fg-color);
304
+ }
305
+
306
+ /* Marimo cell output containers. */
307
+ .marimo-book-output {
308
+ margin: 0.75rem 0;
309
+ overflow-x: auto;
310
+ }
311
+ .marimo-book-output img {
312
+ max-width: 100%;
313
+ height: auto;
314
+ }
315
+
316
+ /* Marimo plain text / stream outputs rendered as <pre>. */
317
+ pre.marimo-book-output-text {
318
+ background: var(--md-code-bg-color, #f5f5f5);
319
+ padding: 0.5rem 0.75rem;
320
+ border-radius: 0.25rem;
321
+ font-size: 0.85em;
322
+ white-space: pre-wrap;
323
+ word-wrap: break-word;
324
+ }
325
+ pre.marimo-stream-stderr,
326
+ pre.marimo-error {
327
+ border-left: 3px solid var(--md-warning-fg-color, #e67e22);
328
+ background: rgba(230, 126, 34, 0.05);
329
+ }
330
+
331
+ /* Marimo callouts come through as .admonition with an extra marker class;
332
+ no overrides needed — Material styles them. */
333
+
334
+ /* --- WASM (marimo islands) integration ----------------------------------- */
335
+ /* Override marimo's island runtime styling so it matches the book theme.
336
+ Marimo ships its own font stack (Lora / PT Sans / Fira Mono) and color
337
+ tokens; we override with our Geist + zinc palette via the `.marimo`
338
+ namespace. Pixel-perfect match isn't the goal; "doesn't look alien" is. */
339
+
340
+ .marimo,
341
+ marimo-island,
342
+ marimo-cell-output {
343
+ font-family: var(--md-text-font), -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
344
+ }
345
+ .marimo code,
346
+ .marimo pre,
347
+ marimo-cell-output code,
348
+ marimo-cell-output pre {
349
+ font-family: var(--md-code-font), ui-monospace, "SF Mono", Menlo, monospace;
350
+ }
351
+ /* Marimo's per-cell wrappers shouldn't add their own borders/padding
352
+ inside our content area. */
353
+ marimo-island {
354
+ display: block;
355
+ margin: 0.75rem 0;
356
+ }
357
+ /* Hide marimo's loading spinner cell — it lives in the page until the
358
+ runtime boots, then disappears. Our cells are already visible by
359
+ default (server-rendered placeholder text), so the spinner is noise. */
360
+ marimo-island[data-cell-id]:first-of-type marimo-cell-output svg.animate-spin {
361
+ display: none;
362
+ }
363
+
364
+ /* --- Static reactivity (precompute) -------------------------------------- */
365
+ /* Renders for the input control + the cell-swap target. Kept minimal; sits
366
+ inline in the page just above the first reactive cell. */
367
+
368
+ .marimo-book-precompute-control {
369
+ display: flex;
370
+ align-items: center;
371
+ gap: 0.75rem;
372
+ padding: 0.6rem 0.85rem;
373
+ margin: 0 0 1.25rem 0;
374
+ border-radius: 4px;
375
+ border: 1px solid var(--md-default-fg-color--lightest);
376
+ background: var(--md-default-bg-color--light);
377
+ font-size: 0.78rem;
378
+ }
379
+ .marimo-book-precompute-control:empty {
380
+ display: none;
381
+ }
382
+ .marimo-book-precompute-control::before {
383
+ content: "Adjust:";
384
+ font-weight: 600;
385
+ color: var(--md-default-fg-color--lighter);
386
+ text-transform: uppercase;
387
+ letter-spacing: 0.08em;
388
+ font-size: 0.62rem;
389
+ }
390
+
391
+ .marimo-book-precompute-input {
392
+ display: inline-flex;
393
+ align-items: center;
394
+ gap: 0.5rem;
395
+ flex: 1;
396
+ min-width: 0;
397
+ }
398
+ .marimo-book-precompute-input--slider input[type="range"] {
399
+ flex: 1;
400
+ accent-color: var(--md-primary-fg-color);
401
+ height: 1.25rem;
402
+ }
403
+ .marimo-book-precompute-input--select select {
404
+ border: 1px solid var(--md-default-fg-color--lightest);
405
+ border-radius: 3px;
406
+ padding: 0.2rem 0.4rem;
407
+ background: var(--md-default-bg-color);
408
+ color: var(--md-default-fg-color);
409
+ font-family: inherit;
410
+ font-size: 0.78rem;
411
+ }
412
+ .marimo-book-precompute-input--checkbox input[type="checkbox"] {
413
+ accent-color: var(--md-primary-fg-color);
414
+ margin: 0;
415
+ }
416
+ .marimo-book-precompute-label {
417
+ font-variant-numeric: tabular-nums;
418
+ font-weight: 500;
419
+ color: var(--md-primary-fg-color);
420
+ min-width: 2.5rem;
421
+ text-align: right;
422
+ }
423
+
424
+ .marimo-book-precompute-cell {
425
+ /* Reactive cell wrapper — invisible chrome, just a swap target. */
426
+ display: block;
427
+ }