feat(web): polish the WASM site - UX, help, parsing, assets

- About panel (collapsible, closed by default with a pulsing "Help" badge)
  explaining the tool; the `help` command now prints a full command reference
  instead of "HELP" (benefits the CLI too).
- Live generation as you type; Store button; masked output that stays mono-width
  (gen masks only the password column, never the header); command history with
  Up/Down (persisted); console auto-scroll; Export fixed (uses `dump`); Import.
- Name field normalizes to its canonical parsed form on blur; quick-gen and Store
  resolve the real entry name, so a leading prefix like `*P0 test1` is handled
  correctly (new hel_parse / hel_parse_name wasm helpers).
- Parser: prefix-only forms now parse with defaults - `*P0 test1` ->
  `*P0 test1 R 99 <today>`, `*P0 test1 R`, `*P0 test1 20R` - via new qpname/npname
  rules mirroring qname/nname; the fully-qualified form is unchanged.
- Favicons + web app manifest + enso asset; pkg rebuilt.
This commit is contained in:
Oleksandr Kozachuk
2026-06-08 20:11:24 +02:00
parent 03c5dadccb
commit 3031105000
17 changed files with 503 additions and 98 deletions
+23 -1
View File
@@ -141,7 +141,29 @@ impl<'a> LKEval<'a> {
Command::Uncorrect(name) => self.cmd_correct(&out, name, false, None),
Command::Noop => { to_history = false; },
Command::Help => {
out.o("HELP".to_string());
out.o(concat!(
"hel - passwords are generated from your master + the entry name; nothing secret is stored.\n",
"\n",
"entries\n",
" add <name> [len][mode] [seq] [date] [text] [^parent] define an entry\n",
" ls [regex] list by name ld [regex] list by date\n",
" mv <name> <new> rename / move rm <name> remove\n",
" comment <name> [text] set or clear the comment\n",
"\n",
"passwords\n",
" enc <name> show the generated password\n",
" gen[N] <name> N numbered variants; name ends in G.. (all) or X.. (random)\n",
" pass <name> [pw] cache a master / override for an entry's subtree\n",
" unpass <name> forget a cached password (unpass / = the root master)\n",
" correct <name> trust this password's hash uncorrect <name> untrust it\n",
"\n",
"catalog\n",
" dump print the catalog ls list it\n",
" save [target] write it (file / localStorage key / |command)\n",
" source <target> load it set <key> <val> config\n",
"\n",
"modes R regular C camel N nospace H hex B base64 D decimal (U.. = UPPER)"
).to_string());
}
Command::Mv(name, folder) => self.cmd_mv(&out, &name, &folder),
Command::Error(error) => {