mevebu 1.4.4 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mevebu/app/mevebu.js +105 -38
- package/mevebu/app/tailwind.css +64 -20
- package/mevebu/app/tailwind.src.css +5 -5
- package/mevebu/libs/js/core.js +9 -2
- package/package.json +1 -1
package/mevebu/app/mevebu.js
CHANGED
|
@@ -38,7 +38,9 @@ const GRID = "grid grid-cols-1 gap-[var(--gutter)] sm:grid-cols-2 lg:grid-cols-3
|
|
|
38
38
|
const SECTION = "pt-[clamp(32px,5vw,60px)]";
|
|
39
39
|
const SECTION_HEAD = "mb-4 flex items-baseline gap-3";
|
|
40
40
|
const SECTION_TITLE = "flex items-center gap-2.5 text-lg font-bold tracking-[-0.02em]";
|
|
41
|
-
|
|
41
|
+
/* The padding grows the target to a finger while the negative margin cancels
|
|
42
|
+
the height, so a section head keeps its baseline alignment on a phone. */
|
|
43
|
+
const SECTION_MORE = "ms-auto -my-3 inline-flex items-center py-3 text-sm font-semibold text-jade no-underline hover:underline";
|
|
42
44
|
const SECTION_COUNT = "ms-1.5 rounded-full bg-deck-2 px-2 py-px text-2xs font-semibold text-ink-3";
|
|
43
45
|
const LEAD = "mt-[clamp(28px,5vw,56px)] mb-0 max-w-[20ch] text-balance text-lead font-bold tracking-[-0.025em]";
|
|
44
46
|
const LEDE = "mt-3 mb-0 max-w-[60ch] text-pretty text-md text-ink-2";
|
|
@@ -186,6 +188,9 @@ function openUpdate(latest) {
|
|
|
186
188
|
const actionBox = el("div", { class: "flex flex-wrap items-center justify-end gap-2" });
|
|
187
189
|
const command = updateCommand();
|
|
188
190
|
const updatable = () => Boolean(resolved) && compareVersions(resolved, VERSION) > 0;
|
|
191
|
+
// A local build can sit above the published one, and saying "up to date" next
|
|
192
|
+
// to a lower number reads as a bug, so that case names itself.
|
|
193
|
+
const ahead = () => Boolean(resolved) && compareVersions(resolved, VERSION) < 0;
|
|
189
194
|
|
|
190
195
|
const versionRow = (label, value, isNew) =>
|
|
191
196
|
el(
|
|
@@ -204,9 +209,11 @@ function openUpdate(latest) {
|
|
|
204
209
|
? "Checking for updates"
|
|
205
210
|
: newer
|
|
206
211
|
? `mevebu ${resolved} is out`
|
|
207
|
-
: resolved
|
|
208
|
-
? "
|
|
209
|
-
:
|
|
212
|
+
: !resolved
|
|
213
|
+
? "Could not check for updates"
|
|
214
|
+
: ahead()
|
|
215
|
+
? "This build is ahead of the published version"
|
|
216
|
+
: "mevebu is up to date"
|
|
210
217
|
),
|
|
211
218
|
newer
|
|
212
219
|
? el("p", {}, "A newer version is published. Update your global install, then run ", el("code", { class: CODE }, PACKAGE_NAME), " again.")
|
|
@@ -486,62 +493,122 @@ function wireFilter(root, meta) {
|
|
|
486
493
|
|
|
487
494
|
// ---------- pages ----------
|
|
488
495
|
|
|
496
|
+
/* Home furniture. The tiles are shorter than a tool card on purpose: a category
|
|
497
|
+
is a way in, not a destination, so it gets one line and its count. */
|
|
498
|
+
const FAVORITE_CARDS = 6;
|
|
499
|
+
const RANDOM_CARDS = 9;
|
|
500
|
+
const TILE =
|
|
501
|
+
"flex items-center gap-3 rounded-r2 border border-orbit bg-deck px-4 py-3.5 no-underline transition-colors duration-150 hover:border-jade";
|
|
502
|
+
const COUNT_PILL = "flex-none rounded-full bg-deck-2 px-2.5 py-1 text-2xs font-semibold text-ink-3";
|
|
503
|
+
const REDIRECT_CARD =
|
|
504
|
+
"relative grid content-center justify-items-center gap-1.5 rounded-r2 border border-orbit bg-deck p-5 text-center no-underline transition-colors duration-150 hover:border-jade";
|
|
505
|
+
|
|
506
|
+
function homeSection(title, iconName, aside, body) {
|
|
507
|
+
return el(
|
|
508
|
+
"section",
|
|
509
|
+
{ class: SECTION },
|
|
510
|
+
el(
|
|
511
|
+
"div",
|
|
512
|
+
{ class: SECTION_HEAD },
|
|
513
|
+
el("h2", { class: SECTION_TITLE }, icon(iconName, "size-[22px] flex-none text-jade"), title),
|
|
514
|
+
aside
|
|
515
|
+
),
|
|
516
|
+
body
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
const homeMore = (href, label) => el("a", { class: SECTION_MORE, href }, label);
|
|
521
|
+
|
|
522
|
+
function categoryTile(category) {
|
|
523
|
+
return el(
|
|
524
|
+
"a",
|
|
525
|
+
{ class: TILE, href: `#/${category.id}` },
|
|
526
|
+
el("span", { class: "grid size-[38px] flex-none place-items-center rounded-[12px] bg-jade-soft text-jade [&_svg]:size-[19px]" }, icon(category.icon)),
|
|
527
|
+
el("span", { class: "min-w-0 flex-1 truncate text-md font-semibold tracking-[-0.01em]" }, category.name),
|
|
528
|
+
el("span", { class: COUNT_PILL }, toolsInCategory(category.id).length)
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* The favourites row is a shortcut, so it earns a shorter sentence than the
|
|
533
|
+
empty favourites page: the reader sees why it is empty and where to go. */
|
|
534
|
+
function favoritesEmpty() {
|
|
535
|
+
return el(
|
|
536
|
+
"div",
|
|
537
|
+
{ class: "flex flex-wrap items-center gap-x-4 gap-y-3 rounded-r2 border border-dashed border-orbit-hard bg-deck p-6" },
|
|
538
|
+
el("span", { class: "grid size-[42px] flex-none place-items-center rounded-[13px] bg-jade-soft text-jade [&_svg]:size-[21px]" }, icon("star")),
|
|
539
|
+
el("p", { class: "m-0 max-w-[54ch] text-pretty text-md text-ink-2" },
|
|
540
|
+
"Nothing saved yet. Tap the star on any tool and it lands on this row, so it stays one click away."),
|
|
541
|
+
el("a", { class: `${LINK_PLAIN} ms-auto`, href: "#/tools" }, "Browse tools")
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
function favoritesRest(rest) {
|
|
546
|
+
return el(
|
|
547
|
+
"a",
|
|
548
|
+
{ class: REDIRECT_CARD, href: "#/favorites" },
|
|
549
|
+
el("span", { class: "grid size-[42px] place-items-center rounded-[13px] bg-jade-soft text-jade [&_svg]:size-[21px]" }, icon("star")),
|
|
550
|
+
el("span", { class: "text-md font-semibold tracking-[-0.01em]" }, rest > 0 ? `${rest} more` : "See all"),
|
|
551
|
+
el("span", { class: "text-sm text-ink-2" }, "Open your favorites")
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
|
|
489
555
|
function homePage() {
|
|
490
556
|
const hero = el(
|
|
491
557
|
"section",
|
|
492
558
|
{ class: "relative overflow-hidden border-b border-orbit" },
|
|
493
559
|
el(
|
|
494
560
|
"div",
|
|
495
|
-
{ class: "mx-[var(--margin)] grid items-center gap-[clamp(
|
|
561
|
+
{ class: "mx-[var(--margin)] grid items-center gap-[clamp(32px,5vw,64px)] py-[clamp(44px,8vw,88px)] min-[60rem]:grid-cols-[minmax(0,1fr)_auto]" },
|
|
496
562
|
el(
|
|
497
563
|
"div",
|
|
498
564
|
{},
|
|
499
|
-
el("h1", { class: "max-w-[
|
|
565
|
+
el("h1", { class: "max-w-[18ch] text-balance text-hero font-bold tracking-[-0.035em]" }, "Small tools, one page each."),
|
|
566
|
+
el("p", { class: "mt-5 mb-0 max-w-[48ch] text-pretty text-md text-ink-2" },
|
|
567
|
+
`${TOOLS.length} tools across ${CATEGORIES.length} categories, and every one of them runs in your browser.`),
|
|
500
568
|
el(
|
|
501
569
|
"div",
|
|
502
|
-
{ class: "mt-[clamp(
|
|
570
|
+
{ class: "mt-[clamp(26px,3.5vw,36px)] flex flex-wrap items-center gap-2.5" },
|
|
503
571
|
button("Search tools", { icon: "search", kind: "fill", onclick: () => openPalette() }),
|
|
504
572
|
el("a", { class: LINK_PLAIN, href: "#/tools" }, icon("shuffle"), el("span", {}, "Browse all"))
|
|
505
573
|
)
|
|
506
574
|
),
|
|
507
|
-
el("div", { class: "grid place-items-center rounded-[28px] border border-orbit bg-deck
|
|
508
|
-
el("img", { class: "block size-[
|
|
575
|
+
el("div", { class: "grid place-items-center rounded-[28px] border border-orbit bg-deck p-7 max-[60rem]:hidden" },
|
|
576
|
+
el("img", { class: "block size-[248px]", src: "./icon.png", alt: "", width: "248", height: "248" }))
|
|
509
577
|
)
|
|
510
578
|
);
|
|
511
579
|
|
|
512
|
-
const
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
580
|
+
const favorites = getFavorites();
|
|
581
|
+
const saved = TOOLS.filter((tool) => favorites.has(tool.id));
|
|
582
|
+
const shown = saved.slice(0, FAVORITE_CARDS - 1);
|
|
583
|
+
const rest = saved.length - shown.length;
|
|
516
584
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
"div",
|
|
523
|
-
{ class: "mb-4 flex items-baseline gap-3" },
|
|
524
|
-
el("h2", { class: "flex items-center gap-2.5 text-lg font-bold tracking-[-0.02em]" }, icon(iconName, "size-[22px] flex-none text-jade"), title),
|
|
525
|
-
more
|
|
526
|
-
),
|
|
527
|
-
el("div", { class: "grid grid-cols-1 gap-[var(--gutter)] sm:grid-cols-2 lg:grid-cols-3" }, ...tools.map(toolCard))
|
|
528
|
-
);
|
|
585
|
+
// Nine picks, reshuffled on demand: the point is to meet a tool you did not
|
|
586
|
+
// know was there, so the order is drawn fresh every visit.
|
|
587
|
+
const randomGrid = el("div", { class: GRID });
|
|
588
|
+
const fillRandom = () => randomGrid.replaceChildren(...shuffle(TOOLS).slice(0, RANDOM_CARDS).map(toolCard));
|
|
589
|
+
fillRandom();
|
|
529
590
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
591
|
+
document.title = "mevebu · small tools that run in your browser";
|
|
592
|
+
return el(
|
|
593
|
+
"div",
|
|
594
|
+
{},
|
|
595
|
+
hero,
|
|
596
|
+
el(
|
|
597
|
+
"div",
|
|
598
|
+
{ class: `pb-[var(--margin)] ${PAGE}` },
|
|
599
|
+
homeSection("Your favorites", "star", saved.length ? homeMore("#/favorites", "See all") : null,
|
|
600
|
+
saved.length
|
|
601
|
+
? el("div", { class: GRID }, ...shown.map(toolCard), favoritesRest(rest))
|
|
602
|
+
: favoritesEmpty()),
|
|
603
|
+
homeSection("Categories", "layout-grid", homeMore("#/categories", "All categories"),
|
|
604
|
+
el("div", { class: GRID }, ...CATEGORIES.map(categoryTile))),
|
|
605
|
+
homeSection("Random picks", "shuffle",
|
|
606
|
+
el("button", { class: `${LINK_PLAIN} ms-auto`, type: "button", onclick: fillRandom }, icon("shuffle"), el("span", {}, "Shuffle")),
|
|
607
|
+
randomGrid),
|
|
608
|
+
el("div", { class: "mt-[clamp(30px,5vw,54px)] flex justify-center" },
|
|
609
|
+
button("Search tools", { icon: "search", kind: "fill", onclick: () => openPalette() }))
|
|
540
610
|
)
|
|
541
611
|
);
|
|
542
|
-
|
|
543
|
-
document.title = "mevebu · small tools that run in your browser";
|
|
544
|
-
return el("div", {}, hero, grid);
|
|
545
612
|
}
|
|
546
613
|
|
|
547
614
|
function toolsPage() {
|
package/mevebu/app/tailwind.css
CHANGED
|
@@ -271,6 +271,9 @@
|
|
|
271
271
|
.mx-auto {
|
|
272
272
|
margin-inline: auto;
|
|
273
273
|
}
|
|
274
|
+
.-my-3 {
|
|
275
|
+
margin-block: calc(var(--spacing) * -3);
|
|
276
|
+
}
|
|
274
277
|
.ms-1\.5 {
|
|
275
278
|
margin-inline-start: calc(var(--spacing) * 1.5);
|
|
276
279
|
}
|
|
@@ -301,27 +304,33 @@
|
|
|
301
304
|
.mt-3\.5 {
|
|
302
305
|
margin-top: calc(var(--spacing) * 3.5);
|
|
303
306
|
}
|
|
307
|
+
.mt-5 {
|
|
308
|
+
margin-top: calc(var(--spacing) * 5);
|
|
309
|
+
}
|
|
304
310
|
.mt-8 {
|
|
305
311
|
margin-top: calc(var(--spacing) * 8);
|
|
306
312
|
}
|
|
307
313
|
.mt-\[18px\] {
|
|
308
314
|
margin-top: 18px;
|
|
309
315
|
}
|
|
310
|
-
.mt-\[clamp\(22px\,3vw\,30px\)\] {
|
|
311
|
-
margin-top: clamp(22px, 3vw, 30px);
|
|
312
|
-
}
|
|
313
316
|
.mt-\[clamp\(22px\,4vw\,36px\)\] {
|
|
314
317
|
margin-top: clamp(22px, 4vw, 36px);
|
|
315
318
|
}
|
|
316
319
|
.mt-\[clamp\(24px\,4vw\,44px\)\] {
|
|
317
320
|
margin-top: clamp(24px, 4vw, 44px);
|
|
318
321
|
}
|
|
322
|
+
.mt-\[clamp\(26px\,3\.5vw\,36px\)\] {
|
|
323
|
+
margin-top: clamp(26px, 3.5vw, 36px);
|
|
324
|
+
}
|
|
319
325
|
.mt-\[clamp\(26px\,4vw\,44px\)\] {
|
|
320
326
|
margin-top: clamp(26px, 4vw, 44px);
|
|
321
327
|
}
|
|
322
328
|
.mt-\[clamp\(28px\,5vw\,56px\)\] {
|
|
323
329
|
margin-top: clamp(28px, 5vw, 56px);
|
|
324
330
|
}
|
|
331
|
+
.mt-\[clamp\(30px\,5vw\,54px\)\] {
|
|
332
|
+
margin-top: clamp(30px, 5vw, 54px);
|
|
333
|
+
}
|
|
325
334
|
.mt-\[clamp\(40px\,6vw\,72px\)\] {
|
|
326
335
|
margin-top: clamp(40px, 6vw, 72px);
|
|
327
336
|
}
|
|
@@ -405,13 +414,17 @@
|
|
|
405
414
|
width: 34px;
|
|
406
415
|
height: 34px;
|
|
407
416
|
}
|
|
417
|
+
.size-\[38px\] {
|
|
418
|
+
width: 38px;
|
|
419
|
+
height: 38px;
|
|
420
|
+
}
|
|
408
421
|
.size-\[42px\] {
|
|
409
422
|
width: 42px;
|
|
410
423
|
height: 42px;
|
|
411
424
|
}
|
|
412
|
-
.size-\[
|
|
413
|
-
width:
|
|
414
|
-
height:
|
|
425
|
+
.size-\[248px\] {
|
|
426
|
+
width: 248px;
|
|
427
|
+
height: 248px;
|
|
415
428
|
}
|
|
416
429
|
.size-\[var\(--ctl\)\] {
|
|
417
430
|
width: var(--ctl);
|
|
@@ -516,12 +529,21 @@
|
|
|
516
529
|
.w-full {
|
|
517
530
|
width: 100%;
|
|
518
531
|
}
|
|
532
|
+
.max-w-\[18ch\] {
|
|
533
|
+
max-width: 18ch;
|
|
534
|
+
}
|
|
519
535
|
.max-w-\[20ch\] {
|
|
520
536
|
max-width: 20ch;
|
|
521
537
|
}
|
|
522
538
|
.max-w-\[30ch\] {
|
|
523
539
|
max-width: 30ch;
|
|
524
540
|
}
|
|
541
|
+
.max-w-\[48ch\] {
|
|
542
|
+
max-width: 48ch;
|
|
543
|
+
}
|
|
544
|
+
.max-w-\[54ch\] {
|
|
545
|
+
max-width: 54ch;
|
|
546
|
+
}
|
|
525
547
|
.max-w-\[58ch\] {
|
|
526
548
|
max-width: 58ch;
|
|
527
549
|
}
|
|
@@ -621,6 +643,9 @@
|
|
|
621
643
|
.place-items-center {
|
|
622
644
|
place-items: center;
|
|
623
645
|
}
|
|
646
|
+
.content-center {
|
|
647
|
+
align-content: center;
|
|
648
|
+
}
|
|
624
649
|
.content-start {
|
|
625
650
|
align-content: flex-start;
|
|
626
651
|
}
|
|
@@ -681,27 +706,33 @@
|
|
|
681
706
|
.gap-\[clamp\(14px\,3vw\,32px\)\] {
|
|
682
707
|
gap: clamp(14px, 3vw, 32px);
|
|
683
708
|
}
|
|
684
|
-
.gap-\[clamp\(24px\,5vw\,48px\)\] {
|
|
685
|
-
gap: clamp(24px, 5vw, 48px);
|
|
686
|
-
}
|
|
687
709
|
.gap-\[clamp\(24px\,5vw\,64px\)\] {
|
|
688
710
|
gap: clamp(24px, 5vw, 64px);
|
|
689
711
|
}
|
|
690
712
|
.gap-\[clamp\(28px\,6vw\,72px\)\] {
|
|
691
713
|
gap: clamp(28px, 6vw, 72px);
|
|
692
714
|
}
|
|
715
|
+
.gap-\[clamp\(32px\,5vw\,64px\)\] {
|
|
716
|
+
gap: clamp(32px, 5vw, 64px);
|
|
717
|
+
}
|
|
693
718
|
.gap-\[var\(--gutter\)\] {
|
|
694
719
|
gap: var(--gutter);
|
|
695
720
|
}
|
|
696
721
|
.gap-px {
|
|
697
722
|
gap: 1px;
|
|
698
723
|
}
|
|
724
|
+
.gap-x-4 {
|
|
725
|
+
column-gap: calc(var(--spacing) * 4);
|
|
726
|
+
}
|
|
699
727
|
.gap-x-5 {
|
|
700
728
|
column-gap: calc(var(--spacing) * 5);
|
|
701
729
|
}
|
|
702
730
|
.gap-y-2 {
|
|
703
731
|
row-gap: calc(var(--spacing) * 2);
|
|
704
732
|
}
|
|
733
|
+
.gap-y-3 {
|
|
734
|
+
row-gap: calc(var(--spacing) * 3);
|
|
735
|
+
}
|
|
705
736
|
.truncate {
|
|
706
737
|
overflow: hidden;
|
|
707
738
|
text-overflow: ellipsis;
|
|
@@ -740,6 +771,9 @@
|
|
|
740
771
|
.rounded-\[11px\] {
|
|
741
772
|
border-radius: 11px;
|
|
742
773
|
}
|
|
774
|
+
.rounded-\[12px\] {
|
|
775
|
+
border-radius: 12px;
|
|
776
|
+
}
|
|
743
777
|
.rounded-\[13px\] {
|
|
744
778
|
border-radius: 13px;
|
|
745
779
|
}
|
|
@@ -892,6 +926,9 @@
|
|
|
892
926
|
.p-6 {
|
|
893
927
|
padding: calc(var(--spacing) * 6);
|
|
894
928
|
}
|
|
929
|
+
.p-7 {
|
|
930
|
+
padding: calc(var(--spacing) * 7);
|
|
931
|
+
}
|
|
895
932
|
.p-\[18px\] {
|
|
896
933
|
padding: 18px;
|
|
897
934
|
}
|
|
@@ -979,8 +1016,8 @@
|
|
|
979
1016
|
.py-\[clamp\(28px\,6vw\,56px\)\] {
|
|
980
1017
|
padding-block: clamp(28px, 6vw, 56px);
|
|
981
1018
|
}
|
|
982
|
-
.py-\[clamp\(
|
|
983
|
-
padding-block: clamp(
|
|
1019
|
+
.py-\[clamp\(44px\,8vw\,88px\)\] {
|
|
1020
|
+
padding-block: clamp(44px, 8vw, 88px);
|
|
984
1021
|
}
|
|
985
1022
|
.py-\[var\(--band-pad\)\] {
|
|
986
1023
|
padding-block: var(--band-pad);
|
|
@@ -1057,6 +1094,9 @@
|
|
|
1057
1094
|
.pb-10 {
|
|
1058
1095
|
padding-bottom: calc(var(--spacing) * 10);
|
|
1059
1096
|
}
|
|
1097
|
+
.pb-\[var\(--margin\)\] {
|
|
1098
|
+
padding-bottom: var(--margin);
|
|
1099
|
+
}
|
|
1060
1100
|
.text-center {
|
|
1061
1101
|
text-align: center;
|
|
1062
1102
|
}
|
|
@@ -1147,14 +1187,14 @@
|
|
|
1147
1187
|
--tw-tracking: -0.02em;
|
|
1148
1188
|
letter-spacing: -0.02em;
|
|
1149
1189
|
}
|
|
1150
|
-
.tracking-\[-0\.03em\] {
|
|
1151
|
-
--tw-tracking: -0.03em;
|
|
1152
|
-
letter-spacing: -0.03em;
|
|
1153
|
-
}
|
|
1154
1190
|
.tracking-\[-0\.025em\] {
|
|
1155
1191
|
--tw-tracking: -0.025em;
|
|
1156
1192
|
letter-spacing: -0.025em;
|
|
1157
1193
|
}
|
|
1194
|
+
.tracking-\[-0\.035em\] {
|
|
1195
|
+
--tw-tracking: -0.035em;
|
|
1196
|
+
letter-spacing: -0.035em;
|
|
1197
|
+
}
|
|
1158
1198
|
.tracking-\[0\.08em\] {
|
|
1159
1199
|
--tw-tracking: 0.08em;
|
|
1160
1200
|
letter-spacing: 0.08em;
|
|
@@ -1710,6 +1750,10 @@
|
|
|
1710
1750
|
width: calc(var(--spacing) * 4);
|
|
1711
1751
|
height: calc(var(--spacing) * 4);
|
|
1712
1752
|
}
|
|
1753
|
+
.\[\&_svg\]\:size-\[19px\] svg {
|
|
1754
|
+
width: 19px;
|
|
1755
|
+
height: 19px;
|
|
1756
|
+
}
|
|
1713
1757
|
.\[\&_svg\]\:size-\[21px\] svg {
|
|
1714
1758
|
width: 21px;
|
|
1715
1759
|
height: 21px;
|
|
@@ -1992,14 +2036,14 @@
|
|
|
1992
2036
|
color-scheme: light;
|
|
1993
2037
|
}
|
|
1994
2038
|
:root[data-theme="dark"] {
|
|
1995
|
-
--void: #
|
|
1996
|
-
--deck: #
|
|
1997
|
-
--deck-2: #
|
|
2039
|
+
--void: #050b08;
|
|
2040
|
+
--deck: #12211a;
|
|
2041
|
+
--deck-2: #1b2f24;
|
|
1998
2042
|
--ink: #e7f0ea;
|
|
1999
2043
|
--ink-2: #a7bbae;
|
|
2000
2044
|
--ink-3: #85978a;
|
|
2001
|
-
--orbit: #
|
|
2002
|
-
--orbit-hard: #
|
|
2045
|
+
--orbit: #2e4437;
|
|
2046
|
+
--orbit-hard: #3f5c49;
|
|
2003
2047
|
--jade: #4ad69a;
|
|
2004
2048
|
--jade-deep: #6ee6b0;
|
|
2005
2049
|
--on-jade: #04120b;
|
|
@@ -93,14 +93,14 @@
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
:root[data-theme="dark"] {
|
|
96
|
-
--void: #
|
|
97
|
-
--deck: #
|
|
98
|
-
--deck-2: #
|
|
96
|
+
--void: #050b08;
|
|
97
|
+
--deck: #12211a;
|
|
98
|
+
--deck-2: #1b2f24;
|
|
99
99
|
--ink: #e7f0ea;
|
|
100
100
|
--ink-2: #a7bbae;
|
|
101
101
|
--ink-3: #85978a;
|
|
102
|
-
--orbit: #
|
|
103
|
-
--orbit-hard: #
|
|
102
|
+
--orbit: #2e4437;
|
|
103
|
+
--orbit-hard: #3f5c49;
|
|
104
104
|
--jade: #4ad69a;
|
|
105
105
|
--jade-deep: #6ee6b0;
|
|
106
106
|
--on-jade: #04120b;
|
package/mevebu/libs/js/core.js
CHANGED
|
@@ -743,7 +743,7 @@ export function blank(iconName, text) {
|
|
|
743
743
|
// ---------- version ----------
|
|
744
744
|
|
|
745
745
|
// Kept in one place. The CLI reads the same value from package.json.
|
|
746
|
-
export const VERSION = "1.
|
|
746
|
+
export const VERSION = "1.5.1";
|
|
747
747
|
export const PACKAGE_NAME = "mevebu";
|
|
748
748
|
export const REPO_SLUG = "mevebu/mevebu";
|
|
749
749
|
|
|
@@ -763,7 +763,14 @@ async function getJson(url, timeout) {
|
|
|
763
763
|
const controller = new AbortController();
|
|
764
764
|
const timer = setTimeout(() => controller.abort(), timeout);
|
|
765
765
|
try {
|
|
766
|
-
|
|
766
|
+
// The registry answers `/latest` with `max-age=300`, so a cached reply would
|
|
767
|
+
// keep reporting the version from before a publish for five minutes. A
|
|
768
|
+
// version check is worthless when it is stale, so it never reads the cache.
|
|
769
|
+
const response = await fetch(url, {
|
|
770
|
+
signal: controller.signal,
|
|
771
|
+
cache: "no-store",
|
|
772
|
+
headers: { accept: "application/json" },
|
|
773
|
+
});
|
|
767
774
|
if (!response.ok) return null;
|
|
768
775
|
return await response.json();
|
|
769
776
|
} catch {
|