@shwfed/config 3.0.4 → 3.0.7

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 (87) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/buttons/2026-04-21/com.shwfed.actions.button.navigation/runtime.vue +4 -10
  3. package/dist/runtime/components/actions/buttons/2026-05-21/com.shwfed.actions.button.http.download/schema.d.ts +1 -1
  4. package/dist/runtime/components/actions/buttons/2026-05-21/com.shwfed.actions.button.http.download/schema.js +2 -2
  5. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/runtime.vue +1 -1
  6. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/schema.d.ts +4 -2
  7. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/schema.js +1 -1
  8. package/dist/runtime/components/actions/config.vue +109 -3
  9. package/dist/runtime/components/actions/utils/steps.d.ts +1 -1
  10. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +74 -74
  11. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +74 -74
  12. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +74 -74
  13. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +74 -74
  14. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +37 -37
  15. package/dist/runtime/components/config/history-picker.vue +6 -4
  16. package/dist/runtime/components/config/index.vue +25 -0
  17. package/dist/runtime/components/config/prune-dialog.d.vue.ts +14 -0
  18. package/dist/runtime/components/config/prune-dialog.vue +83 -0
  19. package/dist/runtime/components/config/prune-dialog.vue.d.ts +14 -0
  20. package/dist/runtime/components/config/schema.js +2 -2
  21. package/dist/runtime/components/config/use-editor.d.ts +9 -0
  22. package/dist/runtime/components/config/use-editor.js +39 -11
  23. package/dist/runtime/components/config/utils/linkage.d.ts +8 -0
  24. package/dist/runtime/components/config/utils/linkage.js +7 -2
  25. package/dist/runtime/components/config/utils/prune.d.ts +68 -0
  26. package/dist/runtime/components/config/utils/prune.js +92 -0
  27. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.d.vue.ts +22 -22
  28. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.vue.d.ts +22 -22
  29. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.d.vue.ts +22 -22
  30. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.vue.d.ts +22 -22
  31. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/config.d.vue.ts +31 -0
  32. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/config.vue +191 -0
  33. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/config.vue.d.ts +31 -0
  34. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/expand.d.ts +49 -0
  35. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/expand.js +87 -0
  36. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/runtime.d.vue.ts +8 -0
  37. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/runtime.vue +72 -0
  38. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/runtime.vue.d.ts +8 -0
  39. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/schema.d.ts +59 -0
  40. package/dist/runtime/components/form/fields/2026-07-13/com.shwfed.form.field.dynamic/schema.js +139 -0
  41. package/dist/runtime/components/form/unit-config.vue +2 -2
  42. package/dist/runtime/components/form/utils/form-vars.d.ts +5 -15
  43. package/dist/runtime/components/form/utils/form-vars.js +12 -6
  44. package/dist/runtime/components/operations/2026-06-11/com.shwfed.operation.http.request.json/schema.js +2 -2
  45. package/dist/runtime/components/operations/2026-06-15/com.shwfed.operation.http.download/schema.js +2 -2
  46. package/dist/runtime/components/operations/2026-06-15/com.shwfed.operation.navigation/runtime.js +5 -11
  47. package/dist/runtime/components/operations/2026-06-15/com.shwfed.operation.navigation/schema.js +1 -1
  48. package/dist/runtime/components/operations/utils/resolve.d.ts +1 -1
  49. package/dist/runtime/components/operations/utils/step-vars.d.ts +4 -2
  50. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.select/runtime.vue +1 -21
  51. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.select/schema.d.ts +2 -0
  52. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.select/schema.js +16 -1
  53. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  54. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  55. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  56. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  57. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  58. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  59. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  60. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  61. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  62. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  63. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  64. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  65. package/dist/runtime/components/table/config.vue +2 -2
  66. package/dist/runtime/components/table/index.vue +15 -0
  67. package/dist/runtime/components/table/schema.d.ts +74 -74
  68. package/dist/runtime/components/table/utils/resolve.d.ts +26 -0
  69. package/dist/runtime/components/table/utils/resolve.js +2 -1
  70. package/dist/runtime/components/ui/expression-editor/picker-entries.js +1 -1
  71. package/dist/runtime/components/ui/expression-editor/step-chip-extension.js +1 -1
  72. package/dist/runtime/components/ui/expression-editor/step-refs.js +1 -1
  73. package/dist/runtime/share/clipboard.d.ts +15 -9
  74. package/dist/runtime/share/clipboard.js +22 -10
  75. package/dist/runtime/share/event-bus.js +2 -2
  76. package/dist/runtime/share/navigation.d.ts +1 -0
  77. package/dist/runtime/share/navigation.js +4 -0
  78. package/dist/runtime/utils/cel-context.d.ts +2 -2
  79. package/dist/runtime/vendor/cel-js/CLAUDE.md +7 -2
  80. package/dist/runtime/vendor/cel-js/PROMPT.md +27 -0
  81. package/dist/runtime/vendor/cel-js/lib/evaluator.js +2 -0
  82. package/dist/runtime/vendor/cel-js/lib/globals.d.ts +2 -0
  83. package/dist/runtime/vendor/cel-js/lib/globals.js +10 -0
  84. package/dist/runtime/vendor/cel-js/lib/map-builtins.d.ts +2 -0
  85. package/dist/runtime/vendor/cel-js/lib/map-builtins.js +80 -0
  86. package/dist/runtime/vendor/cel-js/lib/operators.js +2 -12
  87. package/package.json +1 -1
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shwfed",
3
3
  "configKey": "shwfed",
4
- "version": "3.0.4",
4
+ "version": "3.0.7",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { Effect } from "effect";
3
3
  import { navigateTo, useRouter } from "#app";
4
+ import { isAbsoluteUrl } from "../../../../../share/navigation";
4
5
  import { cel as _rawCel } from "../../../../../utils/cel";
5
6
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
6
7
  import ShwfedActionDefinition from "../../../components/definition.vue";
@@ -12,23 +13,16 @@ const props = defineProps({
12
13
  const router = useRouter();
13
14
  const inherited = injectCELContext();
14
15
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
15
- function isExternal(url) {
16
- try {
17
- return new URL(url, window.location.href).origin !== window.location.origin;
18
- } catch {
19
- return false;
20
- }
21
- }
22
16
  const effect = Effect.suspend(
23
17
  () => Effect.flatMap(
24
18
  $cel(props.config.url),
25
19
  (url) => Effect.promise(async () => {
26
- const external = isExternal(url);
20
+ const absolute = isAbsoluteUrl(url);
27
21
  if (props.config.mode === "_blank") {
28
- window.open(external ? url : router.resolve(url).href, "_blank");
22
+ window.open(absolute ? url : router.resolve(url).href, "_blank");
29
23
  return;
30
24
  }
31
- await navigateTo(url, { external });
25
+ await navigateTo(url, { external: absolute });
32
26
  })
33
27
  )
34
28
  );
@@ -5,7 +5,7 @@ export declare const compatibilityDate: "2026-05-21";
5
5
  export declare const metadata: {
6
6
  readonly name: "下载文件";
7
7
  readonly icon: "fluent:arrow-download-20-regular";
8
- readonly deprecated: "本按钮已废弃:改用「触发事件」按钮,其触发列表串联页面的「下载文件」操作;原两步式(先取凭据再下载)现为一个「发送请求」行后接一个引用 `steps[\"<步骤标识>\"]` 的「下载文件」行。";
8
+ readonly deprecated: "本按钮已废弃:改用「触发事件」按钮,其触发列表串联页面的「下载文件」操作;原两步式(先取凭据再下载)现为一个「发送请求」行后接一个引用 `steps[?\"<步骤标识>\"]` 的「下载文件」行。";
9
9
  };
10
10
  export declare const JSON_VAR: {
11
11
  readonly type: "dyn";
@@ -9,8 +9,8 @@ export const metadata = {
9
9
  icon: "fluent:arrow-download-20-regular",
10
10
  // No structured migrate target — designers rebuild downloads by hand. Use a
11
11
  // 触发事件 按钮,其触发列表串联页面的「下载文件」操作即可替代本按钮;原来的两步式
12
- // (先取凭据再下载)现为一个「发送请求」行后接一个引用 `steps["<步骤标识>"]` 的「下载文件」行。
13
- deprecated: '\u672C\u6309\u94AE\u5DF2\u5E9F\u5F03\uFF1A\u6539\u7528\u300C\u89E6\u53D1\u4E8B\u4EF6\u300D\u6309\u94AE\uFF0C\u5176\u89E6\u53D1\u5217\u8868\u4E32\u8054\u9875\u9762\u7684\u300C\u4E0B\u8F7D\u6587\u4EF6\u300D\u64CD\u4F5C\uFF1B\u539F\u4E24\u6B65\u5F0F\uFF08\u5148\u53D6\u51ED\u636E\u518D\u4E0B\u8F7D\uFF09\u73B0\u4E3A\u4E00\u4E2A\u300C\u53D1\u9001\u8BF7\u6C42\u300D\u884C\u540E\u63A5\u4E00\u4E2A\u5F15\u7528 `steps["<\u6B65\u9AA4\u6807\u8BC6>"]` \u7684\u300C\u4E0B\u8F7D\u6587\u4EF6\u300D\u884C\u3002'
12
+ // (先取凭据再下载)现为一个「发送请求」行后接一个引用 `steps[?"<步骤标识>"]` 的「下载文件」行。
13
+ deprecated: '\u672C\u6309\u94AE\u5DF2\u5E9F\u5F03\uFF1A\u6539\u7528\u300C\u89E6\u53D1\u4E8B\u4EF6\u300D\u6309\u94AE\uFF0C\u5176\u89E6\u53D1\u5217\u8868\u4E32\u8054\u9875\u9762\u7684\u300C\u4E0B\u8F7D\u6587\u4EF6\u300D\u64CD\u4F5C\uFF1B\u539F\u4E24\u6B65\u5F0F\uFF08\u5148\u53D6\u51ED\u636E\u518D\u4E0B\u8F7D\uFF09\u73B0\u4E3A\u4E00\u4E2A\u300C\u53D1\u9001\u8BF7\u6C42\u300D\u884C\u540E\u63A5\u4E00\u4E2A\u5F15\u7528 `steps[?"<\u6B65\u9AA4\u6807\u8BC6>"]` \u7684\u300C\u4E0B\u8F7D\u6587\u4EF6\u300D\u884C\u3002'
14
14
  };
15
15
  export const JSON_VAR = {
16
16
  type: "dyn",
@@ -53,7 +53,7 @@ const effect = Effect.suspend(() => {
53
53
  formState.setAt(path, merged);
54
54
  }).pipe(
55
55
  // A row that blows up here — an expression that parses but throws on
56
- // this click's data (`steps["r1"].json.rate` when the response was
56
+ // this click's data (`steps[?"r1"].json.rate` when the response was
57
57
  // null), a path dot-prop cannot descend — is a *config* bug, not a
58
58
  // condition the end user can act on. So: no toast, but never silent
59
59
  // either. The failure otherwise reaches only the action runner's
@@ -35,8 +35,10 @@ export type WriteValue = Value['writes'][number];
35
35
  * Adopts 2026-06-25 values, whose「写入前」was a `requests` list of bare
36
36
  * HTTP-request expressions. Each row becomes one「发送请求」op trigger on the
37
37
  * page target — the op the button now dispatches instead of fetching itself.
38
- * The row's `id` is carried over verbatim, so every `steps["<id>"]` already
39
- * written into a write value keeps resolving; the op publishes its parsed
38
+ * The row's `id` is carried over verbatim, so every step reference already
39
+ * written into a write value keeps resolving the strict `steps["<id>"]` those
40
+ * values carry as much as the optional `steps[?"<id>"]` the picker writes today,
41
+ * both addressing the same id; the op publishes its parsed
40
42
  * response under that same id and halts the chain on failure, which is what the
41
43
  * old inline requests did.
42
44
  *
@@ -36,7 +36,7 @@ export function schema(configure) {
36
36
  将取消本次写入。
37
37
 
38
38
  发布输出的操作(如「发送请求」)可在「写入值」与「写入后」中经
39
- \`steps["<第 N 步>"]\` 引用其输出。
39
+ \`steps[?"<第 N 步>"]\` 引用其输出。
40
40
  `
41
41
  })),
42
42
  writes: Schema.Array(Write).annotations({
@@ -12,6 +12,7 @@ import {
12
12
  import { Environment } from "../../vendor/cel-js/lib/index";
13
13
  import { cel as rawCel } from "../../utils/cel";
14
14
  import { celBindings, injectCELContext, provideCELContext } from "../../utils/cel-context";
15
+ import { readClip, reidFragment, writeClip } from "../../share/clipboard";
15
16
  import { BUTTONS, findButton, ITEMS, findItem } from "./utils/resolve";
16
17
  import { SIDEBAR_TAKEOVER_KEY } from "../sidebar-takeover";
17
18
  import { BREADCRUMB_EXTENSION_KEY } from "../config/breadcrumb-extension";
@@ -175,6 +176,9 @@ const editingStyle = computed({
175
176
  }
176
177
  });
177
178
  const selected = ref({ kind: "general" });
179
+ const pickedItemIds = ref([]);
180
+ const pickedItemIdSet = computed(() => new Set(pickedItemIds.value));
181
+ const pickAnchor = ref(null);
178
182
  function itemsOfGroup(groupId) {
179
183
  return editingItems.value.filter((it) => it.groupId === groupId);
180
184
  }
@@ -528,12 +532,107 @@ function selectGeneral() {
528
532
  function selectGroup(id) {
529
533
  selected.value = { kind: "group", id };
530
534
  }
531
- function selectItem(id) {
535
+ const orderedItemIds = computed(
536
+ () => editingGroups.value.flatMap((g) => itemsOfGroup(g.id).map((it) => it.id))
537
+ );
538
+ function itemRange(a, b) {
539
+ const ord = orderedItemIds.value;
540
+ const ia = ord.indexOf(a);
541
+ const ib = ord.indexOf(b);
542
+ if (ia === -1 || ib === -1) return [b];
543
+ const [lo, hi] = ia <= ib ? [ia, ib] : [ib, ia];
544
+ return ord.slice(lo, hi + 1);
545
+ }
546
+ function selectItem(id, e) {
547
+ const meta = !!e && (e.metaKey || e.ctrlKey);
548
+ if (meta && e.shiftKey) {
549
+ const range = pickAnchor.value ? itemRange(pickAnchor.value, id) : [id];
550
+ const set = new Set(pickedItemIds.value);
551
+ for (const iid of range) set.add(iid);
552
+ pickedItemIds.value = orderedItemIds.value.filter((iid) => set.has(iid));
553
+ pickAnchor.value = id;
554
+ return;
555
+ }
556
+ if (meta) {
557
+ const set = new Set(pickedItemIds.value);
558
+ if (set.has(id)) set.delete(id);
559
+ else set.add(id);
560
+ pickedItemIds.value = orderedItemIds.value.filter((iid) => set.has(iid));
561
+ pickAnchor.value = id;
562
+ return;
563
+ }
564
+ pickedItemIds.value = [];
565
+ pickAnchor.value = null;
532
566
  selected.value = { kind: "item", id };
533
567
  }
534
568
  function selectSub(id) {
535
569
  selected.value = { kind: "sub", id };
536
570
  }
571
+ watch(selected, (s) => {
572
+ if (s?.kind !== "item") {
573
+ pickedItemIds.value = [];
574
+ pickAnchor.value = null;
575
+ }
576
+ });
577
+ async function copyItems() {
578
+ if (pickedItemIds.value.length === 0) return;
579
+ const set = pickedItemIdSet.value;
580
+ const items = orderedItemIds.value.filter((id) => set.has(id)).map((id) => findItemNode(id)).filter((it) => !!it);
581
+ if (items.length === 0) return;
582
+ const groupIds = new Set(items.map((it) => it.groupId));
583
+ const groups = editingGroups.value.filter((g) => groupIds.has(g.id));
584
+ const ok = await writeClip("actions", { items, groups });
585
+ if (ok) toast.success(`\u5DF2\u590D\u5236 ${items.length} \u4E2A\u6309\u94AE`);
586
+ else toast.error("\u590D\u5236\u5931\u8D25");
587
+ }
588
+ async function pasteItems() {
589
+ const clip = await readClip();
590
+ if (!clip || clip.surface !== "actions") return;
591
+ const { items, groups } = reidFragment(clip);
592
+ const pastedItems = items;
593
+ if (pastedItems.length === 0) return;
594
+ const w = snapshot();
595
+ const pastedGroups = [...groups ?? []];
596
+ const known = new Set(pastedGroups.map((g) => g.id));
597
+ const repaired = pastedItems.map((it) => {
598
+ if (known.has(it.groupId)) return it;
599
+ const group = { id: crypto.randomUUID() };
600
+ pastedGroups.push(group);
601
+ known.add(group.id);
602
+ return { ...it, groupId: group.id };
603
+ });
604
+ w.groups = [...w.groups, ...pastedGroups];
605
+ w.items = sortByGroupOrder(w.groups, [...w.items, ...repaired]);
606
+ commit(w);
607
+ const ids = repaired.map((it) => it.id);
608
+ pickedItemIds.value = ids;
609
+ pickAnchor.value = ids[ids.length - 1] ?? null;
610
+ selected.value = { kind: "item", id: ids[ids.length - 1] };
611
+ toast.success(`\u5DF2\u7C98\u8D34 ${repaired.length} \u4E2A\u6309\u94AE`);
612
+ }
613
+ function isTextInput(el) {
614
+ if (!(el instanceof HTMLElement)) return false;
615
+ const tag = el.tagName;
616
+ return tag === "INPUT" || tag === "TEXTAREA" || el.isContentEditable;
617
+ }
618
+ function onItemListKeydown(e) {
619
+ if (isTextInput(e.target)) return;
620
+ const mod = e.metaKey || e.ctrlKey;
621
+ if (!mod || e.shiftKey || e.altKey) return;
622
+ const key = e.key.toLowerCase();
623
+ if (key === "c") {
624
+ if (pickedItemIds.value.length === 0) return;
625
+ const sel = window.getSelection();
626
+ if (sel && !sel.isCollapsed) return;
627
+ e.preventDefault();
628
+ e.stopPropagation();
629
+ void copyItems();
630
+ } else if (key === "v") {
631
+ e.preventDefault();
632
+ e.stopPropagation();
633
+ void pasteItems();
634
+ }
635
+ }
537
636
  function isSourceDropdown(src) {
538
637
  if (src.kind !== ITEM_DRAG_KIND) return false;
539
638
  const it = editingItems.value.find((i) => i.id === src.id);
@@ -795,6 +894,10 @@ function wrapActionItemInDropdown(itemId) {
795
894
  selected.value = { kind: "item", id: dropdown.id };
796
895
  }
797
896
  function resolveSelection() {
897
+ const live = new Set(editingItems.value.map((it) => it.id));
898
+ if (pickedItemIds.value.some((id) => !live.has(id))) {
899
+ pickedItemIds.value = pickedItemIds.value.filter((id) => live.has(id));
900
+ }
798
901
  const s = selected.value;
799
902
  if (!s || s.kind === "general") return;
800
903
  if (s.kind === "group" && findGroup(s.id)) return;
@@ -959,7 +1062,10 @@ const newGroupZoneId = (insertIndex) => `new-group-${insertIndex}`;
959
1062
  :disabled="!outerTakeoverTarget"
960
1063
  >
961
1064
  <div
1065
+ class="outline-none"
962
1066
  :class="outerTakeoverTarget ? 'flex flex-1 flex-col gap-2 min-h-0' : 'flex gap-2 w-72 shrink-0 flex-col'"
1067
+ tabindex="-1"
1068
+ @keydown="onItemListKeydown"
963
1069
  >
964
1070
  <div
965
1071
  v-if="selectedDrillableAction"
@@ -1040,9 +1146,9 @@ const newGroupZoneId = (insertIndex) => `new-group-${insertIndex}`;
1040
1146
  <div
1041
1147
  class="row group item-row pl-5"
1042
1148
  :class="[
1043
- selected?.kind === 'item' && selected.id === item.id ? 'bg-[color-mix(in_srgb,var(--primary)_10%,white)] text-(--primary)' : 'text-zinc-600 hover:bg-zinc-50'
1149
+ selected?.kind === 'item' && selected.id === item.id ? 'bg-[color-mix(in_srgb,var(--primary)_10%,white)] text-(--primary)' : pickedItemIdSet.has(item.id) ? 'bg-zinc-100 text-zinc-700' : 'text-zinc-600 hover:bg-zinc-50'
1044
1150
  ]"
1045
- @click.stop="selectItem(item.id)"
1151
+ @click.stop="selectItem(item.id, $event)"
1046
1152
  >
1047
1153
  <Icon
1048
1154
  icon="fluent:re-order-dots-vertical-20-regular"
@@ -1,7 +1,7 @@
1
1
  import type { TriggerValue } from '../../../share/event-bus.js';
2
2
  /**
3
3
  * One row of a trigger list that publishes a chain-step output — the rows a
4
- * later expression can address as `steps["<id>"]`.
4
+ * later expression can address as `steps[?"<id>"]`.
5
5
  *
6
6
  * A row qualifies on two counts, neither of them a type check: its operation's
7
7
  * registry `metadata.output` marks it as publishing (so a new publishing op
@@ -34,40 +34,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
34
34
  readonly message: string;
35
35
  }[]] | undefined;
36
36
  }[];
37
- readonly query?: {
38
- readonly style?: string | undefined;
39
- readonly id?: string | undefined;
40
- readonly initial?: {
41
- readonly data: string;
42
- readonly request?: string | undefined;
43
- } | undefined;
44
- readonly displayName?: string | undefined;
45
- readonly kind: "shwfed.component.form";
46
- readonly fields: readonly any[];
47
- readonly layouts: readonly {
48
- readonly name: string;
49
- readonly layout: {
50
- readonly style?: string | undefined;
51
- readonly columns: number;
52
- readonly gap?: number | undefined;
53
- readonly rows?: number | undefined;
54
- readonly placements: {
55
- readonly [x: string]: {
56
- readonly area: readonly [readonly [number, number], readonly [number, number]];
57
- readonly v?: "stretch" | "center" | "end" | "start" | undefined;
58
- readonly h?: "stretch" | "center" | "end" | "start" | undefined;
59
- };
60
- };
61
- };
62
- readonly media?: string | undefined;
63
- }[];
64
- readonly readonly?: string | undefined;
65
- } | undefined;
66
- readonly dataSource?: {
67
- readonly data: string;
68
- readonly total?: string | undefined;
69
- readonly request?: string | undefined;
70
- } | undefined;
71
37
  readonly actions?: {
72
38
  readonly size: "default" | "sm" | "xs";
73
39
  readonly style?: string | undefined;
@@ -135,6 +101,40 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
135
101
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
136
102
  }[];
137
103
  } | undefined;
104
+ readonly query?: {
105
+ readonly style?: string | undefined;
106
+ readonly id?: string | undefined;
107
+ readonly initial?: {
108
+ readonly data: string;
109
+ readonly request?: string | undefined;
110
+ } | undefined;
111
+ readonly displayName?: string | undefined;
112
+ readonly kind: "shwfed.component.form";
113
+ readonly fields: readonly any[];
114
+ readonly layouts: readonly {
115
+ readonly name: string;
116
+ readonly layout: {
117
+ readonly style?: string | undefined;
118
+ readonly columns: number;
119
+ readonly gap?: number | undefined;
120
+ readonly rows?: number | undefined;
121
+ readonly placements: {
122
+ readonly [x: string]: {
123
+ readonly area: readonly [readonly [number, number], readonly [number, number]];
124
+ readonly v?: "stretch" | "center" | "end" | "start" | undefined;
125
+ readonly h?: "stretch" | "center" | "end" | "start" | undefined;
126
+ };
127
+ };
128
+ };
129
+ readonly media?: string | undefined;
130
+ }[];
131
+ readonly readonly?: string | undefined;
132
+ } | undefined;
133
+ readonly dataSource?: {
134
+ readonly data: string;
135
+ readonly total?: string | undefined;
136
+ readonly request?: string | undefined;
137
+ } | undefined;
138
138
  readonly bottomActions?: {
139
139
  readonly size: "default" | "sm" | "xs";
140
140
  readonly style?: string | undefined;
@@ -228,6 +228,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
228
228
  readonly expanded?: boolean | {
229
229
  readonly [x: string]: boolean;
230
230
  } | undefined;
231
+ readonly rowSelection?: {
232
+ readonly [x: string]: boolean;
233
+ } | undefined;
231
234
  readonly columnVisibility?: {
232
235
  readonly [x: string]: boolean;
233
236
  } | undefined;
@@ -248,9 +251,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
248
251
  readonly columnSizing?: {
249
252
  readonly [x: string]: number;
250
253
  } | undefined;
251
- readonly rowSelection?: {
252
- readonly [x: string]: boolean;
253
- } | undefined;
254
254
  } | undefined;
255
255
  };
256
256
  readonly compatibilityDate: "2026-05-06";
@@ -282,40 +282,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
282
282
  readonly message: string;
283
283
  }[]] | undefined;
284
284
  }[];
285
- readonly query?: {
286
- readonly style?: string | undefined;
287
- readonly id?: string | undefined;
288
- readonly initial?: {
289
- readonly data: string;
290
- readonly request?: string | undefined;
291
- } | undefined;
292
- readonly displayName?: string | undefined;
293
- readonly kind: "shwfed.component.form";
294
- readonly fields: readonly any[];
295
- readonly layouts: readonly {
296
- readonly name: string;
297
- readonly layout: {
298
- readonly style?: string | undefined;
299
- readonly columns: number;
300
- readonly gap?: number | undefined;
301
- readonly rows?: number | undefined;
302
- readonly placements: {
303
- readonly [x: string]: {
304
- readonly area: readonly [readonly [number, number], readonly [number, number]];
305
- readonly v?: "stretch" | "center" | "end" | "start" | undefined;
306
- readonly h?: "stretch" | "center" | "end" | "start" | undefined;
307
- };
308
- };
309
- };
310
- readonly media?: string | undefined;
311
- }[];
312
- readonly readonly?: string | undefined;
313
- } | undefined;
314
- readonly dataSource?: {
315
- readonly data: string;
316
- readonly total?: string | undefined;
317
- readonly request?: string | undefined;
318
- } | undefined;
319
285
  readonly actions?: {
320
286
  readonly size: "default" | "sm" | "xs";
321
287
  readonly style?: string | undefined;
@@ -383,6 +349,40 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
383
349
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
384
350
  }[];
385
351
  } | undefined;
352
+ readonly query?: {
353
+ readonly style?: string | undefined;
354
+ readonly id?: string | undefined;
355
+ readonly initial?: {
356
+ readonly data: string;
357
+ readonly request?: string | undefined;
358
+ } | undefined;
359
+ readonly displayName?: string | undefined;
360
+ readonly kind: "shwfed.component.form";
361
+ readonly fields: readonly any[];
362
+ readonly layouts: readonly {
363
+ readonly name: string;
364
+ readonly layout: {
365
+ readonly style?: string | undefined;
366
+ readonly columns: number;
367
+ readonly gap?: number | undefined;
368
+ readonly rows?: number | undefined;
369
+ readonly placements: {
370
+ readonly [x: string]: {
371
+ readonly area: readonly [readonly [number, number], readonly [number, number]];
372
+ readonly v?: "stretch" | "center" | "end" | "start" | undefined;
373
+ readonly h?: "stretch" | "center" | "end" | "start" | undefined;
374
+ };
375
+ };
376
+ };
377
+ readonly media?: string | undefined;
378
+ }[];
379
+ readonly readonly?: string | undefined;
380
+ } | undefined;
381
+ readonly dataSource?: {
382
+ readonly data: string;
383
+ readonly total?: string | undefined;
384
+ readonly request?: string | undefined;
385
+ } | undefined;
386
386
  readonly bottomActions?: {
387
387
  readonly size: "default" | "sm" | "xs";
388
388
  readonly style?: string | undefined;
@@ -476,6 +476,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
476
476
  readonly expanded?: boolean | {
477
477
  readonly [x: string]: boolean;
478
478
  } | undefined;
479
+ readonly rowSelection?: {
480
+ readonly [x: string]: boolean;
481
+ } | undefined;
479
482
  readonly columnVisibility?: {
480
483
  readonly [x: string]: boolean;
481
484
  } | undefined;
@@ -496,9 +499,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
496
499
  readonly columnSizing?: {
497
500
  readonly [x: string]: number;
498
501
  } | undefined;
499
- readonly rowSelection?: {
500
- readonly [x: string]: boolean;
501
- } | undefined;
502
502
  } | undefined;
503
503
  };
504
504
  readonly compatibilityDate: "2026-05-06";