feat: add example scripts for argparse, bytes, dataset, html, markdown, uuid, wdantic, and web chat modules

Add comprehensive demo scripts showcasing the usage of multiple Wren modules including argument parsing, byte manipulation, in-memory dataset operations, HTML encoding/slugification, markdown-to-HTML conversion, UUID generation/validation, schema validation with wdantic, and a full web chat application with REST endpoints.
This commit is contained in:
2026-01-24 22:40:22 +00:00
parent 0a65272f80
commit 5a4054ec66
105 changed files with 23275 additions and 94 deletions
+727
View File
@@ -0,0 +1,727 @@
/* retoor <retoor@molodetz.nl> */
:root {
--sidebar-bg: #343131;
--sidebar-text: #d9d9d9;
--sidebar-link: #b3b3b3;
--sidebar-link-hover: #ffffff;
--sidebar-active: #2980b9;
--primary: #2980b9;
--primary-dark: #1a5276;
--text: #404040;
--heading: #2c3e50;
--code-bg: #f4f4f4;
--code-border: #e1e4e5;
--border: #e1e4e5;
--sidebar-width: 280px;
--content-max-width: 900px;
--link: #2980b9;
--link-hover: #1a5276;
--warning-bg: #fff3cd;
--warning-border: #ffc107;
--note-bg: #e7f2fa;
--note-border: #6ab0de;
--tip-bg: #dff0d8;
--tip-border: #3c763d;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
font-size: 16px;
scroll-behavior: smooth;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
color: var(--text);
background: #ffffff;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
position: fixed;
top: 0;
left: 0;
width: var(--sidebar-width);
height: 100vh;
background: var(--sidebar-bg);
color: var(--sidebar-text);
overflow-y: auto;
z-index: 100;
}
.sidebar-header {
padding: 20px;
background: rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.sidebar-header h1 {
font-size: 1.5rem;
font-weight: 700;
margin: 0;
}
.sidebar-header h1 a {
color: #ffffff;
text-decoration: none;
}
.sidebar-header .version {
font-size: 0.85rem;
color: var(--sidebar-link);
margin-top: 5px;
}
.sidebar-nav {
padding: 15px 0;
}
.sidebar-nav .section {
margin-bottom: 10px;
}
.sidebar-nav .section-title {
display: block;
padding: 8px 20px;
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
color: var(--sidebar-text);
letter-spacing: 0.05em;
}
.sidebar-nav ul {
list-style: none;
}
.sidebar-nav li a {
display: block;
padding: 6px 20px 6px 30px;
color: var(--sidebar-link);
text-decoration: none;
font-size: 0.9rem;
transition: color 0.15s, background 0.15s;
}
.sidebar-nav li a:hover {
color: var(--sidebar-link-hover);
background: rgba(255, 255, 255, 0.05);
}
.sidebar-nav li a.active {
color: var(--sidebar-active);
background: rgba(255, 255, 255, 0.05);
border-left: 3px solid var(--sidebar-active);
padding-left: 27px;
}
.sidebar-nav li.nested a {
padding-left: 45px;
font-size: 0.85rem;
}
.content {
flex: 1;
margin-left: var(--sidebar-width);
padding: 40px 50px;
max-width: calc(var(--content-max-width) + var(--sidebar-width) + 100px);
}
article {
max-width: var(--content-max-width);
}
h1, h2, h3, h4, h5, h6 {
color: var(--heading);
font-weight: 700;
line-height: 1.3;
margin-top: 1.5em;
margin-bottom: 0.5em;
}
h1 {
font-size: 2rem;
margin-top: 0;
padding-bottom: 0.3em;
border-bottom: 1px solid var(--border);
}
h2 {
font-size: 1.5rem;
margin-top: 2em;
}
h3 {
font-size: 1.25rem;
}
h4 {
font-size: 1.1rem;
}
p {
margin-bottom: 1em;
}
a {
color: var(--link);
text-decoration: none;
}
a:hover {
color: var(--link-hover);
text-decoration: underline;
}
code {
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Monaco, monospace;
font-size: 0.9em;
background: var(--code-bg);
padding: 2px 6px;
border-radius: 3px;
border: 1px solid var(--code-border);
}
pre {
background: var(--code-bg);
border: 1px solid var(--code-border);
border-radius: 4px;
padding: 15px 20px;
overflow-x: auto;
margin: 1em 0;
position: relative;
}
pre code {
background: none;
border: none;
padding: 0;
font-size: 0.875rem;
line-height: 1.5;
}
.code-block {
position: relative;
}
.code-block .copy-btn {
position: absolute;
top: 8px;
right: 8px;
padding: 4px 10px;
font-size: 0.75rem;
background: var(--primary);
color: #ffffff;
border: none;
border-radius: 3px;
cursor: pointer;
opacity: 0;
transition: opacity 0.2s;
}
.code-block:hover .copy-btn {
opacity: 1;
}
.copy-btn:hover {
background: var(--primary-dark);
}
.copy-btn.copied {
background: var(--tip-border);
}
.method-signature {
background: #f8f8f8;
border-left: 4px solid var(--primary);
padding: 12px 16px;
margin: 1em 0;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 0.9rem;
overflow-x: auto;
}
.method-signature .method-name {
color: var(--primary-dark);
font-weight: 600;
}
.method-signature .param {
color: #c0392b;
}
.method-signature .type {
color: #27ae60;
}
ul, ol {
margin: 1em 0;
padding-left: 2em;
}
li {
margin-bottom: 0.5em;
}
ul.param-list {
list-style: none;
padding-left: 0;
margin: 0.5em 0 1em;
}
ul.param-list li {
padding: 4px 0;
padding-left: 1.5em;
position: relative;
}
ul.param-list li::before {
content: "•";
position: absolute;
left: 0.5em;
color: var(--primary);
}
.param-name {
font-family: monospace;
background: var(--code-bg);
padding: 1px 5px;
border-radius: 2px;
}
.param-type {
color: #27ae60;
font-size: 0.9em;
}
.returns {
color: #8e44ad;
font-weight: 500;
}
table {
width: 100%;
border-collapse: collapse;
margin: 1em 0;
}
th, td {
padding: 10px 12px;
text-align: left;
border: 1px solid var(--border);
}
th {
background: var(--code-bg);
font-weight: 600;
}
tr:nth-child(even) {
background: #fafafa;
}
.admonition {
padding: 15px 20px;
margin: 1.5em 0;
border-radius: 4px;
border-left: 4px solid;
}
.admonition-title {
font-weight: 700;
margin-bottom: 0.5em;
}
.admonition.note {
background: var(--note-bg);
border-color: var(--note-border);
}
.admonition.warning {
background: var(--warning-bg);
border-color: var(--warning-border);
}
.admonition.tip {
background: var(--tip-bg);
border-color: var(--tip-border);
}
.page-footer {
display: flex;
justify-content: space-between;
margin-top: 3em;
padding-top: 1.5em;
border-top: 1px solid var(--border);
}
.page-footer a {
display: inline-flex;
align-items: center;
padding: 8px 16px;
background: var(--code-bg);
border-radius: 4px;
font-weight: 500;
}
.page-footer a:hover {
background: var(--border);
text-decoration: none;
}
.page-footer .prev::before {
content: "← ";
}
.page-footer .next::after {
content: " →";
}
.breadcrumb {
margin-bottom: 1.5em;
font-size: 0.9rem;
color: #666;
}
.breadcrumb a {
color: #666;
}
.breadcrumb a:hover {
color: var(--primary);
}
.breadcrumb .separator {
margin: 0 0.5em;
}
.mobile-menu-toggle {
display: none;
position: fixed;
top: 15px;
left: 15px;
z-index: 200;
background: var(--sidebar-bg);
color: #ffffff;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
.hero {
text-align: center;
padding: 60px 20px;
background: linear-gradient(135deg, var(--heading) 0%, var(--primary) 100%);
color: #ffffff;
margin: -40px -50px 40px;
border-radius: 0 0 8px 8px;
}
.hero h1 {
color: #ffffff;
border: none;
font-size: 2.5rem;
margin-bottom: 0.5em;
}
.hero p {
font-size: 1.2rem;
opacity: 0.9;
max-width: 600px;
margin: 0 auto 1.5em;
}
.hero-buttons {
display: flex;
gap: 15px;
justify-content: center;
flex-wrap: wrap;
}
.hero-buttons a {
padding: 12px 24px;
border-radius: 4px;
font-weight: 600;
text-decoration: none;
transition: transform 0.15s, box-shadow 0.15s;
}
.hero-buttons .primary-btn {
background: #ffffff;
color: var(--primary);
}
.hero-buttons .secondary-btn {
background: rgba(255, 255, 255, 0.15);
color: #ffffff;
border: 1px solid rgba(255, 255, 255, 0.3);
}
.hero-buttons a:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin: 2em 0;
}
.card {
background: #ffffff;
border: 1px solid var(--border);
border-radius: 8px;
padding: 20px;
transition: box-shadow 0.2s, transform 0.2s;
}
.card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
}
.card h3 {
margin-top: 0;
margin-bottom: 0.5em;
}
.card h3 a {
color: var(--heading);
}
.card p {
margin: 0;
color: #666;
font-size: 0.95rem;
}
.module-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 15px;
margin: 1.5em 0;
}
.module-card {
display: block;
padding: 15px;
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 6px;
text-align: center;
font-weight: 500;
color: var(--heading);
transition: all 0.2s;
}
.module-card:hover {
background: var(--primary);
color: #ffffff;
text-decoration: none;
border-color: var(--primary);
}
.toc {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 4px;
padding: 20px;
margin: 1.5em 0;
}
.toc h4 {
margin: 0 0 10px;
font-size: 1rem;
}
.toc ul {
margin: 0;
padding-left: 1.5em;
}
.toc li {
margin-bottom: 0.3em;
}
.api-section {
margin: 2em 0;
padding: 1.5em;
background: #fafafa;
border-radius: 8px;
border: 1px solid var(--border);
}
.api-section h3 {
margin-top: 0;
color: var(--primary);
}
.class-header {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
padding: 20px;
border-radius: 8px;
margin: 1.5em 0 1em;
border-left: 4px solid var(--primary);
}
.class-header h3 {
margin: 0;
color: var(--heading);
}
.class-header p {
margin: 0.5em 0 0;
color: #666;
}
@media (max-width: 900px) {
.sidebar {
transform: translateX(-100%);
transition: transform 0.3s;
}
.sidebar.open {
transform: translateX(0);
}
.mobile-menu-toggle {
display: block;
}
.content {
margin-left: 0;
padding: 70px 20px 40px;
}
.hero {
margin: -70px -20px 30px;
padding: 80px 20px 40px;
}
.hero h1 {
font-size: 1.8rem;
}
h1 {
font-size: 1.6rem;
}
h2 {
font-size: 1.3rem;
}
pre {
padding: 12px;
}
.page-footer {
flex-direction: column;
gap: 10px;
}
.page-footer a {
text-align: center;
}
}
.sidebar-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 50;
}
.sidebar-overlay.visible {
display: block;
}
.search-box {
padding: 15px 20px;
}
.search-box input {
width: 100%;
padding: 8px 12px;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
font-size: 0.9rem;
}
.search-box input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.search-box input:focus {
outline: none;
border-color: var(--primary);
background: rgba(255, 255, 255, 0.15);
}
.example-output {
background: #1e1e1e;
color: #d4d4d4;
padding: 15px 20px;
border-radius: 4px;
margin: 1em 0;
font-family: monospace;
font-size: 0.875rem;
}
.example-output::before {
content: "Output:";
display: block;
color: #888;
margin-bottom: 8px;
font-size: 0.8rem;
}
.deprecated {
opacity: 0.7;
text-decoration: line-through;
}
.badge {
display: inline-block;
padding: 2px 8px;
font-size: 0.75rem;
font-weight: 600;
border-radius: 3px;
margin-left: 8px;
vertical-align: middle;
}
.badge-new {
background: #27ae60;
color: #ffffff;
}
.badge-experimental {
background: #f39c12;
color: #ffffff;
}
.badge-async {
background: #9b59b6;
color: #ffffff;
}