@knowcode/doc-builder 1.8.7 → 1.9.1
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.
- package/.claude/settings.local.json +2 -1
- package/CHANGELOG.md +27 -0
- package/README.md +2 -0
- package/assets/css/notion-style.css +141 -0
- package/assets/js/main.js +76 -0
- package/html/README.html +41 -149
- package/html/css/notion-style.css +13 -253
- package/html/documentation-index.html +24 -127
- package/html/guides/authentication-default-change.html +15 -130
- package/html/guides/authentication-guide.html +27 -141
- package/html/guides/claude-workflow-guide.html +30 -137
- package/html/guides/documentation-standards.html +19 -133
- package/html/guides/image-modal-guide.html +381 -0
- package/html/guides/phosphor-icons-guide.html +35 -150
- package/html/guides/private-directory-authentication.html +15 -130
- package/html/guides/public-site-deployment.html +15 -130
- package/html/guides/search-engine-verification-guide.html +15 -130
- package/html/guides/seo-guide.html +15 -130
- package/html/guides/seo-optimization-guide.html +46 -159
- package/html/guides/troubleshooting-guide.html +27 -141
- package/html/guides/windows-setup-guide.html +46 -161
- package/html/image-modal-test.html +189 -0
- package/html/index.html +41 -149
- package/html/js/auth.js +39 -118
- package/html/js/main.js +25 -183
- package/html/private/cache-control-anti-pattern.html +20 -135
- package/html/private/launch/README.html +23 -144
- package/html/private/launch/auth-cleanup-summary.html +32 -153
- package/html/private/launch/bubble-plugin-specification.html +15 -136
- package/html/private/launch/go-to-market-strategy.html +17 -138
- package/html/private/launch/launch-announcements.html +31 -151
- package/html/private/launch/vercel-deployment-auth-setup.html +17 -138
- package/html/private/next-steps-walkthrough.html +21 -136
- package/html/private/supabase-auth-implementation-completed.html +29 -143
- package/html/private/supabase-auth-implementation-plan.html +22 -136
- package/html/private/supabase-auth-integration-plan.html +29 -142
- package/html/private/supabase-auth-setup-guide.html +24 -139
- package/html/private/test-private-doc.html +15 -130
- package/html/private/user-management-tooling.html +15 -130
- package/html/prompts/markdown-document-standards.html +288 -0
- package/html/sitemap.xml +56 -44
- package/html/vercel-cli-setup-guide.html +19 -128
- package/html/vercel-first-time-setup-guide.html +16 -125
- package/lib/core-builder.js +1 -0
- package/lib/emoji-mapper.js +25 -0
- package/package/assets/css/notion-style.css +432 -135
- package/package/assets/js/main.js +259 -25
- package/package.json +1 -1
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"Bash(./user-management/add-users.sh:*)",
|
|
45
45
|
"Bash(DEBUG=1 ./add-users.sh add wru-bid-analysis.vercel.app lindsay@knowcode.tech)",
|
|
46
46
|
"Bash(brew upgrade:*)",
|
|
47
|
-
"Bash(psql:*)"
|
|
47
|
+
"Bash(psql:*)",
|
|
48
|
+
"Bash(open /Users/lindsaysmith/Documents/lambda1.nosync/doc-builder/html/image-modal-test.html)"
|
|
48
49
|
],
|
|
49
50
|
"deny": []
|
|
50
51
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,33 @@ All notable changes to @knowcode/doc-builder will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.9.0] - 2025-07-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Image Modal System** - Click any image to view in full-screen modal
|
|
12
|
+
- Professional image modal with smooth animations and backdrop blur
|
|
13
|
+
- Multiple close methods: X button, overlay click, Escape key
|
|
14
|
+
- Auto-displays alt text as captions when available
|
|
15
|
+
- Responsive design for mobile and desktop
|
|
16
|
+
- Dark theme support with proper styling
|
|
17
|
+
- Hover effects on images with subtle transform and shadow
|
|
18
|
+
- Comprehensive markdown document standards guide
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
- All content images automatically become clickable
|
|
22
|
+
- Modal prevents body scrolling when open
|
|
23
|
+
- Professional styling with rounded corners and shadows
|
|
24
|
+
- Keyboard accessibility with Escape key support
|
|
25
|
+
- Alt text integration for meaningful captions
|
|
26
|
+
- Mobile-optimized with adjusted button and caption sizes
|
|
27
|
+
|
|
28
|
+
### Technical Details
|
|
29
|
+
- CSS-first approach with minimal JavaScript
|
|
30
|
+
- Auto-initialization for all content images via `initImageModal()`
|
|
31
|
+
- Event delegation for proper cleanup and performance
|
|
32
|
+
- Uses CSS variables for consistent theming
|
|
33
|
+
- Backdrop filter effects for modern browser support
|
|
34
|
+
|
|
8
35
|
## [1.8.7] - 2025-07-26
|
|
9
36
|
|
|
10
37
|
### Fixed
|
package/README.md
CHANGED
|
@@ -36,6 +36,7 @@ npx @knowcode/doc-builder@latest deploy
|
|
|
36
36
|
|
|
37
37
|
- **Scans** your markdown files and automatically generates navigation
|
|
38
38
|
- **Converts** markdown to HTML with syntax highlighting and diagram support
|
|
39
|
+
- **Enhances** images with clickable modals for full-screen viewing
|
|
39
40
|
- **Styles** everything with a clean, Notion-inspired theme
|
|
40
41
|
- **Deploys** to Vercel with a single command - leveraging their generous free tier
|
|
41
42
|
- **Provides** optional features like authentication, dark mode, and changelog generation, SEO
|
|
@@ -74,6 +75,7 @@ This aligns perfectly with our mission: beautiful documentation should be access
|
|
|
74
75
|
- 🔍 **SEO Optimized** - Meta tags & structured data
|
|
75
76
|
- 🔐 **Optional Auth** - Supabase authentication (opt-in)
|
|
76
77
|
- 📊 **Mermaid Diagrams** - Built-in diagram support
|
|
78
|
+
- 🖼️ **Image Modals** - Click any image for full-screen view
|
|
77
79
|
- 🌙 **Dark Mode** - Automatic theme switching
|
|
78
80
|
- ☁️ **Vercel Deploy** - One-command deployment
|
|
79
81
|
- ✅ **Google Verification** - Search Console ready
|
|
@@ -2066,5 +2066,146 @@ body.authenticated .private-nav {
|
|
|
2066
2066
|
.private-nav .nav-title::after {
|
|
2067
2067
|
content: ' 🔒';
|
|
2068
2068
|
font-size: 0.8em;
|
|
2069
|
+
}
|
|
2070
|
+
|
|
2071
|
+
/* ============================================================================
|
|
2072
|
+
Image Modal System
|
|
2073
|
+
============================================================================ */
|
|
2074
|
+
|
|
2075
|
+
/* Style all content images to be clickable */
|
|
2076
|
+
.content img {
|
|
2077
|
+
cursor: pointer;
|
|
2078
|
+
transition: all var(--duration-normal) var(--easing-out);
|
|
2079
|
+
border-radius: var(--radius-md);
|
|
2080
|
+
max-width: 100%;
|
|
2081
|
+
height: auto;
|
|
2082
|
+
}
|
|
2083
|
+
|
|
2084
|
+
.content img:hover {
|
|
2085
|
+
opacity: 0.9;
|
|
2086
|
+
transform: scale(1.02);
|
|
2087
|
+
box-shadow: var(--shadow-lg);
|
|
2088
|
+
}
|
|
2089
|
+
|
|
2090
|
+
/* Modal overlay - hidden by default */
|
|
2091
|
+
.image-modal {
|
|
2092
|
+
display: none;
|
|
2093
|
+
position: fixed;
|
|
2094
|
+
top: 0;
|
|
2095
|
+
left: 0;
|
|
2096
|
+
width: 100%;
|
|
2097
|
+
height: 100%;
|
|
2098
|
+
background: rgba(0, 0, 0, 0.9);
|
|
2099
|
+
z-index: 10000;
|
|
2100
|
+
cursor: pointer;
|
|
2101
|
+
opacity: 0;
|
|
2102
|
+
transition: opacity var(--duration-normal) var(--easing-out);
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
/* Show modal when active */
|
|
2106
|
+
.image-modal.active {
|
|
2107
|
+
display: flex;
|
|
2108
|
+
align-items: center;
|
|
2109
|
+
justify-content: center;
|
|
2110
|
+
opacity: 1;
|
|
2111
|
+
}
|
|
2112
|
+
|
|
2113
|
+
/* Modal content container */
|
|
2114
|
+
.image-modal-content {
|
|
2115
|
+
position: relative;
|
|
2116
|
+
max-width: 95%;
|
|
2117
|
+
max-height: 95%;
|
|
2118
|
+
margin: auto;
|
|
2119
|
+
cursor: default;
|
|
2120
|
+
}
|
|
2121
|
+
|
|
2122
|
+
/* Modal image */
|
|
2123
|
+
.image-modal-img {
|
|
2124
|
+
width: auto;
|
|
2125
|
+
height: auto;
|
|
2126
|
+
max-width: 100%;
|
|
2127
|
+
max-height: 100vh;
|
|
2128
|
+
border-radius: var(--radius-lg);
|
|
2129
|
+
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
|
2130
|
+
cursor: default;
|
|
2131
|
+
}
|
|
2132
|
+
|
|
2133
|
+
/* Close button */
|
|
2134
|
+
.image-modal-close {
|
|
2135
|
+
position: absolute;
|
|
2136
|
+
top: -50px;
|
|
2137
|
+
right: 0;
|
|
2138
|
+
background: rgba(255, 255, 255, 0.1);
|
|
2139
|
+
border: 2px solid rgba(255, 255, 255, 0.3);
|
|
2140
|
+
color: white;
|
|
2141
|
+
width: 40px;
|
|
2142
|
+
height: 40px;
|
|
2143
|
+
border-radius: 50%;
|
|
2144
|
+
cursor: pointer;
|
|
2145
|
+
display: flex;
|
|
2146
|
+
align-items: center;
|
|
2147
|
+
justify-content: center;
|
|
2148
|
+
font-size: 20px;
|
|
2149
|
+
font-weight: bold;
|
|
2150
|
+
transition: all var(--duration-fast) var(--easing-out);
|
|
2151
|
+
backdrop-filter: blur(10px);
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
.image-modal-close:hover {
|
|
2155
|
+
background: rgba(255, 255, 255, 0.2);
|
|
2156
|
+
border-color: rgba(255, 255, 255, 0.5);
|
|
2157
|
+
transform: scale(1.1);
|
|
2158
|
+
}
|
|
2159
|
+
|
|
2160
|
+
/* Image caption in modal */
|
|
2161
|
+
.image-modal-caption {
|
|
2162
|
+
position: absolute;
|
|
2163
|
+
bottom: -50px;
|
|
2164
|
+
left: 0;
|
|
2165
|
+
right: 0;
|
|
2166
|
+
background: rgba(0, 0, 0, 0.7);
|
|
2167
|
+
color: white;
|
|
2168
|
+
padding: var(--space-3) var(--space-4);
|
|
2169
|
+
border-radius: var(--radius-md);
|
|
2170
|
+
font-size: var(--text-sm);
|
|
2171
|
+
text-align: center;
|
|
2172
|
+
backdrop-filter: blur(10px);
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
/* Dark theme adjustments */
|
|
2176
|
+
[data-theme="dark"] .image-modal {
|
|
2177
|
+
background: rgba(0, 0, 0, 0.95);
|
|
2178
|
+
}
|
|
2179
|
+
|
|
2180
|
+
[data-theme="dark"] .image-modal-close {
|
|
2181
|
+
background: rgba(255, 255, 255, 0.15);
|
|
2182
|
+
border-color: rgba(255, 255, 255, 0.4);
|
|
2183
|
+
}
|
|
2184
|
+
|
|
2185
|
+
[data-theme="dark"] .image-modal-close:hover {
|
|
2186
|
+
background: rgba(255, 255, 255, 0.25);
|
|
2187
|
+
border-color: rgba(255, 255, 255, 0.6);
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
/* Mobile responsive adjustments */
|
|
2191
|
+
@media (max-width: 768px) {
|
|
2192
|
+
.image-modal-content {
|
|
2193
|
+
max-width: 98%;
|
|
2194
|
+
max-height: 98%;
|
|
2195
|
+
}
|
|
2196
|
+
|
|
2197
|
+
.image-modal-close {
|
|
2198
|
+
top: -40px;
|
|
2199
|
+
width: 35px;
|
|
2200
|
+
height: 35px;
|
|
2201
|
+
font-size: 18px;
|
|
2202
|
+
}
|
|
2203
|
+
|
|
2204
|
+
.image-modal-caption {
|
|
2205
|
+
bottom: -40px;
|
|
2206
|
+
font-size: var(--text-xs);
|
|
2207
|
+
padding: var(--space-2) var(--space-3);
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2069
2210
|
opacity: 0.6;
|
|
2070
2211
|
}
|
package/assets/js/main.js
CHANGED
|
@@ -1475,6 +1475,81 @@ function initMarkdownLinkRedirects() {
|
|
|
1475
1475
|
});
|
|
1476
1476
|
}
|
|
1477
1477
|
|
|
1478
|
+
// Image Modal System
|
|
1479
|
+
function initImageModal() {
|
|
1480
|
+
// Create modal HTML structure
|
|
1481
|
+
const modalHTML = `
|
|
1482
|
+
<div class="image-modal" id="imageModal">
|
|
1483
|
+
<div class="image-modal-content">
|
|
1484
|
+
<div class="image-modal-close" id="imageModalClose">×</div>
|
|
1485
|
+
<img class="image-modal-img" id="imageModalImg" src="" alt="">
|
|
1486
|
+
<div class="image-modal-caption" id="imageModalCaption"></div>
|
|
1487
|
+
</div>
|
|
1488
|
+
</div>
|
|
1489
|
+
`;
|
|
1490
|
+
|
|
1491
|
+
// Add modal to document body
|
|
1492
|
+
document.body.insertAdjacentHTML('beforeend', modalHTML);
|
|
1493
|
+
|
|
1494
|
+
const modal = document.getElementById('imageModal');
|
|
1495
|
+
const modalImg = document.getElementById('imageModalImg');
|
|
1496
|
+
const modalCaption = document.getElementById('imageModalCaption');
|
|
1497
|
+
const closeBtn = document.getElementById('imageModalClose');
|
|
1498
|
+
|
|
1499
|
+
// Add click handlers to all content images
|
|
1500
|
+
const contentImages = document.querySelectorAll('.content img');
|
|
1501
|
+
contentImages.forEach(img => {
|
|
1502
|
+
img.addEventListener('click', function() {
|
|
1503
|
+
modal.classList.add('active');
|
|
1504
|
+
modalImg.src = this.src;
|
|
1505
|
+
modalImg.alt = this.alt;
|
|
1506
|
+
modalCaption.textContent = this.alt;
|
|
1507
|
+
|
|
1508
|
+
// Hide caption if no alt text
|
|
1509
|
+
if (!this.alt) {
|
|
1510
|
+
modalCaption.style.display = 'none';
|
|
1511
|
+
} else {
|
|
1512
|
+
modalCaption.style.display = 'block';
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
// Prevent body scrolling
|
|
1516
|
+
document.body.style.overflow = 'hidden';
|
|
1517
|
+
});
|
|
1518
|
+
});
|
|
1519
|
+
|
|
1520
|
+
// Close modal functions
|
|
1521
|
+
function closeModal() {
|
|
1522
|
+
modal.classList.remove('active');
|
|
1523
|
+
document.body.style.overflow = '';
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
// Close on X button click
|
|
1527
|
+
closeBtn.addEventListener('click', closeModal);
|
|
1528
|
+
|
|
1529
|
+
// Close on overlay click (but not on image click)
|
|
1530
|
+
modal.addEventListener('click', function(e) {
|
|
1531
|
+
if (e.target === modal) {
|
|
1532
|
+
closeModal();
|
|
1533
|
+
}
|
|
1534
|
+
});
|
|
1535
|
+
|
|
1536
|
+
// Close on Escape key
|
|
1537
|
+
document.addEventListener('keydown', function(e) {
|
|
1538
|
+
if (e.key === 'Escape' && modal.classList.contains('active')) {
|
|
1539
|
+
closeModal();
|
|
1540
|
+
}
|
|
1541
|
+
});
|
|
1542
|
+
|
|
1543
|
+
// Prevent modal content from closing modal when clicked
|
|
1544
|
+
modalImg.addEventListener('click', function(e) {
|
|
1545
|
+
e.stopPropagation();
|
|
1546
|
+
});
|
|
1547
|
+
|
|
1548
|
+
document.querySelector('.image-modal-content').addEventListener('click', function(e) {
|
|
1549
|
+
e.stopPropagation();
|
|
1550
|
+
});
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1478
1553
|
// Initialize on DOM Load
|
|
1479
1554
|
document.addEventListener('DOMContentLoaded', () => {
|
|
1480
1555
|
initMarkdownLinkRedirects();
|
|
@@ -1485,5 +1560,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
1485
1560
|
initNavigationFilter();
|
|
1486
1561
|
addPDFExportButton();
|
|
1487
1562
|
generateBreadcrumbs();
|
|
1563
|
+
initImageModal();
|
|
1488
1564
|
initTooltips();
|
|
1489
1565
|
});
|