@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.
Files changed (48) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/CHANGELOG.md +27 -0
  3. package/README.md +2 -0
  4. package/assets/css/notion-style.css +141 -0
  5. package/assets/js/main.js +76 -0
  6. package/html/README.html +41 -149
  7. package/html/css/notion-style.css +13 -253
  8. package/html/documentation-index.html +24 -127
  9. package/html/guides/authentication-default-change.html +15 -130
  10. package/html/guides/authentication-guide.html +27 -141
  11. package/html/guides/claude-workflow-guide.html +30 -137
  12. package/html/guides/documentation-standards.html +19 -133
  13. package/html/guides/image-modal-guide.html +381 -0
  14. package/html/guides/phosphor-icons-guide.html +35 -150
  15. package/html/guides/private-directory-authentication.html +15 -130
  16. package/html/guides/public-site-deployment.html +15 -130
  17. package/html/guides/search-engine-verification-guide.html +15 -130
  18. package/html/guides/seo-guide.html +15 -130
  19. package/html/guides/seo-optimization-guide.html +46 -159
  20. package/html/guides/troubleshooting-guide.html +27 -141
  21. package/html/guides/windows-setup-guide.html +46 -161
  22. package/html/image-modal-test.html +189 -0
  23. package/html/index.html +41 -149
  24. package/html/js/auth.js +39 -118
  25. package/html/js/main.js +25 -183
  26. package/html/private/cache-control-anti-pattern.html +20 -135
  27. package/html/private/launch/README.html +23 -144
  28. package/html/private/launch/auth-cleanup-summary.html +32 -153
  29. package/html/private/launch/bubble-plugin-specification.html +15 -136
  30. package/html/private/launch/go-to-market-strategy.html +17 -138
  31. package/html/private/launch/launch-announcements.html +31 -151
  32. package/html/private/launch/vercel-deployment-auth-setup.html +17 -138
  33. package/html/private/next-steps-walkthrough.html +21 -136
  34. package/html/private/supabase-auth-implementation-completed.html +29 -143
  35. package/html/private/supabase-auth-implementation-plan.html +22 -136
  36. package/html/private/supabase-auth-integration-plan.html +29 -142
  37. package/html/private/supabase-auth-setup-guide.html +24 -139
  38. package/html/private/test-private-doc.html +15 -130
  39. package/html/private/user-management-tooling.html +15 -130
  40. package/html/prompts/markdown-document-standards.html +288 -0
  41. package/html/sitemap.xml +56 -44
  42. package/html/vercel-cli-setup-guide.html +19 -128
  43. package/html/vercel-first-time-setup-guide.html +16 -125
  44. package/lib/core-builder.js +1 -0
  45. package/lib/emoji-mapper.js +25 -0
  46. package/package/assets/css/notion-style.css +432 -135
  47. package/package/assets/js/main.js +259 -25
  48. 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">&times;</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
  });