presently 0.20.1 → 0.22.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/bake/presently/rehearse.rb +1 -9
- data/context/animated-diagrams.md +1 -1
- data/context/getting-started.md +37 -29
- data/lib/presently/application.rb +7 -6
- data/lib/presently/export.xrb +2 -0
- data/lib/presently/page.rb +15 -3
- data/lib/presently/playback.xrb +2 -1
- data/lib/presently/slide.rb +101 -50
- data/lib/presently/slide_renderer.rb +55 -16
- data/lib/presently/templates.rb +1 -1
- data/lib/presently/version.rb +1 -1
- data/public/_static/custom.css +7 -74
- data/public/_static/display.css +25 -0
- data/public/_static/export.css +111 -0
- data/public/_static/home.css +97 -0
- data/public/_static/index.css +4 -1131
- data/public/_static/playback.css +115 -0
- data/public/_static/presenter.css +137 -0
- data/public/_static/recorder.css +161 -0
- data/public/_static/slides.css +538 -0
- data/readme.md +10 -8
- data/releases.md +21 -0
- data/templates/code.xrb +5 -6
- data/templates/default.xrb +5 -3
- data/templates/diagram.xrb +8 -6
- data/templates/fill.xrb +9 -2
- data/templates/image.xrb +8 -5
- data/templates/section.xrb +11 -5
- data/templates/statement.xrb +5 -3
- data/templates/title.xrb +6 -9
- data/templates/two_column.xrb +23 -5
- data.tar.gz.sig +0 -0
- metadata +9 -2
- metadata.gz.sig +0 -0
data/lib/presently/templates.rb
CHANGED
|
@@ -24,7 +24,7 @@ module Presently
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# Initialize with a fully-resolved root list.
|
|
27
|
-
# Prefer {.
|
|
27
|
+
# Prefer {.for} for normal use; use this when you already have the complete list.
|
|
28
28
|
# @parameter roots [Array(String)] The complete ordered list of directories to search.
|
|
29
29
|
def initialize(roots = [DEFAULT_ROOT])
|
|
30
30
|
@roots = roots
|
data/lib/presently/version.rb
CHANGED
data/public/_static/custom.css
CHANGED
|
@@ -1,74 +1,7 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
height: 80%;
|
|
9
|
-
font-family: var(--font-mono);
|
|
10
|
-
font-size: 0.85em;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.arch-box {
|
|
14
|
-
position: absolute;
|
|
15
|
-
border-radius: 8px;
|
|
16
|
-
padding: 0.9rem 1rem;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.arch-box-title {
|
|
20
|
-
font-weight: bold;
|
|
21
|
-
margin-bottom: 0.6rem;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.arch-component {
|
|
25
|
-
border-radius: 4px;
|
|
26
|
-
padding: 0.35rem 0.5rem;
|
|
27
|
-
text-align: center;
|
|
28
|
-
margin-bottom: 0.35rem;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.arch-component:last-child {
|
|
32
|
-
margin-bottom: 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.arch-server {
|
|
36
|
-
border: 2px solid #f90;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.arch-server .arch-component {
|
|
40
|
-
border: 1px solid #666;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.arch-display {
|
|
44
|
-
border: 2px solid #4a9eff;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.arch-display .arch-component {
|
|
48
|
-
border: 1px solid #666;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.arch-display .arch-ws {
|
|
52
|
-
border-color: #4a9eff;
|
|
53
|
-
color: #4a9eff;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.arch-presenter {
|
|
57
|
-
border: 2px solid #a78bfa;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.arch-presenter .arch-component {
|
|
61
|
-
border: 1px solid #666;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.arch-presenter .arch-ws {
|
|
65
|
-
border-color: #a78bfa;
|
|
66
|
-
color: #a78bfa;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.arch-arrow {
|
|
70
|
-
position: absolute;
|
|
71
|
-
text-align: center;
|
|
72
|
-
color: #888;
|
|
73
|
-
font-size: 0.8em;
|
|
74
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Add presentation-wide CSS overrides to this file.
|
|
3
|
+
* Prefer colocated slide- and section-specific stylesheets for focused changes:
|
|
4
|
+
* `slides/010-introduction.css` styles `slides/010-introduction.md`, while
|
|
5
|
+
* `slides/020-topic/style.css` styles every slide in `slides/020-topic/`.
|
|
6
|
+
* It intentionally contains no CSS rules by default.
|
|
7
|
+
*/
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* ========================
|
|
2
|
+
DISPLAY VIEW (audience)
|
|
3
|
+
======================== */
|
|
4
|
+
|
|
5
|
+
.display {
|
|
6
|
+
width: 100vw;
|
|
7
|
+
height: 100vh;
|
|
8
|
+
background: var(--slide-background);
|
|
9
|
+
position: relative;
|
|
10
|
+
outline: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.display .slide-container {
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 100%;
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.display .slide-counter {
|
|
20
|
+
position: absolute;
|
|
21
|
+
bottom: 1rem;
|
|
22
|
+
right: 1.5rem;
|
|
23
|
+
font-size: 0.9rem;
|
|
24
|
+
opacity: 0.4;
|
|
25
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/* ========================
|
|
2
|
+
EXPORT PAGE LAYOUT
|
|
3
|
+
======================== */
|
|
4
|
+
|
|
5
|
+
/* Allow multi-page layout — overrides the default full-viewport body. */
|
|
6
|
+
body.export {
|
|
7
|
+
height: auto;
|
|
8
|
+
overflow: visible;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Each export-page div maps to one printed page.
|
|
13
|
+
* Dimensions are set via inline styles from Export::PageSize so they can
|
|
14
|
+
* be configured at export time. CSS just handles layout and overflow.
|
|
15
|
+
*/
|
|
16
|
+
.export-page {
|
|
17
|
+
position: relative;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
break-after: page;
|
|
20
|
+
page-break-after: always;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.export-slide-area {
|
|
24
|
+
position: relative;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Notes panel below the slide. */
|
|
29
|
+
.export-notes-area {
|
|
30
|
+
padding: 0.5rem 2rem 0.5rem;
|
|
31
|
+
background: #0d0d1f;
|
|
32
|
+
border-top: 2px solid var(--accent);
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
gap: 0.4rem;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Meta strip — mirrors the timing bar in the presenter view. */
|
|
40
|
+
.export-meta {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 1.5rem;
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
font-size: 0.75rem;
|
|
46
|
+
opacity: 0.75;
|
|
47
|
+
font-family: var(--font-sans);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.export-slide-number {
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.export-filename code {
|
|
55
|
+
font-family: var(--font-mono);
|
|
56
|
+
background: rgba(255,255,255,0.08);
|
|
57
|
+
padding: 0.1em 0.35em;
|
|
58
|
+
border-radius: 3px;
|
|
59
|
+
font-size: 0.9em;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.export-elapsed,
|
|
63
|
+
.export-duration {
|
|
64
|
+
opacity: 0.85;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.export-speaker {
|
|
68
|
+
margin-left: auto;
|
|
69
|
+
font-size: 0.8rem;
|
|
70
|
+
opacity: 0.9;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Override the shared notes panel to fit the compact export area. */
|
|
74
|
+
.export-notes-area .notes {
|
|
75
|
+
min-height: unset;
|
|
76
|
+
max-height: unset;
|
|
77
|
+
padding: 0;
|
|
78
|
+
background: none;
|
|
79
|
+
border-radius: 0;
|
|
80
|
+
flex: 1;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* ========================
|
|
85
|
+
PRINT MEDIA
|
|
86
|
+
======================== */
|
|
87
|
+
|
|
88
|
+
@media print {
|
|
89
|
+
/* Allow full-document layout. */
|
|
90
|
+
html, body {
|
|
91
|
+
height: auto !important;
|
|
92
|
+
overflow: visible !important;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Ensure backgrounds (dark theme) are included in the PDF. */
|
|
96
|
+
html {
|
|
97
|
+
-webkit-print-color-adjust: exact;
|
|
98
|
+
print-color-adjust: exact;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* Each export-page is one printed page. */
|
|
102
|
+
.export-page {
|
|
103
|
+
break-after: page;
|
|
104
|
+
page-break-after: always;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Strip the Live element wrapper chrome from the presenter view if somehow printed. */
|
|
108
|
+
live-view {
|
|
109
|
+
display: contents;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/* ========================
|
|
2
|
+
HOME
|
|
3
|
+
======================== */
|
|
4
|
+
|
|
5
|
+
.home {
|
|
6
|
+
width: 100vw;
|
|
7
|
+
height: 100vh;
|
|
8
|
+
overflow: auto;
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
padding: clamp(2rem, 8vw, 8rem);
|
|
13
|
+
background:
|
|
14
|
+
radial-gradient(circle at top left, color-mix(in srgb, var(--accent) 20%, transparent), transparent 35rem),
|
|
15
|
+
var(--slide-background);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.home-heading,
|
|
19
|
+
.home-interfaces {
|
|
20
|
+
width: min(72rem, 100%);
|
|
21
|
+
margin-inline: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.home-heading {
|
|
25
|
+
margin-bottom: 3rem;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.home-kicker {
|
|
29
|
+
margin: 0 0 0.75rem;
|
|
30
|
+
color: var(--accent-light);
|
|
31
|
+
font-size: 0.9rem;
|
|
32
|
+
font-weight: 700;
|
|
33
|
+
letter-spacing: 0.12em;
|
|
34
|
+
text-transform: uppercase;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.home-heading h1 {
|
|
38
|
+
margin: 0;
|
|
39
|
+
font-size: clamp(2.5rem, 6vw, 5rem);
|
|
40
|
+
line-height: 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.home-introduction {
|
|
44
|
+
max-width: 48rem;
|
|
45
|
+
margin: 1.25rem 0 0;
|
|
46
|
+
font-size: clamp(1.1rem, 2vw, 1.4rem);
|
|
47
|
+
line-height: 1.5;
|
|
48
|
+
opacity: 0.72;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.home-interfaces {
|
|
52
|
+
display: grid;
|
|
53
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
54
|
+
gap: 1rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.home-interface {
|
|
58
|
+
display: flex;
|
|
59
|
+
min-height: 10rem;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
justify-content: space-between;
|
|
62
|
+
gap: 1.5rem;
|
|
63
|
+
padding: 1.75rem;
|
|
64
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
65
|
+
border-radius: 0.75rem;
|
|
66
|
+
background: color-mix(in srgb, var(--surface) 82%, transparent);
|
|
67
|
+
color: inherit;
|
|
68
|
+
text-decoration: none;
|
|
69
|
+
transition: border-color 150ms ease, transform 150ms ease, background 150ms ease;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.home-interface:hover,
|
|
73
|
+
.home-interface:focus-visible {
|
|
74
|
+
border-color: var(--accent-light);
|
|
75
|
+
background: color-mix(in srgb, var(--surface-light) 85%, transparent);
|
|
76
|
+
transform: translateY(-0.2rem);
|
|
77
|
+
outline: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.home-interface strong {
|
|
81
|
+
font-size: 1.4rem;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.home-interface span {
|
|
85
|
+
line-height: 1.5;
|
|
86
|
+
opacity: 0.7;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@media (max-width: 48rem) {
|
|
90
|
+
.home {
|
|
91
|
+
justify-content: flex-start;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.home-interfaces {
|
|
95
|
+
grid-template-columns: 1fr;
|
|
96
|
+
}
|
|
97
|
+
}
|