mint 0.8.1 → 0.10.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -26
  3. data/README.md +117 -37
  4. data/bin/mint +2 -81
  5. data/config/templates/base/navigation.css +136 -0
  6. data/config/templates/base/print.css +152 -0
  7. data/config/templates/{reset.css → base/reset.css} +1 -1
  8. data/config/templates/base/style.css +117 -137
  9. data/config/templates/base/utilities.css +136 -0
  10. data/config/templates/base/variables.css +124 -0
  11. data/config/templates/basic/style.css +151 -0
  12. data/config/templates/default/layout.erb +33 -3
  13. data/config/templates/default/style.css +95 -164
  14. data/config/templates/magazine/style.css +383 -0
  15. data/config/templates/nord/style.css +105 -220
  16. data/config/templates/nord-dark/style.css +82 -263
  17. data/lib/mint/commandline/parse.rb +144 -0
  18. data/lib/mint/commandline/publish.rb +46 -0
  19. data/lib/mint/commandline/run.rb +30 -0
  20. data/lib/mint/config.rb +162 -0
  21. data/lib/mint/{css.rb → css_dsl.rb} +9 -9
  22. data/lib/mint/css_parser.rb +45 -25
  23. data/lib/mint/document.rb +250 -365
  24. data/lib/mint/document_tree.rb +163 -0
  25. data/lib/mint/exceptions.rb +2 -3
  26. data/lib/mint/helpers.rb +23 -180
  27. data/lib/mint/layout.rb +26 -9
  28. data/lib/mint/renderers/css_renderer.rb +32 -0
  29. data/lib/mint/renderers/erb_renderer.rb +11 -0
  30. data/lib/mint/renderers/markdown_renderer.rb +45 -0
  31. data/lib/mint/style.rb +21 -31
  32. data/lib/mint/template.rb +30 -0
  33. data/lib/mint/version.rb +1 -1
  34. data/lib/mint/workspace.rb +171 -0
  35. data/lib/mint.rb +44 -12
  36. data/man/mint.1 +85 -44
  37. data/spec/cli/README.md +2 -2
  38. data/spec/cli/argument_parsing_spec.rb +89 -147
  39. data/spec/cli/bin_integration_spec.rb +23 -243
  40. data/spec/cli/full_workflow_integration_spec.rb +99 -442
  41. data/spec/cli/original_style_integration_spec.rb +58 -0
  42. data/spec/cli/publish_workflow_spec.rb +72 -70
  43. data/spec/commandline_path_integration_spec.rb +230 -0
  44. data/spec/config_file_integration_spec.rb +362 -0
  45. data/spec/{css_spec.rb → css_dsl_spec.rb} +7 -3
  46. data/spec/css_parser_spec.rb +59 -1
  47. data/spec/document_spec.rb +37 -242
  48. data/spec/flattened_path_spec.rb +150 -0
  49. data/spec/layout_spec.rb +42 -3
  50. data/spec/mint_spec.rb +22 -217
  51. data/spec/path_handling_spec.rb +237 -0
  52. data/spec/run_cli_tests.rb +1 -1
  53. data/spec/spec_helper.rb +3 -10
  54. data/spec/style_spec.rb +31 -56
  55. data/spec/support/cli_helpers.rb +7 -10
  56. data/spec/support/matchers.rb +1 -1
  57. data/spec/template_spec.rb +31 -0
  58. data/spec/workspace_spec.rb +177 -0
  59. metadata +75 -89
  60. data/bin/mint-epub +0 -20
  61. data/config/templates/garden/layout.erb +0 -38
  62. data/config/templates/garden/style.css +0 -303
  63. data/config/templates/nord/layout.erb +0 -11
  64. data/config/templates/nord-dark/layout.erb +0 -11
  65. data/config/templates/zen/layout.erb +0 -11
  66. data/config/templates/zen/style.css +0 -114
  67. data/lib/mint/command_line.rb +0 -360
  68. data/lib/mint/css_template.rb +0 -37
  69. data/lib/mint/markdown_template.rb +0 -47
  70. data/lib/mint/mint.rb +0 -313
  71. data/lib/mint/plugin.rb +0 -136
  72. data/lib/mint/plugins/epub.rb +0 -293
  73. data/lib/mint/resource.rb +0 -101
  74. data/plugins/templates/epub/layouts/container.haml +0 -5
  75. data/plugins/templates/epub/layouts/content.haml +0 -35
  76. data/plugins/templates/epub/layouts/layout.haml +0 -6
  77. data/plugins/templates/epub/layouts/title.haml +0 -11
  78. data/plugins/templates/epub/layouts/toc.haml +0 -26
  79. data/spec/cli/configuration_management_spec.rb +0 -363
  80. data/spec/cli/template_management_spec.rb +0 -300
  81. data/spec/helpers_spec.rb +0 -249
  82. data/spec/plugin_spec.rb +0 -449
  83. data/spec/resource_spec.rb +0 -135
@@ -1,15 +1,22 @@
1
1
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');
2
2
 
3
- :root {
4
- --screen-font-size: 16px;
5
- --screen-line-height: calc(var(--screen-font-size) * 1.5);
6
- --screen-unit: var(--screen-line-height);
3
+ /* Import base system */
4
+ @import "../base/style.css";
5
+ @import "../base/navigation.css";
6
+ @import "../base/utilities.css";
7
7
 
8
+ /* Nord template theme variables */
9
+ :root {
10
+ /* Typography settings */
11
+ --base-font-size: 16px;
12
+ --base-line-height: 1.6;
13
+ --scale-ratio: 1.2;
14
+
15
+ /* Print settings */
8
16
  --print-font-size: 11pt;
9
17
  --print-line-height: 16pt;
10
- --print-unit: var(--print-line-height);
11
-
12
- /* Nord color scheme */
18
+
19
+ /* Nord color palette */
13
20
  --nord0: #2e3440; /* Polar Night - darkest */
14
21
  --nord1: #3b4252; /* Polar Night */
15
22
  --nord2: #434c5e; /* Polar Night */
@@ -26,314 +33,192 @@
26
33
  --nord13: #ebcb8b; /* Aurora - yellow */
27
34
  --nord14: #a3be8c; /* Aurora - green */
28
35
  --nord15: #b48ead; /* Aurora - purple */
29
-
30
- --nord-text: var(--nord0);
31
- --nord-text-subtle: var(--nord3);
32
- --nord-background: var(--nord6);
33
- --nord-surface: #ffffff;
34
- --nord-border: var(--nord4);
35
- --nord-accent: var(--nord10);
36
- --nord-secondary: var(--nord8);
37
- }
38
-
39
- @import "../base/style.css";
40
-
36
+
37
+ /* Semantic colors using Nord palette */
38
+ --color-text: var(--nord0);
39
+ --color-text-subtle: var(--nord3);
40
+ --color-text-muted: var(--nord2);
41
+ --color-background: #ffffff;
42
+ --color-surface: #ffffff;
43
+ --color-surface-subtle: var(--nord6);
44
+ --color-border: var(--nord4);
45
+ --color-accent: var(--nord10);
46
+ --color-accent-hover: var(--nord8);
47
+ --color-accent-subtle: rgba(94, 129, 172, 0.1);
48
+
49
+ /* Component colors */
50
+ --color-code-bg: var(--nord5);
51
+ --color-code-text: var(--nord0);
52
+ --color-pre-bg: var(--nord6);
53
+ --color-pre-text: var(--nord0);
54
+ --color-quote-bg: rgba(143, 188, 187, 0.05);
55
+ --color-quote-text: var(--nord3);
56
+ --color-quote-border: var(--nord8);
57
+
58
+ /* Navigation colors */
59
+ --color-nav-bg: var(--nord6);
60
+ --color-nav-text: var(--nord2);
61
+ --color-nav-text-hover: var(--nord0);
62
+ --color-nav-text-active: var(--nord10);
63
+ --color-nav-bg-hover: var(--nord5);
64
+ --color-nav-bg-active: rgba(94, 129, 172, 0.1);
65
+ --color-nav-border: var(--nord4);
66
+ --color-nav-border-active: var(--nord10);
67
+
68
+ /* Table colors */
69
+ --color-table-bg: #ffffff;
70
+ --color-table-header-bg: var(--nord5);
71
+ --color-table-header-text: var(--nord0);
72
+ --color-table-border: var(--nord4);
73
+ --color-table-stripe: transparent;
74
+ --color-table-hover: rgba(143, 188, 187, 0.03);
75
+
76
+ /* Layout */
77
+ --container-max-width: 90ch;
78
+ }
79
+
80
+ /* Typography */
41
81
  body {
42
82
  font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
43
- color: var(--nord-text);
44
- line-height: 1.5;
45
- background-color: var(--nord-background);
83
+ background-color: var(--color-background);
84
+ color: var(--color-text);
46
85
  font-weight: 400;
47
- letter-spacing: -0.005em;
48
86
  font-feature-settings: "liga" 1, "kern" 1;
87
+ overflow-x: hidden;
49
88
  }
50
89
 
51
90
  h1, h2, h3, h4, h5, h6 {
52
91
  font-weight: 600;
53
- color: var(--nord-text);
54
- letter-spacing: -0.02em;
55
92
  }
56
93
 
57
94
  h1 {
58
- font-size: calc(var(--screen-font-size) * 1.8);
59
- margin-top: calc(var(--screen-unit) * 2);
60
- margin-bottom: calc(var(--screen-unit) * 1.5);
61
- line-height: 1.3;
62
95
  color: var(--nord0);
63
96
  }
64
97
 
65
98
  h2 {
66
- font-size: calc(var(--screen-font-size) * 1.4);
67
- margin-top: calc(var(--screen-unit) * 1.5);
68
- margin-bottom: calc(var(--screen-unit) * 0.75);
69
- line-height: 1.4;
70
99
  color: var(--nord1);
71
100
  }
72
101
 
73
102
  h3 {
74
- font-size: calc(var(--screen-font-size) * 1.2);
75
- margin-top: calc(var(--screen-unit) * 1.25);
76
- margin-bottom: calc(var(--screen-unit) * 0.5);
77
- line-height: 1.4;
78
103
  color: var(--nord2);
79
104
  }
80
105
 
81
106
  h4, h5, h6 {
82
- font-size: calc(var(--screen-font-size) * 1.05);
83
- margin-top: calc(var(--screen-unit) * 1);
84
- margin-bottom: calc(var(--screen-unit) * 0.25);
85
- line-height: 1.4;
86
107
  color: var(--nord3);
87
108
  }
88
109
 
89
- p {
90
- margin: calc(var(--screen-unit) * 0.75) 0;
110
+ /* Container layouts */
111
+ #container {
112
+ max-width: var(--container-max-width);
113
+ margin: var(--space-base) auto;
114
+ padding: var(--space-base) var(--space-2xl);
91
115
  }
92
116
 
93
- blockquote {
94
- border-left: 3px solid var(--nord8);
95
- padding-left: calc(var(--screen-unit) * 1);
96
- margin-left: 0;
97
- font-style: italic;
98
- color: var(--nord-text-subtle);
99
- background-color: rgba(143, 188, 187, 0.05);
100
- padding: calc(var(--screen-unit) * 0.75) calc(var(--screen-unit) * 1);
101
- border-radius: 0 4px 4px 0;
117
+ /* Container adjustments when navigation is present */
118
+ body:has(#navigation) #container,
119
+ body.has-navigation #container {
120
+ max-width: calc(var(--container-max-width) - var(--navigation-width));
121
+ margin-right: auto;
122
+ margin-top: var(--space-base);
123
+ margin-bottom: var(--space-base);
124
+ padding: var(--space-base) var(--space-2xl);
102
125
  }
103
126
 
127
+ /* Enhanced code styling */
104
128
  code {
105
129
  font-family: "SF Mono", "JetBrains Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace;
106
- font-size: calc(var(--screen-font-size) * 0.9);
107
- background-color: var(--nord5);
108
- color: var(--nord0);
109
- padding: 0.15em 0.4em;
110
- border-radius: 4px;
111
130
  font-weight: 500;
112
- letter-spacing: 0;
113
- }
114
-
115
- pre {
116
- background-color: var(--nord6);
117
- border: 1px solid var(--nord-border);
118
- border-radius: 8px;
119
- padding: calc(var(--screen-unit) * 1);
120
- overflow-x: auto;
121
- margin: calc(var(--screen-unit) * 1) 0;
122
131
  }
123
132
 
124
133
  pre code {
125
- background-color: transparent;
126
- padding: 0;
127
- border-radius: 0;
128
- font-size: calc(var(--screen-font-size) * 0.85);
129
- color: var(--nord0);
130
- }
131
-
132
- a:link, a:visited {
133
- color: var(--nord-accent);
134
- text-decoration: none;
135
- border-bottom: 1px solid transparent;
136
- transition: all 0.2s ease;
137
- }
138
-
139
- a:hover {
140
- color: var(--nord8);
141
- border-bottom-color: var(--nord8);
134
+ color: var(--color-text);
135
+ font-weight: normal;
142
136
  }
143
137
 
138
+ /* Enhanced styling */
144
139
  strong {
145
140
  font-weight: 600;
146
- color: var(--nord0);
141
+ color: var(--color-text);
147
142
  }
148
143
 
149
144
  em {
150
- font-style: italic;
151
145
  color: var(--nord1);
152
146
  }
153
147
 
154
- ul, ol {
155
- margin: calc(var(--screen-unit) * 0.75) 0;
156
- padding-left: calc(var(--screen-unit) * 1.5);
157
- }
158
-
159
- li {
160
- margin: calc(var(--screen-unit) * 0.25) 0;
161
- }
162
-
163
- table {
164
- border-collapse: collapse;
165
- margin: calc(var(--screen-unit) * 1) 0;
166
- width: 100%;
167
- background-color: var(--nord-surface);
168
- border-radius: 6px;
169
- overflow: hidden;
170
- box-shadow: 0 1px 3px rgba(46, 52, 64, 0.1);
171
- }
172
-
173
- th, td {
174
- padding: calc(var(--screen-unit) * 0.5) calc(var(--screen-unit) * 0.75);
175
- text-align: left;
176
- border-bottom: 1px solid var(--nord-border);
177
- }
178
-
148
+ /* Table enhancements */
179
149
  th {
180
- background-color: var(--nord5);
181
- font-weight: 600;
182
- color: var(--nord0);
183
- font-size: calc(var(--screen-font-size) * 0.9);
184
150
  text-transform: uppercase;
185
- letter-spacing: 0.05em;
186
151
  }
187
152
 
188
153
  tr:last-child td {
189
154
  border-bottom: none;
190
155
  }
191
156
 
192
- tr:hover {
193
- background-color: rgba(143, 188, 187, 0.03);
194
- }
195
-
196
- hr {
197
- border: none;
198
- height: 1px;
199
- background-color: var(--nord-border);
200
- margin: calc(var(--screen-unit) * 2) 0;
157
+ /* Navigation font size adjustments */
158
+ #navigation h3 {
159
+ font-weight: 600;
160
+ color: var(--color-text-subtle);
201
161
  }
202
162
 
203
- #container {
204
- width: 100%;
205
- max-width: 100ch;
206
- margin: calc(var(--screen-unit) * 3) auto;
207
- padding: calc(var(--screen-unit) * 3) calc(var(--screen-unit) * 4);
208
- border: 1px solid var(--nord-border);
209
- background-color: var(--nord-surface);
210
- box-shadow:
211
- 0 4px 6px rgba(46, 52, 64, 0.05),
212
- 0 10px 20px rgba(46, 52, 64, 0.1);
213
- border-radius: 8px;
163
+ #navigation .directory-name {
164
+ font-weight: 600;
165
+ color: var(--nord1);
214
166
  }
215
167
 
216
- @media (max-width: 768px) {
168
+ /* Responsive design */
169
+ @media (max-width: 960px) {
170
+ body {
171
+ background-color: transparent;
172
+ margin: 0;
173
+ }
174
+
175
+ #navigation {
176
+ border-bottom: 1px solid var(--color-border);
177
+ }
178
+
179
+ body:has(#navigation) #container,
180
+ body.has-navigation #container,
217
181
  #container {
218
- margin: calc(var(--screen-unit) * 1) calc(var(--screen-unit) * 0.5);
219
- padding: calc(var(--screen-unit) * 2) calc(var(--screen-unit) * 2);
182
+ max-width: var(--container-max-width);
183
+ margin: 0;
184
+ padding: var(--space-xl) var(--space-xl);
220
185
  border-radius: 0;
221
186
  box-shadow: none;
222
187
  border: none;
223
188
  }
224
189
  }
225
190
 
191
+ /* Print styles - Nord-specific overrides */
226
192
  @media print {
227
- @page {
228
- margin: 0.75in;
229
- size: letter;
230
- }
231
-
232
- :root {
233
- --print-font-size: 11pt;
234
- --print-line-height: 16pt;
235
- --screen-font-size: var(--print-font-size);
236
- --screen-line-height: var(--print-line-height);
237
- --screen-unit: var(--print-line-height);
238
- }
239
-
240
193
  body {
241
194
  background-color: white !important;
242
195
  color: #000 !important;
243
- font-size: var(--print-font-size) !important;
244
- line-height: var(--print-line-height) !important;
245
196
  }
246
197
 
247
198
  #container {
248
- box-shadow: none !important;
249
- border: none !important;
250
- border-radius: 0 !important;
251
- margin: 0 !important;
252
- padding: 0 !important;
253
- max-width: none !important;
254
199
  background-color: white !important;
255
200
  }
256
201
 
257
202
  h1, h2, h3, h4, h5, h6 {
258
203
  color: #000 !important;
259
- page-break-after: avoid;
260
- }
261
-
262
- h1 {
263
- font-size: 18pt !important;
264
- line-height: 22pt !important;
265
- }
266
-
267
- h2 {
268
- font-size: 14pt !important;
269
- line-height: 18pt !important;
270
- }
271
-
272
- h3 {
273
- font-size: 12pt !important;
274
- line-height: 16pt !important;
275
- }
276
-
277
- h4, h5, h6 {
278
- font-size: 11pt !important;
279
- line-height: 16pt !important;
280
- }
281
-
282
- p, li {
283
- orphans: 3;
284
- widows: 3;
285
- }
286
-
287
- blockquote, pre {
288
- page-break-inside: avoid;
289
- }
290
-
291
- a {
292
- color: #000 !important;
293
- text-decoration: underline !important;
294
204
  }
295
205
 
296
206
  code {
297
207
  background-color: #f5f5f5 !important;
298
- border-radius: 0 !important;
299
208
  color: #000 !important;
300
- font-size: 9pt !important;
301
209
  }
302
210
 
303
211
  pre {
304
212
  background-color: #f8f8f8 !important;
305
213
  border: 1px solid #ddd !important;
306
- border-radius: 0 !important;
307
214
  color: #000 !important;
308
215
  }
309
216
 
310
- pre code {
311
- background-color: transparent !important;
312
- font-size: 9pt !important;
313
- }
314
-
315
217
  table {
316
- border-collapse: collapse !important;
317
- border-radius: 0 !important;
318
218
  background-color: white !important;
319
- box-shadow: none !important;
320
- }
321
-
322
- th, td {
323
- border: 1px solid #000 !important;
324
- color: #000 !important;
325
219
  }
326
220
 
327
221
  th {
328
222
  background-color: #f0f0f0 !important;
329
223
  }
330
-
331
- table, table tr td, table tr th {
332
- page-break-inside: avoid;
333
- }
334
-
335
- img {
336
- max-width: 100% !important;
337
- page-break-inside: avoid;
338
- }
339
224
  }