jekyll-calconnect-theme 0.1.0 → 0.2.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.
@@ -3,238 +3,13 @@ layout: base
3
3
  ---
4
4
 
5
5
  <section class="documentation">
6
+ <!-- Mobile sidebar backdrop -->
7
+ <div class="docs-nav-backdrop"></div>
8
+
6
9
  <!-- Left Sidebar Navigation - Fully Data-Driven -->
7
10
  <nav class="docs-nav" aria-label="Section navigation">
8
11
  <div class="docs-nav-content">
9
-
10
- {% comment %}
11
- Find matching section based on page URL.
12
- The layout has no knowledge of specific pages - all configuration is in _data/navigation_sidebar.yml
13
- {% endcomment %}
14
- {% assign current_section = nil %}
15
- {% for section in site.data.navigation_sidebar.sections %}
16
- {% if page.url contains section.match %}
17
- {% assign current_section = section %}
18
- {% break %}
19
- {% endif %}
20
- {% endfor %}
21
-
22
- {% if current_section %}
23
- <div class="nav-section">
24
- <div class="nav-section-title">{{ current_section.title }}</div>
25
- <ul class="nav-items">
26
- {% for item in current_section.items %}
27
-
28
- {% comment %} --- LINK TYPE --- {% endcomment %}
29
- {% if item.type == 'link' or item.type == nil %}
30
- {% assign is_active = false %}
31
- {% if page.url == item.url %}
32
- {% assign is_active = true %}
33
- {% endif %}
34
- <li>
35
- <a href="{{ item.url | relative_url }}" {% if is_active %}class="active"{% endif %}>
36
- {{ item.label }}
37
- </a>
38
- </li>
39
-
40
- {% comment %} --- COLLECTION TYPE --- {% endcomment %}
41
- {% elsif item.type == 'collection' %}
42
- {% case item.collection %}
43
- {% when 'about_pages' %}
44
- {% assign docs = site.about_pages %}
45
- {% when 'membership_pages' %}
46
- {% assign docs = site.membership_pages %}
47
- {% when 'events' %}
48
- {% assign docs = site.events %}
49
- {% when 'resources' %}
50
- {% assign docs = site.resources %}
51
- {% else %}
52
- {% assign docs = site.posts %}
53
- {% endcase %}
54
- {% if item.sort_field == 'date' and item.sort_order == 'desc' %}
55
- {% assign sorted_docs = docs | sort: 'date' | reverse %}
56
- {% elsif item.sort_field %}
57
- {% assign sorted_docs = docs | sort: item.sort_field %}
58
- {% else %}
59
- {% assign sorted_docs = docs %}
60
- {% endif %}
61
- {% for doc in sorted_docs %}
62
- {% assign is_doc_active = false %}
63
- {% if page.url == doc.url %}
64
- {% assign is_doc_active = true %}
65
- {% endif %}
66
- <li>
67
- <a href="{{ doc.url | relative_url }}" {% if is_doc_active %}class="active"{% endif %}>
68
- {{ doc.title | default: doc.name }}
69
- </a>
70
- </li>
71
- {% endfor %}
72
-
73
- {% comment %} --- COLLAPSIBLE TYPE --- {% endcomment %}
74
- {% elsif item.type == 'collapsible' %}
75
- {% assign is_open = false %}
76
- {% if page.url contains item.url_filter %}
77
- {% assign is_open = true %}
78
- {% endif %}
79
- {% case item.collection %}
80
- {% when 'about_pages' %}
81
- {% assign child_docs = site.about_pages %}
82
- {% when 'membership_pages' %}
83
- {% assign child_docs = site.membership_pages %}
84
- {% when 'events' %}
85
- {% assign child_docs = site.events %}
86
- {% when 'resources' %}
87
- {% assign child_docs = site.resources %}
88
- {% else %}
89
- {% assign child_docs = site.posts %}
90
- {% endcase %}
91
- <li>
92
- <span class="nav-toggle {% if is_open %}open{% endif %}">{{ item.label }}</span>
93
- <ul class="nav-subsection {% unless is_open %}collapsed{% endunless %}">
94
- {% if item.first_child_label %}
95
- {% assign first_is_active = false %}
96
- {% if page.url contains item.url_filter %}
97
- {% assign first_is_active = true %}
98
- {% endif %}
99
- <li><a href="{{ item.url | relative_url }}" {% if first_is_active %}class="active"{% endif %}>{{ item.first_child_label }}</a></li>
100
- {% endif %}
101
- {% for doc in child_docs %}
102
- {% assign url_matches = false %}
103
- {% if doc.url contains item.url_filter %}
104
- {% assign url_matches = true %}
105
- {% endif %}
106
- {% assign is_excluded = false %}
107
- {% if doc.url == item.url %}
108
- {% assign is_excluded = true %}
109
- {% endif %}
110
- {% if item.exclude_urls %}
111
- {% for excl in item.exclude_urls %}
112
- {% if doc.url == excl %}
113
- {% assign is_excluded = true %}
114
- {% endif %}
115
- {% endfor %}
116
- {% elsif item.exclude_url %}
117
- {% if doc.url == item.exclude_url %}
118
- {% assign is_excluded = true %}
119
- {% endif %}
120
- {% endif %}
121
- {% if url_matches and is_excluded == false %}
122
- {% assign child_is_active = false %}
123
- {% if page.url == doc.url %}
124
- {% assign child_is_active = true %}
125
- {% endif %}
126
- <li>
127
- <a href="{{ doc.url | relative_url }}" {% if child_is_active %}class="active"{% endif %}>
128
- {{ doc.title }}
129
- </a>
130
- </li>
131
- {% endif %}
132
- {% endfor %}
133
- </ul>
134
- </li>
135
-
136
- {% comment %} --- YEARS TYPE --- {% endcomment %}
137
- {% elsif item.type == 'years' %}
138
- {% assign years = site.data.news_years %}
139
- {% for year in years %}
140
- {% assign is_active = false %}
141
- {% if page.url contains year %}
142
- {% assign is_active = true %}
143
- {% endif %}
144
- <li>
145
- <a href="/news/{{ year }}/" {% if is_active %}class="active"{% endif %}>
146
- {{ year }}
147
- </a>
148
- </li>
149
- {% endfor %}
150
-
151
- {% comment %} --- GROUP TYPE --- {% endcomment %}
152
- {% elsif item.type == 'group' %}
153
- </ul>
154
- <div class="nav-group-title">{{ item.label }}</div>
155
- <ul class="nav-items">
156
- {% for child in item.children %}
157
- {% if child.type == 'link' or child.type == nil %}
158
- {% assign group_link_active = false %}
159
- {% if page.url == child.url %}
160
- {% assign group_link_active = true %}
161
- {% endif %}
162
- <li>
163
- <a href="{{ child.url | relative_url }}" {% if group_link_active %}class="active"{% endif %}>
164
- {{ child.label }}
165
- </a>
166
- </li>
167
- {% elsif child.type == 'collapsible' %}
168
- {% assign is_open = false %}
169
- {% if page.url contains child.url_filter %}
170
- {% assign is_open = true %}
171
- {% endif %}
172
- {% case child.collection %}
173
- {% when 'about_pages' %}
174
- {% assign child_docs = site.about_pages %}
175
- {% when 'membership_pages' %}
176
- {% assign child_docs = site.membership_pages %}
177
- {% when 'events' %}
178
- {% assign child_docs = site.events %}
179
- {% when 'resources' %}
180
- {% assign child_docs = site.resources %}
181
- {% else %}
182
- {% assign child_docs = site.posts %}
183
- {% endcase %}
184
- <li>
185
- <span class="nav-toggle {% if is_open %}open{% endif %}">{{ child.label }}</span>
186
- <ul class="nav-subsection {% unless is_open %}collapsed{% endunless %}">
187
- {% if child.first_child_label %}
188
- {% assign group_first_active = false %}
189
- {% if page.url contains child.url_filter %}
190
- {% assign group_first_active = true %}
191
- {% endif %}
192
- <li><a href="{{ child.url | relative_url }}" {% if group_first_active %}class="active"{% endif %}>{{ child.first_child_label }}</a></li>
193
- {% endif %}
194
- {% for doc in child_docs %}
195
- {% assign url_matches = false %}
196
- {% if doc.url contains child.url_filter %}
197
- {% assign url_matches = true %}
198
- {% endif %}
199
- {% assign is_excluded = false %}
200
- {% if doc.url == child.url %}
201
- {% assign is_excluded = true %}
202
- {% endif %}
203
- {% if child.exclude_urls %}
204
- {% for excl in child.exclude_urls %}
205
- {% if doc.url == excl %}
206
- {% assign is_excluded = true %}
207
- {% endif %}
208
- {% endfor %}
209
- {% elsif child.exclude_url %}
210
- {% if doc.url == child.exclude_url %}
211
- {% assign is_excluded = true %}
212
- {% endif %}
213
- {% endif %}
214
- {% if url_matches and is_excluded == false %}
215
- {% assign group_doc_active = false %}
216
- {% if page.url == doc.url %}
217
- {% assign group_doc_active = true %}
218
- {% endif %}
219
- <li>
220
- <a href="{{ doc.url | relative_url }}" {% if group_doc_active %}class="active"{% endif %}>
221
- {{ doc.title }}
222
- </a>
223
- </li>
224
- {% endif %}
225
- {% endfor %}
226
- </ul>
227
- </li>
228
- {% endif %}
229
- {% endfor %}
230
-
231
- {% endif %}
232
-
233
- {% endfor %}
234
- </ul>
235
- </div>
236
- {% endif %}
237
-
12
+ {% include sidebar-nav.html %}
238
13
  </div>
239
14
  </nav>
240
15
 
@@ -0,0 +1,33 @@
1
+ .code-block-wrapper {
2
+ position: relative;
3
+ }
4
+
5
+ .code-copy-btn {
6
+ position: absolute;
7
+ top: 0.5rem;
8
+ right: 0.5rem;
9
+ padding: 0.375rem 0.625rem;
10
+ font-size: 0.75rem;
11
+ font-family: var(--font-sans, 'Inter', system-ui, sans-serif);
12
+ color: var(--color-gray-400, #94a3b8);
13
+ background: rgba(255, 255, 255, 0.1);
14
+ border: 1px solid rgba(255, 255, 255, 0.15);
15
+ border-radius: 0.375rem;
16
+ cursor: pointer;
17
+ opacity: 0;
18
+ transition: all 0.15s ease;
19
+ }
20
+
21
+ .documentation .doc-content pre:hover .code-copy-btn {
22
+ opacity: 1;
23
+ }
24
+
25
+ .code-copy-btn:hover {
26
+ color: var(--color-gray-200, #e2e8f0);
27
+ background: rgba(255, 255, 255, 0.15);
28
+ }
29
+
30
+ .code-copy-btn.copied {
31
+ color: #4ade80;
32
+ border-color: #4ade80;
33
+ }
@@ -1,8 +1,8 @@
1
1
  // Code blocks and inline code
2
2
 
3
3
  .documentation .body pre {
4
- background: #1e293b;
5
- color: #e2e8f0;
4
+ background: var(--color-gray-900, #1e293b);
5
+ color: var(--color-gray-200, #e2e8f0);
6
6
  padding: 1rem 1.25rem;
7
7
  border-radius: 0.5rem;
8
8
  overflow-x: auto;
@@ -10,14 +10,14 @@
10
10
  }
11
11
 
12
12
  .documentation .body code {
13
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
13
+ font-family: var(--font-mono, 'JetBrains Mono', 'Fira Code', monospace);
14
14
  font-size: 0.875rem;
15
15
  }
16
16
 
17
17
  .documentation .body :not(pre) > code {
18
- background: #f1f5f9;
18
+ background: var(--color-gray-100, #f1f5f9);
19
19
  padding: 0.125rem 0.375rem;
20
20
  border-radius: 0.25rem;
21
- color: #1e293b;
21
+ color: var(--color-gray-800, #1e293b);
22
22
  font-size: 0.8125rem;
23
23
  }
@@ -1,50 +1,59 @@
1
1
  // Dark mode overrides
2
+ // Uses CSS custom properties from Tailwind's @theme where possible.
2
3
 
3
4
  // Layout
4
5
  .dark .documentation > article > header {
5
- border-bottom-color: #334155;
6
+ border-bottom-color: var(--color-gray-700, #334155);
6
7
  }
7
8
 
8
9
  .dark .documentation > article > header h1 {
9
- color: #f8fafc;
10
+ color: var(--color-gray-50, #f8fafc);
10
11
  }
11
12
 
12
13
  // Navigation
13
14
  .dark .docs-nav .nav-group-title {
14
- color: #64748b;
15
- border-top-color: #334155;
15
+ color: var(--color-gray-500, #64748b);
16
+ border-top-color: var(--color-gray-700, #334155);
16
17
  }
17
18
 
18
19
  .dark .docs-nav .nav-items a:hover {
19
- background: #1e293b;
20
- color: #f1f5f9;
20
+ background: var(--color-gray-800, #1e293b);
21
+ color: var(--color-gray-100, #f1f5f9);
21
22
  }
22
23
 
23
24
  .dark .docs-nav .nav-items a.active {
24
- background: #312e81;
25
- color: #a5b4fc;
25
+ background: var(--color-primary-900, #312e81);
26
+ color: var(--color-primary-300, #a5b4fc);
26
27
  }
27
28
 
28
29
  .dark .nav-toggle:hover {
29
- background: #1e293b;
30
- color: #f1f5f9;
30
+ background: var(--color-gray-800, #1e293b);
31
+ color: var(--color-gray-100, #f1f5f9);
31
32
  }
32
33
 
33
34
  .dark .nav-subsection {
34
- border-left-color: #334155;
35
+ border-left-color: var(--color-gray-700, #334155);
36
+ }
37
+
38
+ // Mobile sidebar drawer
39
+ @media (max-width: 1023px) {
40
+ .dark .docs-nav {
41
+ background: var(--color-gray-950, #0f172a);
42
+ border-right-color: var(--color-gray-700, #334155);
43
+ }
35
44
  }
36
45
 
37
46
  // Typography
38
47
  .dark .documentation .body h2 {
39
- color: #f1f5f9;
48
+ color: var(--color-gray-100, #f1f5f9);
40
49
  }
41
50
 
42
51
  .dark .documentation .body h3 {
43
- color: #e2e8f0;
52
+ color: var(--color-gray-200, #e2e8f0);
44
53
  }
45
54
 
46
55
  .dark .documentation .body p {
47
- color: #94a3b8;
56
+ color: var(--color-gray-400, #94a3b8);
48
57
  }
49
58
 
50
59
  .dark .documentation .body ul,
@@ -56,36 +65,36 @@
56
65
  .dark .documentation .sectionbody ul,
57
66
  .dark .documentation .sectionbody ol,
58
67
  .dark .documentation .sectionbody dl {
59
- color: #94a3b8;
68
+ color: var(--color-gray-400, #94a3b8);
60
69
  }
61
70
 
62
71
  .dark .documentation .body li::marker,
63
72
  .dark .documentation .post-content li::marker,
64
73
  .dark .documentation .sectionbody li::marker {
65
- color: #818cf8;
74
+ color: var(--color-primary-400, #818cf8);
66
75
  }
67
76
 
68
77
  .dark .documentation .body dt {
69
- color: #f1f5f9;
78
+ color: var(--color-gray-100, #f1f5f9);
70
79
  }
71
80
 
72
81
  .dark .documentation .body dd {
73
- color: #94a3b8;
82
+ color: var(--color-gray-400, #94a3b8);
74
83
  }
75
84
 
76
85
  // Code
77
86
  .dark .documentation .body :not(pre) > code {
78
- background: #334155;
79
- color: #e2e8f0;
87
+ background: var(--color-gray-700, #334155);
88
+ color: var(--color-gray-200, #e2e8f0);
80
89
  }
81
90
 
82
91
  // Tables
83
92
  .dark .documentation .body th,
84
93
  .dark .documentation .body td {
85
- border-bottom-color: #334155;
94
+ border-bottom-color: var(--color-gray-700, #334155);
86
95
  }
87
96
 
88
97
  .dark .documentation .body th {
89
- background: #1e293b;
90
- color: #f1f5f9;
98
+ background: var(--color-gray-800, #1e293b);
99
+ color: var(--color-gray-50, #f1f5f9);
91
100
  }
@@ -0,0 +1,24 @@
1
+ .edit-on-github {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.375rem;
5
+ margin-top: 1rem;
6
+ font-size: 0.8125rem;
7
+ color: var(--color-gray-400, #94a3b8);
8
+ text-decoration: none;
9
+ transition: color 0.15s ease;
10
+ }
11
+
12
+ .edit-on-github:hover {
13
+ color: var(--color-primary-500, #6366f1);
14
+ text-decoration: none;
15
+ }
16
+
17
+ .dark .edit-on-github:hover {
18
+ color: var(--color-primary-400, #818cf8);
19
+ }
20
+
21
+ .edit-on-github svg {
22
+ width: 14px;
23
+ height: 14px;
24
+ }
@@ -18,7 +18,7 @@
18
18
  flex-shrink: 0;
19
19
  }
20
20
 
21
- // Sticky sidebar content
21
+ // Sticky sidebar content (desktop)
22
22
  @media (min-width: 1024px) {
23
23
  .docs-nav-content {
24
24
  position: sticky;
@@ -28,6 +28,48 @@
28
28
  }
29
29
  }
30
30
 
31
+ // Mobile sidebar drawer
32
+ .docs-nav-backdrop {
33
+ display: none;
34
+ }
35
+
36
+ @media (max-width: 1023px) {
37
+ .docs-nav-backdrop {
38
+ display: block;
39
+ position: fixed;
40
+ inset: 0;
41
+ z-index: 40;
42
+ background: rgba(15, 23, 42, 0.5);
43
+ opacity: 0;
44
+ pointer-events: none;
45
+ transition: opacity 0.2s ease;
46
+ }
47
+
48
+ .docs-nav-backdrop.active {
49
+ opacity: 1;
50
+ pointer-events: auto;
51
+ }
52
+
53
+ .docs-nav {
54
+ position: fixed;
55
+ top: 64px;
56
+ left: 0;
57
+ bottom: 0;
58
+ width: 280px;
59
+ z-index: 45;
60
+ background: var(--color-gray-0, #fff);
61
+ transform: translateX(-100%);
62
+ transition: transform 0.2s ease;
63
+ overflow-y: auto;
64
+ padding: 1.5rem 1rem;
65
+ border-right: 1px solid var(--color-gray-200, #e2e8f0);
66
+ }
67
+
68
+ .docs-nav.mobile-open {
69
+ transform: translateX(0);
70
+ }
71
+ }
72
+
31
73
  // Main article
32
74
  .documentation > article {
33
75
  flex: 1;
@@ -38,20 +80,13 @@
38
80
  .documentation > article > header {
39
81
  margin-bottom: 2rem;
40
82
  padding-bottom: 1.5rem;
41
- border-bottom: 1px solid #e2e8f0;
83
+ border-bottom: 1px solid var(--color-gray-200, #e2e8f0);
42
84
  }
43
85
 
44
86
  .documentation > article > header h1 {
45
87
  font-size: 2.25rem;
46
88
  font-weight: 700;
47
- color: #0f172a;
89
+ color: var(--color-gray-950, #0f172a);
48
90
  line-height: 1.2;
49
91
  margin: 0;
50
92
  }
51
-
52
- // Hide sidebar on mobile
53
- @media (max-width: 1023px) {
54
- .docs-nav {
55
- display: none;
56
- }
57
- }
@@ -0,0 +1,35 @@
1
+ .mobile-sidebar-toggle {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 0.5rem;
5
+ padding: 0.5rem 0.75rem;
6
+ margin-bottom: 1rem;
7
+ font-size: 0.875rem;
8
+ font-weight: 500;
9
+ color: var(--color-primary-500, #6366f1);
10
+ background: var(--color-primary-50, #eef2ff);
11
+ border: 1px solid var(--color-primary-200, #c7d2fe);
12
+ border-radius: 0.5rem;
13
+ cursor: pointer;
14
+ transition: all 0.15s ease;
15
+ }
16
+
17
+ .dark .mobile-sidebar-toggle {
18
+ color: var(--color-primary-300, #a5b4fc);
19
+ background: var(--color-primary-900, #312e81);
20
+ border-color: var(--color-primary-700, #4338ca);
21
+ }
22
+
23
+ .mobile-sidebar-toggle:hover {
24
+ background: var(--color-primary-100, #e0e7ff);
25
+ }
26
+
27
+ .dark .mobile-sidebar-toggle:hover {
28
+ background: var(--color-primary-800, #3730a3);
29
+ }
30
+
31
+ @media (min-width: 1024px) {
32
+ .mobile-sidebar-toggle {
33
+ display: none;
34
+ }
35
+ }
@@ -9,7 +9,7 @@
9
9
  font-weight: 600;
10
10
  text-transform: uppercase;
11
11
  letter-spacing: 0.05em;
12
- color: #94a3b8;
12
+ color: var(--color-gray-400, #94a3b8);
13
13
  margin-bottom: 0.5rem;
14
14
  padding: 0 0.75rem;
15
15
  }
@@ -20,11 +20,11 @@
20
20
  font-weight: 600;
21
21
  text-transform: uppercase;
22
22
  letter-spacing: 0.05em;
23
- color: #94a3b8;
23
+ color: var(--color-gray-400, #94a3b8);
24
24
  margin-top: 1rem;
25
25
  margin-bottom: 0.25rem;
26
26
  padding: 0.25rem 0.75rem;
27
- border-top: 1px solid #e2e8f0;
27
+ border-top: 1px solid var(--color-gray-200, #e2e8f0);
28
28
  }
29
29
 
30
30
  .docs-nav .nav-group-title:first-child {
@@ -45,7 +45,7 @@
45
45
  .docs-nav .nav-items a {
46
46
  display: block;
47
47
  padding: 0.5rem 0.75rem;
48
- color: #64748b;
48
+ color: var(--color-gray-500, #64748b);
49
49
  text-decoration: none;
50
50
  border-radius: 0.375rem;
51
51
  font-size: 0.875rem;
@@ -53,20 +53,20 @@
53
53
  }
54
54
 
55
55
  .docs-nav .nav-items a:hover {
56
- background: #f1f5f9;
57
- color: #1e293b;
56
+ background: var(--color-gray-100, #f1f5f9);
57
+ color: var(--color-gray-800, #1e293b);
58
58
  }
59
59
 
60
60
  .docs-nav .nav-items a.active {
61
- background: #eef2ff;
62
- color: #4f46e5;
61
+ background: var(--color-primary-50, #eef2ff);
62
+ color: var(--color-primary-600, #4f46e5);
63
63
  font-weight: 500;
64
64
  }
65
65
 
66
66
  // Collapsible subsections
67
67
  .nav-subsection {
68
68
  margin-left: 0.75rem;
69
- border-left: 2px solid #e2e8f0;
69
+ border-left: 2px solid var(--color-gray-200, #e2e8f0);
70
70
  padding-left: 0.75rem;
71
71
  margin-top: 0.25rem;
72
72
  }
@@ -77,7 +77,7 @@
77
77
  align-items: center;
78
78
  justify-content: space-between;
79
79
  padding: 0.5rem 0.75rem;
80
- color: #64748b;
80
+ color: var(--color-gray-500, #64748b);
81
81
  font-size: 0.875rem;
82
82
  border-radius: 0.375rem;
83
83
  cursor: pointer;
@@ -86,8 +86,8 @@
86
86
  }
87
87
 
88
88
  .nav-toggle:hover {
89
- background: #f1f5f9;
90
- color: #1e293b;
89
+ background: var(--color-gray-100, #f1f5f9);
90
+ color: var(--color-gray-800, #1e293b);
91
91
  }
92
92
 
93
93
  // Arrow indicator