mirror of
				https://github.com/imfing/hextra.git
				synced 2025-10-31 14:54:57 -04:00 
			
		
		
		
	Compare commits
	
		
			32 Commits
		
	
	
		
			v0.8.2
			...
			aa60cf3580
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | aa60cf3580 | ||
|   | 0dcf7e7a40 | ||
|   | da56d153aa | ||
|   | 5c0698c3c0 | ||
|   | ebdaf0fd4a | ||
|   | 86a1f3fd96 | ||
|   | 4c4f43779c | ||
|   | ff85e6951d | ||
|   | ec37876f4d | ||
|   | f65aca556d | ||
|   | 7b7eb0f1f3 | ||
|   | 80fae9f86d | ||
|   | 1358c5b945 | ||
|   | b4d292010b | ||
|   | 37089d237a | ||
|   | 2565f372d1 | ||
|   | a97a1791cc | ||
|   | 97ea67198b | ||
|   | 94624bcac6 | ||
|   | f1f84b1bf9 | ||
|   | d367a443f1 | ||
|   | 36ab5287b5 | ||
|   | 9173f59392 | ||
|   | c70900c25f | ||
|   | cabdb421e3 | ||
|   | de9f9b312e | ||
|   | 2af73b3d7e | ||
|   | d1c3c40a95 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 086af4d173 | ||
|   | c6de4b5b6b | ||
|   | 66d2bf57ba | ||
|   | 526be88d7b | 
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							| @@ -17,6 +17,8 @@ assignees: '' | ||||
| 2.  | ||||
| 3.  | ||||
|  | ||||
| <!-- Provide a minimal example or link to a repository that reproduces the bug --> | ||||
|  | ||||
| **Expected Behavior** | ||||
|  | ||||
| <!-- What should have happened? --> | ||||
|   | ||||
							
								
								
									
										15
									
								
								.github/workflows/pages.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/pages.yml
									
									
									
									
										vendored
									
									
								
							| @@ -31,7 +31,7 @@ jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     env: | ||||
|       HUGO_VERSION: 0.131.0 | ||||
|       HUGO_VERSION: 0.136.5 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
| @@ -41,10 +41,10 @@ jobs: | ||||
|       - name: Setup Go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: '1.22' | ||||
|           go-version: '1.23' | ||||
|       - name: Setup Pages | ||||
|         id: pages | ||||
|         uses: actions/configure-pages@v4 | ||||
|         uses: actions/configure-pages@v5 | ||||
|       - name: Setup Hugo | ||||
|         run: | | ||||
|           wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ | ||||
| @@ -54,11 +54,12 @@ jobs: | ||||
|           # For maximum backward compatibility with Hugo modules | ||||
|           HUGO_ENVIRONMENT: production | ||||
|           HUGO_ENV: production | ||||
|         # Use the latest release of the theme to build exampleSite | ||||
|         run: | | ||||
|           hugo \ | ||||
|             --minify \ | ||||
|             --themesDir=../.. --source=exampleSite \ | ||||
|             --baseURL "${{ steps.pages.outputs.base_url }}/" | ||||
|           cd exampleSite && rm go.mod | ||||
|           hugo mod init github.com/imfing/hextra/exampleSite | ||||
|           hugo mod get -u github.com/imfing/hextra | ||||
|           hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/" | ||||
|       - name: Upload artifact | ||||
|         uses: actions/upload-pages-artifact@v3 | ||||
|         with: | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
| - **响应式布局和深色模式支持** - 在任何设备上看起来都足够美观, 无论是手机, 平板电脑或者电脑. 深色模式的支持使 Hextra 可以应对各种照明环境. | ||||
| - **快速且轻量** - 由 Hugo 强力支持, Hugo 是一个快如闪电的静态站点生成器, 这一切都只需一个可执行文件, Hextra 始终保持最小化, 无需 Javascript 或者 Node.js. | ||||
| - **全文搜索** - 集成了 Flexsearch 的全文搜索, 无需额外的配置. | ||||
| - **网站中的瑞士军刀** - Markdown, 代码高亮, LaTex 数学公式, diagrams 图表和 Shortcodes 都可以用于丰富你的内容. 目录, 面包屑导航, 分页, 侧边栏等均由 Hextra 自动生成。 | ||||
| - **功能齐全** - Markdown, 代码高亮, LaTex 数学公式, diagrams 图表和 Shortcodes 都可以用于丰富你的内容. 目录, 面包屑导航, 分页, 侧边栏等均由 Hextra 自动生成。 | ||||
| - **多语言和 SEO Ready** - Hugo 的多语言模式使得构建多语言网站更简单. 具有 SEO tags, Open Graph, 和 Twitter Cards 等诸多开箱即用的功能. | ||||
|  | ||||
| ## 快速开始 | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
| ! tailwindcss v3.4.9 | MIT License | https://tailwindcss.com | ||||
| ! tailwindcss v3.4.10 | MIT License | https://tailwindcss.com | ||||
| *//* | ||||
| 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) | ||||
| 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) | ||||
| @@ -1006,18 +1006,18 @@ video { | ||||
| } | ||||
| .hx-bg-primary-100 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 94% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hx-bg-primary-400 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 66% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hx-bg-primary-600 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hx-bg-primary-700\/5 { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / 0.05); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); | ||||
| } | ||||
| .hx-bg-red-100 { | ||||
|   --tw-bg-opacity: 1; | ||||
| @@ -1176,6 +1176,9 @@ video { | ||||
| .hx-text-4xl { | ||||
|   font-size: 2.25rem; | ||||
| } | ||||
| .hx-text-\[\.65rem\] { | ||||
|   font-size: .65rem; | ||||
| } | ||||
| .hx-text-\[10px\] { | ||||
|   font-size: 10px; | ||||
| } | ||||
| @@ -1271,7 +1274,7 @@ video { | ||||
| } | ||||
| .hx-text-primary-800 { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 32% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / var(--tw-text-opacity)); | ||||
| } | ||||
| .hx-text-red-900 { | ||||
|   --tw-text-opacity: 1; | ||||
| @@ -1446,7 +1449,7 @@ video { | ||||
|   } | ||||
| } | ||||
| .content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { | ||||
|   border-color: hsl(var(--primary-hue) var(--primary-saturation) 94% / 0.1); | ||||
|   border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.1); | ||||
|   --tw-text-opacity: 1; | ||||
|   color: rgb(241 245 249 / var(--tw-text-opacity)); | ||||
| } | ||||
| @@ -1514,7 +1517,7 @@ video { | ||||
| } | ||||
| .content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)) { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
|   text-decoration-line: underline; | ||||
|   text-decoration-thickness: from-font; | ||||
|   text-underline-position: from-font; | ||||
| @@ -1548,7 +1551,7 @@ video { | ||||
|   margin-bottom: 1rem; | ||||
|   overflow-x: auto; | ||||
|   border-radius: 0.75rem; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / 0.05); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); | ||||
|   padding-top: 1rem; | ||||
|   padding-bottom: 1rem; | ||||
|   font-size: .9em; | ||||
| @@ -1560,18 +1563,18 @@ video { | ||||
|  | ||||
|   .content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)) { | ||||
|     border-width: 1px; | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 24% / 0.2); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 24) / 0.2); | ||||
|     --tw-contrast: contrast(1.5); | ||||
|     filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); | ||||
|   } | ||||
| } | ||||
| .content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 77% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); | ||||
| } | ||||
| @media (prefers-contrast: more) { | ||||
|  | ||||
|   .content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 94% / 0.4); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.4); | ||||
|   } | ||||
| } | ||||
| .content :where(code):not(:where(.hextra-code-block code, [class~=not-prose],[class~=not-prose] *)) { | ||||
| @@ -2132,7 +2135,7 @@ article details > summary::before { | ||||
| } | ||||
| .hextra-code-block pre { | ||||
|   overflow-x: auto; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / 0.05); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); | ||||
|   font-size: .9em; | ||||
|   font-weight: 500; | ||||
|   -webkit-font-smoothing: auto; | ||||
| @@ -2142,18 +2145,18 @@ article details > summary::before { | ||||
|  | ||||
|   .hextra-code-block pre { | ||||
|     border-width: 1px; | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 24% / 0.2); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 24) / 0.2); | ||||
|     --tw-contrast: contrast(1.5); | ||||
|     filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); | ||||
|   } | ||||
| } | ||||
| .hextra-code-block pre:is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 77% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); | ||||
| } | ||||
| @media (prefers-contrast: more) { | ||||
|  | ||||
|   .hextra-code-block pre:is(html[class~="dark"] *) { | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 94% / 0.4); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.4); | ||||
|   } | ||||
| } | ||||
| .hextra-code-block .filename { | ||||
| @@ -2166,7 +2169,7 @@ article details > summary::before { | ||||
|   white-space: nowrap; | ||||
|   border-top-left-radius: 0.75rem; | ||||
|   border-top-right-radius: 0.75rem; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / 0.05); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); | ||||
|   padding-top: 0.5rem; | ||||
|   padding-bottom: 0.5rem; | ||||
|   padding-left: 1rem; | ||||
| @@ -2176,7 +2179,7 @@ article details > summary::before { | ||||
|   color: rgb(55 65 81 / var(--tw-text-opacity)); | ||||
| } | ||||
| .hextra-code-block .filename:is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 77% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); | ||||
|   --tw-text-opacity: 1; | ||||
|   color: rgb(229 231 235 / var(--tw-text-opacity)); | ||||
| } | ||||
| @@ -2233,7 +2236,7 @@ article details > summary::before { | ||||
| .chroma .hl { | ||||
|   display: block; | ||||
|   width: 100%; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 32% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / 0.1); | ||||
| } | ||||
| .hextra-cards { | ||||
|   grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--hextra-cards-grid-cols))), 1fr)); | ||||
| @@ -2269,7 +2272,6 @@ article details > summary::before { | ||||
|   top: 5px; | ||||
|   right: 5px; | ||||
|   z-index: 10; | ||||
|   font-size: .65rem; | ||||
| } | ||||
| .steps h3 { | ||||
|   counter-increment: step; | ||||
| @@ -2346,13 +2348,13 @@ article details > summary::before { | ||||
| } | ||||
| .search-wrapper li .active { | ||||
|   border-radius: 0.375rem; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / 0.1); | ||||
| } | ||||
| @media (prefers-contrast: more) { | ||||
|  | ||||
|   .search-wrapper li .active { | ||||
|     --tw-border-opacity: 1; | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / var(--tw-border-opacity)); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); | ||||
|   } | ||||
| } | ||||
| .search-wrapper .no-result { | ||||
| @@ -2439,7 +2441,7 @@ article details > summary::before { | ||||
|   } | ||||
| .search-wrapper .match { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
| } | ||||
| @media (max-width: 767px) { | ||||
|   .sidebar-container { | ||||
| @@ -2532,30 +2534,30 @@ nav .search-wrapper { | ||||
| .hamburger-menu svg.open > g:nth-of-type(2) path { | ||||
|         transform: translate3d(0, -4px, 0); | ||||
|       } | ||||
| .hextra-scrollbar { | ||||
| .hextra-scrollbar, .hextra-scrollbar * { | ||||
|   scrollbar-width: thin; /* Firefox */ | ||||
|   scrollbar-color: oklch(55.55% 0 0 / 40%) transparent; /* Firefox */ | ||||
|  | ||||
|   scrollbar-gutter: stable; | ||||
| } | ||||
| .hextra-scrollbar::-webkit-scrollbar { | ||||
| .hextra-scrollbar::-webkit-scrollbar, .hextra-scrollbar *::-webkit-scrollbar { | ||||
|   height: 0.75rem; | ||||
|   width: 0.75rem; | ||||
| } | ||||
| .hextra-scrollbar::-webkit-scrollbar-track { | ||||
| .hextra-scrollbar::-webkit-scrollbar-track, .hextra-scrollbar *::-webkit-scrollbar-track { | ||||
|   background-color: transparent; | ||||
| } | ||||
| .hextra-scrollbar::-webkit-scrollbar-thumb { | ||||
| .hextra-scrollbar::-webkit-scrollbar-thumb, .hextra-scrollbar *::-webkit-scrollbar-thumb { | ||||
|   border-radius: 10px; | ||||
| } | ||||
| .hextra-scrollbar:hover::-webkit-scrollbar-thumb { | ||||
| .hextra-scrollbar:hover::-webkit-scrollbar-thumb, .hextra-scrollbar *:hover::-webkit-scrollbar-thumb { | ||||
|     border: 3px solid transparent; | ||||
|     background-color: var(--tw-shadow-color); | ||||
|     background-clip: content-box; | ||||
|     --tw-shadow-color: rgb(115 115 115 / 0.2); | ||||
|     --tw-shadow: var(--tw-shadow-colored); | ||||
|   } | ||||
| .hextra-scrollbar:hover::-webkit-scrollbar-thumb:hover { | ||||
| .hextra-scrollbar:hover::-webkit-scrollbar-thumb:hover, .hextra-scrollbar *:hover::-webkit-scrollbar-thumb:hover { | ||||
|   --tw-shadow-color: rgb(115 115 115 / 0.4); | ||||
|   --tw-shadow: var(--tw-shadow-colored); | ||||
| } | ||||
| @@ -2577,6 +2579,27 @@ nav .search-wrapper { | ||||
|     grid-template-columns: repeat(var(--hextra-feature-grid-cols), minmax(0, 1fr)) | ||||
| } | ||||
|   } | ||||
| .hextra-jupyter-code-cell { | ||||
|   scrollbar-gutter: auto; | ||||
|   margin-top: 1.5rem; | ||||
| } | ||||
| .hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container { | ||||
|   overflow: hidden; | ||||
|   font-size: .75rem; | ||||
| } | ||||
| .hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs { | ||||
|   max-height: 50vh; | ||||
|   overflow: auto; | ||||
| } | ||||
| .hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre { | ||||
|   max-width: 100%; | ||||
|   overflow: auto; | ||||
|   font-size: .75rem; | ||||
| } | ||||
| .hextra-badge { | ||||
|   display: inline-flex; | ||||
|   align-items: center; | ||||
| } | ||||
| html { | ||||
|   font-size: 1rem; | ||||
|   -webkit-font-smoothing: antialiased; | ||||
| @@ -2598,12 +2621,14 @@ body:is(html[class~="dark"] *) { | ||||
| :root { | ||||
|   --primary-hue: 212deg; | ||||
|   --primary-saturation: 100%; | ||||
|   --primary-lightness: 50%; | ||||
|   --navbar-height: 4rem; | ||||
|   --menu-height: 3.75rem; | ||||
| } | ||||
| .dark { | ||||
|   --primary-hue: 204deg; | ||||
|   --primary-saturation: 100%; | ||||
|   --primary-lightness: 50%; | ||||
| } | ||||
| .placeholder\:hx-text-gray-500::-moz-placeholder { | ||||
|   --tw-text-opacity: 1; | ||||
| @@ -2700,11 +2725,11 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .hover\:hx-bg-primary-50:hover { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 97% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 47) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hover\:hx-bg-primary-700:hover { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hover\:hx-bg-slate-50:hover { | ||||
|   --tw-bg-opacity: 1; | ||||
| @@ -2724,7 +2749,7 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .hover\:hx-text-primary-600:hover { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
| } | ||||
| .hover\:hx-opacity-60:hover { | ||||
|   opacity: 0.6; | ||||
| @@ -2761,7 +2786,7 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .focus\:hx-ring-primary-300:focus { | ||||
|   --tw-ring-opacity: 1; | ||||
|   --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) 77% / var(--tw-ring-opacity)); | ||||
|   --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / var(--tw-ring-opacity)); | ||||
| } | ||||
| .active\:hx-bg-gray-400\/20:active { | ||||
|   background-color: rgb(156 163 175 / 0.2); | ||||
| @@ -2806,11 +2831,11 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .data-\[state\=selected\]\:hx-border-primary-500[data-state="selected"] { | ||||
|   --tw-border-opacity: 1; | ||||
|   border-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / var(--tw-border-opacity)); | ||||
|   border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); | ||||
| } | ||||
| .data-\[state\=selected\]\:hx-text-primary-600[data-state="selected"] { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
| } | ||||
| .hx-group[data-theme="dark"] .group-data-\[theme\=dark\]\:hx-hidden { | ||||
|   display: none; | ||||
| @@ -2849,7 +2874,7 @@ body:is(html[class~="dark"] *) { | ||||
|  | ||||
|   .contrast-more\:hx-border-primary-500 { | ||||
|     --tw-border-opacity: 1; | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / var(--tw-border-opacity)); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); | ||||
|   } | ||||
|  | ||||
|   .contrast-more\:hx-border-transparent { | ||||
| @@ -2964,14 +2989,14 @@ body:is(html[class~="dark"] *) { | ||||
|   background-color: rgb(251 146 60 / 0.2); | ||||
| } | ||||
| .dark\:hx-bg-primary-300\/10:is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 77% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); | ||||
| } | ||||
| .dark\:hx-bg-primary-400\/10:is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 66% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / 0.1); | ||||
| } | ||||
| .dark\:hx-bg-primary-600:is(html[class~="dark"] *) { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .dark\:hx-bg-red-900\/30:is(html[class~="dark"] *) { | ||||
|   background-color: rgb(127 29 29 / 0.3); | ||||
| @@ -3025,7 +3050,7 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .dark\:hx-text-primary-600:is(html[class~="dark"] *) { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
| } | ||||
| .dark\:hx-text-red-200:is(html[class~="dark"] *) { | ||||
|   --tw-text-opacity: 1; | ||||
| @@ -3114,14 +3139,14 @@ body:is(html[class~="dark"] *) { | ||||
|   background-color: rgb(23 23 23 / var(--tw-bg-opacity)); | ||||
| } | ||||
| .dark\:hover\:hx-bg-primary-100\/5:hover:is(html[class~="dark"] *) { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 94% / 0.05); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.05); | ||||
| } | ||||
| .dark\:hover\:hx-bg-primary-700:hover:is(html[class~="dark"] *) { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 39% / var(--tw-bg-opacity)); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / var(--tw-bg-opacity)); | ||||
| } | ||||
| .hover\:dark\:hx-bg-primary-500\/10:is(html[class~="dark"] *):hover { | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / 0.1); | ||||
|   background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / 0.1); | ||||
| } | ||||
| .dark\:hover\:hx-text-gray-100:hover:is(html[class~="dark"] *) { | ||||
|   --tw-text-opacity: 1; | ||||
| @@ -3149,7 +3174,7 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .hover\:dark\:hx-text-primary-600:is(html[class~="dark"] *):hover { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) 45% / var(--tw-text-opacity)); | ||||
|   color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); | ||||
| } | ||||
| .dark\:hover\:hx-shadow-none:hover:is(html[class~="dark"] *) { | ||||
|   --tw-shadow: 0 0 #0000; | ||||
| @@ -3162,7 +3187,7 @@ body:is(html[class~="dark"] *) { | ||||
| } | ||||
| .dark\:focus\:hx-ring-primary-800:focus:is(html[class~="dark"] *) { | ||||
|   --tw-ring-opacity: 1; | ||||
|   --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) 32% / var(--tw-ring-opacity)); | ||||
|   --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / var(--tw-ring-opacity)); | ||||
| } | ||||
| @media (prefers-contrast: more) { | ||||
|  | ||||
| @@ -3182,7 +3207,7 @@ body:is(html[class~="dark"] *) { | ||||
|  | ||||
|   .contrast-more\:dark\:hx-border-primary-500:is(html[class~="dark"] *) { | ||||
|     --tw-border-opacity: 1; | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) 50% / var(--tw-border-opacity)); | ||||
|     border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); | ||||
|   } | ||||
|  | ||||
|   .dark\:contrast-more\:hx-border-neutral-400:is(html[class~="dark"] *) { | ||||
|   | ||||
							
								
								
									
										3
									
								
								assets/css/components/badge.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								assets/css/components/badge.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| .hextra-badge { | ||||
|   @apply hx-inline-flex hx-items-center; | ||||
| } | ||||
| @@ -38,5 +38,4 @@ | ||||
|   top: 5px; | ||||
|   right: 5px; | ||||
|   z-index: 10; | ||||
|   font-size: .65rem; | ||||
| } | ||||
|   | ||||
							
								
								
									
										17
									
								
								assets/css/components/jupyter.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								assets/css/components/jupyter.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| .hextra-jupyter-code-cell { | ||||
|   scrollbar-gutter: auto; | ||||
|  | ||||
|   @apply hx-mt-6; | ||||
|  | ||||
|   .hextra-jupyter-code-cell-outputs-container { | ||||
|     @apply hx-text-xs hx-overflow-hidden; | ||||
|  | ||||
|     .hextra-jupyter-code-cell-outputs { | ||||
|       @apply hx-overflow-auto hx-max-h-[50vh]; | ||||
|  | ||||
|       pre { | ||||
|         @apply hx-text-xs hx-overflow-auto hx-max-w-full; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| .hextra-scrollbar { | ||||
| .hextra-scrollbar, .hextra-scrollbar * { | ||||
|   scrollbar-width: thin; /* Firefox */ | ||||
|   scrollbar-color: oklch(55.55% 0 0 / 40%) transparent; /* Firefox */ | ||||
|  | ||||
|   | ||||
| @@ -10,6 +10,8 @@ | ||||
| @import "components/scrollbar.css"; | ||||
| @import "components/code-copy.css"; | ||||
| @import "components/hextra/feature-grid.css"; | ||||
| @import "components/jupyter.css"; | ||||
| @import "components/badge.css"; | ||||
|  | ||||
| html { | ||||
|   @apply hx-text-base hx-antialiased; | ||||
| @@ -24,6 +26,7 @@ body { | ||||
| :root { | ||||
|   --primary-hue: 212deg; | ||||
|   --primary-saturation: 100%; | ||||
|   --primary-lightness: 50%; | ||||
|   --navbar-height: 4rem; | ||||
|   --menu-height: 3.75rem; | ||||
| } | ||||
| @@ -31,4 +34,5 @@ body { | ||||
| .dark { | ||||
|   --primary-hue: 204deg; | ||||
|   --primary-saturation: 100%; | ||||
|   --primary-lightness: 50%; | ||||
| } | ||||
|   | ||||
| @@ -200,7 +200,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|       cache: 100, | ||||
|       document: { | ||||
|         id: 'id', | ||||
|         store: ['title'], | ||||
|         store: ['title', 'crumb'], | ||||
|         index: "content" | ||||
|       } | ||||
|     }); | ||||
| @@ -210,7 +210,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|       cache: 100, | ||||
|       document: { | ||||
|         id: 'id', | ||||
|         store: ['title', 'content', 'url', 'display'], | ||||
|         store: ['title', 'content', 'url', 'display', 'crumb'], | ||||
|         index: "content", | ||||
|         tag: 'pageId' | ||||
|       } | ||||
| @@ -222,6 +222,30 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|     for (const route in data) { | ||||
|       let pageContent = ''; | ||||
|       ++pageId; | ||||
|       const urlParts = route.split('/').filter(x => x != "" && !x.startsWith('#')); | ||||
|  | ||||
|       let crumb = ''; | ||||
|       let searchUrl = '/' | ||||
|       for (let i = 0; i < urlParts.length; i++) { | ||||
|         const urlPart = urlParts[i]; | ||||
|         searchUrl += urlPart + '/' | ||||
|  | ||||
|         const crumbData = data[searchUrl]; | ||||
|         if (!crumbData) { | ||||
|           console.warn('Excluded page', searchUrl, '- will not be included for search result breadcrumb for', route); | ||||
|           continue; | ||||
|         } | ||||
|  | ||||
|         let title = data[searchUrl].title; | ||||
|         if (title == "_index") { | ||||
|           title = urlPart.split("-").map(x => x).join(" "); | ||||
|         } | ||||
|         crumb += title; | ||||
|  | ||||
|         if (i < urlParts.length - 1) { | ||||
|           crumb += ' > '; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       for (const heading in data[route].data) { | ||||
|         const [hash, text] = heading.split('#'); | ||||
| @@ -235,6 +259,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|           id: url, | ||||
|           url, | ||||
|           title, | ||||
|           crumb, | ||||
|           pageId: `page_${pageId}`, | ||||
|           content: title, | ||||
|           ...(paragraphs[0] && { display: paragraphs[0] }) | ||||
| @@ -245,6 +270,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|             id: `${url}_${i}`, | ||||
|             url, | ||||
|             title, | ||||
|             crumb, | ||||
|             pageId: `page_${pageId}`, | ||||
|             content: paragraphs[i] | ||||
|           }); | ||||
| @@ -256,6 +282,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|       window.pageIndex.add({ | ||||
|         id: pageId, | ||||
|         title: data[route].title, | ||||
|         crumb, | ||||
|         content: pageContent | ||||
|       }); | ||||
|  | ||||
| @@ -308,7 +335,7 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|           _page_rk: i, | ||||
|           _section_rk: j, | ||||
|           route: url, | ||||
|           prefix: isFirstItemOfPage ? result.doc.title : undefined, | ||||
|           prefix: isFirstItemOfPage ? result.doc.crumb : undefined, | ||||
|           children: { title, content } | ||||
|         }) | ||||
|         isFirstItemOfPage = false | ||||
|   | ||||
| @@ -1,4 +1,9 @@ | ||||
| document.addEventListener("DOMContentLoaded", function () { | ||||
|   scrollToActiveItem(); | ||||
|   enableCollapsibles(); | ||||
| }); | ||||
|  | ||||
| function enableCollapsibles() { | ||||
|   const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); | ||||
|   buttons.forEach(function (button) { | ||||
|     button.addEventListener("click", function (e) { | ||||
| @@ -9,4 +14,23 @@ document.addEventListener("DOMContentLoaded", function () { | ||||
|       } | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| } | ||||
|  | ||||
| function scrollToActiveItem() { | ||||
|   const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); | ||||
|   const activeItems = document.querySelectorAll(".sidebar-active-item"); | ||||
|   const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { | ||||
|     return activeItem.getBoundingClientRect().height > 0; | ||||
|   }); | ||||
|  | ||||
|   if (!visibleActiveItem) { | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   const yOffset = visibleActiveItem.clientHeight; | ||||
|   const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; | ||||
|   sidebarScrollbar.scrollTo({ | ||||
|     behavior: "instant", | ||||
|     top: yDistance - yOffset | ||||
|   }); | ||||
| } | ||||
|   | ||||
							
								
								
									
										1754
									
								
								assets/lib/mermaid/mermaid.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1754
									
								
								assets/lib/mermaid/mermaid.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -36,6 +36,8 @@ hugo-full: > | ||||
|     <path fill="#fff" d="M1320.72 89.15c58.79 0 106.52 47.73 106.52 106.51 0 58.8-47.73 106.52-106.52 106.52-58.78 0-106.52-47.73-106.52-106.52 0-58.78 47.74-106.51 106.52-106.51zm0 39.57c36.95 0 66.94 30 66.94 66.94a66.97 66.97 0 0 1-66.94 66.94c-36.95 0-66.94-29.99-66.94-66.94a66.97 66.97 0 0 1 66.93-66.94h.01zm-283.8 65.31c0 47.18-8.94 60.93-26.81 80.58-17.87 19.65-41.57 27.57-71.1 27.57-27 0-48.75-9.58-67.61-26.23-20.88-18.45-36.08-47.04-36.08-78.95 0-31.37 11.72-58.48 32.49-78.67 18.22-17.67 45.34-29.18 73.3-29.18 33.77 0 68.83 15.98 90.44 47.53l-31.73 26.82c-13.45-25.03-32.94-33.46-60.82-34.26-30.83-.88-64.77 28.53-62.25 67.75 1.4 21.94 11.65 59.65 60.96 66.57 25.9 3.63 55.36-24.02 55.36-39.04H944.4v-37.5h92.5V194l.02.03zm-562.6-94.65h42.29v112.17c0 17.8.49 29.33 1.47 34.61 1.69 8.48 4.81 14.37 11.17 19.5 6.37 5.13 13.8 6.59 24.84 6.59 11.2 0 14.96-1.74 20.66-6.6 5.69-4.85 9.12-9.46 10.28-16.53 1.15-7.07 3.07-18.8 3.07-35.18V99.38h42.28v108.78c0 24.86-1.07 42.43-3.21 52.69-2.14 10.27-6.08 18.93-11.82 26-5.74 7.06-13.42 12.69-23.03 16.88-9.62 4.19-22.16 6.28-37.65 6.28-18.7 0-32.87-2.28-42.52-6.85-9.66-4.57-17.3-10.5-22.9-17.8-5.61-7.3-9.3-14.95-11.08-22.96-2.58-11.86-3.88-29.38-3.88-52.55V99.38h.03zM93.91 299.92V92.7h43.35v75.48h71.92V92.7h43.48v207.22h-43.48v-90.61h-71.92v90.61z"/> | ||||
|   </svg> | ||||
|  | ||||
| jupyter: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M7.157 22.201A1.784 1.799 0 0 1 5.374 24a1.784 1.799 0 0 1-1.784-1.799a1.784 1.799 0 0 1 1.784-1.799a1.784 1.799 0 0 1 1.783 1.799M20.582 1.427a1.415 1.427 0 0 1-1.415 1.428a1.415 1.427 0 0 1-1.416-1.428A1.415 1.427 0 0 1 19.167 0a1.415 1.427 0 0 1 1.415 1.427M4.992 3.336A1.047 1.056 0 0 1 3.946 4.39a1.047 1.056 0 0 1-1.047-1.055A1.047 1.056 0 0 1 3.946 2.28a1.047 1.056 0 0 1 1.046 1.056m7.336 1.517c3.769 0 7.06 1.38 8.768 3.424a9.36 9.36 0 0 0-3.393-4.547a9.24 9.24 0 0 0-5.377-1.728A9.24 9.24 0 0 0 6.95 3.73a9.36 9.36 0 0 0-3.394 4.547c1.713-2.04 5.004-3.424 8.772-3.424m.001 13.295c-3.768 0-7.06-1.381-8.768-3.425a9.36 9.36 0 0 0 3.394 4.547A9.24 9.24 0 0 0 12.33 21a9.24 9.24 0 0 0 5.377-1.729a9.36 9.36 0 0 0 3.393-4.547c-1.712 2.044-5.003 3.425-8.772 3.425Z" /></svg> | ||||
|  | ||||
| warning: <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"></path></svg> | ||||
| one: <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="-1 0 19 19"><path d="M16.417 9.6A7.917 7.917 0 1 1 8.5 1.683 7.917 7.917 0 0 1 16.417 9.6zM9.666 6.508H8.248L6.09 8.09l.806 1.103 1.222-.945v4.816h1.547z"></path></svg> | ||||
| cards: <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M6 6.878V6a2.25 2.25 0 0 1 2.25-2.25h7.5A2.25 2.25 0 0 1 18 6v.878m-12 0c.235-.083.487-.128.75-.128h10.5c.263 0 .515.045.75.128m-12 0A2.25 2.25 0 0 0 4.5 9v.878m13.5-3A2.25 2.25 0 0 1 19.5 9v.878m0 0a2.246 2.246 0 0 0-.75-.128H5.25c-.263 0-.515.045-.75.128m15 0A2.25 2.25 0 0 1 21 12v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6c0-.98.626-1.813 1.5-2.122"></path></svg> | ||||
| @@ -287,3 +289,4 @@ youtube: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill= | ||||
| x-twitter: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/></svg> | ||||
| linkedin: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg> | ||||
| slack: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52a2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52zm0 1.271a2.528 2.528 0 0 1 2.521 2.521a2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521a2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522zm0-1.268a2.527 2.527 0 0 1-2.52-2.523a2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523z" /></svg> | ||||
| bluesky: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 530"><path fill="currentColor" d="M136 44c66 50 138 151 164 205 26-54 98-155 164-205 48-36 126-64 126 25 0 18-10 149-16 170-21 74-96 93-163 81 117 20 147 86 82 153-122 125-176-32-189-72-3-8-4-11-4-8 0-3-1 0-4 8-13 40-67 197-189 72-65-67-35-133 82-153-67 12-142-7-163-81-6-21-16-152-16-170 0-89 78-61 126-25z"/></svg> | ||||
|   | ||||
							
								
								
									
										224
									
								
								exampleSite/assets/example.ipynb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								exampleSite/assets/example.ipynb
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -34,12 +34,13 @@ The color of text mixed with `other text` can customized with: | ||||
|  | ||||
| ### Primary Color | ||||
|  | ||||
| The primary color of the theme can be customized by setting the `--primary-hue` and `--primary-saturation` variables: | ||||
| The primary color of the theme can be customized by setting the `--primary-hue`, `--primary-saturation` and `--primary-lightness` variables: | ||||
|  | ||||
| ```css {filename="assets/css/custom.css"} | ||||
| :root { | ||||
|   --primary-hue: 100deg; | ||||
|   --primary-saturation: 90%; | ||||
|   --primary-lightness: 50%; | ||||
| } | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -186,10 +186,10 @@ To customize the [favicon](https://en.wikipedia.org/wiki/Favicon) for your site, | ||||
|   {{< /filetree/folder >}} | ||||
| {{< /filetree/container >}} | ||||
|  | ||||
| Include both `favicon.ico` and `favicon.svg` files in your project to ensure your site's favicons display correctly. | ||||
| Include `favicon.ico`, `favicon.svg` and `favicon-dark.svg` files in your project to ensure your site's favicons display correctly. | ||||
|  | ||||
| While `favicon.ico` is generally for older browsers, `favicon.svg` is supported by modern ones. The optional `favicon-dark.svg` can be included for a tailored experience in dark mode. | ||||
| Feel free to use tools like [favicon.io](https://favicon.io/) or [favycon](https://github.com/ruisaraiva19/favycon) to generate these icons. | ||||
| While `favicon.ico` is generally for older browsers, `favicon.svg` and `favicon-dark.svg` are supported by modern browsers. | ||||
| Use tools like [favicon.io](https://favicon.io/) or [favycon](https://github.com/ruisaraiva19/favycon) to generate such icons. | ||||
|  | ||||
| ### Theme Configuration | ||||
|  | ||||
|   | ||||
| @@ -54,7 +54,7 @@ jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     env: | ||||
|       HUGO_VERSION: 0.121.2 | ||||
|       HUGO_VERSION: 0.131.0 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
| @@ -64,7 +64,7 @@ jobs: | ||||
|       - name: Setup Go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: '1.21' | ||||
|           go-version: '1.22' | ||||
|       - name: Setup Pages | ||||
|         id: pages | ||||
|         uses: actions/configure-pages@v4 | ||||
| @@ -146,7 +146,7 @@ For more details, check out: | ||||
| 3. If you are not using [hextra-starter-template][hextra-starter-template], configure the following manually: | ||||
|    - Configure the Build command to `hugo --gc --minify` | ||||
|    - Specify the Publish directory to `public` | ||||
|    - Add Environment variable `HUGO_VERSION` and set to `0.119.0` | ||||
|    - Add Environment variable `HUGO_VERSION` and set to `0.132.2` | ||||
| 4. Deploy! | ||||
|  | ||||
| Check [Hugo on Netlify](https://docs.netlify.com/integrations/frameworks/hugo/) for more details. | ||||
|   | ||||
| @@ -117,18 +117,18 @@ Hugo از سینتکس [مارکداون](https://en.wikipedia.org/wiki/Markd | ||||
|  | ||||
| ### عکسها | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| با توضیحات: | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| ## پیکربندی | ||||
|   | ||||
| @@ -117,18 +117,18 @@ Tables aren't part of the core Markdown spec, but Hugo supports them out-of-the- | ||||
|  | ||||
| ### Images | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| With caption: | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| ## Configuration | ||||
|   | ||||
| @@ -117,18 +117,18 @@ Hugo 支持 [Markdown](https://en.wikipedia.org/wiki/Markdown) 来书写内容 | ||||
|  | ||||
| ### 图片 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| 带有标题: | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ```markdown {filename=Markdown} | ||||
|  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| ## 配置 | ||||
|   | ||||
| @@ -112,7 +112,7 @@ Documentation > Guide > Foo Bar | ||||
|  | ||||
| ### Hiding Breadcrumbs | ||||
|  | ||||
| You can hide breadcrumbs completely from a page by specfying `breadcrumbs: false` in its front matter: | ||||
| You can hide breadcrumbs completely from a page by specifying `breadcrumbs: false` in its front matter: | ||||
|  | ||||
| ```yaml {filename="content/docs/guide/organize-files.md"} | ||||
| --- | ||||
|   | ||||
| @@ -9,7 +9,6 @@ next: /docs/guide/shortcodes/callout | ||||
|  | ||||
| Hextra provides a collection of beautiful shortcodes to enhance your content. | ||||
|  | ||||
|  | ||||
| {{< cards >}} | ||||
|   {{< card link="callout" title="Callout" icon="warning" >}} | ||||
|   {{< card link="cards" title="Cards" icon="card" >}} | ||||
| @@ -19,3 +18,12 @@ Hextra provides a collection of beautiful shortcodes to enhance your content. | ||||
|   {{< card link="steps" title="Steps" icon="one" >}} | ||||
|   {{< card link="tabs" title="Tabs" icon="collection" >}} | ||||
| {{< /cards >}} | ||||
|  | ||||
| <div style="padding-top:4rem"></div> | ||||
|  | ||||
| Additional shortcodes provided by Hugo and Hextra: | ||||
|  | ||||
| {{< cards >}} | ||||
|   {{< card link="jupyter" title="Jupyter Notebook" icon="jupyter" tag="alpha" >}} | ||||
|   {{< card link="others" title="Others" icon="view-grid" >}} | ||||
| {{< /cards >}} | ||||
|   | ||||
| @@ -22,7 +22,7 @@ linkTitle: Cards | ||||
| ``` | ||||
| {{</* cards */>}} | ||||
|   {{</* card link="../callout" title="Callout" icon="warning" */>}} | ||||
|   {{</* card link="../callout" title="Card with tag" icon="warning" tag= "A custom tag" */>}} | ||||
|   {{</* card link="../callout" title="Card with tag" icon="tag" tag= "A custom tag" */>}} | ||||
|   {{</* card link="/" title="No Icon" */>}} | ||||
| {{</* /cards */>}} | ||||
| ``` | ||||
| @@ -87,3 +87,30 @@ Card supports adding tags which could be useful to show extra status information | ||||
|   {{</* card link="../callout" title="Card with yellow tag" tag="tag text" tagType="warning" */>}} | ||||
| {{</* /cards */>}} | ||||
| ``` | ||||
|  | ||||
| ## Columns | ||||
|  | ||||
| You can specify the maximum number of columns for cards to span by passing the `cols` parameter to the `cards` shortcode. Note that columns will still be collapsed on smaller screens. | ||||
|  | ||||
| {{< cards cols="1" >}} | ||||
|   {{< card link="/" title="Top Card" >}} | ||||
|   {{< card link="/" title="Bottom Card" >}} | ||||
| {{< /cards >}} | ||||
|  | ||||
| {{< cards cols="2" >}} | ||||
|   {{< card link="/" title="Left Card" >}} | ||||
|   {{< card link="/" title="Right Card" >}} | ||||
| {{< /cards >}} | ||||
|  | ||||
| ``` | ||||
| {{</* cards cols="1" */>}} | ||||
|   {{</* card link="/" title="Top Card" */>}} | ||||
|   {{</* card link="/" title="Bottom Card" */>}} | ||||
| {{</* /cards */>}} | ||||
|  | ||||
| {{</* cards cols="2" */>}} | ||||
|   {{</* card link="/" title="Left Card" */>}} | ||||
|   {{</* card link="/" title="Right Card" */>}} | ||||
| {{</* /cards */>}} | ||||
| ``` | ||||
|  | ||||
|   | ||||
							
								
								
									
										79
									
								
								exampleSite/content/docs/guide/shortcodes/jupyter.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								exampleSite/content/docs/guide/shortcodes/jupyter.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| --- | ||||
| title: "Jupyter Notebook Component" | ||||
| linktitle: "Jupyter Notebook" | ||||
| math: true | ||||
| sidebar: | ||||
|   exclude: true | ||||
| --- | ||||
|  | ||||
| {{< callout >}}Experimental feature to include Jupyter Notebooks via a shortcode. Note that not all cell types are supported.{{< /callout >}} | ||||
|  | ||||
| [Jupyter Notebook](https://jupyter.org/) is a language-agnostic HTML notebook application for [Project Jupyter](https://jupyter.org/). It allows you to create and share documents that contain live code, equations, visualizations, and narrative text. | ||||
|  | ||||
| <!--more--> | ||||
|  | ||||
| ## How to use | ||||
|  | ||||
| ### Using a local notebook | ||||
|  | ||||
| To use the Jupyter Notebook shortcode, you need to have a Jupyter Notebook file in your project. Similar to how you would [add images](../../organize-files#add-images) to the project, you can add Jupyter Notebooks to the `assets` folder. | ||||
|  | ||||
| {{< filetree/container >}} | ||||
|   {{< filetree/folder name="assets" >}} | ||||
|     {{< filetree/file name="notebook.ipynb" >}} | ||||
|   {{< /filetree/folder >}} | ||||
|   {{< filetree/folder name="content" >}} | ||||
|     {{< filetree/folder name="docs" >}} | ||||
|         {{< filetree/file name="my-page.md" >}} | ||||
|     {{< /filetree/folder >}} | ||||
|   {{< /filetree/folder >}} | ||||
| {{< /filetree/container >}} | ||||
|  | ||||
| Include the Jupyter Notebook in the page using the `jupyter` shortcode: | ||||
|  | ||||
| ```markdown {filename="content/docs/my-page.md"} | ||||
| --- | ||||
| title: My Page | ||||
| math: true | ||||
| --- | ||||
|  | ||||
| {{%/* jupyter "notebook.ipynb" */%}} | ||||
| ``` | ||||
|  | ||||
| Alternatively, you can utilize the [page bundles][page-bundles] feature of Hugo to organize the Jupyter Notebooks together with the Markdown file. | ||||
|  | ||||
| {{< filetree/container >}} | ||||
|   {{< filetree/folder name="content" >}} | ||||
|     {{< filetree/folder name="docs" >}} | ||||
|         {{< filetree/folder name="my-page" >}} | ||||
|             {{< filetree/file name="index.md" >}} | ||||
|             {{< filetree/file name="notebook.ipynb" >}} | ||||
|         {{< /filetree/folder >}} | ||||
|     {{< /filetree/folder >}} | ||||
|   {{< /filetree/folder >}} | ||||
| {{< /filetree/container >}} | ||||
|  | ||||
| ```markdown {filename="content/docs/my-page/index.md"} | ||||
| --- | ||||
| title: My Page | ||||
| math: true | ||||
| --- | ||||
|  | ||||
| {{%/* jupyter "notebook.ipynb" */%}} | ||||
| ``` | ||||
|  | ||||
| ### Using a remote notebook | ||||
|  | ||||
| You can also use a remote notebook by providing the URL to the notebook file. For example, to include [What is the Jupyter Notebook](https://github.com/jupyter/notebook/blob/main/docs/source/examples/Notebook/What%20is%20the%20Jupyter%20Notebook.ipynb) notebook in the page, you can use the following shortcode: | ||||
|  | ||||
| ``` | ||||
| {{%/* jupyter "https://raw.githubusercontent.com/jupyter/notebook/main/docs/source/examples/Notebook/What%20is%20the%20Jupyter%20Notebook.ipynb" */%}} | ||||
| ``` | ||||
|  | ||||
| ## Example Notebook | ||||
|  | ||||
| {{< callout type="info" >}}The following is an example of a notebook file that is included in the project assets folder.{{< /callout >}} | ||||
|  | ||||
| {{% jupyter "example.ipynb" %}} | ||||
|  | ||||
| [page-bundles]: https://gohugo.io/content-management/page-bundles/#leaf-bundles | ||||
							
								
								
									
										78
									
								
								exampleSite/content/docs/guide/shortcodes/others.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								exampleSite/content/docs/guide/shortcodes/others.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| --- | ||||
| title: Other Shortcodes | ||||
| linkTitle: Others | ||||
| sidebar: | ||||
|   exclude: true | ||||
| --- | ||||
|  | ||||
| {{< callout emoji="ℹ️" >}} | ||||
|   Some of these are Hugo built-in shortcodes. | ||||
|   These shortcodes are considered less stable and may be changed anytime. | ||||
| {{< /callout >}} | ||||
|  | ||||
| ## Badge | ||||
|  | ||||
| ``` | ||||
| {{</* badge "Badge" */>}} | ||||
| ``` | ||||
|  | ||||
| Result: | ||||
|  | ||||
| {{< badge "Badge" >}} | ||||
|  | ||||
| Variants: | ||||
|  | ||||
| ``` | ||||
| {{</* badge content="info" type="info" */>}} | ||||
| {{</* badge content="warning" type="warning" */>}} | ||||
| {{</* badge content="error" type="error" */>}} | ||||
| ``` | ||||
|  | ||||
| Result: | ||||
|  | ||||
| {{< badge content="info" type="info" >}}   | ||||
| {{< badge content="warning" type="warning" >}}   | ||||
| {{< badge content="error" type="error" >}} | ||||
|  | ||||
| With link: | ||||
|  | ||||
| ``` | ||||
| {{</* badge content="Releases" link="https://github.com/imfing/hextra/releases" */>}} | ||||
| ``` | ||||
|  | ||||
| Result: | ||||
|  | ||||
| {{< badge content="Releases" link="https://github.com/imfing/hextra/releases" >}} | ||||
|  | ||||
|  | ||||
| ## YouTube | ||||
|  | ||||
| Embed a YouTube video. | ||||
|  | ||||
| ``` | ||||
| {{</* youtube VIDEO_ID */>}} | ||||
| ``` | ||||
|  | ||||
| Result: | ||||
|  | ||||
| {{< youtube id=dQw4w9WgXcQ loading=lazy >}} | ||||
|  | ||||
| For more information, see [Hugo's YouTube Shortcode](https://gohugo.io/content-management/shortcodes/#youtube). | ||||
|  | ||||
| ## PDF | ||||
|  | ||||
| With PDF shortcode, you can embed a PDF file in your content. | ||||
|  | ||||
| ``` | ||||
| {{</* pdf "https://example.com/sample.pdf" */>}} | ||||
| ``` | ||||
|  | ||||
| You can also place the PDF file in your project directory and use the relative path. | ||||
|  | ||||
| ``` | ||||
| {{</* pdf "path/to/file.pdf" */>}} | ||||
| ``` | ||||
|  | ||||
| Example: | ||||
|  | ||||
| {{< pdf "https://upload.wikimedia.org/wikipedia/commons/1/13/Example.pdf" >}} | ||||
| @@ -25,6 +25,11 @@ This is the third step. | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| {{< callout emoji="ℹ️" >}} | ||||
|   Please note that this shortcode is intended **only for Markdown content**. | ||||
|   If you put HTML content or other shortcodes as step content, it may not render as expected. | ||||
| {{< /callout >}} | ||||
|  | ||||
| Put Markdown h3 header within `steps` shortcode. | ||||
|  | ||||
| ``` | ||||
|   | ||||
| @@ -12,6 +12,26 @@ Open source projects powered by Hextra | ||||
| </p> | ||||
|  | ||||
| {{< cards >}} | ||||
|   {{< card | ||||
|         link="https://github.com/jonaspleyer/cellular_raza" | ||||
|         title="cellular_raza" | ||||
|         image="https://github.com/user-attachments/assets/f24c6455-b70a-419b-b025-e3d60101b673" | ||||
|         imageStyle="object-fit:cover; aspect-ratio:16/9;" | ||||
|   >}} | ||||
|  | ||||
|   {{< card | ||||
|         link="https://github.com/mightymoud/sidekick" | ||||
|         title="Sidekick" | ||||
|         image="https://github.com/user-attachments/assets/4ae2a9d7-77b6-42eb-a9d7-5c4599f0f812" | ||||
|         imageStyle="object-fit:cover; aspect-ratio:16/9;" | ||||
|   >}} | ||||
|  | ||||
|   {{< card | ||||
|         link="https://github.com/welding-torch/installc" | ||||
|         title="Install C" | ||||
|         image="https://github.com/user-attachments/assets/c9a85327-c7e7-40f1-830a-b4190a5e47bd" | ||||
|         imageStyle="object-fit:cover; aspect-ratio:16/9;" | ||||
|   >}} | ||||
|  | ||||
|   {{< card | ||||
|         link="https://github.com/axivo/website" | ||||
|   | ||||
| @@ -27,6 +27,7 @@ | ||||
|       "head", | ||||
|       "hr", | ||||
|       "html", | ||||
|       "iframe", | ||||
|       "img", | ||||
|       "input", | ||||
|       "kbd", | ||||
| @@ -190,6 +191,7 @@ | ||||
|       "data-[state=selected]:hx-block", | ||||
|       "data-[state=selected]:hx-border-primary-500", | ||||
|       "data-[state=selected]:hx-text-primary-600", | ||||
|       "dataframe", | ||||
|       "filename", | ||||
|       "first:hx-mt-0", | ||||
|       "focus:hx-bg-white", | ||||
| @@ -207,6 +209,7 @@ | ||||
|       "group-hover:hx-underline", | ||||
|       "group-open:before:hx-rotate-90", | ||||
|       "hamburger-menu", | ||||
|       "hextra-badge", | ||||
|       "hextra-card", | ||||
|       "hextra-card-icon", | ||||
|       "hextra-card-image", | ||||
| @@ -221,6 +224,10 @@ | ||||
|       "hextra-filetree", | ||||
|       "hextra-filetree-folder", | ||||
|       "hextra-footer", | ||||
|       "hextra-jupyter-code-cell", | ||||
|       "hextra-jupyter-code-cell-outputs", | ||||
|       "hextra-jupyter-code-cell-outputs-container", | ||||
|       "hextra-pdf", | ||||
|       "hextra-scrollbar", | ||||
|       "hextra-sidebar-collapsible-button", | ||||
|       "hextra-tabs-panel", | ||||
| @@ -458,6 +465,7 @@ | ||||
|       "hx-sticky", | ||||
|       "hx-text-2xl", | ||||
|       "hx-text-4xl", | ||||
|       "hx-text-[.65rem]", | ||||
|       "hx-text-[10px]", | ||||
|       "hx-text-[color:hsl(var(--primary-hue),100%,50%)]", | ||||
|       "hx-text-base", | ||||
| @@ -482,7 +490,6 @@ | ||||
|       "hx-text-white", | ||||
|       "hx-text-xl", | ||||
|       "hx-text-xs", | ||||
|       "hx-text-xxs", | ||||
|       "hx-text-yellow-900", | ||||
|       "hx-to-gray-600", | ||||
|       "hx-top-0", | ||||
|   | ||||
| @@ -4,11 +4,11 @@ changeTheme: "Darstellung ändern" | ||||
| copyCode: "Code kopieren" | ||||
| copyright: "© 2024 Hextra Project." | ||||
| dark: "Dunkel" | ||||
| editThisPage: "Diese Seite auf Github bearbeiten →" | ||||
| editThisPage: "Diese Seite auf GitHub bearbeiten →" | ||||
| lastUpdated: "Zuletzt aktualisiert am" | ||||
| light: "Hell" | ||||
| noResultsFound: "Keine Ergebnisse gefunden." | ||||
| onThisPage: "Auf dieser Seite" | ||||
| poweredBy: "Unterstützt durch Hextra" | ||||
| readMore: "Mehr lesen →" | ||||
| searchPlaceholder: "Suchen..." | ||||
| searchPlaceholder: "Suchen..." | ||||
|   | ||||
| @@ -3,7 +3,7 @@ changeLanguage: "언어변경" | ||||
| changeTheme: "테마변경" | ||||
| copyright: "© 2024 Hextra Project." | ||||
| dark: "어두운 테마" | ||||
| editThisPage: "Github에서 편집하기 →" | ||||
| editThisPage: "GitHub에서 편집하기 →" | ||||
| lastUpdated: "마지막 수정일자" | ||||
| light: "밝은 테마" | ||||
| noResultsFound: "결과 없음" | ||||
|   | ||||
							
								
								
									
										14
									
								
								i18n/ru.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								i18n/ru.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| backToTop: 'Прокрутить к началу' | ||||
| changeLanguage: 'Изменить язык' | ||||
| changeTheme: 'Изменить тему' | ||||
| copyCode: 'Скопировать код' | ||||
| copyright: '2024 Проект Hextra.' | ||||
| dark: 'Темная' | ||||
| editThisPage: 'Отредактировать страницу на GitHub →' | ||||
| lastUpdated: 'Последнее обновление' | ||||
| light: 'Светлая' | ||||
| noResultsFound: 'Ничего не найдено.' | ||||
| onThisPage: 'На этой странице' | ||||
| poweredBy: 'При поддержке Hextra' | ||||
| readMore: 'Читать далее →' | ||||
| searchPlaceholder: 'Поиск...' | ||||
| @@ -4,11 +4,11 @@ changeTheme: "Змінити тему" | ||||
| copyCode: "Скопіювати код" | ||||
| copyright: "2024 Проєкт Hextra." | ||||
| dark: "Темна" | ||||
| editThisPage: "Редагувати цю сторінку на Github →" | ||||
| editThisPage: "Редагувати цю сторінку на GitHub →" | ||||
| lastUpdated: "Востаннє оновлено" | ||||
| light: "Світла" | ||||
| noResultsFound: "Не знайдено результатів" | ||||
| onThisPage: "На цій сторінці" | ||||
| poweredBy: "Працює завдяки Hextra" | ||||
| readMore: "Читати більше →" | ||||
| searchPlaceholder: "Пошук..." | ||||
| searchPlaceholder: "Пошук..." | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|     <article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]"> | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         <div class="content"> | ||||
|           <h1>{{ .Title }}</h1> | ||||
|           {{ if .Title }}<h1>{{ .Title }}</h1>{{ end }} | ||||
|           {{ .Content }} | ||||
|         </div> | ||||
|         <div class="hx-mt-16"></div> | ||||
| @@ -14,4 +14,4 @@ | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -5,7 +5,7 @@ | ||||
|     <article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]"> | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         <br class="hx-mt-1.5 hx-text-sm" /> | ||||
|         <h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1> | ||||
|         {{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }} | ||||
|         <div class="hx-mb-16"></div> | ||||
|         <div class="content"> | ||||
|           {{ .Content }} | ||||
| @@ -15,4 +15,4 @@ | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -3,10 +3,10 @@ | ||||
|     {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" false) }} | ||||
|     <article class="hx-w-full hx-break-words hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-pt-4 hx-pb-8 hx-pl-[max(env(safe-area-inset-left),1.5rem)] hx-pr-[max(env(safe-area-inset-left),1.5rem)]"> | ||||
|       <br class="hx-mt-1.5 hx-text-sm" /> | ||||
|       <h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1> | ||||
|       {{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }} | ||||
|       <div class="content"> | ||||
|         {{ .Content }} | ||||
|       </div> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -5,7 +5,7 @@ | ||||
|     <article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]"> | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         <br class="hx-mt-1.5 hx-text-sm" /> | ||||
|         <h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1> | ||||
|         {{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }} | ||||
|         <div class="content">{{ .Content }}</div> | ||||
|         {{- $pages := partial "utils/sort-pages" (dict "page" . "by" site.Params.blog.list.sortBy "order" site.Params.blog.list.sortOrder) -}} | ||||
|         {{- range $pages }} | ||||
| @@ -31,4 +31,4 @@ | ||||
|     </article> | ||||
|     <div class="max-xl:hx-hidden hx-h-0 hx-w-64 hx-shrink-0"></div> | ||||
|   </div> | ||||
| {{- end -}} | ||||
| {{- end -}} | ||||
| @@ -5,7 +5,7 @@ | ||||
|     <article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]"> | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         {{ partial "breadcrumb.html" . }} | ||||
|         <h1 class="hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1> | ||||
|         {{ if .Title }}<h1 class="hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }} | ||||
|         <div class="hx-mt-4 hx-mb-16 hx-text-gray-500 hx-text-sm hx-flex hx-items-center hx-flex-wrap hx-gap-y-2"> | ||||
|           {{- with $date := .Date }}<span class="hx-mr-1">{{ partial "utils/format-date" $date }}</span>{{ end -}} | ||||
|           {{- $lazyLoading := site.Params.enableImageLazyLoading | default true -}} | ||||
| @@ -45,4 +45,4 @@ | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -6,7 +6,7 @@ | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         {{ partial "breadcrumb.html" . }} | ||||
|         <div class="content"> | ||||
|           <h1>{{ .Title }}</h1> | ||||
|           {{ if .Title }}<h1>{{ .Title }}</h1>{{ end }} | ||||
|           {{ .Content }} | ||||
|         </div> | ||||
|         {{ partial "components/last-updated.html" . }} | ||||
| @@ -15,4 +15,4 @@ | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -6,7 +6,7 @@ | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         {{ partial "breadcrumb.html" . }} | ||||
|         <div class="content"> | ||||
|           <h1>{{ .Title }}</h1> | ||||
|           {{ if .Title }}<h1>{{ .Title }}</h1>{{ end }} | ||||
|           {{ .Content }} | ||||
|         </div> | ||||
|         {{ partial "components/last-updated.html" . }} | ||||
| @@ -15,4 +15,4 @@ | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -4,11 +4,11 @@ | ||||
|     {{ partial "toc.html" . }} | ||||
|     <article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]"> | ||||
|       <main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12"> | ||||
|         <h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1> | ||||
|         {{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }} | ||||
|         <div class="content"> | ||||
|           {{ .Content }} | ||||
|         </div> | ||||
|       </main> | ||||
|     </article> | ||||
|   </div> | ||||
| {{ end }} | ||||
| {{ end }} | ||||
| @@ -1,6 +1,6 @@ | ||||
| {{- if and (not hugo.IsProduction) (eq hugo.Environment "theme") }} | ||||
|   {{- $styles := resources.Get "css/styles.css" }} | ||||
|   {{- $styles = $styles | resources.PostCSS (dict "inlineImports" true) }} | ||||
|   {{- $styles = $styles | postCSS (dict "inlineImports" true) }} | ||||
|   <link href="{{ $styles.RelPermalink }}" rel="stylesheet" /> | ||||
| {{- else }} | ||||
|   {{- $styles := resources.Get "css/compiled/main.css" -}} | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|   {{ else -}} | ||||
|     <meta name="robots" content="noindex, nofollow" /> | ||||
|   {{ end -}} | ||||
|   {{ partialCached "favicons.html" . }} | ||||
|   {{ partialCached "favicons.html" . -}} | ||||
|   <title> | ||||
|     {{- if .IsHome -}} | ||||
|       {{ .Site.Title -}} | ||||
| @@ -17,17 +17,17 @@ | ||||
|   </title> | ||||
|   <meta name="description" content="{{ partial "utils/page-description.html" . }}" /> | ||||
|  | ||||
|   {{ with .Params.canonical }} | ||||
|   {{- with .Params.canonical -}} | ||||
|     <link rel="canonical" href="{{ . }}" itemprop="url" /> | ||||
|   {{ else }} | ||||
|   {{- else -}} | ||||
|     <link rel="canonical" href="{{ .Permalink }}" itemprop="url" /> | ||||
|   {{ end }} | ||||
|   {{- end -}} | ||||
|  | ||||
|   {{ partial "opengraph.html" . }} | ||||
|   {{ template "_internal/schema.html" . -}} | ||||
|   {{ template "_internal/twitter_cards.html" . -}} | ||||
|   {{- partial "opengraph.html" . -}} | ||||
|   {{- template "_internal/schema.html" . -}} | ||||
|   {{- template "_internal/twitter_cards.html" . -}} | ||||
|  | ||||
|   {{ partialCached "head-css.html" . }} | ||||
|   {{- partialCached "head-css.html" . -}} | ||||
|  | ||||
|  | ||||
| <!-- Google Analytics --> | ||||
|   | ||||
| @@ -31,6 +31,8 @@ | ||||
|     {{- range .Site.Menus.main -}} | ||||
|       {{- if eq .Params.type "search" -}} | ||||
|         {{- partial "search.html" (dict "params" .Params) -}} | ||||
|       {{- else if eq .Params.type "theme-toggle" -}} | ||||
|         {{- partial "theme-toggle.html" (dict "navbar" true "hideLabel" (.Params.hideLabel | default true)) -}} | ||||
|       {{- else -}} | ||||
|         {{- $link := .URL -}} | ||||
|         {{- $external := strings.HasPrefix $link "http" -}} | ||||
| @@ -42,7 +44,7 @@ | ||||
|  | ||||
|         {{/* Display icon menu item */}} | ||||
|         {{- if .Params.icon -}} | ||||
|           {{- $rel := cond (eq .Params.icon "mastodon") "noreferer me" "noreferer" }} | ||||
|           {{- $rel := cond (eq .Params.icon "mastodon") "noreferrer me" "noreferrer" }} | ||||
|           <a class="hx-p-2 hx-text-current" {{ if $external }}target="_blank" rel="{{ $rel }}"{{ end }} href="{{ $link }}" title="{{ or (T .Identifier) .Name | safeHTML }}"> | ||||
|             {{- partial "utils/icon.html" (dict "name" .Params.icon "attributes" "height=24") -}} | ||||
|             <span class="hx-sr-only">{{ or (T .Identifier) .Name | safeHTML }}</span> | ||||
| @@ -53,7 +55,7 @@ | ||||
|           <a | ||||
|             title="{{ or (T .Identifier) .Name | safeHTML }}" | ||||
|             href="{{ $link }}" | ||||
|             {{ if $external }}target="_blank" rel="noreferer"{{ end }} | ||||
|             {{ if $external }}target="_blank" rel="noreferrer"{{ end }} | ||||
|             class="hx-text-sm contrast-more:hx-text-gray-700 contrast-more:dark:hx-text-gray-100 hx-relative -hx-ml-2 hx-hidden hx-whitespace-nowrap hx-p-2 md:hx-inline-block {{ $activeClass }}" | ||||
|           > | ||||
|             <span class="hx-text-center">{{ or (T .Identifier) .Name | safeHTML }}</span> | ||||
| @@ -67,4 +69,4 @@ | ||||
|       {{- partial "utils/icon.html" (dict "name" "hamburger-menu" "attributes" "height=24") -}} | ||||
|     </button> | ||||
|   </nav> | ||||
| </div> | ||||
| </div> | ||||
| @@ -60,12 +60,18 @@ | ||||
|   {{- end -}} | ||||
|   <script> | ||||
|     // TODO: make render options configurable | ||||
|     // Reference: https://katex.org/docs/autorender#api | ||||
|     document.addEventListener("DOMContentLoaded", function () { | ||||
|       renderMathInElement(document.body, { | ||||
|         delimiters: [ | ||||
|           { left: "$$", right: "$$", display: true }, | ||||
|           { left: "$", right: "$", display: false }, | ||||
|           { left: "\\(", right: "\\)", display: false }, | ||||
|           { left: "\\begin{equation}", right: "\\end{equation}", display: true }, | ||||
|           {left: "\\begin{align}", right: "\\end{align}", display: true}, | ||||
|           {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, | ||||
|           {left: "\\begin{gather}", right: "\\end{gather}", display: true}, | ||||
|           {left: "\\begin{CD}", right: "\\end{CD}", display: true}, | ||||
|           { left: "\\[", right: "\\]", display: true }, | ||||
|         ], | ||||
|         throwOnError: false, | ||||
|   | ||||
							
								
								
									
										16
									
								
								layouts/partials/shortcodes/badge.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								layouts/partials/shortcodes/badge.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| {{- $content := .content -}} | ||||
| {{- $type := .type -}} | ||||
| {{- $class := .class | default "" -}} | ||||
| {{- $border := .border | default false -}} | ||||
|  | ||||
| {{- $defaultClass := "hx-text-gray-600 hx-bg-gray-100 dark:hx-bg-neutral-800 dark:hx-text-neutral-200 hx-border-gray-200 dark:hx-border-neutral-700" -}} | ||||
| {{- $warningClass := "hx-border-yellow-100 hx-bg-yellow-50 hx-text-yellow-900 dark:hx-border-yellow-200/30 dark:hx-bg-yellow-700/30 dark:hx-text-yellow-200" -}} | ||||
| {{- $infoClass := "hx-border-blue-200 hx-bg-blue-100 hx-text-blue-900 dark:hx-border-blue-200/30 dark:hx-bg-blue-900/30 dark:hx-text-blue-200" -}} | ||||
| {{- $errorClass := "hx-border-red-200 hx-bg-red-100 hx-text-red-900 dark:hx-border-red-200/30 dark:hx-bg-red-900/30 dark:hx-text-red-200" -}} | ||||
|  | ||||
| {{- $borderClass := cond (eq $border true) "hx-border" "" -}} | ||||
| {{- $badgeClass := cond (eq $type "info") $infoClass (cond (eq $type "warning") $warningClass (cond (eq $type "error") $errorClass $defaultClass)) -}} | ||||
| <div class="hextra-badge {{ $class }}"> | ||||
|   <div class="hx-inline-flex hx-items-center hx-rounded-full hx-px-2.5 hx-leading-6 hx-text-[.65rem] {{ $borderClass }} {{ $badgeClass }}">{{- $content -}}</div> | ||||
| </div> | ||||
| {{- /* Strip trailing newline. */ -}} | ||||
| @@ -54,15 +54,13 @@ | ||||
|   {{- end -}} | ||||
|  | ||||
|   {{- if $tag }} | ||||
|     {{ $defaultClass := "hx-text-gray-600 hx-text-xxs hx-bg-gray-100 dark:hx-bg-neutral-800 dark:hx-text-neutral-200" }} | ||||
|     {{ $warningClass := "hx-border-yellow-100 hx-bg-yellow-50 hx-text-yellow-900 dark:hx-border-yellow-200/30 dark:hx-bg-yellow-700/30 dark:hx-text-yellow-200" }} | ||||
|     {{ $infoClass := "hx-border-blue-200 hx-bg-blue-100 hx-text-blue-900 dark:hx-border-blue-200/30 dark:hx-bg-blue-900/30 dark:hx-text-blue-200" }} | ||||
|     {{ $errorClass := "hx-border-red-200 hx-bg-red-100 hx-text-red-900 dark:hx-border-red-200/30 dark:hx-bg-red-900/30 dark:hx-text-red-200" }} | ||||
|  | ||||
|     {{ $tagClass := cond (eq $tagType "info") $infoClass (cond (eq $tagType "warning") $warningClass (cond (eq $tagType "error") $errorClass $defaultClass)) }} | ||||
|     <div class="hextra-card-tag"> | ||||
|       <span class="hx-inline-block hx-rounded-full hx-px-2.5 hx-leading-6 {{ $tagClass }}">{{ $tag }}</span> | ||||
|     </div> | ||||
|     {{- partial "shortcodes/badge.html" (dict | ||||
|       "content" $tag | ||||
|       "type" $tagType | ||||
|       "class" "hextra-card-tag" | ||||
|       "border" true | ||||
|       ) | ||||
|     -}} | ||||
|   {{- end -}} | ||||
| </a> | ||||
| {{- /* Strip trailing newline. */ -}} | ||||
|   | ||||
							
								
								
									
										6
									
								
								layouts/partials/shortcodes/cards.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								layouts/partials/shortcodes/cards.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| {{- $cols := .cols | default 3 -}} | ||||
| {{- $content := .content -}} | ||||
|  | ||||
| <div class="hextra-cards hx-mt-4 hx-gap-4 hx-grid not-prose" style="--hextra-cards-grid-cols: {{ $cols }};"> | ||||
|   {{- $content -}} | ||||
| </div> | ||||
| @@ -160,7 +160,7 @@ | ||||
|       hx-text-gray-500 hover:hx-bg-gray-100 hover:hx-text-gray-900 contrast-more:hx-border contrast-more:hx-border-transparent contrast-more:hx-text-gray-900 contrast-more:hover:hx-border-gray-900 dark:hx-text-neutral-400 dark:hover:hx-bg-primary-100/5 dark:hover:hx-text-gray-50 contrast-more:dark:hx-text-gray-50 contrast-more:dark:hover:hx-border-gray-50 | ||||
|     {{- end -}}" | ||||
|     href="{{ .link }}" | ||||
|     {{ if $external }}target="_blank" rel="noreferer"{{ end }} | ||||
|     {{ if $external }}target="_blank" rel="noreferrer"{{ end }} | ||||
|   > | ||||
|     {{- .title -}} | ||||
|     {{- with .context }} | ||||
|   | ||||
| @@ -1,3 +1,10 @@ | ||||
| {{- $navbar := .navbar | default false -}} | ||||
| {{- $height_px := 12 -}} | ||||
| {{- $height_tw := "hx-text-xs" -}} | ||||
| {{- if $navbar -}} | ||||
|   {{- $height_px = 24 -}} | ||||
|   {{- $height_tw = "hx-text-sm" -}} | ||||
| {{- end -}} | ||||
| {{- $hideLabel := .hideLabel | default false -}} | ||||
|  | ||||
| {{- $changeTheme := (T "changeTheme") | default "Change theme" -}} | ||||
| @@ -8,14 +15,14 @@ | ||||
| <button | ||||
|   title="{{ $changeTheme }}" | ||||
|   data-theme="light" | ||||
|   class="theme-toggle hx-group hx-h-7 hx-rounded-md hx-px-2 hx-text-left hx-text-xs hx-font-medium hx-text-gray-600 hx-transition-colors dark:hx-text-gray-400 hover:hx-bg-gray-100 hover:hx-text-gray-900 dark:hover:hx-bg-primary-100/5 dark:hover:hx-text-gray-50" | ||||
|   class="theme-toggle hx-group hx-h-7 hx-rounded-md hx-px-2 hx-text-left {{ $height_tw }} hx-font-medium hx-text-gray-600 hx-transition-colors dark:hx-text-gray-400 hover:hx-bg-gray-100 hover:hx-text-gray-900 dark:hover:hx-bg-primary-100/5 dark:hover:hx-text-gray-50" | ||||
|   type="button" | ||||
|   aria-label="{{ $changeTheme }}" | ||||
| > | ||||
|   <div class="hx-flex hx-items-center hx-gap-2 hx-capitalize"> | ||||
|     {{- partial "utils/icon.html" (dict "name" "sun" "attributes" "height=12 class=\"group-data-[theme=light]:hx-hidden\"") -}} | ||||
|     {{- partial "utils/icon.html" (dict "name" "sun" "attributes" (printf "height=%d class=\"group-data-[theme=light]:hx-hidden\"" $height_px)) -}} | ||||
|     {{- if not $hideLabel }}<span class="group-data-[theme=light]:hx-hidden">{{ $light }}</span>{{ end -}} | ||||
|     {{- partial "utils/icon.html" (dict "name" "moon" "attributes" "height=12 class=\"group-data-[theme=dark]:hx-hidden\"") -}} | ||||
|     {{- partial "utils/icon.html" (dict "name" "moon" "attributes" (printf "height=%d class=\"group-data-[theme=dark]:hx-hidden\"" $height_px)) -}} | ||||
|     {{- if not $hideLabel }}<span class="group-data-[theme=dark]:hx-hidden">{{ $dark }}</span>{{ end -}} | ||||
|   </div> | ||||
| </button> | ||||
|   | ||||
| @@ -38,7 +38,7 @@ | ||||
|               {{- $editURL = urls.JoinPath $editURL $sourceDir $path -}} | ||||
|             {{- end -}} | ||||
|           {{- end -}} | ||||
|           <a class="hx-text-xs hx-font-medium hx-text-gray-500 hover:hx-text-gray-900 dark:hx-text-gray-400 dark:hover:hx-text-gray-100 contrast-more:hx-text-gray-800 contrast-more:dark:hx-text-gray-50" href="{{ $editURL }}" target="_blank" rel="noreferer">{{ $editThisPage }}</a> | ||||
|           <a class="hx-text-xs hx-font-medium hx-text-gray-500 hover:hx-text-gray-900 dark:hx-text-gray-400 dark:hover:hx-text-gray-100 contrast-more:hx-text-gray-800 contrast-more:dark:hx-text-gray-50" href="{{ $editURL }}" target="_blank" rel="noreferrer">{{ $editThisPage }}</a> | ||||
|         {{- end -}} | ||||
|         {{/* Scroll To Top */}} | ||||
|         <button aria-hidden="true" id="backToTop" onClick="scrollUp();" class="hx-transition-all hx-duration-75 hx-opacity-0 hx-text-xs hx-font-medium hx-text-gray-500 hover:hx-text-gray-900 dark:hx-text-gray-400 dark:hover:hx-text-gray-100 contrast-more:hx-text-gray-800 contrast-more:dark:hx-text-gray-50"> | ||||
|   | ||||
							
								
								
									
										33
									
								
								layouts/shortcodes/badge.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								layouts/shortcodes/badge.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| {{- if .IsNamedParams -}} | ||||
|   {{- $content := .Get "content" -}} | ||||
|   {{- $type := .Get "type" | default "" -}} | ||||
|   {{- $class := .Get "class" | default "" -}} | ||||
|   {{- $link := .Get "link" | default "" -}} | ||||
|  | ||||
|   {{- if $link -}} | ||||
|     <a href="{{ $link }}" title="{{ $content | plainify }}" target="_blank"> | ||||
|       {{- partial "shortcodes/badge.html" (dict | ||||
|         "content" $content  | ||||
|         "type" $type | ||||
|         "class" $class | ||||
|         "border" true | ||||
|         ) | ||||
|       -}} | ||||
|     </a> | ||||
|   {{- else -}} | ||||
|     {{- partial "shortcodes/badge.html" (dict | ||||
|       "content" $content  | ||||
|       "type" $type | ||||
|       "class" $class | ||||
|       "border" true | ||||
|       ) | ||||
|     -}} | ||||
|   {{- end -}} | ||||
| {{- else -}} | ||||
|   {{- $content := .Get 0 -}} | ||||
|   {{- partial "shortcodes/badge.html" (dict | ||||
|     "content" $content  | ||||
|     "border" true | ||||
|     ) | ||||
|   -}} | ||||
| {{- end -}} | ||||
| @@ -1,5 +1,3 @@ | ||||
| {{- $cols := .Get "cols" | default 3 -}} | ||||
|  | ||||
| <div class="hextra-cards hx-mt-4 hx-gap-4 hx-grid not-prose" style="--hextra-cards-grid-cols: {{ $cols }};"> | ||||
|   {{- .Inner -}} | ||||
| </div> | ||||
| {{- partial "shortcodes/cards" (dict "cols" $cols "content" .Inner) -}} | ||||
|   | ||||
| @@ -5,7 +5,7 @@ Renders the page using the RenderShortcode method on the Page object. | ||||
|  | ||||
| You must call this shortcode using the {{% %}} notation. | ||||
|  | ||||
| @param {string} (postional parameter 0) The path to the page, relative to the content directory. | ||||
| @param {string} (positional parameter 0) The path to the page, relative to the content directory. | ||||
| @returns template.HTML | ||||
|  | ||||
| @example {{% include "functions/_common/glob-patterns" %}} | ||||
|   | ||||
							
								
								
									
										81
									
								
								layouts/shortcodes/jupyter.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								layouts/shortcodes/jupyter.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| {{/* Render Jupyter Notebook */}} | ||||
| {{- $path := .Get 0 -}} | ||||
| {{- $data := "" -}} | ||||
| {{- $page := .Page -}} | ||||
|  | ||||
| {{- $isLocal := not (urls.Parse $path).Scheme -}} | ||||
| {{- $isPage := and (eq .Page.Kind "page") (not .Page.BundleType) -}} | ||||
|  | ||||
| {{/* https://gohugo.io/functions/transform/unmarshal/ */}} | ||||
| {{- if (not $isLocal) -}} | ||||
|   {{- with resources.GetRemote $path -}} | ||||
|     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | ||||
|   {{- else -}} | ||||
|     {{- errorf "Remote resource not found: %s" $path -}} | ||||
|   {{- end -}} | ||||
| {{- else if (not $isPage) -}} | ||||
|   {{- with .Page.Resources.Get $path -}} | ||||
|     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | ||||
|   {{- else -}} | ||||
|     {{- errorf "Local resource not found: %s" $path -}} | ||||
|   {{- end -}} | ||||
| {{- else -}} | ||||
|   {{- with resources.Get $path -}} | ||||
|     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | ||||
|   {{- else -}} | ||||
|     {{- errorf "Local resource not found: %s" $path -}} | ||||
|   {{- end -}} | ||||
| {{- end -}} | ||||
|  | ||||
| {{- $language := index $data "metadata" "language_info" "name" | default "python" -}} | ||||
|  | ||||
| {{- with index $data "cells" -}} | ||||
|   {{- range $cell := . -}} | ||||
|     {{- if eq (index $cell "cell_type") "code" -}} | ||||
|       {{- $source := index $cell "source" -}} | ||||
|       {{- $sourceContent := (cond (reflect.IsSlice $source) (delimit $source "") $source) -}} | ||||
| {{- with ($sourceContent | strings.Chomp) -}} | ||||
| {{ (printf "\n\n```%s\n%s\n```\n" $language .) | safeHTML -}} | ||||
| {{- end -}} | ||||
|  | ||||
|       <div class="hextra-jupyter-code-cell hextra-scrollbar"> | ||||
|         {{- $outputs := index $cell "outputs" -}} | ||||
|         {{- with $outputs -}} | ||||
|           <div class="hextra-jupyter-code-cell-outputs-container"> | ||||
|             <div class="hextra-jupyter-code-cell-outputs"> | ||||
|               {{- range $output := . -}} | ||||
|                 {{- if eq (index $output "output_type") "display_data" -}} | ||||
|                   {{- $data := index $output "data" -}} | ||||
|                   {{- $image := index $data "image/png" -}} | ||||
|                   {{- if $image -}} | ||||
|                     <img src="data:image/png;base64,{{- $image -}}" alt="image" /> | ||||
|                   {{- end -}} | ||||
|                 {{- else if eq (index $output "output_type") "stream" -}} | ||||
|                   {{- $text := index $output "text" -}} | ||||
|                   {{- $textContent := (cond (reflect.IsSlice $text) (delimit $text "") $text) -}} | ||||
|                   <pre class="not-prose">{{- $textContent -}}</pre> | ||||
|                 {{- else if eq (index $output "output_type") "execute_result" -}} | ||||
|                   {{- $data := index $output "data" -}} | ||||
|                   {{- $text := index $data "text/plain" -}} | ||||
|                   {{- $textContent := (cond (reflect.IsSlice $text) (delimit $text "") $text) -}} | ||||
|                   <pre class="not-prose">{{- $textContent -}}</pre> | ||||
|                   {{- $html := index $data "text/html" -}} | ||||
|                   {{- if $html -}} | ||||
|                     {{- $htmlText := delimit $html "" -}} | ||||
|                     <div> | ||||
|                       {{- $htmlText | safeHTML -}} | ||||
|                     </div> | ||||
|                   {{- end -}} | ||||
|                 {{- end -}} | ||||
|               {{- end -}} | ||||
|             </div> | ||||
|           </div> | ||||
|         {{- end -}} | ||||
|       </div> | ||||
|     {{- else if eq (index $cell "cell_type") "markdown" -}} | ||||
|         {{- $source := index $cell "source" }} | ||||
|         {{- $sourceContent := (cond (reflect.IsSlice $source) (delimit $source "") $source) }} | ||||
| {{ (printf "\n%s\n" $sourceContent) | safeHTML }} | ||||
|     {{- end -}} | ||||
|   {{- end -}} | ||||
| {{- end -}} | ||||
| @@ -4,8 +4,9 @@ | ||||
|   class="hextra-tabs-panel hx-rounded hx-pt-6 hx-hidden data-[state=selected]:hx-block" | ||||
|   id="tabs-panel-{{ .Ordinal }}" | ||||
|   role="tabpanel" | ||||
|   {{ if eq .Ordinal $defaultIndex }}tabindex="0"{{ end }} | ||||
|   {{ if eq .Ordinal $defaultIndex }}data-state="selected"{{ end }} | ||||
|   {{- if eq .Ordinal $defaultIndex }} tabindex="0" {{ end -}} | ||||
|   {{- if eq .Ordinal $defaultIndex }} data-state="selected" {{ end -}} | ||||
| > | ||||
|   {{ .InnerDeindent | markdownify }} | ||||
|   {{- .InnerDeindent | markdownify -}} | ||||
| </div> | ||||
| {{- /* Drop trailing newlines */ -}} | ||||
|   | ||||
| @@ -13,9 +13,9 @@ | ||||
|         role="tab" | ||||
|         type="button" | ||||
|         aria-controls="tabs-panel-{{ $i }}" | ||||
|         {{ if eq $i $defaultIndex }}aria-selected="true"{{ end }} | ||||
|         {{ if eq $i $defaultIndex }}tabindex="0"{{ end }} | ||||
|         {{ if eq $i $defaultIndex }}data-state="selected"{{ end }} | ||||
|         {{- if eq $i $defaultIndex }} aria-selected="true" {{ end -}} | ||||
|         {{- if eq $i $defaultIndex }} tabindex="0" {{ end -}} | ||||
|         {{- if eq $i $defaultIndex }} data-state="selected"{{ end -}} | ||||
|       > | ||||
|         {{- $item -}} | ||||
|       </button> | ||||
| @@ -23,5 +23,6 @@ | ||||
|   </div> | ||||
| </div> | ||||
| <div> | ||||
|   {{ .Inner }} | ||||
|   {{- .Inner -}} | ||||
| </div> | ||||
| {{- /* Drop trailing newlines */ -}} | ||||
|   | ||||
							
								
								
									
										31
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										31
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -582,9 +582,9 @@ | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/electron-to-chromium": { | ||||
|       "version": "1.5.6", | ||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz", | ||||
|       "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==", | ||||
|       "version": "1.5.11", | ||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", | ||||
|       "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==", | ||||
|       "dev": true, | ||||
|       "license": "ISC" | ||||
|     }, | ||||
| @@ -815,9 +815,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ignore": { | ||||
|       "version": "5.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", | ||||
|       "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", | ||||
|       "version": "5.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", | ||||
|       "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
| @@ -980,11 +980,10 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/micromatch": { | ||||
|       "version": "4.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", | ||||
|       "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", | ||||
|       "version": "4.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", | ||||
|       "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "braces": "^3.0.3", | ||||
|         "picomatch": "^2.3.1" | ||||
| @@ -1376,9 +1375,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/postcss-selector-parser": { | ||||
|       "version": "6.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", | ||||
|       "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", | ||||
|       "version": "6.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", | ||||
|       "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
| @@ -1745,9 +1744,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tailwindcss": { | ||||
|       "version": "3.4.9", | ||||
|       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz", | ||||
|       "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==", | ||||
|       "version": "3.4.10", | ||||
|       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", | ||||
|       "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|   | ||||
| @@ -3,10 +3,18 @@ const colors = require('tailwindcss/colors') | ||||
| const makePrimaryColor = | ||||
|   l => | ||||
|     ({ opacityValue }) => { | ||||
|       return ( | ||||
|         `hsl(var(--primary-hue) var(--primary-saturation) ${l}%` + | ||||
|         (opacityValue ? ` / ${opacityValue})` : ')') | ||||
|       ) | ||||
|       let result = "hsl(var(--primary-hue) var(--primary-saturation) "; | ||||
|         if (l <= 50) { | ||||
|           // Interpolate between lower values | ||||
|           result+= `calc(calc(var(--primary-lightness) / 50) * ${l})`; | ||||
|         } | ||||
|         else { | ||||
|           // Interpolate between higher values | ||||
|           result+= `calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * ${l - 50})`; | ||||
|         } | ||||
|  | ||||
|       result += (opacityValue ? ` / ${opacityValue})` : ')'); | ||||
|       return result; | ||||
|     } | ||||
|  | ||||
| /** @type {import('tailwindcss').Config} */ | ||||
|   | ||||
| @@ -25,4 +25,4 @@ tasks: | ||||
|       - curl -o assets/lib/katex/katex.min.css https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css | ||||
|       - curl -o assets/lib/katex/auto-render.min.js https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js | ||||
|       - curl -o assets/lib/katex/mhchem.min.js https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/mhchem.min.js | ||||
|       - curl -o assets/lib/mermaid/mermaid.min.js https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.min.js | ||||
|       - curl -o assets/lib/mermaid/mermaid.min.js https://cdn.jsdelivr.net/npm/mermaid@11.3.0/dist/mermaid.min.js | ||||
|   | ||||
		Reference in New Issue
	
	Block a user