diff options
Diffstat (limited to 'dist/index.html')
| -rw-r--r-- | dist/index.html | 1131 |
1 files changed, 1131 insertions, 0 deletions
diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..905e90a --- /dev/null +++ b/dist/index.html @@ -0,0 +1,1131 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Mling CLI — Download</title> + <link + rel="icon" + type="image/png" + href="../docs/res/favicon_small.png" + /> + <link rel="preconnect" href="https://fonts.googleapis.com" /> + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> + <link + href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" + rel="stylesheet" + /> + <link + rel="stylesheet" + href="../docs/scripts/highlight/github-dark.min.css" + /> + <style> + *, + *::before, + *::after { + box-sizing: border-box; + margin: 0; + padding: 0; + } + + html { + scroll-behavior: smooth; + scroll-snap-type: y mandatory; + } + + .hero, + .section { + scroll-snap-align: start; + scroll-snap-stop: always; + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: center; + } + + body { + font-family: "Noto Serif SC", Georgia, "Times New Roman", serif; + background-color: #1a1410; + color: #e8ddd0; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow-x: hidden; + } + + a { + color: #d4a84b; + text-decoration: none; + transition: color 0.2s; + } + a:hover { + color: #e8c46a; + } + + .container { + max-width: 1080px; + margin: 0 auto; + padding: 0 1.5rem; + } + + nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.8rem 2rem; + background: rgba(26, 20, 16, 0.88); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border-bottom: 1px solid rgba(212, 168, 75, 0.12); + } + + nav .logo { + display: flex; + align-items: center; + gap: 0.5rem; + font-weight: 700; + font-size: 1.1rem; + color: #e8ddd0; + } + + nav .logo img { + width: 28px; + height: 28px; + filter: brightness(0) invert(1); + } + + nav .nav-links { + display: flex; + gap: 1.5rem; + align-items: center; + font-size: 0.9rem; + } + + nav .nav-links a { + color: #9a8a7a; + transition: color 0.2s; + } + + nav .nav-links a:hover { + color: #d4a84b; + } + + nav .nav-links .btn-nav { + display: inline-block; + padding: 0.35rem 1rem; + border: 1px solid #d4a84b; + border-radius: 20px; + color: #d4a84b; + font-weight: 600; + font-size: 0.85rem; + transition: + background 0.2s, + color 0.2s; + } + + nav .nav-links .btn-nav:hover { + background: #d4a84b; + color: #1a1410; + } + + .hero { + padding: 5rem 1.5rem 3rem; + text-align: center; + position: relative; + } + + .hero h1, + .hero .subtitle { + position: relative; + z-index: 1; + } + + /* Tiled grid background (field grid) */ + .hero::after { + content: ""; + position: absolute; + inset: 0; + background-image: + linear-gradient( + to right, + rgba(212, 168, 75, 0.03) 1px, + transparent 1px + ), + linear-gradient( + to bottom, + rgba(212, 168, 75, 0.03) 1px, + transparent 1px + ), + linear-gradient( + to right, + rgba(212, 168, 75, 0.015) 1px, + transparent 1px + ), + linear-gradient( + to bottom, + rgba(212, 168, 75, 0.015) 1px, + transparent 1px + ); + background-size: + 40px 40px, + 40px 40px, + 20px 20px, + 20px 20px; + background-position: + calc(50% - 540px + 20px) 0, + calc(50% - 540px) 0, + calc(50% - 540px + 10px) 0, + calc(50% - 540px + 10px) 0; + pointer-events: none; + z-index: 0; + } + + .hero h1 { + font-size: 5.5rem; + font-weight: 700; + color: #e8ddd0; + margin-bottom: 0.75rem; + } + + .hero .subtitle { + font-size: 1.1rem; + color: #9a8a7a; + max-width: 640px; + margin: 0 auto 2.5rem; + line-height: 1.8; + text-align: left; + } + + .hero .subtitle .star { + color: #c43931; + margin-right: 0.5rem; + } + + .hero .subtitle b { + color: #e8ddd0; + font-weight: 700; + } + + .hero .subtitle code { + font-family: "JetBrains Mono", "Noto Serif SC", monospace; + font-size: 0.9em; + color: #d4a84b; + background: rgba(212, 168, 75, 0.08); + padding: 0.1rem 0.35rem; + border-radius: 2px; + } + + /* Hero command carousel terminal */ + .hero-term { + width: 520px; + max-width: 100%; + margin: 0 auto; + background: #0f0b08; + border: 1px solid #3a2e24; + border-radius: 2.5px; + padding: 0.65rem 1.1rem; + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4); + text-align: left; + font-family: "JetBrains Mono", "Noto Serif SC", monospace; + font-size: 0.95rem; + line-height: 1.6; + white-space: nowrap; + overflow: hidden; + position: relative; + z-index: 1; + } + + .hero-term pre { + margin: 0; + padding: 0; + background: transparent; + } + + .hero-term code { + font-family: "JetBrains Mono", "Noto Serif SC", monospace; + background: transparent !important; + padding: 0 !important; + } + + .term-prompt { + color: #6a5a4a; + } + + .term-cmd { + color: #7ec699; + } + + .term-cursor { + display: inline-block; + width: 0.6em; + height: 1.15em; + background: #d0d0d0; + vertical-align: text-bottom; + margin-left: 1px; + animation: termBlink 1s steps(1) infinite; + } + + @keyframes termBlink { + 50% { + opacity: 0; + } + } + + .download-row { + display: flex; + gap: 1.25rem; + justify-content: center; + flex-wrap: wrap; + } + + .download-card { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.4rem; + min-width: 220px; + padding: 1.75rem 1.5rem; + background: #241c16; + border: 1px solid #3a2e24; + border-radius: 2px; + color: #e8ddd0; + transition: + border-color 0.25s, + transform 0.2s; + } + + .download-card:hover { + border-color: #d4a84b; + color: #e8ddd0; + transform: translateY(-4px); + } + + .download-card .platform { + width: 44px; + height: 44px; + margin-bottom: 0.25rem; + } + + .download-card .platform.invert { + filter: brightness(0) invert(1); + } + + .download-card .os-name { + font-size: 1.05rem; + font-weight: 700; + } + + .download-card .file-name { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.5rem; + width: 100%; + padding: 0.55rem 0.9rem; + background: rgba(212, 168, 75, 0.1); + border: 1px solid rgba(212, 168, 75, 0.45); + border-radius: 2px; + color: #d4a84b; + font-family: "JetBrains Mono", monospace; + font-size: 0.78rem; + text-decoration: none; + transition: + background 0.2s, + color 0.2s, + border-color 0.2s; + } + + .download-card .file-name:hover { + background: #d4a84b; + color: #1a1410; + border-color: #d4a84b; + } + + .download-card .file-name .btn-arrow { + flex-shrink: 0; + font-size: 0.9rem; + } + + .download-card .checksum { + font-size: 0.78rem; + color: #7a6a5a; + } + + .download-card .checksum a { + color: #7a6a5a; + text-decoration: underline; + } + + .download-card .checksum a:hover { + color: #d4a84b; + } + + .checksum-note { + margin: 1.25rem auto 0; + width: fit-content; + font-size: 0.8rem; + color: #6a5a4a; + text-align: center; + } + + .section { + padding: 3.5rem 1.5rem; + border-top: 1px solid #2a1e14; + } + + .section.alt { + background-color: #241c16; + } + + .section h2 { + font-size: 1.6rem; + font-weight: 700; + color: #e8ddd0; + margin-bottom: 1rem; + } + + .section h2::before { + content: "✦"; + color: #c43931; + margin-right: 0.5rem; + } + + .section h2 span { + color: #c43931; + } + + .section h3 { + font-size: 1.25rem; + font-weight: 700; + color: #e8ddd0; + margin: 0 0 0.75rem; + } + + .section h3::before { + content: "✦"; + color: #c43931; + margin-right: 0.5rem; + } + + .section h3:not(:first-of-type) { + margin-top: 2rem; + } + + .section p { + color: #9a8a7a; + margin-bottom: 1.25rem; + max-width: 720px; + } + + /* Dashed lines along the container edges, excluding hero */ + body > section:not(.hero) { + position: relative; + background-image: + linear-gradient( + to right, + rgba(212, 168, 75, 0.03) 1px, + transparent 1px + ), + linear-gradient( + to bottom, + rgba(212, 168, 75, 0.03) 1px, + transparent 1px + ), + linear-gradient( + to right, + rgba(212, 168, 75, 0.015) 1px, + transparent 1px + ), + linear-gradient( + to bottom, + rgba(212, 168, 75, 0.015) 1px, + transparent 1px + ); + background-size: + 40px 40px, + 40px 40px, + 20px 20px, + 20px 20px; + background-position: + calc(50% - 540px + 20px) 0, + calc(50% - 540px) 0, + calc(50% - 540px + 10px) 0, + calc(50% - 540px + 10px) 0; + } + + body > section:not(.hero)::before, + body > section:not(.hero)::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + width: 1px; + background: repeating-linear-gradient( + to bottom, + rgba(212, 168, 75, 0.25) 0, + rgba(212, 168, 75, 0.25) 4px, + transparent 4px, + transparent 9px + ); + pointer-events: none; + z-index: 49; + } + + body > section:not(.hero)::before { + left: max(0px, calc(50% - 540px)); + } + + body > section:not(.hero)::after { + right: max(0px, calc(50% - 540px)); + } + + /* Diamond markers at line intersections */ + .line-diamond { + position: absolute; + top: -4px; + width: 8px; + height: 8px; + background: rgba(212, 168, 75, 0.25); + transform: rotate(45deg); + pointer-events: none; + z-index: 50; + } + + .line-diamond.left { + left: calc(max(0px, calc(50% - 540px)) - 4px); + } + + .line-diamond.right { + right: calc(max(0px, calc(50% - 540px)) - 4px); + } + + /* Horizontal dashed dividers between pages */ + body > section + section, + body > footer { + border-top: 1px solid rgba(212, 168, 75, 0.25); + border-image: repeating-linear-gradient( + to right, + rgba(212, 168, 75, 0.25) 0 4px, + transparent 4px 9px + ) + 1; + } + + .code-block { + background: #1a1410; + border: 1px solid #3a2e24; + border-radius: 2px; + padding: 1.5rem 1.5rem 1.5rem; + overflow-x: auto; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); + margin-bottom: 1.5rem; + } + + .code-block pre { + margin: 0; + padding: 0; + background: transparent; + position: relative; + } + + .code-line-highlight { + position: absolute; + left: 0; + right: 0; + height: 28px; + background: rgba(255, 255, 255, 0.1); + border-left: 2px solid rgba(255, 255, 255, 0.45); + pointer-events: none; + opacity: 0; + transition: + opacity 0.15s ease, + top 0.08s ease; + z-index: 3; + } + + .code-block code { + font-family: "JetBrains Mono", "Noto Serif SC", monospace; + font-variant-ligatures: contextual; + font-size: 0.85rem; + line-height: 1.65; + color: #c0b0a0; + background: transparent !important; + padding: 0 !important; + } + + .code-block code .cm { + color: #6a5a4a; + } + + /* Shell simulator for help output */ + .shell-term { + background: #0f0b08; + border: 1px solid #3a2e24; + border-radius: 2.5px; + padding: 1.5rem 1.75rem; + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4); + overflow-x: auto; + overflow-y: auto; + max-width: 960px; + max-height: 480px; + margin: 0 auto; + scrollbar-width: none; + -ms-overflow-style: none; + } + + .shell-term::-webkit-scrollbar { + display: none; + } + + .shell-term pre { + margin: 0; + padding: 0; + background: transparent; + position: relative; + } + + .shell-term code { + font-family: "JetBrains Mono", "Noto Serif SC", monospace; + font-size: 0.85rem; + line-height: 1.7; + color: #c0b0a0; + white-space: pre; + display: block; + background: transparent !important; + padding: 0 !important; + } + + .shell-term b { + font-weight: 700; + color: #e8ddd0; + } + + .shell-term i { + font-style: italic; + } + + .shell-term u { + text-decoration: underline; + } + + .shell-term .t-cyan { + color: #79c0ff; + } + + .shell-term .t-green { + color: #7ee787; + } + + .shell-term .t-heading { + background: #e8ddd0; + color: #1a1410; + font-weight: 700; + padding: 0 0.25rem; + } + + .shell-term .t-quote { + background: #6a5a4a; + color: #6a5a4a; + } + + footer { + padding: 2rem 1.5rem; + text-align: center; + color: #6a5a4a; + font-size: 0.85rem; + border-top: 1px solid #2a1e14; + } + + footer a { + color: #7a6a5a; + } + + footer a:hover { + color: #d4a84b; + } + + @media (max-width: 768px) { + html { + scroll-snap-type: none; + } + + .hero, + .section { + min-height: auto; + } + + nav { + padding: 0.8rem 1rem; + } + + nav .nav-links { + gap: 0.8rem; + } + + .hero h1 { + font-size: 2rem; + } + + .download-card { + min-width: 100%; + } + } + + /* Cursor glow dot */ + .cursor-dot { + position: fixed; + pointer-events: none; + border-radius: 50%; + width: 400px; + height: 400px; + background: radial-gradient( + circle, + rgba(212, 168, 75, 0.06) 0%, + rgba(212, 168, 75, 0.02) 45%, + transparent 70% + ); + transform: translate(-50%, -50%); + z-index: 10000; + opacity: 0; + transition: + opacity 0.3s ease, + left 0.12s ease-out, + top 0.12s ease-out; + } + + /* Ink drop effect */ + .ink-drop { + position: fixed; + pointer-events: none; + border-radius: 50%; + background: radial-gradient( + circle, + rgba(212, 168, 75, 0.15) 0%, + rgba(196, 57, 49, 0.06) 50%, + transparent 100% + ); + width: 0; + height: 0; + transform: translate(-50%, -50%); + animation: inkSpread 0.9s ease-out forwards; + z-index: 9999; + } + + @keyframes inkSpread { + 0% { + width: 0; + height: 0; + opacity: 1; + } + 100% { + width: 500px; + height: 500px; + opacity: 0; + } + } + </style> + </head> + + <body> + <nav> + <a href="../" class="logo"> + <img + src="../docs/res/icon.png" + alt="Mingling icon" + width="28" + height="28" + /> + Mìng Lìng + </a> + <div class="nav-links"> + <a + href="https://github.com/mingling-rs/mingling/tree/main/mingling_cli" + target="_blank" + >GitHub</a + > + <a + href="https://crates.io/crates/mingling-cli" + target="_blank" + class="btn-nav" + >cargo install mingling-cli</a + > + </div> + </nav> + + <section class="hero"> + <h1>Mingling CLI</h1> + <p class="subtitle"> + <span class="star">✦</span> <b>Scaffold</b> — generate projects + with <code>proj-init</code><br /> + <span class="star">✦</span> <b>Manage</b> — install, enable, and + inspect packages<br /> + <span class="star">✦</span> <b>Update</b> — <code>mling</code> + keeps itself fresh + </p> + <div class="hero-term"> + <pre><code class="no-highlight term-hero"></code></pre> + </div> + </section> + + <section class="section alt"> + <div class="container"> + <h2>How to use</h2> + <div class="shell-term"> + <pre><code class="no-highlight" id="shell-help"></code></pre> + </div> + </div> + </section> + + <section class="section"> + <div class="container"> + <h2>Download</h2> + <p> + Choose the package for your platform and download the latest + build. + </p> + <div class="download-row"> + <div class="download-card"> + <svg + class="platform invert" + viewBox="0 0 128 128" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M113.823 104.595c-1.795-1.478-3.629-2.921-5.308-4.525-1.87-1.785-3.045-3.944-2.789-6.678.147-1.573-.216-2.926-2.113-3.452.446-1.154.864-1.928 1.033-2.753.188-.92.178-1.887.204-2.834.264-9.96-3.334-18.691-8.663-26.835-2.454-3.748-5.017-7.429-7.633-11.066-4.092-5.688-5.559-12.078-5.633-18.981a47.564 47.564 0 00-1.081-9.475C80.527 11.956 77.291 7.233 71.422 4.7c-4.497-1.942-9.152-2.327-13.901-1.084-6.901 1.805-11.074 6.934-10.996 14.088.074 6.885.417 13.779.922 20.648.288 3.893-.312 7.252-2.895 10.34-2.484 2.969-4.706 6.172-6.858 9.397-1.229 1.844-2.317 3.853-3.077 5.931-2.07 5.663-3.973 11.373-7.276 16.5-1.224 1.9-1.363 4.026-.494 6.199.225.563.363 1.429.089 1.882-2.354 3.907-5.011 7.345-10.066 8.095-3.976.591-4.172 1.314-4.051 5.413.1 3.337.061 6.705-.28 10.021-.363 3.555.008 4.521 3.442 5.373 7.924 1.968 15.913 3.647 23.492 6.854 3.227 1.365 6.465.891 9.064-1.763 2.713-2.771 6.141-3.855 9.844-3.859 6.285-.005 12.572.298 18.86.369 1.702.02 2.679.653 3.364 2.199.84 1.893 2.26 3.284 4.445 3.526 4.193.462 8.013-.16 11.19-3.359 3.918-3.948 8.436-7.066 13.615-9.227 1.482-.619 2.878-1.592 4.103-2.648 2.231-1.922 2.113-3.146-.135-5zM62.426 24.12c.758-2.601 2.537-4.289 5.243-4.801 2.276-.43 4.203.688 5.639 3.246 1.546 2.758 2.054 5.64.734 8.658-1.083 2.474-1.591 2.707-4.123 1.868-.474-.157-.937-.343-1.777-.652.708-.594 1.154-1.035 1.664-1.382 1.134-.772 1.452-1.858 1.346-3.148-.139-1.694-1.471-3.194-2.837-3.175-1.225.017-2.262 1.167-2.4 2.915-.086 1.089.095 2.199.173 3.589-3.446-1.023-4.711-3.525-3.662-7.118zm-12.75-2.251c1.274-1.928 3.197-2.314 5.101-1.024 2.029 1.376 3.547 5.256 2.763 7.576-.285.844-1.127 1.5-1.716 2.241l-.604-.374c-.23-1.253-.276-2.585-.757-3.733-.304-.728-1.257-1.184-1.919-1.762-.622.739-1.693 1.443-1.757 2.228-.088 1.084.477 2.28.969 3.331.311.661 1.001 1.145 1.713 1.916l-1.922 1.51c-3.018-2.7-3.915-8.82-1.871-11.909zM87.34 86.075c-.203 2.604-.5 2.713-3.118 3.098-1.859.272-2.359.756-2.453 2.964a101.744 101.744 0 00-.012 7.753c.061 1.77-.537 3.158-1.755 4.393-6.764 6.856-14.845 10.105-24.512 8.926-4.17-.509-6.896-3.047-9.097-6.639.98-.363 1.705-.607 2.412-.894 3.122-1.27 3.706-3.955 1.213-6.277-1.884-1.757-3.986-3.283-6.007-4.892-1.954-1.555-3.934-3.078-5.891-4.629-1.668-1.323-2.305-3.028-2.345-5.188-.094-5.182.972-10.03 3.138-14.747 1.932-4.209 3.429-8.617 5.239-12.885.935-2.202 1.906-4.455 3.278-6.388 1.319-1.854 2.134-3.669 1.988-5.94-.084-1.276-.016-2.562-.016-3.843l.707-.352c1.141.985 2.302 1.949 3.423 2.959 4.045 3.646 7.892 3.813 12.319.67 1.888-1.341 3.93-2.47 5.927-3.652.497-.294 1.092-.423 1.934-.738 2.151 5.066 4.262 10.033 6.375 15 1.072 2.524 1.932 5.167 3.264 7.547 2.671 4.775 4.092 9.813 4.07 15.272-.012 2.83.137 5.67-.081 8.482z" + /> + </svg> + <span class="os-name">Linux</span> + <a class="file-name" href="./mling-linux.tar.gz" + >DOWNLOAD<span class="btn-arrow">↓</span></a + > + <span class="checksum" + ><a href="./mling-linux.tar.gz.sha256" + >SHA256</a + ></span + > + </div> + <div class="download-card"> + <svg + class="platform invert" + viewBox="0 0 128 128" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M126 1.637l-67 9.834v49.831l67-.534zM1.647 66.709l.003 42.404 50.791 6.983-.04-49.057zm56.82.68l.094 49.465 67.376 9.509.016-58.863zM1.61 19.297l.047 42.383 50.791-.289-.023-49.016z" + /> + </svg> + <span class="os-name">Windows</span> + <a class="file-name" href="./mling-win.tar.gz" + >DOWNLOAD<span class="btn-arrow">↓</span></a + > + <span class="checksum" + ><a href="./mling-win.tar.gz.sha256" + >SHA256</a + ></span + > + </div> + <div class="download-card"> + <svg + class="platform invert" + viewBox="0 0 128 128" + xmlns="http://www.w3.org/2000/svg" + aria-hidden="true" + > + <path + d="M97.905 67.885c.174 18.8 16.494 25.057 16.674 25.137-.138.44-2.607 8.916-8.597 17.669-5.178 7.568-10.553 15.108-19.018 15.266-8.318.152-10.993-4.934-20.504-4.934-9.508 0-12.479 4.776-20.354 5.086-8.172.31-14.395-8.185-19.616-15.724C15.822 94.961 7.669 66.8 18.616 47.791c5.438-9.44 15.158-15.417 25.707-15.571 8.024-.153 15.598 5.398 20.503 5.398 4.902 0 14.106-6.676 23.782-5.696 4.051.169 15.421 1.636 22.722 12.324-.587.365-13.566 7.921-13.425 23.639M82.272 21.719c4.338-5.251 7.258-12.563 6.462-19.836-6.254.251-13.816 4.167-18.301 9.416-4.02 4.647-7.54 12.087-6.591 19.216 6.971.54 14.091-3.542 18.43-8.796" + /> + </svg> + <span class="os-name">Mac OS</span> + <a class="file-name" href="./mling-mac.tar.gz" + >DOWNLOAD<span class="btn-arrow">↓</span></a + > + <span class="checksum" + ><a href="./mling-mac.tar.gz.sha256" + >SHA256</a + ></span + > + </div> + </div> + + <p class="checksum-note"> + Packages are built on every push to + <a + href="https://github.com/mingling-rs/mingling" + target="_blank" + >main</a + > + and published here automatically. + </p> + </div> + </section> + + <section class="section alt"> + <div class="container"> + <h3>Install</h3> + <p> + Extract the package and load the bundled environment script + — it adds <code>bin/</code> to <code>PATH</code> and enables + shell completion. + </p> + <div class="code-block"> + <pre><code class="language-bash"><span class="cm"># Linux / macOS (zsh, bash, fish)</span> +tar -xzf mling-linux.tar.gz +source load_mling.sh + +<span class="cm"># Windows (PowerShell)</span> +tar -xzf mling-win.tar.gz +.\load_mling.ps1</code></pre> + </div> + <h3>Update</h3> + <p> + <code>mling</code> can update itself. It downloads from this + page by default, verifies the sha256 checksum, and applies + the new version on your next invocation. + </p> + <div class="code-block"> + <pre><code class="language-bash"><span class="cm"># Update to the latest build</span> +mling update + +<span class="cm"># Point it at a custom mirror if needed</span> +mling cfg update-url https://mingling-rs.github.io/mingling/dist +mling update</code></pre> + </div> + </div> + </section> + + <footer> + <a href="../">Mìng Lìng</a> · + <a href="https://github.com/mingling-rs/mingling" target="_blank" + >GitHub</a + > + · + <a href="../docs/doc.html">Docs</a> + </footer> + + <script src="../docs/scripts/display-parse.js"></script> + <script src="../docs/scripts/highlight/highlight.min.js"></script> + <script src="../docs/scripts/highlight/bash.min.js"></script> + <script> + hljs.highlightAll(); + </script> + + <script> + // Load and render help.txt with the same coloring logic as display.rs + (function () { + var el = document.getElementById("shell-help"); + if (!el) return; + fetch("../mingling_cli/help/help.txt") + .then(function (r) { + if (!r.ok) throw new Error("HTTP " + r.status); + return r.text(); + }) + .then(function (text) { + el.innerHTML = window.MlingDisplay.parse(text); + }) + .catch(function (err) { + el.textContent = + "Failed to load help.txt: " + err.message; + }); + })(); + </script> + + <script> + // Highlight the hovered line in code blocks + (function () { + function attachLineHighlight(container) { + var pre = + container.tagName === "PRE" + ? container + : container.querySelector("pre"); + var code = pre.querySelector("code"); + var hl = document.createElement("div"); + hl.className = "code-line-highlight"; + pre.appendChild(hl); + + var lineHeight = parseFloat( + getComputedStyle(code).lineHeight, + ); + var padTop = + parseFloat(getComputedStyle(code).paddingTop) || 0; + + pre.addEventListener("mousemove", function (e) { + var rect = pre.getBoundingClientRect(); + var y = e.clientY - rect.top; + var index = Math.floor((y - padTop) / lineHeight); + var lineCount = code.innerText.split("\n").length; + if (index < 0) index = 0; + if (index >= lineCount) index = lineCount - 1; + hl.style.top = padTop + index * lineHeight + "px"; + hl.style.height = lineHeight + "px"; + hl.style.opacity = "1"; + }); + + pre.addEventListener("mouseleave", function () { + hl.style.opacity = "0"; + }); + } + + document + .querySelectorAll(".code-block, .shell-term") + .forEach(attachLineHighlight); + })(); + </script> + + <script> + // Hero command carousel typewriter + (function () { + var code = document.querySelector(".term-hero"); + if (!code) return; + + var commands = [ + "mling metadata", + "mling lint", + "mling ra-lint", + "mling proj-init 0.5.0@basic", + "mling class-add subcommand calc", + "mling install", + "mling pkg-enable your-cli@0.1.0", + "mling pkg-show", + "mling cfg update-url <URL>", + "mling update", + "mling -h", + ]; + var idx = 0; + var cursor = document.createElement("span"); + cursor.className = "term-cursor"; + code.appendChild(cursor); + + function clear() { + while (code.firstChild && code.firstChild !== cursor) { + code.removeChild(code.firstChild); + } + } + + function typeText(text, cls, speed, done) { + var i = 0; + (function step() { + if (cls) { + var span = document.createElement("span"); + span.className = cls; + span.textContent = text[i]; + code.insertBefore(span, cursor); + } else { + cursor.insertAdjacentText("beforebegin", text[i]); + } + i++; + if (i < text.length) { + setTimeout(step, speed); + } else { + done(); + } + })(); + } + + function play() { + var cmd = commands[idx]; + idx = (idx + 1) % commands.length; + clear(); + typeText("~# ", "term-prompt", 60, function () { + typeText(cmd, "term-cmd", 55, function () { + setTimeout(play, 2500); + }); + }); + } + + setTimeout(play, 800); + })(); + </script> + + <script> + // Insert diamond decorations at line intersections + (function () { + document + .querySelectorAll("body > section + section, body > footer") + .forEach(function (el) { + var left = document.createElement("span"); + left.className = "line-diamond left"; + var right = document.createElement("span"); + right.className = "line-diamond right"; + el.appendChild(left); + el.appendChild(right); + }); + })(); + </script> + + <script> + // Persistent glow dot following the mouse + var cursorDot = document.createElement("div"); + cursorDot.className = "cursor-dot"; + document.body.appendChild(cursorDot); + + document.addEventListener("mousemove", function (e) { + cursorDot.style.left = e.clientX + "px"; + cursorDot.style.top = e.clientY + "px"; + if (cursorDot.style.opacity !== "1") { + cursorDot.style.opacity = "1"; + } + }); + + // Ink drop ripple on click + document.addEventListener("click", function (e) { + var drop = document.createElement("div"); + drop.className = "ink-drop"; + drop.style.left = e.clientX + "px"; + drop.style.top = e.clientY + "px"; + document.body.appendChild(drop); + setTimeout(function () { + drop.remove(); + }, 1000); + }); + </script> + + <script> + // Disable full-page snap after the last section so the footer is reachable + (function () { + var html = document.documentElement; + var sections = document.querySelectorAll( + "body > section.hero, body > section.section", + ); + if (!sections.length) return; + var last = sections[sections.length - 1]; + var lastTop = last.offsetTop; + var disabled = false; + + window.addEventListener( + "wheel", + function (e) { + if ( + e.deltaY > 0 && + window.scrollY >= lastTop - 5 && + !disabled + ) { + html.style.scrollSnapType = "none"; + disabled = true; + } + }, + { passive: true }, + ); + + window.addEventListener( + "scroll", + function () { + if (disabled && window.scrollY < lastTop) { + html.style.scrollSnapType = ""; + disabled = false; + } + }, + { passive: true }, + ); + })(); + </script> + </body> +</html> |
