From 329550f44a9add74524115f0921807a9daac0105 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Fri, 19 Sep 2025 17:32:19 -0700 Subject: [PATCH] arg completer --- packages/arg-completer/.gitattributes | 2 + packages/arg-completer/.gitignore | 34 ++ packages/arg-completer/CLAUDE.md | 106 +++++ packages/arg-completer/bun-env.d.ts | 17 + packages/arg-completer/bun.lock | 29 ++ packages/arg-completer/bunfig.toml | 2 + packages/arg-completer/package.json | 19 + packages/arg-completer/public/img/cow.jpeg | Bin 0 -> 97523 bytes .../public/vendor/C64_Pro-STYLE.woff2 | Bin 0 -> 6296 bytes .../public/vendor/C64_Pro_Mono-STYLE.woff2 | Bin 0 -> 5908 bytes .../public/vendor/pico.fuchsia.css | 4 + .../arg-completer/src/components/prompt.tsx | 30 ++ packages/arg-completer/src/css/index.css | 166 +++++++ packages/arg-completer/src/js/command.test.ts | 116 +++++ packages/arg-completer/src/js/command.ts | 171 +++++++ packages/arg-completer/src/js/commands.ts | 449 ++++++++++++++++++ packages/arg-completer/src/js/dom.ts | 12 + packages/arg-completer/src/js/errors.ts | 5 + packages/arg-completer/src/js/index.tsx | 133 ++++++ .../arg-completer/src/js/tokenizer.test.ts | 105 ++++ packages/arg-completer/src/js/tokenizer.ts | 122 +++++ packages/arg-completer/src/layout.tsx | 17 + packages/arg-completer/src/server.tsx | 32 ++ packages/arg-completer/src/utils.tsx | 58 +++ packages/arg-completer/tsconfig.json | 34 ++ 25 files changed, 1663 insertions(+) create mode 100644 packages/arg-completer/.gitattributes create mode 100644 packages/arg-completer/.gitignore create mode 100644 packages/arg-completer/CLAUDE.md create mode 100644 packages/arg-completer/bun-env.d.ts create mode 100644 packages/arg-completer/bun.lock create mode 100644 packages/arg-completer/bunfig.toml create mode 100644 packages/arg-completer/package.json create mode 100644 packages/arg-completer/public/img/cow.jpeg create mode 100644 packages/arg-completer/public/vendor/C64_Pro-STYLE.woff2 create mode 100644 packages/arg-completer/public/vendor/C64_Pro_Mono-STYLE.woff2 create mode 100644 packages/arg-completer/public/vendor/pico.fuchsia.css create mode 100644 packages/arg-completer/src/components/prompt.tsx create mode 100644 packages/arg-completer/src/css/index.css create mode 100644 packages/arg-completer/src/js/command.test.ts create mode 100644 packages/arg-completer/src/js/command.ts create mode 100644 packages/arg-completer/src/js/commands.ts create mode 100644 packages/arg-completer/src/js/dom.ts create mode 100644 packages/arg-completer/src/js/errors.ts create mode 100644 packages/arg-completer/src/js/index.tsx create mode 100644 packages/arg-completer/src/js/tokenizer.test.ts create mode 100644 packages/arg-completer/src/js/tokenizer.ts create mode 100644 packages/arg-completer/src/layout.tsx create mode 100644 packages/arg-completer/src/server.tsx create mode 100644 packages/arg-completer/src/utils.tsx create mode 100644 packages/arg-completer/tsconfig.json diff --git a/packages/arg-completer/.gitattributes b/packages/arg-completer/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/packages/arg-completer/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/packages/arg-completer/.gitignore b/packages/arg-completer/.gitignore new file mode 100644 index 0000000..a14702c --- /dev/null +++ b/packages/arg-completer/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/arg-completer/CLAUDE.md b/packages/arg-completer/CLAUDE.md new file mode 100644 index 0000000..1ee6890 --- /dev/null +++ b/packages/arg-completer/CLAUDE.md @@ -0,0 +1,106 @@ + +Default to using Bun instead of Node.js. + +- Use `bun ` instead of `node ` or `ts-node ` +- Use `bun test` instead of `jest` or `vitest` +- Use `bun build ` instead of `webpack` or `esbuild` +- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install` +- Use `bun run + + +``` + +With the following `frontend.tsx`: + +```tsx#frontend.tsx +import React from "react"; + +// import .css files directly and it works +import './index.css'; + +import { createRoot } from "react-dom/client"; + +const root = createRoot(document.body); + +export default function Frontend() { + return

Hello, world!

; +} + +root.render(); +``` + +Then, run index.ts + +```sh +bun --hot ./index.ts +``` + +For more information, read the Bun API docs in `node_modules/bun-types/docs/**.md`. diff --git a/packages/arg-completer/bun-env.d.ts b/packages/arg-completer/bun-env.d.ts new file mode 100644 index 0000000..72f1c26 --- /dev/null +++ b/packages/arg-completer/bun-env.d.ts @@ -0,0 +1,17 @@ +// Generated by `bun init` + +declare module "*.svg" { + /** + * A path to the SVG file + */ + const path: `${string}.svg`; + export = path; +} + +declare module "*.module.css" { + /** + * A record of class names to their corresponding CSS module classes + */ + const classes: { readonly [key: string]: string }; + export = classes; +} diff --git a/packages/arg-completer/bun.lock b/packages/arg-completer/bun.lock new file mode 100644 index 0000000..f743215 --- /dev/null +++ b/packages/arg-completer/bun.lock @@ -0,0 +1,29 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "bun-react-template", + "dependencies": { + "hono": "^4.9.7", + }, + "devDependencies": { + "@types/bun": "latest", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.2.22", "", { "dependencies": { "bun-types": "1.2.22" } }, "sha512-5A/KrKos2ZcN0c6ljRSOa1fYIyCKhZfIVYeuyb4snnvomnpFqC0tTsEkdqNxbAgExV384OETQ//WAjl3XbYqQA=="], + + "@types/node": ["@types/node@24.5.0", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg=="], + + "@types/react": ["@types/react@19.1.13", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="], + + "bun-types": ["bun-types@1.2.22", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-hwaAu8tct/Zn6Zft4U9BsZcXkYomzpHJX28ofvx7k0Zz2HNz54n1n+tDgxoWFGB4PcFvJXJQloPhaV2eP3Q6EA=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "hono": ["hono@4.9.7", "", {}, "sha512-t4Te6ERzIaC48W3x4hJmBwgNlLhmiEdEE5ViYb02ffw4ignHNHa5IBtPjmbKstmtKa8X6C35iWwK4HaqvrzG9w=="], + + "undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], + } +} diff --git a/packages/arg-completer/bunfig.toml b/packages/arg-completer/bunfig.toml new file mode 100644 index 0000000..9819bf6 --- /dev/null +++ b/packages/arg-completer/bunfig.toml @@ -0,0 +1,2 @@ +[serve.static] +env = "BUN_PUBLIC_*" \ No newline at end of file diff --git a/packages/arg-completer/package.json b/packages/arg-completer/package.json new file mode 100644 index 0000000..56eca19 --- /dev/null +++ b/packages/arg-completer/package.json @@ -0,0 +1,19 @@ +{ + "name": "complate", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "bun --hot src/server.tsx" + }, + "dependencies": { + "hono": "^4.9.7" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "prettier": { + "semi": false, + "printWidth": 100 + } +} \ No newline at end of file diff --git a/packages/arg-completer/public/img/cow.jpeg b/packages/arg-completer/public/img/cow.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..65795fb20d2604770b044d45840c1b407871a1a8 GIT binary patch literal 97523 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 literal 0 HcmV?d00001 diff --git a/packages/arg-completer/public/vendor/C64_Pro-STYLE.woff2 b/packages/arg-completer/public/vendor/C64_Pro-STYLE.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1d0a8d69622a72eb2c5e16c6db26ac8788e0ed10 GIT binary patch literal 6296 zcmV;J7-#2qPew8T0RR9102r763jhEB0C6k;02oLB0X4$_00000000000000000000 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";--pico-icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--pico-icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--pico-icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--pico-icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--pico-icon-loading:url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E")}@media (min-width:576px){:host,:root{--pico-font-size:106.25%}}@media (min-width:768px){:host,:root{--pico-font-size:112.5%}}@media (min-width:1024px){:host,:root{--pico-font-size:118.75%}}@media (min-width:1280px){:host,:root{--pico-font-size:125%}}@media (min-width:1536px){:host,:root{--pico-font-size:131.25%}}a{--pico-text-decoration:underline}small{--pico-font-size:0.875em}h1,h2,h3,h4,h5,h6{--pico-font-weight:700}h1{--pico-font-size:2rem;--pico-line-height:1.125;--pico-typography-spacing-top:3rem}h2{--pico-font-size:1.75rem;--pico-line-height:1.15;--pico-typography-spacing-top:2.625rem}h3{--pico-font-size:1.5rem;--pico-line-height:1.175;--pico-typography-spacing-top:2.25rem}h4{--pico-font-size:1.25rem;--pico-line-height:1.2;--pico-typography-spacing-top:1.874rem}h5{--pico-font-size:1.125rem;--pico-line-height:1.225;--pico-typography-spacing-top:1.6875rem}h6{--pico-font-size:1rem;--pico-line-height:1.25;--pico-typography-spacing-top:1.5rem}tfoot td,tfoot th,thead td,thead th{--pico-font-weight:600;--pico-border-width:0.1875rem}code,kbd,pre,samp{--pico-font-family:var(--pico-font-family-monospace)}kbd{--pico-font-weight:bolder}:where(select,textarea),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-outline-width:0.0625rem}[type=search]{--pico-border-radius:5rem}[type=checkbox],[type=radio]{--pico-border-width:0.125rem}[type=checkbox][role=switch]{--pico-border-width:0.1875rem}[role=search]{--pico-border-radius:5rem}[role=group] [role=button],[role=group] [type=button],[role=group] [type=submit],[role=group] button,[role=search] [role=button],[role=search] [type=button],[role=search] [type=submit],[role=search] button{--pico-form-element-spacing-horizontal:2rem}details summary[role=button]::after{filter:brightness(0) invert(1)}[aria-busy=true]:not(input,select,textarea):is(button,[type=submit],[type=button],[type=reset],[role=button])::before{filter:brightness(0) invert(1)}:host(:not([data-theme=dark])),:root:not([data-theme=dark]),[data-theme=light]{color-scheme:light;--pico-background-color:#fff;--pico-color:#373c44;--pico-text-selection-color:rgba(247, 72, 183, 0.25);--pico-muted-color:#646b79;--pico-muted-border-color:rgb(231, 234, 239.5);--pico-primary:#c1208b;--pico-primary-background:#c1208b;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(193, 32, 139, 0.5);--pico-primary-hover:#98176d;--pico-primary-hover-background:#ac1c7c;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(247, 72, 183, 0.5);--pico-primary-inverse:#fff;--pico-secondary:#5d6b89;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(93, 107, 137, 0.5);--pico-secondary-hover:#48536b;--pico-secondary-hover-background:#48536b;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(93, 107, 137, 0.25);--pico-secondary-inverse:#fff;--pico-contrast:#181c25;--pico-contrast-background:#181c25;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(24, 28, 37, 0.5);--pico-contrast-hover:#000;--pico-contrast-hover-background:#000;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-secondary-hover);--pico-contrast-focus:rgba(93, 107, 137, 0.25);--pico-contrast-inverse:#fff;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(129, 145, 181, 0.01698),0.0335rem 0.067rem 0.402rem rgba(129, 145, 181, 0.024),0.0625rem 0.125rem 0.75rem rgba(129, 145, 181, 0.03),0.1125rem 0.225rem 1.35rem rgba(129, 145, 181, 0.036),0.2085rem 0.417rem 2.502rem rgba(129, 145, 181, 0.04302),0.5rem 1rem 6rem rgba(129, 145, 181, 0.06),0 0 0 0.0625rem rgba(129, 145, 181, 0.015);--pico-h1-color:#2d3138;--pico-h2-color:#373c44;--pico-h3-color:#424751;--pico-h4-color:#4d535e;--pico-h5-color:#5c6370;--pico-h6-color:#646b79;--pico-mark-background-color:rgb(252.5, 230.5, 191.5);--pico-mark-color:#0f1114;--pico-ins-color:rgb(28.5, 105.5, 84);--pico-del-color:rgb(136, 56.5, 53);--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111, 120, 135, 0.0375);--pico-code-background-color:rgb(243, 244.5, 246.75);--pico-code-color:#646b79;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:rgb(251, 251.5, 252.25);--pico-form-element-selected-background-color:#dfe3eb;--pico-form-element-border-color:#cfd5e2;--pico-form-element-color:#23262c;--pico-form-element-placeholder-color:var(--pico-muted-color);--pico-form-element-active-background-color:#fff;--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:rgb(183.5, 105.5, 106.5);--pico-form-element-invalid-active-border-color:rgb(200.25, 79.25, 72.25);--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:rgb(76, 154.5, 137.5);--pico-form-element-valid-active-border-color:rgb(39, 152.75, 118.75);--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#bfc7d9;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-range-border-color:#dfe3eb;--pico-range-active-border-color:#bfc7d9;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:var(--pico-background-color);--pico-card-border-color:var(--pico-muted-border-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:rgb(251, 251.5, 252.25);--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(232, 234, 237, 0.75);--pico-progress-background-color:#dfe3eb;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(76, 154.5, 137.5)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(200.25, 79.25, 72.25)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E")}:host(:not([data-theme=dark])) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]),:root:not([data-theme=dark]) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]),[data-theme=light] input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}@media only screen and (prefers-color-scheme:dark){:host(:not([data-theme])),:root:not([data-theme]){color-scheme:dark;--pico-background-color:rgb(19, 22.5, 30.5);--pico-color:#c2c7d0;--pico-text-selection-color:rgba(248, 105, 191, 0.1875);--pico-muted-color:#7b8495;--pico-muted-border-color:#202632;--pico-primary:#f869bf;--pico-primary-background:#c1208b;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(248, 105, 191, 0.5);--pico-primary-hover:#fa9acf;--pico-primary-hover-background:#d9269d;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(248, 105, 191, 0.375);--pico-primary-inverse:#fff;--pico-secondary:#969eaf;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(150, 158, 175, 0.5);--pico-secondary-hover:#b3b9c5;--pico-secondary-hover-background:#5d6b89;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(144, 158, 190, 0.25);--pico-secondary-inverse:#fff;--pico-contrast:#dfe3eb;--pico-contrast-background:#eff1f4;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(223, 227, 235, 0.5);--pico-contrast-hover:#fff;--pico-contrast-hover-background:#fff;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-contrast-hover);--pico-contrast-focus:rgba(207, 213, 226, 0.25);--pico-contrast-inverse:#000;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698),0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024),0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03),0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036),0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302),0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06),0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);--pico-h1-color:#f0f1f3;--pico-h2-color:#e0e3e7;--pico-h3-color:#c2c7d0;--pico-h4-color:#b3b9c5;--pico-h5-color:#a4acba;--pico-h6-color:#8891a4;--pico-mark-background-color:#014063;--pico-mark-color:#fff;--pico-ins-color:#62af9a;--pico-del-color:rgb(205.5, 126, 123);--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111, 120, 135, 0.0375);--pico-code-background-color:rgb(26, 30.5, 40.25);--pico-code-color:#8891a4;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:rgb(28, 33, 43.5);--pico-form-element-selected-background-color:#2a3140;--pico-form-element-border-color:#2a3140;--pico-form-element-color:#e0e3e7;--pico-form-element-placeholder-color:#8891a4;--pico-form-element-active-background-color:rgb(26, 30.5, 40.25);--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:rgb(149.5, 74, 80);--pico-form-element-invalid-active-border-color:rgb(183.25, 63.5, 59);--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:#2a7b6f;--pico-form-element-valid-active-border-color:rgb(22, 137, 105.5);--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#333c4e;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-range-border-color:#202632;--pico-range-active-border-color:#2a3140;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:#181c25;--pico-card-border-color:var(--pico-card-background-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:rgb(26, 30.5, 40.25);--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(7.5, 8.5, 10, 0.75);--pico-progress-background-color:#202632;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(42, 123, 111)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(149.5, 74, 80)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E")}:host(:not([data-theme])) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]),:root:not([data-theme]) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}}[data-theme=dark]{color-scheme:dark;--pico-background-color:rgb(19, 22.5, 30.5);--pico-color:#c2c7d0;--pico-text-selection-color:rgba(248, 105, 191, 0.1875);--pico-muted-color:#7b8495;--pico-muted-border-color:#202632;--pico-primary:#f869bf;--pico-primary-background:#c1208b;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(248, 105, 191, 0.5);--pico-primary-hover:#fa9acf;--pico-primary-hover-background:#d9269d;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(248, 105, 191, 0.375);--pico-primary-inverse:#fff;--pico-secondary:#969eaf;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(150, 158, 175, 0.5);--pico-secondary-hover:#b3b9c5;--pico-secondary-hover-background:#5d6b89;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(144, 158, 190, 0.25);--pico-secondary-inverse:#fff;--pico-contrast:#dfe3eb;--pico-contrast-background:#eff1f4;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(223, 227, 235, 0.5);--pico-contrast-hover:#fff;--pico-contrast-hover-background:#fff;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-contrast-hover);--pico-contrast-focus:rgba(207, 213, 226, 0.25);--pico-contrast-inverse:#000;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698),0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024),0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03),0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036),0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302),0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06),0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);--pico-h1-color:#f0f1f3;--pico-h2-color:#e0e3e7;--pico-h3-color:#c2c7d0;--pico-h4-color:#b3b9c5;--pico-h5-color:#a4acba;--pico-h6-color:#8891a4;--pico-mark-background-color:#014063;--pico-mark-color:#fff;--pico-ins-color:#62af9a;--pico-del-color:rgb(205.5, 126, 123);--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111, 120, 135, 0.0375);--pico-code-background-color:rgb(26, 30.5, 40.25);--pico-code-color:#8891a4;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:rgb(28, 33, 43.5);--pico-form-element-selected-background-color:#2a3140;--pico-form-element-border-color:#2a3140;--pico-form-element-color:#e0e3e7;--pico-form-element-placeholder-color:#8891a4;--pico-form-element-active-background-color:rgb(26, 30.5, 40.25);--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:rgb(149.5, 74, 80);--pico-form-element-invalid-active-border-color:rgb(183.25, 63.5, 59);--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:#2a7b6f;--pico-form-element-valid-active-border-color:rgb(22, 137, 105.5);--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#333c4e;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 rgba(0, 0, 0, 0);--pico-range-border-color:#202632;--pico-range-active-border-color:#2a3140;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:#181c25;--pico-card-border-color:var(--pico-card-background-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:rgb(26, 30.5, 40.25);--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(7.5, 8.5, 10, 0.75);--pico-progress-background-color:#202632;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(42, 123, 111)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(149.5, 74, 80)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E")}[data-theme=dark] input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}[type=checkbox],[type=radio],[type=range],progress{accent-color:var(--pico-primary)}*,::after,::before{box-sizing:border-box;background-repeat:no-repeat}::after,::before{text-decoration:inherit;vertical-align:inherit}:where(:host),:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--pico-background-color);color:var(--pico-color);font-weight:var(--pico-font-weight);font-size:var(--pico-font-size);line-height:var(--pico-line-height);font-family:var(--pico-font-family);text-underline-offset:var(--pico-text-underline-offset);text-rendering:optimizeLegibility;overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{width:100%;margin:0}main{display:block}body>footer,body>header,body>main{width:100%;margin-right:auto;margin-left:auto;padding:var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal)}@media (min-width:576px){body>footer,body>header,body>main{max-width:510px;padding-right:0;padding-left:0}}@media (min-width:768px){body>footer,body>header,body>main{max-width:700px}}@media (min-width:1024px){body>footer,body>header,body>main{max-width:950px}}@media (min-width:1280px){body>footer,body>header,body>main{max-width:1200px}}@media (min-width:1536px){body>footer,body>header,body>main{max-width:1450px}}section{margin-bottom:var(--pico-block-spacing-vertical)}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}address,blockquote,dl,ol,p,pre,table,ul{margin-top:0;margin-bottom:var(--pico-typography-spacing-vertical);color:var(--pico-color);font-style:normal;font-weight:var(--pico-font-weight)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--pico-typography-spacing-vertical);color:var(--pico-color);font-weight:var(--pico-font-weight);font-size:var(--pico-font-size);line-height:var(--pico-line-height);font-family:var(--pico-font-family)}h1{--pico-color:var(--pico-h1-color)}h2{--pico-color:var(--pico-h2-color)}h3{--pico-color:var(--pico-h3-color)}h4{--pico-color:var(--pico-h4-color)}h5{--pico-color:var(--pico-h5-color)}h6{--pico-color:var(--pico-h6-color)}:where(article,address,blockquote,dl,figure,form,ol,p,pre,table,ul)~:is(h1,h2,h3,h4,h5,h6){margin-top:var(--pico-typography-spacing-top)}p{margin-bottom:var(--pico-typography-spacing-vertical)}hgroup{margin-bottom:var(--pico-typography-spacing-vertical)}hgroup>*{margin-top:0;margin-bottom:0}hgroup>:not(:first-child):last-child{--pico-color:var(--pico-muted-color);--pico-font-weight:unset;font-size:1rem}:where(ol,ul) li{margin-bottom:calc(var(--pico-typography-spacing-vertical) * .25)}:where(dl,ol,ul) :where(dl,ol,ul){margin:0;margin-top:calc(var(--pico-typography-spacing-vertical) * .25)}ul li{list-style:square}mark{padding:.125rem .25rem;background-color:var(--pico-mark-background-color);color:var(--pico-mark-color);vertical-align:baseline}blockquote{display:block;margin:var(--pico-typography-spacing-vertical) 0;padding:var(--pico-spacing);border-right:none;border-left:.25rem solid var(--pico-blockquote-border-color);border-inline-start:0.25rem solid var(--pico-blockquote-border-color);border-inline-end:none}blockquote footer{margin-top:calc(var(--pico-typography-spacing-vertical) * .5);color:var(--pico-blockquote-footer-color)}abbr[title]{border-bottom:1px dotted;text-decoration:none;cursor:help}ins{color:var(--pico-ins-color);text-decoration:none}del{color:var(--pico-del-color)}::-moz-selection{background-color:var(--pico-text-selection-color)}::selection{background-color:var(--pico-text-selection-color)}:where(a:not([role=button])),[role=link]{--pico-color:var(--pico-primary);--pico-background-color:transparent;--pico-underline:var(--pico-primary-underline);outline:0;background-color:var(--pico-background-color);color:var(--pico-color);-webkit-text-decoration:var(--pico-text-decoration);text-decoration:var(--pico-text-decoration);text-decoration-color:var(--pico-underline);text-underline-offset:0.125em;transition:background-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition),-webkit-text-decoration var(--pico-transition);transition:background-color var(--pico-transition),color var(--pico-transition),text-decoration var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),color var(--pico-transition),text-decoration var(--pico-transition),box-shadow var(--pico-transition),-webkit-text-decoration var(--pico-transition)}:where(a:not([role=button])):is([aria-current]:not([aria-current=false]),:hover,:active,:focus),[role=link]:is([aria-current]:not([aria-current=false]),:hover,:active,:focus){--pico-color:var(--pico-primary-hover);--pico-underline:var(--pico-primary-hover-underline);--pico-text-decoration:underline}:where(a:not([role=button])):focus-visible,[role=link]:focus-visible{box-shadow:0 0 0 var(--pico-outline-width) var(--pico-primary-focus)}a[role=button]{display:inline-block}button{margin:0;overflow:visible;font-family:inherit;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[role=button],[type=button],[type=file]::file-selector-button,[type=reset],[type=submit],button{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);--pico-color:var(--pico-primary-inverse);--pico-box-shadow:var(--pico-button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal);border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);outline:0;background-color:var(--pico-background-color);box-shadow:var(--pico-box-shadow);color:var(--pico-color);font-weight:var(--pico-font-weight);font-size:1rem;line-height:var(--pico-line-height);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition)}[role=button]:is(:hover,:active,:focus),[role=button]:is([aria-current]:not([aria-current=false])),[type=button]:is(:hover,:active,:focus),[type=button]:is([aria-current]:not([aria-current=false])),[type=file]::file-selector-button:is(:hover,:active,:focus),[type=file]::file-selector-button:is([aria-current]:not([aria-current=false])),[type=reset]:is(:hover,:active,:focus),[type=reset]:is([aria-current]:not([aria-current=false])),[type=submit]:is(:hover,:active,:focus),[type=submit]:is([aria-current]:not([aria-current=false])),button:is(:hover,:active,:focus),button:is([aria-current]:not([aria-current=false])){--pico-background-color:var(--pico-primary-hover-background);--pico-border-color:var(--pico-primary-hover-border);--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--pico-color:var(--pico-primary-inverse)}[role=button]:focus,[role=button]:is([aria-current]:not([aria-current=false])):focus,[type=button]:focus,[type=button]:is([aria-current]:not([aria-current=false])):focus,[type=file]::file-selector-button:focus,[type=file]::file-selector-button:is([aria-current]:not([aria-current=false])):focus,[type=reset]:focus,[type=reset]:is([aria-current]:not([aria-current=false])):focus,[type=submit]:focus,[type=submit]:is([aria-current]:not([aria-current=false])):focus,button:focus,button:is([aria-current]:not([aria-current=false])):focus{--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--pico-outline-width) var(--pico-primary-focus)}[type=button],[type=reset],[type=submit]{margin-bottom:var(--pico-spacing)}[type=file]::file-selector-button,[type=reset]{--pico-background-color:var(--pico-secondary-background);--pico-border-color:var(--pico-secondary-border);--pico-color:var(--pico-secondary-inverse);cursor:pointer}[type=file]::file-selector-button:is([aria-current]:not([aria-current=false]),:hover,:active,:focus),[type=reset]:is([aria-current]:not([aria-current=false]),:hover,:active,:focus){--pico-background-color:var(--pico-secondary-hover-background);--pico-border-color:var(--pico-secondary-hover-border);--pico-color:var(--pico-secondary-inverse)}[type=file]::file-selector-button:focus,[type=reset]:focus{--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--pico-outline-width) var(--pico-secondary-focus)}:where(button,[type=submit],[type=reset],[type=button],[role=button])[disabled],:where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]){opacity:.5;pointer-events:none}:where(table){width:100%;border-collapse:collapse;border-spacing:0;text-indent:0}td,th{padding:calc(var(--pico-spacing)/ 2) var(--pico-spacing);border-bottom:var(--pico-border-width) solid var(--pico-table-border-color);background-color:var(--pico-background-color);color:var(--pico-color);font-weight:var(--pico-font-weight);text-align:left;text-align:start}tfoot td,tfoot th{border-top:var(--pico-border-width) solid var(--pico-table-border-color);border-bottom:0}table.striped tbody tr:nth-child(odd) td,table.striped tbody tr:nth-child(odd) th{background-color:var(--pico-table-row-stripped-background-color)}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}:where(iframe){border-style:none}img{max-width:100%;height:auto;border-style:none}:where(svg:not([fill])){fill:currentColor}svg:not(:host),svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-size:.875em;font-family:var(--pico-font-family)}pre code,pre samp{font-size:inherit;font-family:inherit}pre{-ms-overflow-style:scrollbar;overflow:auto}code,kbd,pre,samp{border-radius:var(--pico-border-radius);background:var(--pico-code-background-color);color:var(--pico-code-color);font-weight:var(--pico-font-weight);line-height:initial}code,kbd,samp{display:inline-block;padding:.375rem}pre{display:block;margin-bottom:var(--pico-spacing);overflow-x:auto}pre>code,pre>samp{display:block;padding:var(--pico-spacing);background:0 0;line-height:var(--pico-line-height)}kbd{background-color:var(--pico-code-kbd-background-color);color:var(--pico-code-kbd-color);vertical-align:baseline}figure{display:block;margin:0;padding:0}figure figcaption{padding:calc(var(--pico-spacing) * .5) 0;color:var(--pico-muted-color)}hr{height:0;margin:var(--pico-typography-spacing-vertical) 0;border:0;border-top:1px solid var(--pico-muted-border-color);color:inherit}[hidden],template{display:none!important}canvas{display:inline-block}input,optgroup,select,textarea{margin:0;font-size:1rem;line-height:var(--pico-line-height);font-family:inherit;letter-spacing:inherit}input{overflow:visible}select{text-transform:none}legend{max-width:100%;padding:0;color:inherit;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{padding:0;border-style:none}:-moz-focusring{outline:0}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{padding:0;border-width:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem * var(--pico-line-height) + var(--pico-form-element-spacing-vertical) * 2 + var(--pico-border-width) * 2)}fieldset{width:100%;margin:0;margin-bottom:var(--pico-spacing);padding:0;border:0}fieldset legend,label{display:block;margin-bottom:calc(var(--pico-spacing) * .375);color:var(--pico-color);font-weight:var(--pico-form-label-font-weight,var(--pico-font-weight))}fieldset legend{margin-bottom:calc(var(--pico-spacing) * .5)}button[type=submit],input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal)}input,select,textarea{--pico-background-color:var(--pico-form-element-background-color);--pico-border-color:var(--pico-form-element-border-color);--pico-color:var(--pico-form-element-color);--pico-box-shadow:none;border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);outline:0;background-color:var(--pico-background-color);box-shadow:var(--pico-box-shadow);color:var(--pico-color);font-weight:var(--pico-font-weight);transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition)}:where(select,textarea):not([readonly]):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus){--pico-background-color:var(--pico-form-element-active-background-color)}:where(select,textarea):not([readonly]):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus){--pico-border-color:var(--pico-form-element-active-border-color)}:where(select,textarea):not([readonly]):focus,input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus{--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-focus-color)}:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea),input:not([type=submit],[type=button],[type=reset])[disabled],label[aria-disabled=true],select[disabled],textarea[disabled]{opacity:var(--pico-form-element-disabled-opacity);pointer-events:none}label[aria-disabled=true] input[disabled]{opacity:1}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid]{padding-right:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem)!important;padding-left:var(--pico-form-element-spacing-horizontal);padding-inline-start:var(--pico-form-element-spacing-horizontal)!important;padding-inline-end:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem)!important;background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid=false]:not(select){background-image:var(--pico-icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid=true]:not(select){background-image:var(--pico-icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--pico-border-color:var(--pico-form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--pico-border-color:var(--pico-form-element-valid-active-border-color)!important}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus):not([type=checkbox],[type=radio]){--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-valid-focus-color)!important}:where(input,select,textarea)[aria-invalid=true]{--pico-border-color:var(--pico-form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--pico-border-color:var(--pico-form-element-invalid-active-border-color)!important}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus):not([type=checkbox],[type=radio]){--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-invalid-focus-color)!important}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::-webkit-input-placeholder,input::placeholder,select:invalid,textarea::-webkit-input-placeholder,textarea::placeholder{color:var(--pico-form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--pico-spacing)}select::-ms-expand{border:0;background-color:transparent}select:not([multiple],[size]){padding-right:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);padding-left:var(--pico-form-element-spacing-horizontal);padding-inline-start:var(--pico-form-element-spacing-horizontal);padding-inline-end:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);background-image:var(--pico-icon-chevron);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}select[multiple] option:checked{background:var(--pico-form-element-selected-background-color);color:var(--pico-form-element-color)}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}textarea{display:block;resize:vertical}textarea[aria-invalid]{--pico-icon-height:calc(1rem * var(--pico-line-height) + var(--pico-form-element-spacing-vertical) * 2 + var(--pico-border-width) * 2);background-position:top right .75rem!important;background-size:1rem var(--pico-icon-height)!important}:where(input,select,textarea,fieldset)+small{display:block;width:100%;margin-top:calc(var(--pico-spacing) * -.75);margin-bottom:var(--pico-spacing);color:var(--pico-muted-color)}:where(input,select,textarea,fieldset)[aria-invalid=false]+small{color:var(--pico-ins-color)}:where(input,select,textarea,fieldset)[aria-invalid=true]+small{color:var(--pico-del-color)}label>:where(input,select,textarea){margin-top:calc(var(--pico-spacing) * .25)}label:has([type=checkbox],[type=radio]){width:-moz-fit-content;width:fit-content;cursor:pointer}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1.25em;height:1.25em;margin-top:-.125em;margin-inline-end:.5em;border-width:var(--pico-border-width);vertical-align:middle;cursor:pointer}[type=checkbox]::-ms-check,[type=radio]::-ms-check{display:none}[type=checkbox]:checked,[type=checkbox]:checked:active,[type=checkbox]:checked:focus,[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);background-image:var(--pico-icon-checkbox);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=checkbox]~label,[type=radio]~label{display:inline-block;margin-bottom:0;cursor:pointer}[type=checkbox]~label:not(:last-of-type),[type=radio]~label:not(:last-of-type){margin-inline-end:1em}[type=checkbox]:indeterminate{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);background-image:var(--pico-icon-minus);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=radio]{border-radius:50%}[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--pico-background-color:var(--pico-primary-inverse);border-width:.35em;background-image:none}[type=checkbox][role=switch]{--pico-background-color:var(--pico-switch-background-color);--pico-color:var(--pico-switch-color);width:2.25em;height:1.25em;border:var(--pico-border-width) solid var(--pico-border-color);border-radius:1.25em;background-color:var(--pico-background-color);line-height:1.25em}[type=checkbox][role=switch]:not([aria-invalid]){--pico-border-color:var(--pico-switch-background-color)}[type=checkbox][role=switch]:before{display:block;aspect-ratio:1;height:100%;border-radius:50%;background-color:var(--pico-color);box-shadow:var(--pico-switch-thumb-box-shadow);content:"";transition:margin .1s ease-in-out}[type=checkbox][role=switch]:focus{--pico-background-color:var(--pico-switch-background-color);--pico-border-color:var(--pico-switch-background-color)}[type=checkbox][role=switch]:checked{--pico-background-color:var(--pico-switch-checked-background-color);--pico-border-color:var(--pico-switch-checked-background-color);background-image:none}[type=checkbox][role=switch]:checked::before{margin-inline-start:calc(2.25em - 1.25em)}[type=checkbox][role=switch][disabled]{--pico-background-color:var(--pico-border-color)}[type=checkbox][aria-invalid=false]:checked,[type=checkbox][aria-invalid=false]:checked:active,[type=checkbox][aria-invalid=false]:checked:focus,[type=checkbox][role=switch][aria-invalid=false]:checked,[type=checkbox][role=switch][aria-invalid=false]:checked:active,[type=checkbox][role=switch][aria-invalid=false]:checked:focus{--pico-background-color:var(--pico-form-element-valid-border-color)}[type=checkbox]:checked:active[aria-invalid=true],[type=checkbox]:checked:focus[aria-invalid=true],[type=checkbox]:checked[aria-invalid=true],[type=checkbox][role=switch]:checked:active[aria-invalid=true],[type=checkbox][role=switch]:checked:focus[aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true]{--pico-background-color:var(--pico-form-element-invalid-border-color)}[type=checkbox][aria-invalid=false]:checked,[type=checkbox][aria-invalid=false]:checked:active,[type=checkbox][aria-invalid=false]:checked:focus,[type=checkbox][role=switch][aria-invalid=false]:checked,[type=checkbox][role=switch][aria-invalid=false]:checked:active,[type=checkbox][role=switch][aria-invalid=false]:checked:focus,[type=radio][aria-invalid=false]:checked,[type=radio][aria-invalid=false]:checked:active,[type=radio][aria-invalid=false]:checked:focus{--pico-border-color:var(--pico-form-element-valid-border-color)}[type=checkbox]:checked:active[aria-invalid=true],[type=checkbox]:checked:focus[aria-invalid=true],[type=checkbox]:checked[aria-invalid=true],[type=checkbox][role=switch]:checked:active[aria-invalid=true],[type=checkbox][role=switch]:checked:focus[aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true],[type=radio]:checked:active[aria-invalid=true],[type=radio]:checked:focus[aria-invalid=true],[type=radio]:checked[aria-invalid=true]{--pico-border-color:var(--pico-form-element-invalid-border-color)}[type=color]::-webkit-color-swatch-wrapper{padding:0}[type=color]::-moz-focus-inner{padding:0}[type=color]::-webkit-color-swatch{border:0;border-radius:calc(var(--pico-border-radius) * .5)}[type=color]::-moz-color-swatch{border:0;border-radius:calc(var(--pico-border-radius) * .5)}input:not([type=checkbox],[type=radio],[type=range],[type=file]):is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){--pico-icon-position:0.75rem;--pico-icon-width:1rem;padding-right:calc(var(--pico-icon-width) + var(--pico-icon-position));background-image:var(--pico-icon-date);background-position:center right var(--pico-icon-position);background-size:var(--pico-icon-width) auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=time]{background-image:var(--pico-icon-time)}[type=date]::-webkit-calendar-picker-indicator,[type=datetime-local]::-webkit-calendar-picker-indicator,[type=month]::-webkit-calendar-picker-indicator,[type=time]::-webkit-calendar-picker-indicator,[type=week]::-webkit-calendar-picker-indicator{width:var(--pico-icon-width);margin-right:calc(var(--pico-icon-width) * -1);margin-left:var(--pico-icon-position);opacity:0}@-moz-document url-prefix(){[type=date],[type=datetime-local],[type=month],[type=time],[type=week]{padding-right:var(--pico-form-element-spacing-horizontal)!important;background-image:none!important}}[dir=rtl] :is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){text-align:right}[type=file]{--pico-color:var(--pico-muted-color);margin-left:calc(var(--pico-outline-width) * -1);padding:calc(var(--pico-form-element-spacing-vertical) * .5) 0;padding-left:var(--pico-outline-width);border:0;border-radius:0;background:0 0}[type=file]::file-selector-button{margin-right:calc(var(--pico-spacing)/ 2);padding:calc(var(--pico-form-element-spacing-vertical) * .5) var(--pico-form-element-spacing-horizontal)}[type=file]:is(:hover,:active,:focus)::file-selector-button{--pico-background-color:var(--pico-secondary-hover-background);--pico-border-color:var(--pico-secondary-hover-border)}[type=file]:focus::file-selector-button{--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--pico-outline-width) var(--pico-secondary-focus)}[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:1.25rem;background:0 0}[type=range]::-webkit-slider-runnable-track{width:100%;height:.375rem;border-radius:var(--pico-border-radius);background-color:var(--pico-range-border-color);-webkit-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition)}[type=range]::-moz-range-track{width:100%;height:.375rem;border-radius:var(--pico-border-radius);background-color:var(--pico-range-border-color);-moz-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition)}[type=range]::-ms-track{width:100%;height:.375rem;border-radius:var(--pico-border-radius);background-color:var(--pico-range-border-color);-ms-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition)}[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.4375rem;border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;background-color:var(--pico-range-thumb-color);cursor:pointer;-webkit-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition)}[type=range]::-moz-range-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.4375rem;border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;background-color:var(--pico-range-thumb-color);cursor:pointer;-moz-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition)}[type=range]::-ms-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.4375rem;border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;background-color:var(--pico-range-thumb-color);cursor:pointer;-ms-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition)}[type=range]:active,[type=range]:focus-within{--pico-range-border-color:var(--pico-range-active-border-color);--pico-range-thumb-color:var(--pico-range-thumb-active-color)}[type=range]:active::-webkit-slider-thumb{transform:scale(1.25)}[type=range]:active::-moz-range-thumb{transform:scale(1.25)}[type=range]:active::-ms-thumb{transform:scale(1.25)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{padding-inline-start:calc(var(--pico-form-element-spacing-horizontal) + 1.75rem);background-image:var(--pico-icon-search);background-position:center left calc(var(--pico-form-element-spacing-horizontal) + .125rem);background-size:1rem auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{padding-inline-start:calc(var(--pico-form-element-spacing-horizontal) + 1.75rem)!important;background-position:center left 1.125rem,center right .75rem}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=false]{background-image:var(--pico-icon-search),var(--pico-icon-valid)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=true]{background-image:var(--pico-icon-search),var(--pico-icon-invalid)}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{background-position:center right 1.125rem}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{background-position:center right 1.125rem,center left .75rem}details{display:block;margin-bottom:var(--pico-spacing)}details summary{line-height:1rem;list-style-type:none;cursor:pointer;transition:color var(--pico-transition)}details summary:not([role]){color:var(--pico-accordion-close-summary-color)}details summary::-webkit-details-marker{display:none}details summary::marker{display:none}details summary::-moz-list-bullet{list-style-type:none}details summary::after{display:block;width:1rem;height:1rem;margin-inline-start:calc(var(--pico-spacing,1rem) * .5);float:right;transform:rotate(-90deg);background-image:var(--pico-icon-chevron);background-position:right center;background-size:1rem auto;background-repeat:no-repeat;content:"";transition:transform var(--pico-transition)}details summary:focus{outline:0}details summary:focus:not([role]){color:var(--pico-accordion-active-summary-color)}details summary:focus-visible:not([role]){outline:var(--pico-outline-width) solid var(--pico-primary-focus);outline-offset:calc(var(--pico-spacing,1rem) * 0.5);color:var(--pico-primary)}details summary[role=button]{width:100%;text-align:left}details summary[role=button]::after{height:calc(1rem * var(--pico-line-height,1.5))}details[open]>summary{margin-bottom:var(--pico-spacing)}details[open]>summary:not([role]):not(:focus){color:var(--pico-accordion-open-summary-color)}details[open]>summary::after{transform:rotate(0)}[dir=rtl] details summary{text-align:right}[dir=rtl] details summary::after{float:left;background-position:left center}article{margin-bottom:var(--pico-block-spacing-vertical);padding:var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal);border-radius:var(--pico-border-radius);background:var(--pico-card-background-color);box-shadow:var(--pico-card-box-shadow)}article>footer,article>header{margin-right:calc(var(--pico-block-spacing-horizontal) * -1);margin-left:calc(var(--pico-block-spacing-horizontal) * -1);padding:calc(var(--pico-block-spacing-vertical) * .66) var(--pico-block-spacing-horizontal);background-color:var(--pico-card-sectioning-background-color)}article>header{margin-top:calc(var(--pico-block-spacing-vertical) * -1);margin-bottom:var(--pico-block-spacing-vertical);border-bottom:var(--pico-border-width) solid var(--pico-card-border-color);border-top-right-radius:var(--pico-border-radius);border-top-left-radius:var(--pico-border-radius)}article>footer{margin-top:var(--pico-block-spacing-vertical);margin-bottom:calc(var(--pico-block-spacing-vertical) * -1);border-top:var(--pico-border-width) solid var(--pico-card-border-color);border-bottom-right-radius:var(--pico-border-radius);border-bottom-left-radius:var(--pico-border-radius)}[role=group],[role=search]{display:inline-flex;position:relative;width:100%;margin-bottom:var(--pico-spacing);border-radius:var(--pico-border-radius);box-shadow:var(--pico-group-box-shadow,0 0 0 transparent);vertical-align:middle;transition:box-shadow var(--pico-transition)}[role=group] input:not([type=checkbox],[type=radio]),[role=group] select,[role=group]>*,[role=search] input:not([type=checkbox],[type=radio]),[role=search] select,[role=search]>*{position:relative;flex:1 1 auto;margin-bottom:0}[role=group] input:not([type=checkbox],[type=radio]):not(:first-child),[role=group] select:not(:first-child),[role=group]>:not(:first-child),[role=search] input:not([type=checkbox],[type=radio]):not(:first-child),[role=search] select:not(:first-child),[role=search]>:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}[role=group] input:not([type=checkbox],[type=radio]):not(:last-child),[role=group] select:not(:last-child),[role=group]>:not(:last-child),[role=search] input:not([type=checkbox],[type=radio]):not(:last-child),[role=search] select:not(:last-child),[role=search]>:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}[role=group] input:not([type=checkbox],[type=radio]):focus,[role=group] select:focus,[role=group]>:focus,[role=search] input:not([type=checkbox],[type=radio]):focus,[role=search] select:focus,[role=search]>:focus{z-index:2}[role=group] [role=button]:not(:first-child),[role=group] [type=button]:not(:first-child),[role=group] [type=reset]:not(:first-child),[role=group] [type=submit]:not(:first-child),[role=group] button:not(:first-child),[role=group] input:not([type=checkbox],[type=radio]):not(:first-child),[role=group] select:not(:first-child),[role=search] [role=button]:not(:first-child),[role=search] [type=button]:not(:first-child),[role=search] [type=reset]:not(:first-child),[role=search] [type=submit]:not(:first-child),[role=search] button:not(:first-child),[role=search] input:not([type=checkbox],[type=radio]):not(:first-child),[role=search] select:not(:first-child){margin-left:calc(var(--pico-border-width) * -1)}[role=group] [role=button],[role=group] [type=button],[role=group] [type=reset],[role=group] [type=submit],[role=group] button,[role=search] [role=button],[role=search] [type=button],[role=search] [type=reset],[role=search] [type=submit],[role=search] button{width:auto}@supports selector(:has(*)){[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus),[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus){--pico-group-box-shadow:var(--pico-group-box-shadow-focus-with-button)}[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) input:not([type=checkbox],[type=radio]),[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) select,[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) input:not([type=checkbox],[type=radio]),[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) select{border-color:transparent}[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus),[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus){--pico-group-box-shadow:var(--pico-group-box-shadow-focus-with-input)}[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [role=button],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=button],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=submit],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) button,[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [role=button],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=button],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=submit],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) button{--pico-button-box-shadow:0 0 0 var(--pico-border-width) var(--pico-primary-border);--pico-button-hover-box-shadow:0 0 0 var(--pico-border-width) var(--pico-primary-hover-border)}[role=group] [role=button]:focus,[role=group] [type=button]:focus,[role=group] [type=reset]:focus,[role=group] [type=submit]:focus,[role=group] button:focus,[role=search] [role=button]:focus,[role=search] [type=button]:focus,[role=search] [type=reset]:focus,[role=search] [type=submit]:focus,[role=search] button:focus{box-shadow:none}}[role=search]>:first-child{border-top-left-radius:5rem;border-bottom-left-radius:5rem}[role=search]>:last-child{border-top-right-radius:5rem;border-bottom-right-radius:5rem}[aria-busy=true]:not(input,select,textarea,html,form){white-space:nowrap}[aria-busy=true]:not(input,select,textarea,html,form)::before{display:inline-block;width:1em;height:1em;background-image:var(--pico-icon-loading);background-size:1em auto;background-repeat:no-repeat;content:"";vertical-align:-.125em}[aria-busy=true]:not(input,select,textarea,html,form):not(:empty)::before{margin-inline-end:calc(var(--pico-spacing) * .5)}[aria-busy=true]:not(input,select,textarea,html,form):empty{text-align:center}[role=button][aria-busy=true],[type=button][aria-busy=true],[type=reset][aria-busy=true],[type=submit][aria-busy=true],a[aria-busy=true],button[aria-busy=true]{pointer-events:none}:host,:root{--pico-scrollbar-width:0px}dialog{display:flex;z-index:999;position:fixed;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center;width:inherit;min-width:100%;height:inherit;min-height:100%;padding:0;border:0;-webkit-backdrop-filter:var(--pico-modal-overlay-backdrop-filter);backdrop-filter:var(--pico-modal-overlay-backdrop-filter);background-color:var(--pico-modal-overlay-background-color);color:var(--pico-color)}dialog>article{width:100%;max-height:calc(100vh - var(--pico-spacing) * 2);margin:var(--pico-spacing);overflow:auto}@media (min-width:576px){dialog>article{max-width:510px}}@media (min-width:768px){dialog>article{max-width:700px}}dialog>article>header>*{margin-bottom:0}dialog>article>header :is(a,button)[rel=prev]{margin:0;margin-left:var(--pico-spacing);padding:0;float:right}dialog>article>footer{text-align:right}dialog>article>footer [role=button],dialog>article>footer button{margin-bottom:0}dialog>article>footer [role=button]:not(:first-of-type),dialog>article>footer button:not(:first-of-type){margin-left:calc(var(--pico-spacing) * .5)}dialog>article :is(a,button)[rel=prev]{display:block;width:1rem;height:1rem;margin-top:calc(var(--pico-spacing) * -1);margin-bottom:var(--pico-spacing);margin-left:auto;border:none;background-image:var(--pico-icon-close);background-position:center;background-size:auto 1rem;background-repeat:no-repeat;background-color:transparent;opacity:.5;transition:opacity var(--pico-transition)}dialog>article :is(a,button)[rel=prev]:is([aria-current]:not([aria-current=false]),:hover,:active,:focus){opacity:1}dialog:not([open]),dialog[open=false]{display:none}:where(nav li)::before{float:left;content:"​"}nav,nav ul{display:flex}nav{justify-content:space-between;overflow:visible}nav ol,nav ul{align-items:center;margin-bottom:0;padding:0;list-style:none}nav ol:first-of-type,nav ul:first-of-type{margin-left:calc(var(--pico-nav-element-spacing-horizontal) * -1)}nav ol:last-of-type,nav ul:last-of-type{margin-right:calc(var(--pico-nav-element-spacing-horizontal) * -1)}nav li{display:inline-block;margin:0;padding:var(--pico-nav-element-spacing-vertical) var(--pico-nav-element-spacing-horizontal)}nav li :where(a,[role=link]){display:inline-block;margin:calc(var(--pico-nav-link-spacing-vertical) * -1) calc(var(--pico-nav-link-spacing-horizontal) * -1);padding:var(--pico-nav-link-spacing-vertical) var(--pico-nav-link-spacing-horizontal);border-radius:var(--pico-border-radius)}nav li :where(a,[role=link]):not(:hover){text-decoration:none}nav li [role=button],nav li [type=button],nav li button,nav li input:not([type=checkbox],[type=radio],[type=range],[type=file]),nav li select{height:auto;margin-right:inherit;margin-bottom:0;margin-left:inherit;padding:calc(var(--pico-nav-link-spacing-vertical) - var(--pico-border-width) * 2) var(--pico-nav-link-spacing-horizontal)}nav[aria-label=breadcrumb]{align-items:center;justify-content:start}nav[aria-label=breadcrumb] ul li:not(:first-child){margin-inline-start:var(--pico-nav-link-spacing-horizontal)}nav[aria-label=breadcrumb] ul li a{margin:calc(var(--pico-nav-link-spacing-vertical) * -1) 0;margin-inline-start:calc(var(--pico-nav-link-spacing-horizontal) * -1)}nav[aria-label=breadcrumb] ul li:not(:last-child)::after{display:inline-block;position:absolute;width:calc(var(--pico-nav-link-spacing-horizontal) * 4);margin:0 calc(var(--pico-nav-link-spacing-horizontal) * -1);content:var(--pico-nav-breadcrumb-divider);color:var(--pico-muted-color);text-align:center;text-decoration:none;white-space:nowrap}nav[aria-label=breadcrumb] a[aria-current]:not([aria-current=false]){background-color:transparent;color:inherit;text-decoration:none;pointer-events:none}aside li,aside nav,aside ol,aside ul{display:block}aside li{padding:calc(var(--pico-nav-element-spacing-vertical) * .5) var(--pico-nav-element-spacing-horizontal)}aside li a{display:block}aside li [role=button]{margin:inherit}[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{content:"\\"}progress{display:inline-block;vertical-align:baseline}progress{-webkit-appearance:none;-moz-appearance:none;display:inline-block;appearance:none;width:100%;height:.5rem;margin-bottom:calc(var(--pico-spacing) * .5);overflow:hidden;border:0;border-radius:var(--pico-border-radius);background-color:var(--pico-progress-background-color);color:var(--pico-progress-color)}progress::-webkit-progress-bar{border-radius:var(--pico-border-radius);background:0 0}progress[value]::-webkit-progress-value{background-color:var(--pico-progress-color);-webkit-transition:inline-size var(--pico-transition);transition:inline-size var(--pico-transition)}progress::-moz-progress-bar{background-color:var(--pico-progress-color)}@media (prefers-reduced-motion:no-preference){progress:indeterminate{background:var(--pico-progress-background-color) linear-gradient(to right,var(--pico-progress-color) 30%,var(--pico-progress-background-color) 30%) top left/150% 150% no-repeat;animation:progress-indeterminate 1s linear infinite}progress:indeterminate[value]::-webkit-progress-value{background-color:transparent}progress:indeterminate::-moz-progress-bar{background-color:transparent}}@media (prefers-reduced-motion:no-preference){[dir=rtl] progress:indeterminate{animation-direction:reverse}}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}[data-tooltip]{position:relative}[data-tooltip]:not(a,button,input,[role=button]){border-bottom:1px dotted;text-decoration:none;cursor:help}[data-tooltip]::after,[data-tooltip]::before,[data-tooltip][data-placement=top]::after,[data-tooltip][data-placement=top]::before{display:block;z-index:99;position:absolute;bottom:100%;left:50%;padding:.25rem .5rem;overflow:hidden;transform:translate(-50%,-.25rem);border-radius:var(--pico-border-radius);background:var(--pico-tooltip-background-color);content:attr(data-tooltip);color:var(--pico-tooltip-color);font-style:normal;font-weight:var(--pico-font-weight);font-size:.875rem;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;opacity:0;pointer-events:none}[data-tooltip]::after,[data-tooltip][data-placement=top]::after{padding:0;transform:translate(-50%,0);border-top:.3rem solid;border-right:.3rem solid transparent;border-left:.3rem solid transparent;border-radius:0;background-color:transparent;content:"";color:var(--pico-tooltip-background-color)}[data-tooltip][data-placement=bottom]::after,[data-tooltip][data-placement=bottom]::before{top:100%;bottom:auto;transform:translate(-50%,.25rem)}[data-tooltip][data-placement=bottom]:after{transform:translate(-50%,-.3rem);border:.3rem solid transparent;border-bottom:.3rem solid}[data-tooltip][data-placement=left]::after,[data-tooltip][data-placement=left]::before{top:50%;right:100%;bottom:auto;left:auto;transform:translate(-.25rem,-50%)}[data-tooltip][data-placement=left]:after{transform:translate(.3rem,-50%);border:.3rem solid transparent;border-left:.3rem solid}[data-tooltip][data-placement=right]::after,[data-tooltip][data-placement=right]::before{top:50%;right:auto;bottom:auto;left:100%;transform:translate(.25rem,-50%)}[data-tooltip][data-placement=right]:after{transform:translate(-.3rem,-50%);border:.3rem solid transparent;border-right:.3rem solid}[data-tooltip]:focus::after,[data-tooltip]:focus::before,[data-tooltip]:hover::after,[data-tooltip]:hover::before{opacity:1}@media (hover:hover) and (pointer:fine){[data-tooltip]:focus::after,[data-tooltip]:focus::before,[data-tooltip]:hover::after,[data-tooltip]:hover::before{--pico-tooltip-slide-to:translate(-50%, -0.25rem);transform:translate(-50%,.75rem);animation-duration:.2s;animation-fill-mode:forwards;animation-name:tooltip-slide;opacity:0}[data-tooltip]:focus::after,[data-tooltip]:hover::after{--pico-tooltip-caret-slide-to:translate(-50%, 0rem);transform:translate(-50%,-.25rem);animation-name:tooltip-caret-slide}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:focus::before,[data-tooltip][data-placement=bottom]:hover::after,[data-tooltip][data-placement=bottom]:hover::before{--pico-tooltip-slide-to:translate(-50%, 0.25rem);transform:translate(-50%,-.75rem);animation-name:tooltip-slide}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:hover::after{--pico-tooltip-caret-slide-to:translate(-50%, -0.3rem);transform:translate(-50%,-.5rem);animation-name:tooltip-caret-slide}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:focus::before,[data-tooltip][data-placement=left]:hover::after,[data-tooltip][data-placement=left]:hover::before{--pico-tooltip-slide-to:translate(-0.25rem, -50%);transform:translate(.75rem,-50%);animation-name:tooltip-slide}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:hover::after{--pico-tooltip-caret-slide-to:translate(0.3rem, -50%);transform:translate(.05rem,-50%);animation-name:tooltip-caret-slide}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:focus::before,[data-tooltip][data-placement=right]:hover::after,[data-tooltip][data-placement=right]:hover::before{--pico-tooltip-slide-to:translate(0.25rem, -50%);transform:translate(-.75rem,-50%);animation-name:tooltip-slide}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:hover::after{--pico-tooltip-caret-slide-to:translate(-0.3rem, -50%);transform:translate(-.05rem,-50%);animation-name:tooltip-caret-slide}}@keyframes tooltip-slide{to{transform:var(--pico-tooltip-slide-to);opacity:1}}@keyframes tooltip-caret-slide{50%{opacity:0}to{transform:var(--pico-tooltip-caret-slide-to);opacity:1}}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]{display:initial}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);position:absolute}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation}[dir=rtl]{direction:rtl}@media (prefers-reduced-motion:reduce){:not([aria-busy=true]),:not([aria-busy=true])::after,:not([aria-busy=true])::before{background-attachment:initial!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important}} \ No newline at end of file diff --git a/packages/arg-completer/src/components/prompt.tsx b/packages/arg-completer/src/components/prompt.tsx new file mode 100644 index 0000000..1fd060d --- /dev/null +++ b/packages/arg-completer/src/components/prompt.tsx @@ -0,0 +1,30 @@ +import type { FC } from "hono/jsx" + +export const Prompt: FC = async () => { + return ( + <> +

Completion demo!

+
+ +
{/* tail follow=fsd */}
+ +
+
+ + ) +} diff --git a/packages/arg-completer/src/css/index.css b/packages/arg-completer/src/css/index.css new file mode 100644 index 0000000..cb6bce5 --- /dev/null +++ b/packages/arg-completer/src/css/index.css @@ -0,0 +1,166 @@ +@font-face { + font-family: 'C64ProMono'; + src: url('/vendor/C64_Pro_Mono-STYLE.woff2') format('woff2'); + font-weight: normal; + font-style: normal; +} + +:root { + --font-family: 'C64ProMono', monospace; + --black: #000000; + --white: #E0E0E0; + --grey: #aaa; + --dark-grey: #666; + --cyan: #00A8C8; + --red: #C62828; + --green: green; + --yellow: #C4A000; + --purple: #7C3AED; + --blue: #1565C0; + --magenta: #ff66cc; +} + +.black { + color: var(--black); +} + +.white { + color: var(--white); +} + +.cyan { + color: var(--cyan); +} + +.red { + color: var(--red); +} + +.green { + color: var(--green); +} + +.yellow { + color: var(--yellow); +} + +.purple { + color: var(--purple); +} + +.blue { + color: var(--blue); +} + +.magenta { + color: var(--magenta); +} + +body, +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-family); + color: var(--pico-h3-color); +} + +body { + margin: 10px; +} + + +#command-line { + display: flex; + flex-direction: column; + position: relative; + width: 95%; +} + +#command-line textarea { + width: 100%; + min-height: 2em; + resize: none; + background: transparent; + overflow: hidden; + padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal); + box-sizing: border-box; + display: block; +} + +#command-prompt { + position: relative; + z-index: 2; +} + +#command-error { + position: absolute; + top: 1px; + left: 1px; + right: 0; + z-index: 0; + color: white; + padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal); +} + +#command-error .error { + border-bottom: 3px groove red; +} + +#command-hint { + position: absolute; + top: 1px; + left: 1px; + right: 0; + bottom: 0; + z-index: 1; + color: #666; + border: none; +} + +.command-suggestion { + display: flex; + padding: 0.25em 0.5em; + justify-content: space-between; +} + +.command-suggestion:nth-child(odd) { + background-color: var(--white); +} + +/* #command-promp { + position: relative; + z-index: 2; + background: transparent; + padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal); + font: inherit; + letter-spacing: inherit; + line-height: inherit; + height: auto; + min-height: 1.2em; + resize: none; + overflow: hidden; +} + +#command-hin { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + border: var(--pico-border-width) solid transparent; + pointer-events: none; + padding: var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal); + font: inherit; + letter-spacing: inherit; + line-height: inherit; + color: #666; + background: transparent; + resize: none; + overflow: hidden; + min-height: 1.2em; + height: auto; +} */ \ No newline at end of file diff --git a/packages/arg-completer/src/js/command.test.ts b/packages/arg-completer/src/js/command.test.ts new file mode 100644 index 0000000..4f24600 --- /dev/null +++ b/packages/arg-completer/src/js/command.test.ts @@ -0,0 +1,116 @@ +import { type CommandShape, Command } from "./command" +import { ParseError } from "./errors" +import { expect, test } from "bun:test" + +const fetchShape: CommandShape = { + command: "fetch", + description: "Fetch a URL and display the response", + args: [ + { name: "url", type: "string" }, + { name: "raw", type: "boolean", named: true, default: false }, + { name: "timeout", type: "number", named: true, default: 30 }, + ], +} + +test("parseArgs with valid args", () => { + const cmd = new Command(fetchShape) + const { args, error } = cmd.parse("fetch https://example.com raw=true timeout=10") + expect(error).toBeUndefined() + expect(args).toMatchObject([ + { name: "url", value: "https://example.com" }, + { name: "raw", value: true }, + { name: "timeout", value: 10 }, + ]) +}) + +test("parseArgs without some named args", () => { + const cmd = new Command(fetchShape) + const { args, error } = cmd.parse("fetch https://example.com raw=true") + expect(error).toBeUndefined() + expect(args).toEqual([ + { name: "url", value: "https://example.com" }, + { name: "raw", value: true }, + ]) +}) + +test("parseArgs with too many named args", () => { + const cmd = new Command(fetchShape) + const { error } = cmd.parse("fetch https://example.com meow") + expect(error).toBeDefined() + expect(error?.message).toEqual("Expected 1 positional argument(s) but got 2.") + expect(error?.start).toEqual(30) + expect(error?.end).toEqual(30) +}) + +test("parseArgs with not enough positional args", () => { + const cmd = new Command(fetchShape) + const { error } = cmd.parse("fetch") + expect(error).toBeDefined() + expect(error?.message).toEqual("Expected 1 positional argument(s) but got 0.") + expect(error?.start).toEqual(5) + expect(error?.end).toEqual(5) +}) + +const typeShape: CommandShape = { + command: "type", + description: "Fetch a URL and display the response", + args: [ + { name: "theBoolean", type: "boolean", named: true, default: false }, + { name: "theNumber", type: "number", named: true, default: 30 }, + ], +} + +test("parseArgs incorrect number type", () => { + const cmd = new Command(typeShape) + const { error } = cmd.parse("type theNumber=notanumber") + expect(error).toBeDefined() + + expect(error?.message).toEqual("Expected a number but got 'notanumber'.") + expect(error?.start).toEqual(5) + expect(error?.end).toEqual(25) +}) + +test("parseArgs incorrect boolean type", () => { + const cmd = new Command(typeShape) + const { error } = cmd.parse("type theBoolean=notaboolean") + expect(error).toBeDefined() + + expect(error?.message).toEqual("Expected a boolean but got 'notaboolean'.") + expect(error?.start).toEqual(5) + expect(error?.end).toEqual(27) +}) + +test("argSuggestions for positional and named args", () => { + const cmd = new Command(fetchShape) + + const expectNames = (input: string) => { + const names = cmd.getSuggestions(input).suggestions.map((a) => a.name + (a.named ? "=" : "")) + return expect(names, `from input "${input}"`) + } + + expectNames("fetch ").toEqual(["url"]) + expectNames("fetch path r").toEqual(["raw="]) + expectNames("fetch path raw").toEqual(["raw="]) + expectNames("fetch path raw=true ").toEqual(["timeout="]) + expectNames("fetch path raw=true t").toEqual(["timeout="]) +}) + +test("argSuggestions throw errors for unmatched patterns", () => { + const cmd = new Command(fetchShape) + + const expectError = (input: string) => { + const error = cmd.getSuggestions(input).error + return expect(error, `from input "${input}"`) + } + + expectError("fetch path f").toBeInstanceOf(ParseError) + expectError("fetch path raw=asdf ").toBeInstanceOf(ParseError) + expectError("fetch path raw=true").toBeUndefined() +}) + +/* +/* +# Ignored problems + +what if a positional arg looks like a named arg? For example echo verbose=32. If we want to echo verbose=32 it is ambiguous. +*/ diff --git a/packages/arg-completer/src/js/command.ts b/packages/arg-completer/src/js/command.ts new file mode 100644 index 0000000..fad7da9 --- /dev/null +++ b/packages/arg-completer/src/js/command.ts @@ -0,0 +1,171 @@ +import { Tokenizer, type Token } from "./tokenizer" +import { ParseError } from "./errors" + +export class Command { + shape: CommandShape + + constructor(shape: CommandShape) { + this.shape = shape + } + + getSuggestions(input: string): { suggestions: ArgShape[]; token?: Token } { + const tokens = Tokenizer.tokens(input) + if (tokens[0]?.value !== this.shape.command) { + return { suggestions: [] } + } + + const argTokens = tokens.slice(1) + const hasTrailingSpace = input.endsWith(" ") + const lastToken = argTokens.at(-1) + const isCompletingPartialArg = !hasTrailingSpace && lastToken + + const completedTokens = isCompletingPartialArg ? argTokens.slice(0, -1) : argTokens + + const usedArgs = new Set() + completedTokens.forEach((token, index) => { + const parsedArg = this.#convertTokenToArg(token, index, completedTokens) + if (usedArgs.has(parsedArg.name)) { + const message = `Argument '${parsedArg.name}' was provided more than once.` + throw new ParseError(message, token.start, token.end) + } + usedArgs.add(parsedArg.name) + }) + + const availableArgs = this.shape.args.filter((arg) => !usedArgs.has(arg.name)) + + if (isCompletingPartialArg) { + const positionalShapes = this.shape.args.filter((a) => !a.named) + const parsingPositionalArgs = completedTokens.length < positionalShapes.length + if (parsingPositionalArgs) + return { suggestions: [positionalShapes[completedTokens.length]!], token: lastToken } + + const prefix = lastToken.type === "named" ? lastToken.name : lastToken.value + const suggestions = availableArgs.filter((arg) => arg.named && arg.name.startsWith(prefix)) + if (suggestions.length > 0) { + return { suggestions, token: lastToken } + } else { + throw new ParseError(`No matches for '${prefix}'`, lastToken.start, lastToken.end) + } + } + + // If we still need positional args, only suggest the next positional arg + const positionalShapes = this.shape.args.filter((a) => !a.named) + const positionalCount = completedTokens.filter((t) => t.type === "positional").length + if (positionalCount < positionalShapes.length) { + const nextPositionalArg = positionalShapes[positionalCount]! + return { suggestions: [nextPositionalArg], token: lastToken } + } + + // Otherwise suggest available named args + return { suggestions: availableArgs.filter((arg) => arg.named), token: lastToken } + } + + parse(input: string): ParsedArg[] { + const parsedArgs: ParsedArg[] = [] + const tokens = Tokenizer.tokens(input) + const [command, ...argTokens] = tokens + + if (!command) { + throw new ParseError(`Expected command "${this.shape.command}" but got nothing.`, 0, 0) + } else if (command.value !== this.shape.command) { + const message = `Expected command "${this.shape.command}" but got "${command.value}."` + throw new ParseError(message, command.start, command.end) + } + + // Convert each token to a parsed arg + const usedArgs = new Set() + argTokens.forEach((token, index) => { + const parsedArg = this.#convertTokenToArg(token, index, argTokens) + if (usedArgs.has(parsedArg.name)) { + const message = `Argument '${parsedArg.name}' was provided more than once.` + throw new ParseError(message, token.start, token.end) + } + usedArgs.add(parsedArg.name) + parsedArgs.push(parsedArg) + }) + + // Check that we have the right number of positional args + const positionalShapes = this.shape.args.filter((a) => !a.named) + const positionalCount = argTokens.filter((t) => t.type === "positional").length + if (positionalCount !== positionalShapes.length) { + const message = `Expected ${positionalShapes.length} positional argument(s) but got ${positionalCount}.` + const lastToken = argTokens.at(-1) + const end = lastToken ? lastToken.end : command.end + throw new ParseError(message, end, end) + } + + return parsedArgs + } + + #convertTokenToArg(token: Token, tokenIndex: number, allTokens: Token[]): ParsedArg { + if (token.type === "positional") { + const positionalShapes = this.shape.args.filter((a) => !a.named) + + // If we're past the positional args, this is out of order + const shape = positionalShapes[tokenIndex] + if (!shape) { + const message = `Positional arguments must come before named arguments` + throw new ParseError(message, token.start, token.end) + } + + return { name: shape.name, value: this.#castArgValue(token, shape.type), token } + } else if (token.type === "named") { + const namedShapes = this.shape.args.filter((a) => a.named) + const shape = namedShapes.find((a) => a.name === token.name) + if (!shape) { + throw new ParseError(`Unknown named argument '${token.name}'`, token.start, token.end) + } + + return { name: token.name, value: this.#castArgValue(token, shape.type), token } + } + + throw new ParseError(`Unknown token type`, token.start, token.end) + } + + #castArgValue(token: Token, type: T): ArgTypeMap[T] { + if (type === "string") { + return token.value as ArgTypeMap[T] + } else if (type === "number") { + const number = Number(token.value) + if (isNaN(number)) + throw new ParseError(`Expected a number but got '${token.value}'.`, token.start, token.end) + + return number as ArgTypeMap[T] + } else if (type === "boolean") { + if (token.value.match(/^(true|1|t)$/i)) return true as ArgTypeMap[T] + if (token.value.match(/^(false|0|f)$/i)) return false as ArgTypeMap[T] + throw new ParseError(`Expected a boolean but got '${token.value}'.`, token.start, token.end) + } + + throw new ParseError(`Unknown arg type: ${type}.`, token.start, token.end) + } +} + +type ArgTypeMap = { + string: string + number: number + boolean: boolean +} + +type ArgShape = + | { + name: string + type: T + description?: string + named?: false + } + | { + name: string + type: T + description?: string + named: true + default: ArgTypeMap[T] + } + +export type CommandShape = { + command: string + description: string + args: ArgShape[] +} + +type ParsedArg = { name: string; value: ArgTypeMap[keyof ArgTypeMap]; token: Token } diff --git a/packages/arg-completer/src/js/commands.ts b/packages/arg-completer/src/js/commands.ts new file mode 100644 index 0000000..4bf649a --- /dev/null +++ b/packages/arg-completer/src/js/commands.ts @@ -0,0 +1,449 @@ +import { Command, type CommandShape } from "./command" + +export const commandsShapes = { + ls: { + command: "ls", + description: "List the contents of a directory", + args: [ + { name: "path", type: "string", description: "The path to list", named: false }, + { + name: "all", + type: "boolean", + description: "Show hidden files", + named: true, + default: false, + }, + { + name: "long", + type: "boolean", + description: "List in long format", + named: true, + default: false, + }, + { + name: "short-names", + type: "boolean", + description: "Only print file names", + named: true, + default: false, + }, + { + name: "full-paths", + type: "boolean", + description: "Display full paths", + named: true, + default: false, + }, + ], + }, + + cd: { + command: "cd", + description: "Change the current working directory", + args: [{ name: "path", type: "string", description: "The path to change to", named: false }], + }, + + cp: { + command: "cp", + description: "Copy files or directories", + args: [ + { name: "source", type: "string", description: "Source file or directory" }, + { name: "destination", type: "string", description: "Destination path" }, + { + name: "recursive", + type: "boolean", + description: "Copy recursively", + named: true, + default: false, + }, + { + name: "verbose", + type: "boolean", + description: "Verbose output", + named: true, + default: false, + }, + ], + }, + + mv: { + command: "mv", + description: "Move files or directories", + args: [ + { name: "source", type: "string", description: "Source file or directory" }, + { name: "destination", type: "string", description: "Destination path" }, + { + name: "verbose", + type: "boolean", + description: "Verbose output", + named: true, + default: false, + }, + ], + }, + + rm: { + command: "rm", + description: "Remove files or directories", + args: [ + { name: "path", type: "string", description: "Path to remove" }, + { + name: "recursive", + type: "boolean", + description: "Remove recursively", + named: true, + default: false, + }, + { name: "force", type: "boolean", description: "Force removal", named: true, default: false }, + { + name: "verbose", + type: "boolean", + description: "Verbose output", + named: true, + default: false, + }, + ], + }, + + mkdir: { + command: "mkdir", + description: "Create directories", + args: [ + { name: "path", type: "string", description: "Directory path to create" }, + { + name: "verbose", + type: "boolean", + description: "Verbose output", + named: true, + default: false, + }, + ], + }, + + touch: { + command: "touch", + description: "Create empty files or update timestamps", + args: [ + { name: "path", type: "string", description: "File path to touch" }, + { + name: "access", + type: "boolean", + description: "Update access time only", + named: true, + default: false, + }, + { + name: "modified", + type: "boolean", + description: "Update modified time only", + named: true, + default: false, + }, + ], + }, + + // Text operations + echo: { + command: "echo", + description: "Display a string", + args: [ + { name: "text", type: "string", description: "Text to display" }, + { + name: "no-newline", + type: "boolean", + description: "Don't append newline", + named: true, + default: false, + }, + ], + }, + + cat: { + command: "cat", + description: "Display file contents", + args: [ + { name: "path", type: "string", description: "File to display" }, + { + name: "numbered", + type: "boolean", + description: "Show line numbers", + named: true, + default: false, + }, + ], + }, + + head: { + command: "head", + description: "Show first lines of input", + args: [ + { name: "path", type: "string", description: "File to read from", named: false }, + { name: "lines", type: "number", description: "Number of lines", named: true, default: 10 }, + ], + }, + + tail: { + command: "tail", + description: "Show last lines of input", + args: [ + { name: "path", type: "string", description: "File to read from", named: false }, + { name: "lines", type: "number", description: "Number of lines", named: true, default: 10 }, + { + name: "follow", + type: "boolean", + description: "Follow file changes", + named: true, + default: false, + }, + ], + }, + + grep: { + command: "grep", + description: "Search for patterns in text", + args: [ + { name: "pattern", type: "string", description: "Pattern to search for" }, + { + name: "ignore-case", + type: "boolean", + description: "Case insensitive search", + named: true, + default: false, + }, + { + name: "invert-match", + type: "boolean", + description: "Invert match", + named: true, + default: false, + }, + { + name: "line-number", + type: "boolean", + description: "Show line numbers", + named: true, + default: false, + }, + ], + }, + + sort: { + command: "sort", + description: "Sort input", + args: [ + { + name: "reverse", + type: "boolean", + description: "Sort in reverse order", + named: true, + default: false, + }, + { + name: "ignore-case", + type: "boolean", + description: "Case insensitive sort", + named: true, + default: false, + }, + { + name: "numeric", + type: "boolean", + description: "Numeric sort", + named: true, + default: false, + }, + ], + }, + + uniq: { + command: "uniq", + description: "Filter out repeated lines", + args: [ + { + name: "count", + type: "boolean", + description: "Show count of occurrences", + named: true, + default: false, + }, + { + name: "repeated", + type: "boolean", + description: "Show only repeated lines", + named: true, + default: false, + }, + { + name: "unique", + type: "boolean", + description: "Show only unique lines", + named: true, + default: false, + }, + ], + }, + + // Data manipulation + select: { + command: "select", + description: "Select specific columns from data", + args: [{ name: "columns", type: "string", description: "Columns to select" }], + }, + + where: { + command: "where", + description: "Filter data based on conditions", + args: [{ name: "condition", type: "string", description: "Filter condition" }], + }, + + group_by: { + command: "group-by", + description: "Group data by column values", + args: [{ name: "column", type: "string", description: "Column to group by" }], + }, + + // // Network operations + // http_get: { + // command: "http get", + // description: "Fetch data from a URL via GET request", + // args: [ + // { name: "url", type: "string", description: "URL to fetch" }, + // { name: "headers", type: "string", description: "HTTP headers", named: true, default: "" }, + // { + // name: "raw", + // type: "boolean", + // description: "Return raw response", + // named: true, + // default: false, + // }, + // { + // name: "insecure", + // type: "boolean", + // description: "Allow insecure connections", + // named: true, + // default: false, + // }, + // ], + // }, + + // http_post: { + // command: "http post", + // description: "Send data via POST request", + // args: [ + // { name: "url", type: "string", description: "URL to post to" }, + // { name: "data", type: "string", description: "Data to send", named: false }, + // { + // name: "content-type", + // type: "string", + // description: "Content type", + // named: true, + // default: "application/json", + // }, + // { name: "headers", type: "string", description: "HTTP headers", named: true, default: "" }, + // ], + // }, + + // System operations + ps: { + command: "ps", + description: "List running processes", + args: [ + { + name: "long", + type: "boolean", + description: "Show detailed information", + named: true, + default: false, + }, + ], + }, + + sys: { + command: "sys", + description: "Show system information", + args: [], + }, + + which: { + command: "which", + description: "Find the location of a command", + args: [ + { name: "command", type: "string", description: "Command to locate" }, + { + name: "all", + type: "boolean", + description: "Show all matches", + named: true, + default: false, + }, + ], + }, + + // // Conversion operations + // to_json: { + // command: "to json", + // description: "Convert data to JSON", + // args: [ + // { name: "indent", type: "number", description: "JSON indentation", named: true, default: 2 }, + // { name: "raw", type: "boolean", description: "Output raw JSON", named: true, default: false }, + // ], + // }, + + // from_json: { + // command: "from json", + // description: "Parse JSON data", + // args: [ + // { + // name: "objects", + // type: "boolean", + // description: "Parse multiple objects", + // named: true, + // default: false, + // }, + // ], + // }, + + // to_csv: { + // command: "to csv", + // description: "Convert data to CSV", + // args: [ + // { + // name: "separator", + // type: "string", + // description: "Field separator", + // named: true, + // default: ",", + // }, + // { + // name: "no-headers", + // type: "boolean", + // description: "Don't include headers", + // named: true, + // default: false, + // }, + // ], + // }, + + // from_csv: { + // command: "from csv", + // description: "Parse CSV data", + // args: [ + // { + // name: "separator", + // type: "string", + // description: "Field separator", + // named: true, + // default: ",", + // }, + // { + // name: "no-headers", + // type: "boolean", + // description: "No header row", + // named: true, + // default: false, + // }, + // ], + // }, +} as const satisfies Record + +export const commands: Command[] = Object.values(commandsShapes).map((shape) => new Command(shape)) diff --git a/packages/arg-completer/src/js/dom.ts b/packages/arg-completer/src/js/dom.ts new file mode 100644 index 0000000..f869022 --- /dev/null +++ b/packages/arg-completer/src/js/dom.ts @@ -0,0 +1,12 @@ +export const $ = (id: string): HTMLElement | null => document.getElementById(id) + +export const $$ = (tag: string, html = ""): HTMLElement => { + const el = document.createElement(tag) + el.innerHTML = html + return el +} + +export const cmdPrompt = $("command-prompt") as HTMLTextAreaElement +export const cmdHint = $("command-hint") as HTMLTextAreaElement +export const cmdSuggestionList = $("command-suggestion-list") as HTMLUListElement +export const cmdError = $("command-error") as HTMLDivElement diff --git a/packages/arg-completer/src/js/errors.ts b/packages/arg-completer/src/js/errors.ts new file mode 100644 index 0000000..3d05447 --- /dev/null +++ b/packages/arg-completer/src/js/errors.ts @@ -0,0 +1,5 @@ +export class ParseError extends Error { + constructor(message: string, public start: number, public end: number) { + super(message) + } +} diff --git a/packages/arg-completer/src/js/index.tsx b/packages/arg-completer/src/js/index.tsx new file mode 100644 index 0000000..af9bed6 --- /dev/null +++ b/packages/arg-completer/src/js/index.tsx @@ -0,0 +1,133 @@ +import { commands } from "./commands" +import { cmdPrompt, cmdHint, cmdSuggestionList, cmdError } from "./dom" +import { ParseError } from "./errors" + +let tabCompletion = "" + +cmdPrompt.addEventListener("keydown", (e) => { + if (e.key === "Enter") { + console.log("ENTER") + e.preventDefault + } else if (e.key === "Tab") { + e.preventDefault() + cmdPrompt.value = tabCompletion + updateSuggestionList(cmdPrompt.value) + } +}) + +cmdPrompt.addEventListener("input", (e) => { + updateSuggestionList(cmdPrompt.value) +}) + +// Corey hates this +const updateSuggestionList = (input: string) => { + if (input.trim() == "") return + + cmdSuggestionList.innerHTML = "" + cmdError.innerHTML = "" + tabCompletion = "" + + const { commandSuggestions, argSuggestions, error } = getSuggestions(input) + + if (error) { + const beforeError = input.slice(0, error.start) + const errorText = input.slice(error.start, error.end) + const afterError = input.slice(error.end) + cmdError.innerHTML = `${beforeError}${errorText}${afterError}` + } + + // Show command suggestions + commandSuggestions.forEach((cmdShape) => { + const div = createSuggestionElement(cmdShape.command, cmdShape.description) + cmdSuggestionList.appendChild(div) + }) + + // Show arg suggestions + argSuggestions?.forEach((arg) => { + let name = arg.name + if (arg.named) { + name = `${name}=${arg.default}` + } + const description = `<${arg.type}>` + (arg.description ? ` - ${arg.description}` : "") + const div = createSuggestionElement(name, description) + cmdSuggestionList.appendChild(div) + }) + + cmdHint.value = "" + tabCompletion = "" + + // Tab completion + if (commandSuggestions.length > 0) { + cmdHint.value = commandSuggestions[0]!.command + tabCompletion = cmdHint.value + " " + } else if (argSuggestions?.length > 0) { + const suggestion = argSuggestions[0]! + + const lastArg = input.trimStart().split(" ").pop() ?? "" + if (suggestion?.named) { + if (lastArg.match(/^[\w-]+=/)) { + const afterEquals = lastArg.split("=")[1] ?? "" + if (!afterEquals) { + const suggestionText = `<${suggestion.type}>` + tabCompletion = input + suggestionText + cmdHint.value = tabCompletion + } + } else { + const suggestionText = suggestion.name.slice(lastArg.length) + "=" + tabCompletion = input + suggestionText + cmdHint.value = tabCompletion + } + } else if (!lastArg) { + tabCompletion = "" + cmdHint.value = input + suggestion?.name + " " + } + } +} + +const getSuggestions = (input: string) => { + try { + const commandInput = input.trimStart().split(" ")[0] ?? "" + const matchingCommands = commands.filter((cmd) => cmd.shape.command.startsWith(commandInput)) + const hasCommand = input.trimStart().match(/\w+\s+/) + + if (!hasCommand) { + return { + commandSuggestions: matchingCommands.map((cmd) => cmd.shape), + argSuggestions: [], + command: null, + } + } else if (matchingCommands.length === 1) { + const command = matchingCommands[0]! + const { suggestions } = command.getSuggestions(input) + return { + commandSuggestions: [], + argSuggestions: suggestions, + } + } else { + return { + commandSuggestions: [], + argSuggestions: [], + error: new ParseError(`Unknown command: "${commandInput}."`, 0, commandInput.length), + } + } + } catch (error) { + if (error instanceof ParseError) { + return { commandSuggestions: [], argSuggestions: [], error } + } + throw error + } +} + +const createSuggestionElement = (title: string, description: string) => { + const div = document.createElement("div") + div.className = "command-suggestion" + const commandDiv = document.createElement("div") + commandDiv.textContent = title + commandDiv.className = "command-name" + const descriptionDiv = document.createElement("div") + descriptionDiv.textContent = description + descriptionDiv.className = "command-description" + div.appendChild(commandDiv) + div.appendChild(descriptionDiv) + return div +} diff --git a/packages/arg-completer/src/js/tokenizer.test.ts b/packages/arg-completer/src/js/tokenizer.test.ts new file mode 100644 index 0000000..fb6c480 --- /dev/null +++ b/packages/arg-completer/src/js/tokenizer.test.ts @@ -0,0 +1,105 @@ +import { Tokenizer } from "./tokenizer.js" +import { expect, test } from "bun:test" + +test("parse 'fetch url' into command and positional tokens", () => { + const { tokens, error } = Tokenizer.tokens("fetch https://example.com/path true") + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "https://example.com/path", start: 6, end: 30 }, + { type: "positional", value: "true", start: 31, end: 35 }, + ]) +}) + +test("parse 'fetch \"quoted url\"' and strip quotes from value", () => { + const { tokens, error } = Tokenizer.tokens('fetch "https://example.com/path"') + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "https://example.com/path", start: 6, end: 32 }, + ]) +}) + +test("parse 'fetch url timeout=30' with named argument", () => { + const { tokens, error } = Tokenizer.tokens("fetch https://example.com/path timeout=30") + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "https://example.com/path", start: 6, end: 30 }, + { type: "named", name: "timeout", value: "30", start: 31, end: 41 }, + ]) +}) + +test("parse mixed args 'fetch url timeout=30 raw=true'", () => { + const { tokens, error } = Tokenizer.tokens("fetch https://example.com/path timeout=30 raw=true") + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "https://example.com/path", start: 6, end: 30 }, + { type: "named", name: "timeout", value: "30", start: 31, end: 41 }, + { type: "named", name: "raw", value: "true", start: 42, end: 50 }, + ]) +}) + +test("return error for unclosed quote in 'fetch \"unterminated'", () => { + const { tokens, error } = Tokenizer.tokens('fetch "https://example.com/path') + expect(tokens).toEqual([]) + expect(error).toBeDefined() + expect(error?.message).toBe("Unclosed quote") + expect(error?.start).toBe(6) + expect(error?.end).toBe(31) +}) + +test("return error for escape char at end", () => { + const { tokens, error } = Tokenizer.tokens("fetch https://example.com/path\\") + expect(tokens).toEqual([]) + expect(error).toBeDefined() + expect(error?.message).toBe("Trailing backslash") + expect(error?.start).toBe(30) + expect(error?.end).toBe(31) +}) + +test('handle escaped quotes in \'fetch "url with \\"quotes\\""\'', () => { + const { tokens, error } = Tokenizer.tokens('fetch "url with \\"quotes\\""') + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: 'url with "quotes"', start: 6, end: 27 }, + ]) + expect(error).toBeUndefined() +}) + +test("handle escaped quotes in in named arg", () => { + const { tokens, error } = Tokenizer.tokens('fetch url timeout="30 seconds" raw=true') + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "url", start: 6, end: 9 }, + { type: "named", name: "timeout", value: "30 seconds", start: 10, end: 30 }, + { type: "named", name: "raw", value: "true", start: 31, end: 39 }, + ]) + expect(error).toBeUndefined() +}) + +test("ignore multiple spaces between arguments", () => { + const { tokens, error } = Tokenizer.tokens( + "fetch https://example.com/path timeout=30 raw=true" + ) + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "https://example.com/path", start: 9, end: 33 }, + { type: "named", name: "timeout", value: "30", start: 36, end: 46 }, + { type: "named", name: "raw", value: "true", start: 49, end: 57 }, + ]) + expect(error).toBeUndefined() +}) + +test("return empty array for empty string input", () => { + const { tokens, error } = Tokenizer.tokens("") + expect(tokens).toEqual([]) + expect(error).toBeUndefined() +}) + +test("handle quote immediately followed by text 'fetch \"url\"more'", () => { + const { tokens, error } = Tokenizer.tokens('fetch "url"more timeout=30') + expect(tokens).toEqual([ + { type: "command", value: "fetch", start: 0, end: 5 }, + { type: "positional", value: "urlmore", start: 6, end: 15 }, + { type: "named", name: "timeout", value: "30", start: 16, end: 26 }, + ]) + expect(error).toBeUndefined() +}) diff --git a/packages/arg-completer/src/js/tokenizer.ts b/packages/arg-completer/src/js/tokenizer.ts new file mode 100644 index 0000000..128d24f --- /dev/null +++ b/packages/arg-completer/src/js/tokenizer.ts @@ -0,0 +1,122 @@ +import { ParseError } from "./errors.js" + +export class Tokenizer { + pos: number + tokens: Token[] + input: string + + constructor(input: string) { + this.pos = 0 + this.tokens = [] + this.input = input + } + + static tokens(input: string): Token[] { + const tokenizer = new Tokenizer(input) + return tokenizer.tokenize() + } + + tokenize(): Token[] { + while (this.pos < this.input.length) { + if (this.#skipWhitespace(this.input)) continue + + const rawTokenStart = this.pos + const rawToken = this.#readRawToken() + const token = this.#analyzeToken(rawToken, rawTokenStart, this.pos) + this.tokens.push(token) + } + + return this.tokens + } + + #analyzeToken(value: string, start: number, end: number): Token { + if (!value) throw new ParseError("Unexpected empty argument", start, end) + + if (this.tokens.length === 0) { + return { type: "command", value, start, end } + } + + const namedMatch = value.match(/^([\w-]+)=(.*)$/) + if (namedMatch) { + const [, name, argValue] = namedMatch + if (!name) { + throw new ParseError("Named argument missing name", start, end) + } + + return { type: "named", name, value: argValue, start, end } + } else { + return { type: "positional", value, start, end } + } + } + + #readRawToken(): string { + let token = "" + let inQuotes = false + let escapeNext = false + + while (!this.#eol()) { + const char = this.input[this.pos] + + if (escapeNext) { + if (char === '"') { + token += char // unescape the quote + } else { + token += "\\" + char // keep the backslash for non-quotes + } + escapeNext = false + } else if (char === "\\") { + escapeNext = true + } else if (char === '"') { + inQuotes = !inQuotes + } else if (char === " " && !inQuotes) { + break + } else { + token += char + } + + this.pos++ + } + + if (inQuotes) { + throw new ParseError("Unclosed quote", this.pos - token.length - 1, this.pos) + } else if (escapeNext) { + throw new ParseError("Trailing backslash", this.pos - 1, this.pos) + } + + return token + } + + #skipWhitespace(input: string): boolean { + const match = input.slice(this.pos).match(/^\s+/) + if (!match) return false + + const offset = match[0].length + this.pos += offset + return true + } + + #eol(): boolean { + return this.pos >= this.input.length + } +} + +export type Token = + | { + type: "command" + value: string + start: number + end: number + } + | { + type: "positional" + value: string + start: number + end: number + } + | { + type: "named" + name: string + value: string + start: number + end: number + } diff --git a/packages/arg-completer/src/layout.tsx b/packages/arg-completer/src/layout.tsx new file mode 100644 index 0000000..e46bb8e --- /dev/null +++ b/packages/arg-completer/src/layout.tsx @@ -0,0 +1,17 @@ +import { html } from "hono/html" + +export const Layout = (children: any) => html` + + + Completion test + + + + + + + + + ${children} + + ` diff --git a/packages/arg-completer/src/server.tsx b/packages/arg-completer/src/server.tsx new file mode 100644 index 0000000..0b80524 --- /dev/null +++ b/packages/arg-completer/src/server.tsx @@ -0,0 +1,32 @@ +import { Hono } from "hono" +import { Prompt } from "./components/prompt" +import { serveStatic } from "hono/bun" +import { Layout } from "./layout" +import { isFile, transpile } from "./utils" + +const app = new Hono() + +app.get("/", (c) => c.html(Layout())) +app.use("/vendor/*", serveStatic({ root: "./public" })) +app.use("/css/*", serveStatic({ root: "./src" })) + +app.get("/js/:path{.+}", async (c) => { + const path = "./src/js/" + c.req.param("path") + const ts = path.endsWith(".js") ? path.replace(".js", ".ts") : path + ".ts" + const tsx = path.endsWith(".js") ? path.replace(".js", ".tsx") : path + ".tsx" + let javascript = "" + + if (isFile(ts)) { + javascript = await transpile(ts) + } else if (isFile(tsx)) { + javascript = await transpile(tsx) + } else if (isFile(path)) { + javascript = await Bun.file(path).text() + } else { + return c.text("File not found", 404) + } + + return new Response(javascript, { headers: { "Content-Type": "text/javascript" } }) +}) + +export default app diff --git a/packages/arg-completer/src/utils.tsx b/packages/arg-completer/src/utils.tsx new file mode 100644 index 0000000..6f21833 --- /dev/null +++ b/packages/arg-completer/src/utils.tsx @@ -0,0 +1,58 @@ +import { statSync } from "node:fs" +import { stat } from "node:fs/promises" + +const transpiler = new Bun.Transpiler({ loader: 'tsx' }) + +export function css(strings: TemplateStringsArray, ...values: any[]) { + return