components
All repositories: gitoria
4.8 KB
# components.hybriel.worldapi.orgHybriel components, developed standalone (CONCEPT.md). The home lists them; each component has a demo page, a READMEand a browser gate. Apps vendor a component by copying its folder. https://components.hybriel.worldapi.org## Components| Component | Demo | README ||-----------|------|--------|| Month view | `/month-view` | `components/month-view/README.md` (also `/month-view/README.md`) || Date picker | `/date-picker` | `components/date-picker/README.md` (also `/date-picker/README.md`) || Date range picker | `/range-picker` | `components/range-picker/README.md` (also `/range-picker/README.md`) || Pagination | `/pagination` | `components/pagination/README.md` (also `/pagination/README.md`) || Markdown editor | `/md-editor` | `components/md-editor/README.md` (also `/md-editor/README.md`) || Code editor | `/code-editor` | `components/code-editor/README.md` (also `/code-editor/README.md`) || Modal | `/modal` | `components/modal/README.md` (also `/modal/README.md`) |The Markdown editor takes files and images (drop, paste, File button) through `emit server mdUpload` (hybriel#94). The one-file upload (`components/file-upload/`, ticket #4) sends its file through `emit server saveFile` (hybriel#94). The multi-file upload (#5) is not built yet.## Layout- `project.hl` routes · `styles.hl` the site's page layout only (tokens from `shared/tokens.hl`, accent = light blue) · `components/main.hl` shell ·`components/index.hl` the home · `components/<name>/` one folder per component (component, demo, script, README).- To add a component: its folder, a demo route + a README route in `project.hl`, one entry in `components/index.hl`,its own `Style` in its file, checks in `tests/browser.mjs`.- `bin/hybriel` + `plugins/` (core crypto data fs http http1 proc time web) are vendored = hybriel **master e6720b1f**(2026-09-26, mission 037: #103/#104 client range ownership + awaited client calls, #105 `headers = null`, #106 `let` perloop pass, #94 files in `emit server …` over HTTP with progress; earlier: #83 hashed `/__hl/…?v=` URLs + immutable cache, #82 reconnect).Built from a read-only `git archive master` with `zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-gnu.2.39` in`native/`; binary sha256 `4316934e…8a2003`. **No local patch**: a re-vendor = copy binary + plugins, run the gate.Previous copy: `.scratch/pre-037/` (master 13ef4f9b).## PWA (mission 046)Installable, the same way as calendar/tracker: hl:web's own manifest (`/__hl/manifest.webmanifest`) + service worker(`/__hl/sw.js`) from settings in `project.hl`, no JavaScript of ours.- `appTitle` "Hybriel components", `appShortName` "Components", `appIcons` (192 + 512 PNG, each `any` + `maskable`),`appTouchIcon` (180), `appFavicon` `/icons/favicon.svg`, `appThemeColor` = token `darker` (the header,rgb(15, 20, 25)), `appBackgroundColor` = token `dark`. `/favicon.ico` is a real icon (16/32/48). Each icon has a `file` route.- **Icons** (`icons/`): `icon.svg` = source (512, hand-written: three stacked building blocks with studs, green-light`#b5cea8` on rgb(25,30,35), all inside the maskable safe circle r = 204 → one image for `any` + `maskable`);`favicon.svg` = the same drawing cropped on a rounded tile. Rendered on Loreana:```bashrsvg-convert -w 192 -h 192 icons/icon.svg -o icons/icon-192.pngrsvg-convert -w 512 -h 512 icons/icon.svg -o icons/icon-512.pngrsvg-convert -w 180 -h 180 icons/icon.svg -o icons/apple-touch-icon.pngfor s in 16 32 48; do rsvg-convert -w $s -h $s icons/favicon.svg -o /tmp/fav-$s.png; donemagick /tmp/fav-16.png /tmp/fav-32.png /tmp/fav-48.png icons/favicon.ico```- **Offline**: `offline = [ Index ]` — the worker keeps the shell and `/` (the home list). Without a network `/` opensfrom the cache and says "You are offline. The demos need the network." (`components/main.hl`: an invisible `netProbe`runs a 1 s CSS animation, each `animationiteration` reads `navigator.onLine` — hl:web has no connection state / mounthook). Every demo page offline gets hl:web's "Unavailable offline" page.- Gate: the `pwa:` / `offline:` checks at the end of `tests/browser.mjs` (manifest + icons over HTTP, Chrome'sinstallability + manifest parse, worker scope `/`, then CDP offline + the server stopped → reload of `/` shows theshell; screenshots `.scratch/gate-pwa-phone-{online,offline}.png`, 390 px).## Run, test, deploy- `COMPONENTS_PORT=8700 ./bin/hybriel project.hl` (env: `COMPONENTS_WATCH=0` no watcher, `HL_HOST`).- `node tests/browser.mjs` — the gate: own server + headless Chrome (ports 8700, 8701–8709). Other ports (workers):`COMPONENTS_GATE_PORT=8720 COMPONENTS_GATE_CHROME=8721-8729 node tests/browser.mjs`.- `./deploy.sh` on Loreana (architect): gate → backup → rsync → `docker compose up -d --build` on Byrodin (port 45006) → URL 200.
Branches
- mainmain branch
Latest commits
- 57408b6ecomponents#14: installable app (manifest, service worker, offline index), own iconmre
- 317bd09fdeploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- becbd59bcomponents#13: modal dialog (<dialog> based, focus wrap, backdrop/Esc/x close with reason, scroll lock, footer buttons)mre
- 367dd19adeploy.sh: never send .git or .gitignore to Byrodinmre
- 4b4dabe5State of 2026-09-27, before the move to gitoriamre