@wildwinter/app-shell 0.47.0 → 0.48.0

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.
Files changed (45) hide show
  1. package/dist/{chunk-FPXEQKWM.js → chunk-62KWJPRP.js} +4 -4
  2. package/dist/{chunk-FPXEQKWM.js.map → chunk-62KWJPRP.js.map} +1 -1
  3. package/dist/{chunk-NKL6DNBZ.js → chunk-C245WRPF.js} +4 -4
  4. package/dist/{chunk-NKL6DNBZ.js.map → chunk-C245WRPF.js.map} +1 -1
  5. package/dist/{chunk-IFWLNIBR.js → chunk-CRUILFAT.js} +18 -4
  6. package/dist/chunk-CRUILFAT.js.map +1 -0
  7. package/dist/{chunk-5SQHL4YV.js → chunk-OMG6A5YB.js} +3 -3
  8. package/dist/{chunk-5SQHL4YV.js.map → chunk-OMG6A5YB.js.map} +1 -1
  9. package/dist/{chunk-XXDJCOXN.js → chunk-UQTUCOGV.js} +3 -3
  10. package/dist/{chunk-XXDJCOXN.js.map → chunk-UQTUCOGV.js.map} +1 -1
  11. package/dist/{chunk-XR4DRDMA.js → chunk-VXEFIL43.js} +3 -3
  12. package/dist/{chunk-XR4DRDMA.js.map → chunk-VXEFIL43.js.map} +1 -1
  13. package/dist/{chunk-QLVBKME7.js → chunk-W4WC4FO5.js} +70 -26
  14. package/dist/chunk-W4WC4FO5.js.map +1 -0
  15. package/dist/{chunk-IK3LWBQL.js → chunk-XSS7KM6F.js} +4 -4
  16. package/dist/{chunk-IK3LWBQL.js.map → chunk-XSS7KM6F.js.map} +1 -1
  17. package/dist/context-menu.cjs.map +1 -1
  18. package/dist/context-menu.js +2 -2
  19. package/dist/dialog.cjs.map +1 -1
  20. package/dist/dialog.js +2 -2
  21. package/dist/index.cjs +83 -25
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +21 -5
  24. package/dist/index.d.ts +21 -5
  25. package/dist/index.js +10 -10
  26. package/dist/kit-gallery.cjs.map +1 -1
  27. package/dist/kit-gallery.js +3 -3
  28. package/dist/link-status.cjs.map +1 -1
  29. package/dist/link-status.js +2 -2
  30. package/dist/{property-list-5mS4J2uy.d.cts → property-list-BgZlkcbz.d.cts} +11 -0
  31. package/dist/{property-list-5mS4J2uy.d.ts → property-list-BgZlkcbz.d.ts} +11 -0
  32. package/dist/property-list.cjs +83 -25
  33. package/dist/property-list.cjs.map +1 -1
  34. package/dist/property-list.d.cts +1 -1
  35. package/dist/property-list.d.ts +1 -1
  36. package/dist/property-list.js +2 -2
  37. package/dist/settings.css +24 -0
  38. package/dist/settings.css.map +1 -1
  39. package/dist/updater-view.cjs.map +1 -1
  40. package/dist/updater-view.js +3 -3
  41. package/dist/welcome.cjs.map +1 -1
  42. package/dist/welcome.js +4 -4
  43. package/package.json +1 -1
  44. package/dist/chunk-IFWLNIBR.js.map +0 -1
  45. package/dist/chunk-QLVBKME7.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -464,7 +464,7 @@ function tagChips(holder, onChange) {
464
464
  wrap.append(input);
465
465
  return wrap;
466
466
  }
467
- function stageChips(holder, onChange) {
467
+ function stageChips(holder, onChange, opts = {}) {
468
468
  const wrap = el("div", "shell-tags shell-stages");
469
469
  const input = el("input", "shell-tag-input");
470
470
  input.type = "text";
@@ -479,35 +479,79 @@ function stageChips(holder, onChange) {
479
479
  b.addEventListener("click", onClick);
480
480
  return b;
481
481
  };
482
+ const nameLabel = (chip2, v, i) => {
483
+ const label2 = el("span", "shell-tag-label", `${i + 1}. ${v}`);
484
+ label2.setAttribute("role", "button");
485
+ label2.tabIndex = 0;
486
+ label2.dataset["tip"] = `Rename ${v}`;
487
+ const edit = () => {
488
+ const field = el("input", "shell-tag-input shell-stage-rename");
489
+ field.type = "text";
490
+ field.value = v;
491
+ field.spellcheck = false;
492
+ field.setAttribute("aria-label", `Rename ${v}`);
493
+ let done = false;
494
+ const finish = (keep) => {
495
+ if (done) return;
496
+ done = true;
497
+ const to = field.value.trim();
498
+ const stages = holder.stages ?? [];
499
+ if (keep && to !== "" && to !== v && !stages.includes(to)) {
500
+ stages[stages.indexOf(v)] = to;
501
+ rebuild();
502
+ if (opts.onRename) opts.onRename(v, to);
503
+ else onChange?.();
504
+ } else {
505
+ rebuild();
506
+ }
507
+ };
508
+ field.addEventListener("keydown", (e) => {
509
+ if (e.key === "Enter") {
510
+ e.preventDefault();
511
+ finish(true);
512
+ } else if (e.key === "Escape") {
513
+ e.preventDefault();
514
+ e.stopPropagation();
515
+ finish(false);
516
+ }
517
+ });
518
+ field.addEventListener("blur", () => finish(true));
519
+ label2.replaceWith(field);
520
+ chip2.classList.add("editing");
521
+ field.focus();
522
+ field.select();
523
+ };
524
+ label2.addEventListener("click", (e) => {
525
+ e.preventDefault();
526
+ edit();
527
+ });
528
+ label2.addEventListener("keydown", (e) => {
529
+ if (e.key === "Enter" || e.key === " ") {
530
+ e.preventDefault();
531
+ edit();
532
+ }
533
+ });
534
+ return label2;
535
+ };
536
+ const moved = () => {
537
+ rebuild();
538
+ onChange?.();
539
+ opts.onReorder?.();
540
+ };
482
541
  const rebuild = () => {
483
542
  for (const c of Array.from(wrap.children)) if (c !== input) c.remove();
484
543
  const stages = holder.stages ?? [];
485
544
  stages.forEach((v, i) => {
486
- const chip2 = el("span", "shell-tag", `${i + 1}. ${v}`);
545
+ const chip2 = el("span", "shell-tag");
487
546
  chip2.dataset["stage"] = v;
488
547
  chip2.append(
489
- control(
490
- "back",
491
- `Move ${v} earlier`,
492
- i === 0,
493
- () => {
494
- if (moveItem(stages, i, -1)) {
495
- rebuild();
496
- onChange?.();
497
- }
498
- }
499
- ),
500
- control(
501
- "forward",
502
- `Move ${v} later`,
503
- i === stages.length - 1,
504
- () => {
505
- if (moveItem(stages, i, 1)) {
506
- rebuild();
507
- onChange?.();
508
- }
509
- }
510
- )
548
+ nameLabel(chip2, v, i),
549
+ control("back", `Move ${v} earlier`, i === 0, () => {
550
+ if (moveItem(stages, i, -1)) moved();
551
+ }),
552
+ control("forward", `Move ${v} later`, i === stages.length - 1, () => {
553
+ if (moveItem(stages, i, 1)) moved();
554
+ })
511
555
  );
512
556
  const x = el("button", "shell-tag-x", iconNode("close", CHIP_ICON));
513
557
  x.type = "button";
@@ -3193,7 +3237,21 @@ function mountPropertyList(host, decls, opts = {}) {
3193
3237
  }, false, true);
3194
3238
  const details = keep(opts.extraDetails?.(p, i));
3195
3239
  if (p.type === "enum" || p.type === "flags") details.push(labelled("Values", tagChips(p, refreshDefault)));
3196
- if (p.type === "quality") details.push(labelled("Stages (in order)", stageChips(p, refreshDefault)));
3240
+ if (p.type === "quality") {
3241
+ const note = el("p", "shell-stage-note");
3242
+ const stages = stageChips(p, refreshDefault, {
3243
+ onRename: (from, to) => {
3244
+ if (p.default === from) p.default = to;
3245
+ const fresh = defaultControl(p, changed, opts);
3246
+ def.replaceWith(fresh);
3247
+ def = fresh;
3248
+ if (opts.onStageRename) opts.onStageRename(p, from, to);
3249
+ else changed();
3250
+ },
3251
+ onReorder: () => opts.onStageReorder?.(p, note)
3252
+ });
3253
+ details.push(labelled("Stages (in order)", stages), note);
3254
+ }
3197
3255
  if (opts.purpose !== false) {
3198
3256
  const purpose = el("input", "field set-purpose");
3199
3257
  purpose.type = "text";