@shwfed/config 3.0.2 → 3.0.3

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 (49) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/config.d.vue.ts +53 -0
  3. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/config.vue +174 -0
  4. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/config.vue.d.ts +53 -0
  5. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/runtime.d.vue.ts +8 -0
  6. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/runtime.vue +70 -0
  7. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/runtime.vue.d.ts +8 -0
  8. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/schema.d.ts +49 -0
  9. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/schema.js +90 -0
  10. package/dist/runtime/components/actions/components/triggers-field.d.vue.ts +9 -0
  11. package/dist/runtime/components/actions/components/triggers-field.vue +13 -15
  12. package/dist/runtime/components/actions/components/triggers-field.vue.d.ts +9 -0
  13. package/dist/runtime/components/actions/utils/steps.d.ts +26 -0
  14. package/dist/runtime/components/actions/utils/steps.js +9 -0
  15. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +68 -68
  16. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +68 -68
  17. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +68 -68
  18. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +68 -68
  19. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +34 -34
  20. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.vue +55 -51
  21. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.vue +54 -50
  22. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  23. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  24. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  25. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  26. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  27. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  28. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  29. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  30. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  31. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  32. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +52 -48
  33. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  34. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  35. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +51 -47
  36. package/dist/runtime/components/table/schema.d.ts +68 -68
  37. package/dist/runtime/components/ui/command/CommandList.d.vue.ts +2 -2
  38. package/dist/runtime/components/ui/command/CommandList.vue +12 -4
  39. package/dist/runtime/components/ui/command/CommandList.vue.d.ts +2 -2
  40. package/dist/runtime/components/ui/expression-editor/ExpressionEditor.vue +1 -1
  41. package/dist/runtime/components/ui/input-group/InputGroupCombobox.d.vue.ts +2 -2
  42. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue +6 -0
  43. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue.d.ts +2 -2
  44. package/dist/runtime/components/ui/scroll-area/ScrollArea.d.vue.ts +1 -0
  45. package/dist/runtime/components/ui/scroll-area/ScrollArea.vue +9 -3
  46. package/dist/runtime/components/ui/scroll-area/ScrollArea.vue.d.ts +1 -0
  47. package/dist/runtime/share/event-bus.d.ts +9 -1
  48. package/dist/runtime/share/event-bus.js +4 -4
  49. package/package.json +1 -1
@@ -12,6 +12,7 @@ import { fetchJsonOption } from "../../../../../share/request";
12
12
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
13
13
  import { Markdown } from "../../../../ui/markdown";
14
14
  import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
15
+ import { ScrollArea } from "../../../../ui/scroll-area";
15
16
  import { Skeleton } from "../../../../ui/skeleton";
16
17
  import { Tree as UiTree } from "../../../../ui/tree";
17
18
  import { useFormState } from "../../../../form/utils/state";
@@ -427,58 +428,61 @@ const hoveredTooltip = computed(() => {
427
428
  <Skeleton class="h-4 w-3/5" />
428
429
  </div>
429
430
 
430
- <UiTree
431
+ <ScrollArea
431
432
  v-else
432
- :roots="roots"
433
- :get-key="(w) => w.key"
434
- :get-children="getWrappedChildren"
435
- selection-mode="multi"
436
- :cascade="column.cascade ?? 'independent'"
437
- :model-value="displayKeys"
438
- :selectable="wrappedSelectable"
439
- :filter-predicate="filterPredicate"
440
- :filter-query="filterQuery"
441
- :initial-expanded="initialExpanded"
442
- :show-focused-row="false"
443
- :class="isDisabled ? 'pointer-events-none opacity-60' : void 0"
444
- class="max-h-72 overflow-y-auto"
445
- @update:model-value="handleUpdate"
433
+ class="max-h-72"
446
434
  >
447
- <template #node="{ node, selected }">
448
- <span
449
- class="flex flex-1 min-w-0 items-center justify-between gap-2"
450
- @mouseenter="hoveredKey = node.key"
451
- @focusin="hoveredKey = node.key"
452
- >
453
- <span class="min-w-0 truncate text-[0.75rem] text-zinc-700">{{ wrappedLabelText(node) }}</span>
454
- <Icon
455
- v-if="selected"
456
- icon="fluent:checkmark-20-regular"
457
- class="size-3 shrink-0 text-zinc-700"
458
- />
459
- </span>
460
- </template>
435
+ <UiTree
436
+ :roots="roots"
437
+ :get-key="(w) => w.key"
438
+ :get-children="getWrappedChildren"
439
+ selection-mode="multi"
440
+ :cascade="column.cascade ?? 'independent'"
441
+ :model-value="displayKeys"
442
+ :selectable="wrappedSelectable"
443
+ :filter-predicate="filterPredicate"
444
+ :filter-query="filterQuery"
445
+ :initial-expanded="initialExpanded"
446
+ :show-focused-row="false"
447
+ :class="isDisabled ? 'pointer-events-none opacity-60' : void 0"
448
+ @update:model-value="handleUpdate"
449
+ >
450
+ <template #node="{ node, selected }">
451
+ <span
452
+ class="flex flex-1 min-w-0 items-center justify-between gap-2"
453
+ @mouseenter="hoveredKey = node.key"
454
+ @focusin="hoveredKey = node.key"
455
+ >
456
+ <span class="min-w-0 truncate text-[0.75rem] text-zinc-700">{{ wrappedLabelText(node) }}</span>
457
+ <Icon
458
+ v-if="selected"
459
+ icon="fluent:checkmark-20-regular"
460
+ class="size-3 shrink-0 text-zinc-700"
461
+ />
462
+ </span>
463
+ </template>
461
464
 
462
- <template #empty>
463
- <div class="min-h-7 px-2 py-1 text-[0.75rem] text-zinc-400">
464
- {{ t("tree-combobox-multi-empty") }}
465
- </div>
466
- </template>
465
+ <template #empty>
466
+ <div class="min-h-7 px-2 py-1 text-[0.75rem] text-zinc-400">
467
+ {{ t("tree-combobox-multi-empty") }}
468
+ </div>
469
+ </template>
467
470
 
468
- <template #error="{ error, retry }">
469
- <span class="inline-flex items-center gap-1 text-xs text-red-500">
470
- {{ t("tree-combobox-multi-load-error") }}
471
- <button
472
- type="button"
473
- class="underline hover:text-red-600"
474
- @click.stop="retry"
475
- >
476
- {{ t("tree-combobox-multi-retry") }}
477
- </button>
478
- <span class="sr-only">{{ String(error) }}</span>
479
- </span>
480
- </template>
481
- </UiTree>
471
+ <template #error="{ error, retry }">
472
+ <span class="inline-flex items-center gap-1 text-xs text-red-500">
473
+ {{ t("tree-combobox-multi-load-error") }}
474
+ <button
475
+ type="button"
476
+ class="underline hover:text-red-600"
477
+ @click.stop="retry"
478
+ >
479
+ {{ t("tree-combobox-multi-retry") }}
480
+ </button>
481
+ <span class="sr-only">{{ String(error) }}</span>
482
+ </span>
483
+ </template>
484
+ </UiTree>
485
+ </ScrollArea>
482
486
  </div>
483
487
  <div
484
488
  v-if="anyHasTooltip && hoveredTooltip"
@@ -45,10 +45,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
45
45
  readonly data: string;
46
46
  readonly request?: string | undefined;
47
47
  };
48
- readonly enableSorting?: boolean | undefined;
49
48
  readonly nodeKey: string;
50
49
  readonly nodeChildren: string;
51
50
  readonly nodeLabel: string;
51
+ readonly enableSorting?: boolean | undefined;
52
52
  readonly nodeTooltip?: readonly [{
53
53
  readonly locale: "zh";
54
54
  readonly message: string;
@@ -103,10 +103,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
103
103
  readonly data: string;
104
104
  readonly request?: string | undefined;
105
105
  };
106
- readonly enableSorting?: boolean | undefined;
107
106
  readonly nodeKey: string;
108
107
  readonly nodeChildren: string;
109
108
  readonly nodeLabel: string;
109
+ readonly enableSorting?: boolean | undefined;
110
110
  readonly nodeTooltip?: readonly [{
111
111
  readonly locale: "zh";
112
112
  readonly message: string;
@@ -45,10 +45,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
45
45
  readonly data: string;
46
46
  readonly request?: string | undefined;
47
47
  };
48
- readonly enableSorting?: boolean | undefined;
49
48
  readonly nodeKey: string;
50
49
  readonly nodeChildren: string;
51
50
  readonly nodeLabel: string;
51
+ readonly enableSorting?: boolean | undefined;
52
52
  readonly nodeTooltip?: readonly [{
53
53
  readonly locale: "zh";
54
54
  readonly message: string;
@@ -103,10 +103,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
103
103
  readonly data: string;
104
104
  readonly request?: string | undefined;
105
105
  };
106
- readonly enableSorting?: boolean | undefined;
107
106
  readonly nodeKey: string;
108
107
  readonly nodeChildren: string;
109
108
  readonly nodeLabel: string;
109
+ readonly enableSorting?: boolean | undefined;
110
110
  readonly nodeTooltip?: readonly [{
111
111
  readonly locale: "zh";
112
112
  readonly message: string;
@@ -12,6 +12,7 @@ import { fetchJsonOption } from "../../../../../share/request";
12
12
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
13
13
  import { Markdown } from "../../../../ui/markdown";
14
14
  import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
15
+ import { ScrollArea } from "../../../../ui/scroll-area";
15
16
  import { Skeleton } from "../../../../ui/skeleton";
16
17
  import { Tree as UiTree } from "../../../../ui/tree";
17
18
  import { useFormState } from "../../../../form/utils/state";
@@ -393,57 +394,60 @@ const hoveredTooltip = computed(() => {
393
394
  <Skeleton class="h-4 w-3/5" />
394
395
  </div>
395
396
 
396
- <UiTree
397
+ <ScrollArea
397
398
  v-else
398
- :roots="roots"
399
- :get-key="(w) => w.key"
400
- :get-children="getWrappedChildren"
401
- selection-mode="single"
402
- :model-value="model"
403
- :selectable="wrappedSelectable"
404
- :filter-predicate="filterPredicate"
405
- :filter-query="filterQuery"
406
- :initial-expanded="initialExpanded"
407
- :show-focused-row="false"
408
- :class="isDisabled ? 'pointer-events-none opacity-60' : void 0"
409
- class="max-h-72 overflow-y-auto"
410
- @update:model-value="handleUpdate"
399
+ class="max-h-72"
411
400
  >
412
- <template #node="{ node, selected }">
413
- <span
414
- class="flex flex-1 min-w-0 items-center justify-between gap-2"
415
- @mouseenter="hoveredKey = node.key"
416
- @focusin="hoveredKey = node.key"
417
- >
418
- <span class="min-w-0 truncate text-[0.75rem] text-zinc-700">{{ wrappedLabelText(node) }}</span>
419
- <Icon
420
- v-if="selected"
421
- icon="fluent:checkmark-20-regular"
422
- class="size-3 shrink-0 text-zinc-700"
423
- />
424
- </span>
425
- </template>
401
+ <UiTree
402
+ :roots="roots"
403
+ :get-key="(w) => w.key"
404
+ :get-children="getWrappedChildren"
405
+ selection-mode="single"
406
+ :model-value="model"
407
+ :selectable="wrappedSelectable"
408
+ :filter-predicate="filterPredicate"
409
+ :filter-query="filterQuery"
410
+ :initial-expanded="initialExpanded"
411
+ :show-focused-row="false"
412
+ :class="isDisabled ? 'pointer-events-none opacity-60' : void 0"
413
+ @update:model-value="handleUpdate"
414
+ >
415
+ <template #node="{ node, selected }">
416
+ <span
417
+ class="flex flex-1 min-w-0 items-center justify-between gap-2"
418
+ @mouseenter="hoveredKey = node.key"
419
+ @focusin="hoveredKey = node.key"
420
+ >
421
+ <span class="min-w-0 truncate text-[0.75rem] text-zinc-700">{{ wrappedLabelText(node) }}</span>
422
+ <Icon
423
+ v-if="selected"
424
+ icon="fluent:checkmark-20-regular"
425
+ class="size-3 shrink-0 text-zinc-700"
426
+ />
427
+ </span>
428
+ </template>
426
429
 
427
- <template #empty>
428
- <div class="min-h-7 px-2 py-1 text-[0.75rem] text-zinc-400">
429
- {{ t("tree-combobox-single-empty") }}
430
- </div>
431
- </template>
430
+ <template #empty>
431
+ <div class="min-h-7 px-2 py-1 text-[0.75rem] text-zinc-400">
432
+ {{ t("tree-combobox-single-empty") }}
433
+ </div>
434
+ </template>
432
435
 
433
- <template #error="{ error, retry }">
434
- <span class="inline-flex items-center gap-1 text-xs text-red-500">
435
- {{ t("tree-combobox-single-load-error") }}
436
- <button
437
- type="button"
438
- class="underline hover:text-red-600"
439
- @click.stop="retry"
440
- >
441
- {{ t("tree-combobox-single-retry") }}
442
- </button>
443
- <span class="sr-only">{{ String(error) }}</span>
444
- </span>
445
- </template>
446
- </UiTree>
436
+ <template #error="{ error, retry }">
437
+ <span class="inline-flex items-center gap-1 text-xs text-red-500">
438
+ {{ t("tree-combobox-single-load-error") }}
439
+ <button
440
+ type="button"
441
+ class="underline hover:text-red-600"
442
+ @click.stop="retry"
443
+ >
444
+ {{ t("tree-combobox-single-retry") }}
445
+ </button>
446
+ <span class="sr-only">{{ String(error) }}</span>
447
+ </span>
448
+ </template>
449
+ </UiTree>
450
+ </ScrollArea>
447
451
  </div>
448
452
  <div
449
453
  v-if="anyHasTooltip && hoveredTooltip"
@@ -158,6 +158,40 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
158
158
  readonly message: string;
159
159
  }[]] | undefined;
160
160
  }[];
161
+ readonly query?: {
162
+ readonly style?: string | undefined;
163
+ readonly id?: string | undefined;
164
+ readonly initial?: {
165
+ readonly data: string;
166
+ readonly request?: string | undefined;
167
+ } | undefined;
168
+ readonly displayName?: string | undefined;
169
+ readonly kind: "shwfed.component.form";
170
+ readonly fields: readonly any[];
171
+ readonly layouts: readonly {
172
+ readonly name: string;
173
+ readonly layout: {
174
+ readonly style?: string | undefined;
175
+ readonly columns: number;
176
+ readonly gap?: number | undefined;
177
+ readonly rows?: number | undefined;
178
+ readonly placements: {
179
+ readonly [x: string]: {
180
+ readonly area: readonly [readonly [number, number], readonly [number, number]];
181
+ readonly v?: "stretch" | "center" | "end" | "start" | undefined;
182
+ readonly h?: "stretch" | "center" | "end" | "start" | undefined;
183
+ };
184
+ };
185
+ };
186
+ readonly media?: string | undefined;
187
+ }[];
188
+ readonly readonly?: string | undefined;
189
+ } | undefined;
190
+ readonly dataSource?: {
191
+ readonly data: string;
192
+ readonly total?: string | undefined;
193
+ readonly request?: string | undefined;
194
+ } | undefined;
161
195
  readonly actions?: {
162
196
  readonly size: "default" | "sm" | "xs";
163
197
  readonly style?: string | undefined;
@@ -225,40 +259,6 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
225
259
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
226
260
  }[];
227
261
  } | undefined;
228
- readonly query?: {
229
- readonly style?: string | undefined;
230
- readonly id?: string | undefined;
231
- readonly initial?: {
232
- readonly data: string;
233
- readonly request?: string | undefined;
234
- } | undefined;
235
- readonly displayName?: string | undefined;
236
- readonly kind: "shwfed.component.form";
237
- readonly fields: readonly any[];
238
- readonly layouts: readonly {
239
- readonly name: string;
240
- readonly layout: {
241
- readonly style?: string | undefined;
242
- readonly columns: number;
243
- readonly gap?: number | undefined;
244
- readonly rows?: number | undefined;
245
- readonly placements: {
246
- readonly [x: string]: {
247
- readonly area: readonly [readonly [number, number], readonly [number, number]];
248
- readonly v?: "stretch" | "center" | "end" | "start" | undefined;
249
- readonly h?: "stretch" | "center" | "end" | "start" | undefined;
250
- };
251
- };
252
- };
253
- readonly media?: string | undefined;
254
- }[];
255
- readonly readonly?: string | undefined;
256
- } | undefined;
257
- readonly dataSource?: {
258
- readonly data: string;
259
- readonly total?: string | undefined;
260
- readonly request?: string | undefined;
261
- } | undefined;
262
262
  readonly bottomActions?: {
263
263
  readonly size: "default" | "sm" | "xs";
264
264
  readonly style?: string | undefined;
@@ -827,6 +827,40 @@ export declare function createTableConfig(body: Omit<Schema.Schema.Type<ReturnTy
827
827
  readonly message: string;
828
828
  }[]] | undefined;
829
829
  }[];
830
+ query?: {
831
+ readonly style?: string | undefined;
832
+ readonly id?: string | undefined;
833
+ readonly initial?: {
834
+ readonly data: string;
835
+ readonly request?: string | undefined;
836
+ } | undefined;
837
+ readonly displayName?: string | undefined;
838
+ readonly kind: "shwfed.component.form";
839
+ readonly fields: readonly any[];
840
+ readonly layouts: readonly {
841
+ readonly name: string;
842
+ readonly layout: {
843
+ readonly style?: string | undefined;
844
+ readonly columns: number;
845
+ readonly gap?: number | undefined;
846
+ readonly rows?: number | undefined;
847
+ readonly placements: {
848
+ readonly [x: string]: {
849
+ readonly area: readonly [readonly [number, number], readonly [number, number]];
850
+ readonly v?: "stretch" | "center" | "end" | "start" | undefined;
851
+ readonly h?: "stretch" | "center" | "end" | "start" | undefined;
852
+ };
853
+ };
854
+ };
855
+ readonly media?: string | undefined;
856
+ }[];
857
+ readonly readonly?: string | undefined;
858
+ } | undefined;
859
+ dataSource?: {
860
+ readonly data: string;
861
+ readonly total?: string | undefined;
862
+ readonly request?: string | undefined;
863
+ } | undefined;
830
864
  actions?: {
831
865
  readonly size: "default" | "sm" | "xs";
832
866
  readonly style?: string | undefined;
@@ -894,40 +928,6 @@ export declare function createTableConfig(body: Omit<Schema.Schema.Type<ReturnTy
894
928
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
895
929
  }[];
896
930
  } | undefined;
897
- query?: {
898
- readonly style?: string | undefined;
899
- readonly id?: string | undefined;
900
- readonly initial?: {
901
- readonly data: string;
902
- readonly request?: string | undefined;
903
- } | undefined;
904
- readonly displayName?: string | undefined;
905
- readonly kind: "shwfed.component.form";
906
- readonly fields: readonly any[];
907
- readonly layouts: readonly {
908
- readonly name: string;
909
- readonly layout: {
910
- readonly style?: string | undefined;
911
- readonly columns: number;
912
- readonly gap?: number | undefined;
913
- readonly rows?: number | undefined;
914
- readonly placements: {
915
- readonly [x: string]: {
916
- readonly area: readonly [readonly [number, number], readonly [number, number]];
917
- readonly v?: "stretch" | "center" | "end" | "start" | undefined;
918
- readonly h?: "stretch" | "center" | "end" | "start" | undefined;
919
- };
920
- };
921
- };
922
- readonly media?: string | undefined;
923
- }[];
924
- readonly readonly?: string | undefined;
925
- } | undefined;
926
- dataSource?: {
927
- readonly data: string;
928
- readonly total?: string | undefined;
929
- readonly request?: string | undefined;
930
- } | undefined;
931
931
  bottomActions?: {
932
932
  readonly size: "default" | "sm" | "xs";
933
933
  readonly style?: string | undefined;
@@ -3,9 +3,9 @@ import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ListboxContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
5
  };
6
- declare var __VLS_8: {};
6
+ declare var __VLS_14: {};
7
7
  type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_8) => any;
8
+ default?: (props: typeof __VLS_14) => any;
9
9
  };
10
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
11
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -2,6 +2,7 @@
2
2
  import { reactiveOmit } from "@vueuse/core";
3
3
  import { ListboxContent, useForwardProps } from "reka-ui";
4
4
  import { cn } from "../../../utils/cn";
5
+ import { ScrollArea } from "../scroll-area";
5
6
  const props = defineProps({
6
7
  asChild: { type: Boolean, required: false },
7
8
  as: { type: null, required: false },
@@ -12,13 +13,20 @@ const forwarded = useForwardProps(delegatedProps);
12
13
  </script>
13
14
 
14
15
  <template>
16
+ <!-- The cap stays on ListboxContent so callers keep overriding it through
17
+ `class`; ScrollArea inherits it and owns the actual overflow. -->
15
18
  <ListboxContent
16
19
  data-slot="command-list"
17
20
  v-bind="forwarded"
18
- :class="cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', props.class)"
21
+ :class="cn('max-h-[300px] overflow-hidden', props.class)"
19
22
  >
20
- <div role="presentation">
21
- <slot />
22
- </div>
23
+ <ScrollArea
24
+ class="max-h-[inherit]"
25
+ viewport-class="scroll-py-1"
26
+ >
27
+ <div role="presentation">
28
+ <slot />
29
+ </div>
30
+ </ScrollArea>
23
31
  </ListboxContent>
24
32
  </template>
@@ -3,9 +3,9 @@ import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ListboxContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
5
  };
6
- declare var __VLS_8: {};
6
+ declare var __VLS_14: {};
7
7
  type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_8) => any;
8
+ default?: (props: typeof __VLS_14) => any;
9
9
  };
10
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
11
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -170,7 +170,7 @@ const leadingAlign = computed(
170
170
  >
171
171
  <Command class="rounded group-data-[side=top]/popover:flex-col-reverse">
172
172
  <CommandInput placeholder="搜索可用变量" />
173
- <CommandList class="max-h-48 overflow-y-auto">
173
+ <CommandList class="max-h-48">
174
174
  <CommandEmpty>No variables.</CommandEmpty>
175
175
  <CommandGroup>
176
176
  <CommandItem
@@ -3,9 +3,9 @@ type __VLS_Props = PopoverContentProps & {
3
3
  disabled?: boolean;
4
4
  invalid?: boolean;
5
5
  };
6
- declare var __VLS_52: {};
6
+ declare var __VLS_54: {};
7
7
  type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_52) => any;
8
+ default?: (props: typeof __VLS_54) => any;
9
9
  };
10
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
11
  blur: (...args: any[]) => void;
@@ -64,12 +64,18 @@ const open = ref(false);
64
64
  @blur="emits('blur', $event)"
65
65
  />
66
66
  </PopoverTrigger>
67
+ <!-- The search input is the trigger, so it sits outside the content. On
68
+ open reka's FocusScope focuses the first tabbable node inside the
69
+ content — `CommandList`'s ScrollArea viewport carries `tabindex=0` —
70
+ which blurs the input and makes the combobox untypeable. Keep focus
71
+ where the user put it. -->
67
72
  <PopoverContent
68
73
  v-bind="forwarded"
69
74
  :reference="getInputGroupReference().value ?? void 0"
70
75
  :style="{
71
76
  width: 'var(--reka-popover-trigger-width)'
72
77
  }"
78
+ @open-auto-focus="(event) => event.preventDefault()"
73
79
  >
74
80
  <CommandList>
75
81
  <CommandEmpty as-child>
@@ -3,9 +3,9 @@ type __VLS_Props = PopoverContentProps & {
3
3
  disabled?: boolean;
4
4
  invalid?: boolean;
5
5
  };
6
- declare var __VLS_52: {};
6
+ declare var __VLS_54: {};
7
7
  type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_52) => any;
8
+ default?: (props: typeof __VLS_54) => any;
9
9
  };
10
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
11
  blur: (...args: any[]) => void;
@@ -2,6 +2,7 @@ import type { ScrollAreaRootProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ScrollAreaRootProps & {
4
4
  class?: HTMLAttributes['class'];
5
+ viewportClass?: HTMLAttributes['class'];
5
6
  };
6
7
  declare var __VLS_14: {};
7
8
  type __VLS_Slots = {} & {
@@ -14,9 +14,10 @@ const props = defineProps({
14
14
  scrollHideDelay: { type: Number, required: false },
15
15
  asChild: { type: Boolean, required: false },
16
16
  as: { type: null, required: false },
17
- class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true }
17
+ class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true },
18
+ viewportClass: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true }
18
19
  });
19
- const delegatedProps = reactiveOmit(props, "class");
20
+ const delegatedProps = reactiveOmit(props, "class", "viewportClass");
20
21
  </script>
21
22
 
22
23
  <template>
@@ -25,9 +26,14 @@ const delegatedProps = reactiveOmit(props, "class");
25
26
  v-bind="delegatedProps"
26
27
  :class="cn('relative', props.class)"
27
28
  >
29
+ <!-- `max-h-[inherit]`: when the root is capped by `max-h-*` instead of a
30
+ definite height (a popover list sized by its content), `h-full` on the
31
+ viewport resolves to `auto` and it would grow past the cap unscrolled.
32
+ Inheriting the root's max-height gives the viewport the overflow it
33
+ needs; it computes to `none` for definite-height roots. -->
28
34
  <ScrollAreaViewport
29
35
  data-slot="scroll-area-viewport"
30
- class="size-full rounded-[inherit] outline-none"
36
+ :class="cn('size-full max-h-[inherit] rounded-[inherit] outline-none', props.viewportClass)"
31
37
  >
32
38
  <slot />
33
39
  </ScrollAreaViewport>
@@ -2,6 +2,7 @@ import type { ScrollAreaRootProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ScrollAreaRootProps & {
4
4
  class?: HTMLAttributes['class'];
5
+ viewportClass?: HTMLAttributes['class'];
5
6
  };
6
7
  declare var __VLS_14: {};
7
8
  type __VLS_Slots = {} & {
@@ -160,8 +160,16 @@ export declare function useEventChannel(): EventChannel | undefined;
160
160
  * scope (e.g. a table row's `row`) rather than the handling ancestor's. Pass it
161
161
  * whenever the emitter has a CEL context; omit it and ops fall back to their
162
162
  * host evaluator. See `OpRequest.cel`.
163
+ *
164
+ * `outputs` lets the CALLER own the chain's step-outputs map instead of getting
165
+ * a fresh private one. Two things need that, both in `state.write`: the button
166
+ * reads what its 写入前 chain published to thread into the write expressions'
167
+ * `steps`, and it passes the SAME map to its 写入后 chain, so an after-op can
168
+ * reference a before-op's output. A caller that supplies one MUST mint it per
169
+ * RUN (inside its own `Effect.suspend`) — otherwise one click's outputs leak
170
+ * into the next, which is exactly what the private map prevents.
163
171
  */
164
- export declare function dispatchTriggers(channel: EventChannel | undefined, triggers: ReadonlyArray<TriggerValue> | undefined, cel?: CelEvaluator): Effect.Effect<void>;
172
+ export declare function dispatchTriggers(channel: EventChannel | undefined, triggers: ReadonlyArray<TriggerValue> | undefined, cel?: CelEvaluator, outputs?: Record<string, unknown>): Effect.Effect<void>;
165
173
  /**
166
174
  * One operation a component type exposes. `id` is what the trigger stores;
167
175
  * `name`/`icon` are display only.