max / goingson
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
3 files changed,
+75 insertions,
-44 deletions
| @@ -1387,7 +1387,7 @@ | |||
| 1387 | 1387 | "libc", | |
| 1388 | 1388 | "option-ext", | |
| 1389 | 1389 | "redox_users", | |
| 1390 | - | "windows-sys 0.61.2", | |
| 1390 | + | "windows-sys 0.60.2", | |
| 1391 | 1391 | ] | |
| 1392 | 1392 | ||
| 1393 | 1393 | [[package]] | |
| @@ -1628,7 +1628,7 @@ | |||
| 1628 | 1628 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" | |
| 1629 | 1629 | dependencies = [ | |
| 1630 | 1630 | "libc", | |
| 1631 | - | "windows-sys 0.61.2", | |
| 1631 | + | "windows-sys 0.60.2", | |
| 1632 | 1632 | ] | |
| 1633 | 1633 | ||
| 1634 | 1634 | [[package]] | |
| @@ -3444,9 +3444,9 @@ | |||
| 3444 | 3444 | ||
| 3445 | 3445 | [[package]] | |
| 3446 | 3446 | name = "makeover-build" | |
| 3447 | - | version = "0.53.0" | |
| 3447 | + | version = "0.54.0" | |
| 3448 | 3448 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3449 | - | checksum = "82a170c530883774fc44d41e8e785260ee1b44cc26d9bfaa4d77154176af794c" | |
| 3449 | + | checksum = "020c6b00d4d0defcdbc1d5a3f879a02c3960566f259ae0801b0cbb807de40441" | |
| 3450 | 3450 | dependencies = [ | |
| 3451 | 3451 | "makeover", | |
| 3452 | 3452 | "makeover-geometry", | |
| @@ -3477,9 +3477,9 @@ | |||
| 3477 | 3477 | ||
| 3478 | 3478 | [[package]] | |
| 3479 | 3479 | name = "makeover-touch" | |
| 3480 | - | version = "0.24.0" | |
| 3480 | + | version = "0.25.0" | |
| 3481 | 3481 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3482 | - | checksum = "75c49f37baa4360fc06e87834a39978b8adc70c256430864a8b234fcf2abfa45" | |
| 3482 | + | checksum = "c479d37b37002c0f5d3bb8ec7ac1c99bf85eaa6ff2eae06590ab53182893114c" | |
| 3483 | 3483 | dependencies = [ | |
| 3484 | 3484 | "makeover-geometry", | |
| 3485 | 3485 | "makeover-layout", | |
| @@ -3487,20 +3487,21 @@ | |||
| 3487 | 3487 | ||
| 3488 | 3488 | [[package]] | |
| 3489 | 3489 | name = "makeover-tui" | |
| 3490 | - | version = "0.33.0" | |
| 3490 | + | version = "0.35.0" | |
| 3491 | 3491 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3492 | - | checksum = "5196506074bbf9f2b9955ff9e94892e2eca85d9dac5af49ed93da30d50d6c622" | |
| 3492 | + | checksum = "5414d705d290c20740119b634d246ee88012860fcc8a2cf20c5db584a92a7932" | |
| 3493 | 3493 | dependencies = [ | |
| 3494 | 3494 | "makeover", | |
| 3495 | 3495 | "makeover-layout", | |
| 3496 | + | "makeover-timing", | |
| 3496 | 3497 | "ratatui", | |
| 3497 | 3498 | ] | |
| 3498 | 3499 | ||
| 3499 | 3500 | [[package]] | |
| 3500 | 3501 | name = "makeover-webview" | |
| 3501 | - | version = "0.60.0" | |
| 3502 | + | version = "0.61.0" | |
| 3502 | 3503 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3503 | - | checksum = "203b3a259e249ed32ffd9d48d75a6c12e4aa173095607cc2c852f2c1f3fe9c0e" | |
| 3504 | + | checksum = "6399dc739e0d326e3577bc80643c1a9ab2afcc005ec240a7c9765e060f359f34" | |
| 3504 | 3505 | dependencies = [ | |
| 3505 | 3506 | "makeover-geometry", | |
| 3506 | 3507 | "makeover-layout", | |
| @@ -3649,7 +3650,7 @@ | |||
| 3649 | 3650 | "png 0.18.1", | |
| 3650 | 3651 | "serde", | |
| 3651 | 3652 | "thiserror 2.0.20", | |
| 3652 | - | "windows-sys 0.61.2", | |
| 3653 | + | "windows-sys 0.60.2", | |
| 3653 | 3654 | ] | |
| 3654 | 3655 | ||
| 3655 | 3656 | [[package]] | |
| @@ -3782,7 +3783,7 @@ | |||
| 3782 | 3783 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3783 | 3784 | checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" | |
| 3784 | 3785 | dependencies = [ | |
| 3785 | - | "windows-sys 0.61.2", | |
| 3786 | + | "windows-sys 0.60.2", | |
| 3786 | 3787 | ] | |
| 3787 | 3788 | ||
| 3788 | 3789 | [[package]] | |
| @@ -4716,7 +4717,7 @@ | |||
| 4716 | 4717 | ||
| 4717 | 4718 | [[package]] | |
| 4718 | 4719 | name = "quasi-http" | |
| 4719 | - | version = "0.64.0" | |
| 4720 | + | version = "0.65.0" | |
| 4720 | 4721 | dependencies = [ | |
| 4721 | 4722 | "form_urlencoded", | |
| 4722 | 4723 | "http", | |
| @@ -4725,7 +4726,7 @@ | |||
| 4725 | 4726 | ||
| 4726 | 4727 | [[package]] | |
| 4727 | 4728 | name = "quasi-notifs" | |
| 4728 | - | version = "0.64.0" | |
| 4729 | + | version = "0.65.0" | |
| 4729 | 4730 | dependencies = [ | |
| 4730 | 4731 | "quasi-router", | |
| 4731 | 4732 | "synckit-config", | |
| @@ -4733,14 +4734,14 @@ | |||
| 4733 | 4734 | ||
| 4734 | 4735 | [[package]] | |
| 4735 | 4736 | name = "quasi-router" | |
| 4736 | - | version = "0.64.0" | |
| 4737 | + | version = "0.65.0" | |
| 4737 | 4738 | dependencies = [ | |
| 4738 | 4739 | "makeover-layout", | |
| 4739 | 4740 | ] | |
| 4740 | 4741 | ||
| 4741 | 4742 | [[package]] | |
| 4742 | 4743 | name = "quasi-tauri" | |
| 4743 | - | version = "0.64.0" | |
| 4744 | + | version = "0.65.0" | |
| 4744 | 4745 | dependencies = [ | |
| 4745 | 4746 | "http", | |
| 4746 | 4747 | "quasi-http", | |
| @@ -4766,7 +4767,7 @@ | |||
| 4766 | 4767 | ||
| 4767 | 4768 | [[package]] | |
| 4768 | 4769 | name = "quasi-webview" | |
| 4769 | - | version = "0.64.0" | |
| 4770 | + | version = "0.65.0" | |
| 4770 | 4771 | dependencies = [ | |
| 4771 | 4772 | "docengine", | |
| 4772 | 4773 | "makeover-layout", | |
| @@ -5205,7 +5206,7 @@ | |||
| 5205 | 5206 | "errno", | |
| 5206 | 5207 | "libc", | |
| 5207 | 5208 | "linux-raw-sys", | |
| 5208 | - | "windows-sys 0.61.2", | |
| 5209 | + | "windows-sys 0.60.2", | |
| 5209 | 5210 | ] | |
| 5210 | 5211 | ||
| 5211 | 5212 | [[package]] | |
| @@ -5262,7 +5263,7 @@ | |||
| 5262 | 5263 | "security-framework", | |
| 5263 | 5264 | "security-framework-sys", | |
| 5264 | 5265 | "webpki-root-certs", | |
| 5265 | - | "windows-sys 0.61.2", | |
| 5266 | + | "windows-sys 0.60.2", | |
| 5266 | 5267 | ] | |
| 5267 | 5268 | ||
| 5268 | 5269 | [[package]] | |
| @@ -5802,7 +5803,7 @@ | |||
| 5802 | 5803 | checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" | |
| 5803 | 5804 | dependencies = [ | |
| 5804 | 5805 | "libc", | |
| 5805 | - | "windows-sys 0.61.2", | |
| 5806 | + | "windows-sys 0.60.2", | |
| 5806 | 5807 | ] | |
| 5807 | 5808 | ||
| 5808 | 5809 | [[package]] | |
| @@ -6577,7 +6578,7 @@ | |||
| 6577 | 6578 | "getrandom 0.4.3", | |
| 6578 | 6579 | "once_cell", | |
| 6579 | 6580 | "rustix", | |
| 6580 | - | "windows-sys 0.61.2", | |
| 6581 | + | "windows-sys 0.60.2", | |
| 6581 | 6582 | ] | |
| 6582 | 6583 | ||
| 6583 | 6584 | [[package]] | |
| @@ -6599,7 +6600,7 @@ | |||
| 6599 | 6600 | "parking_lot", | |
| 6600 | 6601 | "rustix", | |
| 6601 | 6602 | "signal-hook", | |
| 6602 | - | "windows-sys 0.61.2", | |
| 6603 | + | "windows-sys 0.60.2", | |
| 6603 | 6604 | ] | |
| 6604 | 6605 | ||
| 6605 | 6606 | [[package]] | |
| @@ -7081,7 +7082,7 @@ | |||
| 7081 | 7082 | "png 0.18.1", | |
| 7082 | 7083 | "serde", | |
| 7083 | 7084 | "thiserror 2.0.20", | |
| 7084 | - | "windows-sys 0.61.2", | |
| 7085 | + | "windows-sys 0.60.2", | |
| 7085 | 7086 | ] | |
| 7086 | 7087 | ||
| 7087 | 7088 | [[package]] | |
| @@ -7116,7 +7117,7 @@ | |||
| 7116 | 7117 | dependencies = [ | |
| 7117 | 7118 | "memoffset", | |
| 7118 | 7119 | "tempfile", | |
| 7119 | - | "windows-sys 0.61.2", | |
| 7120 | + | "windows-sys 0.60.2", | |
| 7120 | 7121 | ] | |
| 7121 | 7122 | ||
| 7122 | 7123 | [[package]] | |
| @@ -7646,7 +7647,7 @@ | |||
| 7646 | 7647 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 7647 | 7648 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" | |
| 7648 | 7649 | dependencies = [ | |
| 7649 | - | "windows-sys 0.61.2", | |
| 7650 | + | "windows-sys 0.60.2", | |
| 7650 | 7651 | ] | |
| 7651 | 7652 | ||
| 7652 | 7653 | [[package]] | |
| @@ -8503,22 +8504,22 @@ | |||
| 8503 | 8504 | "winnow 1.0.4", | |
| 8504 | 8505 | ] | |
| 8505 | 8506 | ||
| 8506 | - | [[patch.unused]] | |
| 8507 | - | name = "ops-status" | |
| 8508 | - | version = "0.1.0" | |
| 8509 | - | ||
| 8510 | 8507 | [[patch.unused]] | |
| 8511 | 8508 | name = "quasi-axum" | |
| 8512 | - | version = "0.64.0" | |
| 8509 | + | version = "0.65.0" | |
| 8513 | 8510 | ||
| 8514 | 8511 | [[patch.unused]] | |
| 8515 | 8512 | name = "quasi-basics" | |
| 8516 | - | version = "0.64.0" | |
| 8513 | + | version = "0.65.0" | |
| 8517 | 8514 | ||
| 8518 | 8515 | [[patch.unused]] | |
| 8519 | 8516 | name = "quasi-immediate" | |
| 8520 | - | version = "0.64.0" | |
| 8517 | + | version = "0.65.0" | |
| 8521 | 8518 | ||
| 8522 | 8519 | [[patch.unused]] | |
| 8523 | 8520 | name = "quasi-store" | |
| 8524 | 8521 | version = "0.1.0" | |
| 8522 | + | ||
| 8523 | + | [[patch.unused]] | |
| 8524 | + | name = "ops-status" | |
| 8525 | + | version = "0.1.0" |
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | makeover-geometry = "0.7" | |
| 37 | 37 | # Only to write its selection and clock scripts into the frontend. Those two are | |
| 38 | 38 | # the whole of `frontend/js/` since the swap. | |
| 39 | - | quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.64" } | |
| 39 | + | quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.65" } | |
| 40 | 40 | ||
| 41 | 41 | [dependencies] | |
| 42 | 42 | goingson-core = { workspace = true } | |
| @@ -54,10 +54,10 @@ | |||
| 54 | 54 | # dependency's source even with the feature off -- so a public clone could not | |
| 55 | 55 | # build at all against a URL it could not reach. quasi went public that day and | |
| 56 | 56 | # the URL moved here with it. | |
| 57 | - | quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.64" } | |
| 58 | - | quasi-http = { git = "https://makenot.work/git/max/quasi.git", version = "0.64" } | |
| 59 | - | quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.64" } | |
| 60 | - | quasi-tauri = { git = "https://makenot.work/git/max/quasi.git", version = "0.64" } | |
| 57 | + | quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.65" } | |
| 58 | + | quasi-http = { git = "https://makenot.work/git/max/quasi.git", version = "0.65" } | |
| 59 | + | quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.65" } | |
| 60 | + | quasi-tauri = { git = "https://makenot.work/git/max/quasi.git", version = "0.65" } | |
| 61 | 61 | ||
| 62 | 62 | # The notification declaration, and it is NOT behind the `quasi` feature: the | |
| 63 | 63 | # watcher is desktop app behaviour rather than a described screen, and the | |
| @@ -74,7 +74,7 @@ | |||
| 74 | 74 | # before it has ported its screens cannot take it. `notifications::Notifier` is | |
| 75 | 75 | # the eight lines meanwhile, and it goes when the flip makes quasi-router | |
| 76 | 76 | # unconditional here. | |
| 77 | - | quasi-notifs = { git = "https://makenot.work/git/max/quasi.git", version = "0.64", features = ["synckit", "describe"] } | |
| 77 | + | quasi-notifs = { git = "https://makenot.work/git/max/quasi.git", version = "0.65", features = ["synckit", "describe"] } | |
| 78 | 78 | ||
| 79 | 79 | # Tauri | |
| 80 | 80 | tauri = { workspace = true, features = ["image-png", "devtools"] } |
| @@ -39,11 +39,38 @@ | |||
| 39 | 39 | // rewritten twice. | |
| 40 | 40 | const RATES = { since: 1000, until: 1000, age: 30000 }; | |
| 41 | 41 | ||
| 42 | - | // How long a toast stays before it is taken off the page. The terminal and | |
| 43 | - | // egui renderers hold the same number as `LINGER`, and a screen described | |
| 44 | - | // once and drawn three times should not keep its messages for three | |
| 45 | - | // different lengths of time. | |
| 46 | - | const LINGER = 4000; | |
| 42 | + | // How long a toast stays before it is taken off the page. | |
| 43 | + | // | |
| 44 | + | // `eea7ba88`. Read rather than written: `makeover-timing` names the | |
| 45 | + | // duration `Intent::Dismiss`, and `makeover-build` writes it into every | |
| 46 | + | // consumer's `timing.css` as `--timing-dismiss`. The terminal and egui | |
| 47 | + | // renderers take the same number out of the same crate, so a screen | |
| 48 | + | // described once and drawn three times keeps its messages for one length of | |
| 49 | + | // time and moving that length is moving one constant. | |
| 50 | + | // | |
| 51 | + | // The fallback is for a page that ships this script without that | |
| 52 | + | // stylesheet. It is the crate's own value and a Rust test pins it there, the | |
| 53 | + | // same arrangement the two format implementations above already run on: a | |
| 54 | + | // number in two languages is fine so long as something fails when they part. | |
| 55 | + | const LINGER_FALLBACK = 3000; | |
| 56 | + | ||
| 57 | + | // A CSS time as a number of milliseconds. `3000ms` and `3s` are both legal | |
| 58 | + | // spellings of the same duration and a stylesheet may carry either, so the | |
| 59 | + | // unit is read rather than assumed. An absent or unparseable value is a page | |
| 60 | + | // with no timing sheet, not a page asking for zero. | |
| 61 | + | const milliseconds = (token, fallback) => { | |
| 62 | + | const raw = getComputedStyle(document.documentElement) | |
| 63 | + | .getPropertyValue(token) | |
| 64 | + | .trim(); | |
| 65 | + | const parsed = Number.parseFloat(raw); | |
| 66 | + | if (!Number.isFinite(parsed)) return fallback; | |
| 67 | + | return raw.endsWith("ms") ? parsed : parsed * 1000; | |
| 68 | + | }; | |
| 69 | + | ||
| 70 | + | // Read once, on the first settle rather than at parse time: this script may | |
| 71 | + | // run before the stylesheet it is asking about has been applied, and a | |
| 72 | + | // custom property that is not there yet reads as the empty string. | |
| 73 | + | let lingerMs = null; | |
| 47 | 74 | ||
| 48 | 75 | /** A span in seconds as a stopwatch: `h:mm:ss`, hours unbounded. */ | |
| 49 | 76 | const face = (seconds) => { | |
| @@ -103,10 +130,13 @@ | |||
| 103 | 130 | // The mark is what keeps a settle from starting a second timer on a toast | |
| 104 | 131 | // that is already counting. | |
| 105 | 132 | const linger = () => { | |
| 133 | + | if (lingerMs === null) { | |
| 134 | + | lingerMs = milliseconds("--timing-dismiss", LINGER_FALLBACK); | |
| 135 | + | } | |
| 106 | 136 | const fresh = '[data-notice="toast"]:not([data-lingering])'; | |
| 107 | 137 | for (const toast of document.querySelectorAll(fresh)) { | |
| 108 | 138 | toast.setAttribute("data-lingering", ""); | |
| 109 | - | setTimeout(() => toast.remove(), LINGER); | |
| 139 | + | setTimeout(() => toast.remove(), lingerMs); | |
| 110 | 140 | } | |
| 111 | 141 | }; | |
| 112 | 142 |