@shwfed/config 2.9.11 → 2.9.13

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 (65) hide show
  1. package/dist/mcp.mjs +112 -50
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-CN4xD2hQ.js → FieldGroup.vue_vue_type_script_setup_true_lang-DZ_H-YRf.js} +1 -1
  4. package/dist/preview/assets/{badge-CzfW1Ked.js → badge-DoNuZh0A.js} +1 -1
  5. package/dist/preview/assets/{config-Bzwfqv6w.js → config-BDDuqAht.js} +1 -1
  6. package/dist/preview/assets/{config-CCXJvpik.js → config-Bhc_Vu67.js} +1 -1
  7. package/dist/preview/assets/{config-CPuERNUd.js → config-BrNZsgV0.js} +1 -1
  8. package/dist/preview/assets/{config-Op5IHwI_.js → config-C6Cm7DWx.js} +1 -1
  9. package/dist/preview/assets/{config-D37gWDMV.js → config-CIYui2J_.js} +1 -1
  10. package/dist/preview/assets/{config-DbNukLyq.js → config-CLsjWZz2.js} +1 -1
  11. package/dist/preview/assets/{config-e5aOGFb2.js → config-Cla0Qngs.js} +1 -1
  12. package/dist/preview/assets/{config-CDYZN7EX.js → config-D4rFsdGO.js} +1 -1
  13. package/dist/preview/assets/{config-BdX3zl4t.js → config-DTEJOYqA.js} +1 -1
  14. package/dist/preview/assets/{config-jJQ2fulH.js → config-YGBoSq6x.js} +1 -1
  15. package/dist/preview/assets/{config-C2y2XI2Q.js → config-tdZMdIN3.js} +1 -1
  16. package/dist/preview/assets/{config-jzfHh7bp.js → config-ugF_BOWz.js} +1 -1
  17. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-BgssDGxW.js → definition.vue_vue_type_script_setup_true_lang-CgNXv26P.js} +1 -1
  18. package/dist/preview/assets/index-B-QhiviS.js +1 -0
  19. package/dist/preview/assets/{index-CAIvIAWJ.js → index-C3FdepLE.js} +1 -1
  20. package/dist/preview/assets/{index-Cyjm-GKs.js → index-CWMhB7z4.js} +204 -203
  21. package/dist/preview/assets/index-CzzwZ7bp.css +1 -0
  22. package/dist/preview/assets/{item-CUoRMMz1.js → item-DecwNzYq.js} +1 -1
  23. package/dist/preview/assets/{runtime-CWt21RRo.js → runtime-BK7KNEyN.js} +1 -1
  24. package/dist/preview/assets/{runtime-DWKqftSK.js → runtime-C3dmOj9s.js} +1 -1
  25. package/dist/preview/assets/{runtime-D3TnRYXn.js → runtime-C5hqSHRW.js} +1 -1
  26. package/dist/preview/assets/{runtime-C_epees8.js → runtime-C8Ufkmiw.js} +1 -1
  27. package/dist/preview/assets/{runtime-V_usL1Fa.js → runtime-CYpXd7Pq.js} +1 -1
  28. package/dist/preview/assets/{runtime-CU5fYNMI.js → runtime-CjPtRd-T.js} +1 -1
  29. package/dist/preview/assets/{runtime-BALr-Cq0.js → runtime-DSUjc0Pk.js} +1 -1
  30. package/dist/preview/assets/{runtime-CHQwYQ80.js → runtime-DZ_AwduQ.js} +1 -1
  31. package/dist/preview/assets/{runtime-BvcTYin8.js → runtime-DtP98Km5.js} +1 -1
  32. package/dist/preview/assets/{runtime-wAz72cCJ.js → runtime-blb90Fhv.js} +1 -1
  33. package/dist/preview/assets/{schema-meta-DwWuSVqk.js → schema-meta-DWUHNP8E.js} +1 -1
  34. package/dist/preview/index.html +2 -2
  35. package/dist/runtime/components/actions/buttons/2026-05-15/com.shwfed.actions.button.event.dispatch/schema.d.ts +15 -0
  36. package/dist/runtime/components/actions/buttons/2026-05-15/com.shwfed.actions.button.event.dispatch/schema.js +57 -1
  37. package/dist/runtime/components/block-layout-editor/index.vue +10 -2
  38. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +134 -0
  39. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +134 -0
  40. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +134 -0
  41. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +134 -0
  42. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +195 -0
  43. package/dist/runtime/components/form/config.vue +38 -1
  44. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/config.d.vue.ts +2 -0
  45. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/config.vue.d.ts +2 -0
  46. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.d.ts +2 -0
  47. package/dist/runtime/components/form/index.vue +8 -1
  48. package/dist/runtime/components/operations/2026-06-11/com.shwfed.operation.http.request.json/runtime.js +5 -3
  49. package/dist/runtime/components/operations/2026-06-11/com.shwfed.operation.http.request.json/schema.js +3 -2
  50. package/dist/runtime/components/table/config.d.vue.ts +3 -3
  51. package/dist/runtime/components/table/config.vue +62 -22
  52. package/dist/runtime/components/table/config.vue.d.ts +3 -3
  53. package/dist/runtime/components/table/index.d.vue.ts +2 -0
  54. package/dist/runtime/components/table/index.vue +12 -3
  55. package/dist/runtime/components/table/index.vue.d.ts +2 -0
  56. package/dist/runtime/components/table/schema.d.ts +263 -0
  57. package/dist/runtime/components/table/schema.js +8 -4
  58. package/dist/runtime/components/ui/expression-editor/ExpressionEditor.vue +2 -2
  59. package/dist/runtime/components/ui/expression-editor/picker-entries.d.ts +1 -0
  60. package/dist/runtime/components/ui/expression-editor/picker-entries.js +12 -0
  61. package/dist/runtime/components/ui/expression-editor/scope-refs.js +1 -1
  62. package/dist/runtime/utils/cel-context.d.ts +21 -0
  63. package/package.json +1 -1
  64. package/dist/preview/assets/index-0vF7XQ-J.js +0 -1
  65. package/dist/preview/assets/index-D0eGXK5P.css +0 -1
@@ -234,6 +234,73 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
234
234
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
235
235
  }[];
236
236
  } | undefined;
237
+ readonly bottomActions?: {
238
+ readonly size: "default" | "sm" | "xs";
239
+ readonly style?: string | undefined;
240
+ readonly gap: number;
241
+ readonly items: readonly (import("../actions/schema.js").RegistryItemValue | {
242
+ readonly disabled?: string | undefined;
243
+ readonly id: string;
244
+ readonly title: readonly [{
245
+ readonly locale: "zh";
246
+ readonly message: string;
247
+ }, ...{
248
+ readonly locale: "en" | "ja" | "ko";
249
+ readonly message: string;
250
+ }[]];
251
+ readonly icon?: string | undefined;
252
+ readonly hidden?: string | undefined;
253
+ readonly tooltip?: readonly [{
254
+ readonly locale: "zh";
255
+ readonly message: string;
256
+ }, ...{
257
+ readonly locale: "en" | "ja" | "ko";
258
+ readonly message: string;
259
+ }[]] | undefined;
260
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
261
+ readonly action?: any;
262
+ readonly groupId: string;
263
+ readonly hideTitle?: boolean | undefined;
264
+ } | {
265
+ readonly id: string;
266
+ readonly title: readonly [{
267
+ readonly locale: "zh";
268
+ readonly message: string;
269
+ }, ...{
270
+ readonly locale: "en" | "ja" | "ko";
271
+ readonly message: string;
272
+ }[]];
273
+ readonly icon?: string | undefined;
274
+ readonly items: readonly (import("../actions/schema.js").RegistrySubItemValue | {
275
+ readonly disabled?: string | undefined;
276
+ readonly id: string;
277
+ readonly title: readonly [{
278
+ readonly locale: "zh";
279
+ readonly message: string;
280
+ }, ...{
281
+ readonly locale: "en" | "ja" | "ko";
282
+ readonly message: string;
283
+ }[]];
284
+ readonly icon?: string | undefined;
285
+ readonly hidden?: string | undefined;
286
+ readonly tooltip?: readonly [{
287
+ readonly locale: "zh";
288
+ readonly message: string;
289
+ }, ...{
290
+ readonly locale: "en" | "ja" | "ko";
291
+ readonly message: string;
292
+ }[]] | undefined;
293
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
294
+ readonly action?: any;
295
+ })[];
296
+ readonly groupId: string;
297
+ readonly hideTitle?: boolean | undefined;
298
+ })[];
299
+ readonly groups: readonly {
300
+ readonly id: string;
301
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
302
+ }[];
303
+ } | undefined;
237
304
  readonly rowKey?: string | undefined;
238
305
  readonly cellStyle?: string | undefined;
239
306
  readonly pagination?: {
@@ -441,6 +508,134 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
441
508
  readonly hideTitle?: boolean | undefined;
442
509
  }, never>>;
443
510
  }>>;
511
+ bottomActions: Schema.optional<Schema.Struct<{
512
+ size: Schema.optionalWith<Schema.Literal<["default", "sm", "xs"]>, {
513
+ default: () => "default";
514
+ }>;
515
+ gap: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
516
+ default: () => number;
517
+ }>;
518
+ style: Schema.optional<typeof Schema.String>;
519
+ groups: Schema.Array$<Schema.Struct<{
520
+ id: Schema.refine<string, typeof Schema.String>;
521
+ variant: Schema.optional<Schema.Literal<["default", "primary", "destructive", "ghost", "link"]>>;
522
+ }>>;
523
+ items: Schema.Array$<Schema.Schema<import("../actions/schema.js").RegistryItemValue | {
524
+ readonly disabled?: string | undefined;
525
+ readonly id: string;
526
+ readonly title: readonly [{
527
+ readonly locale: "zh";
528
+ readonly message: string;
529
+ }, ...{
530
+ readonly locale: "en" | "ja" | "ko";
531
+ readonly message: string;
532
+ }[]];
533
+ readonly icon?: string | undefined;
534
+ readonly hidden?: string | undefined;
535
+ readonly tooltip?: readonly [{
536
+ readonly locale: "zh";
537
+ readonly message: string;
538
+ }, ...{
539
+ readonly locale: "en" | "ja" | "ko";
540
+ readonly message: string;
541
+ }[]] | undefined;
542
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
543
+ readonly action?: any;
544
+ readonly groupId: string;
545
+ readonly hideTitle?: boolean | undefined;
546
+ } | {
547
+ readonly id: string;
548
+ readonly title: readonly [{
549
+ readonly locale: "zh";
550
+ readonly message: string;
551
+ }, ...{
552
+ readonly locale: "en" | "ja" | "ko";
553
+ readonly message: string;
554
+ }[]];
555
+ readonly icon?: string | undefined;
556
+ readonly items: readonly (import("../actions/schema.js").RegistrySubItemValue | {
557
+ readonly disabled?: string | undefined;
558
+ readonly id: string;
559
+ readonly title: readonly [{
560
+ readonly locale: "zh";
561
+ readonly message: string;
562
+ }, ...{
563
+ readonly locale: "en" | "ja" | "ko";
564
+ readonly message: string;
565
+ }[]];
566
+ readonly icon?: string | undefined;
567
+ readonly hidden?: string | undefined;
568
+ readonly tooltip?: readonly [{
569
+ readonly locale: "zh";
570
+ readonly message: string;
571
+ }, ...{
572
+ readonly locale: "en" | "ja" | "ko";
573
+ readonly message: string;
574
+ }[]] | undefined;
575
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
576
+ readonly action?: any;
577
+ })[];
578
+ readonly groupId: string;
579
+ readonly hideTitle?: boolean | undefined;
580
+ }, import("../actions/schema.js").RegistryItemValue | {
581
+ readonly id: string;
582
+ readonly title: readonly [{
583
+ readonly locale: "zh";
584
+ readonly message: string;
585
+ }, ...{
586
+ readonly locale: "en" | "ja" | "ko";
587
+ readonly message: string;
588
+ }[]];
589
+ readonly groupId: string;
590
+ readonly disabled?: string | undefined;
591
+ readonly icon?: string | undefined;
592
+ readonly hidden?: string | undefined;
593
+ readonly tooltip?: readonly [{
594
+ readonly locale: "zh";
595
+ readonly message: string;
596
+ }, ...{
597
+ readonly locale: "en" | "ja" | "ko";
598
+ readonly message: string;
599
+ }[]] | undefined;
600
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
601
+ readonly action?: any;
602
+ readonly hideTitle?: boolean | undefined;
603
+ } | {
604
+ readonly id: string;
605
+ readonly title: readonly [{
606
+ readonly locale: "zh";
607
+ readonly message: string;
608
+ }, ...{
609
+ readonly locale: "en" | "ja" | "ko";
610
+ readonly message: string;
611
+ }[]];
612
+ readonly items: readonly (import("../actions/schema.js").RegistrySubItemValue | {
613
+ readonly id: string;
614
+ readonly title: readonly [{
615
+ readonly locale: "zh";
616
+ readonly message: string;
617
+ }, ...{
618
+ readonly locale: "en" | "ja" | "ko";
619
+ readonly message: string;
620
+ }[]];
621
+ readonly disabled?: string | undefined;
622
+ readonly icon?: string | undefined;
623
+ readonly hidden?: string | undefined;
624
+ readonly tooltip?: readonly [{
625
+ readonly locale: "zh";
626
+ readonly message: string;
627
+ }, ...{
628
+ readonly locale: "en" | "ja" | "ko";
629
+ readonly message: string;
630
+ }[]] | undefined;
631
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
632
+ readonly action?: any;
633
+ })[];
634
+ readonly groupId: string;
635
+ readonly icon?: string | undefined;
636
+ readonly hideTitle?: boolean | undefined;
637
+ }, never>>;
638
+ }>>;
444
639
  query: Schema.optional<Schema.refine<{
445
640
  readonly style?: string | undefined;
446
641
  readonly id?: string | undefined;
@@ -684,6 +879,73 @@ export declare function createTableConfig(body: Omit<Schema.Schema.Type<ReturnTy
684
879
  readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
685
880
  }[];
686
881
  } | undefined;
882
+ bottomActions?: {
883
+ readonly size: "default" | "sm" | "xs";
884
+ readonly style?: string | undefined;
885
+ readonly gap: number;
886
+ readonly items: readonly (import("../actions/schema.js").RegistryItemValue | {
887
+ readonly disabled?: string | undefined;
888
+ readonly id: string;
889
+ readonly title: readonly [{
890
+ readonly locale: "zh";
891
+ readonly message: string;
892
+ }, ...{
893
+ readonly locale: "en" | "ja" | "ko";
894
+ readonly message: string;
895
+ }[]];
896
+ readonly icon?: string | undefined;
897
+ readonly hidden?: string | undefined;
898
+ readonly tooltip?: readonly [{
899
+ readonly locale: "zh";
900
+ readonly message: string;
901
+ }, ...{
902
+ readonly locale: "en" | "ja" | "ko";
903
+ readonly message: string;
904
+ }[]] | undefined;
905
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
906
+ readonly action?: any;
907
+ readonly groupId: string;
908
+ readonly hideTitle?: boolean | undefined;
909
+ } | {
910
+ readonly id: string;
911
+ readonly title: readonly [{
912
+ readonly locale: "zh";
913
+ readonly message: string;
914
+ }, ...{
915
+ readonly locale: "en" | "ja" | "ko";
916
+ readonly message: string;
917
+ }[]];
918
+ readonly icon?: string | undefined;
919
+ readonly items: readonly (import("../actions/schema.js").RegistrySubItemValue | {
920
+ readonly disabled?: string | undefined;
921
+ readonly id: string;
922
+ readonly title: readonly [{
923
+ readonly locale: "zh";
924
+ readonly message: string;
925
+ }, ...{
926
+ readonly locale: "en" | "ja" | "ko";
927
+ readonly message: string;
928
+ }[]];
929
+ readonly icon?: string | undefined;
930
+ readonly hidden?: string | undefined;
931
+ readonly tooltip?: readonly [{
932
+ readonly locale: "zh";
933
+ readonly message: string;
934
+ }, ...{
935
+ readonly locale: "en" | "ja" | "ko";
936
+ readonly message: string;
937
+ }[]] | undefined;
938
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
939
+ readonly action?: any;
940
+ })[];
941
+ readonly groupId: string;
942
+ readonly hideTitle?: boolean | undefined;
943
+ })[];
944
+ readonly groups: readonly {
945
+ readonly id: string;
946
+ readonly variant?: "default" | "link" | "destructive" | "primary" | "ghost" | undefined;
947
+ }[];
948
+ } | undefined;
687
949
  rowKey?: string | undefined;
688
950
  cellStyle?: string | undefined;
689
951
  pagination?: {
@@ -759,6 +1021,7 @@ export type TableConfigValue = Readonly<{
759
1021
  groups: ReadonlyArray<ColumnGroupValue>;
760
1022
  dataSource?: DataSourceValue;
761
1023
  actions?: TableActionsValue;
1024
+ bottomActions?: TableActionsValue;
762
1025
  query?: FormConfigValue;
763
1026
  rowKey?: string;
764
1027
  cellStyle?: string;
@@ -306,8 +306,12 @@ export function TableConfig(configure) {
306
306
  description: "\u6570\u636E\u6E90\u914D\u7F6E"
307
307
  })),
308
308
  actions: Schema.optional(TableActions).annotations({
309
- title: "\u64CD\u4F5C",
310
- description: "\u8868\u683C\u9876\u90E8\u64CD\u4F5C\u6309\u94AE"
309
+ title: "\u4E0A\u65B9\u64CD\u4F5C",
310
+ description: "\u6E32\u67D3\u5728\u8868\u683C\u4E0A\u65B9\u7684\u64CD\u4F5C\u6309\u94AE"
311
+ }),
312
+ bottomActions: Schema.optional(TableActions).annotations({
313
+ title: "\u4E0B\u65B9\u64CD\u4F5C",
314
+ description: "\u6E32\u67D3\u5728\u8868\u683C\uFF08\u542B\u5206\u9875\u5668\uFF09\u4E0B\u65B9\u7684\u64CD\u4F5C\u6309\u94AE\uFF1B\u4E0E\u4E0A\u65B9\u64CD\u4F5C\u5171\u4EAB\u540C\u4E00\u4F5C\u7528\u57DF\uFF08`selected` / `query` / `sorts`\uFF09"
311
315
  }),
312
316
  query: Schema.optional(Query).annotations({
313
317
  title: "\u641C\u7D22\u6761\u4EF6",
@@ -329,8 +333,8 @@ export function TableConfig(configure) {
329
333
  title: "\u5206\u9875"
330
334
  }),
331
335
  persistQuery: Schema.optional(Schema.Boolean.annotations({
332
- title: "\u641C\u7D22\u6761\u4EF6\u6301\u4E45\u5316",
333
- description: "\u5F00\u542F\u540E\uFF0C\u641C\u7D22\u6761\u4EF6\u8868\u5355\u7684\u5F53\u524D\u503C\u4F1A\u5199\u5165\u6D4F\u89C8\u5668\u4F1A\u8BDD\u5B58\u50A8\uFF08sessionStorage\uFF09\uFF0C\u5237\u65B0\u9875\u9762\u540E\u81EA\u52A8\u6062\u590D\uFF0C\u76F4\u5230\u5173\u95ED\u6807\u7B7E\u9875\u6216\u79BB\u5F00\u7AD9\u70B9\u3002\u9700\u8981\u8868\u683C\u5DF2\u914D\u7F6E ID\u3002"
336
+ title: "\u4FDD\u7559\u641C\u7D22\u6761\u4EF6",
337
+ description: "\u6253\u5F00\u540E\uFF0C\u641C\u7D22\u6761\u4EF6\u4EC5\u5728\u7528\u6237\u5173\u95ED\u5F53\u524D\u9875\u7B7E\u65F6\u6E05\u7A7A"
334
338
  })),
335
339
  initialState: Schema.optional(InitialState)
336
340
  }).pipe(Schema.filter((cfg) => {
@@ -8,7 +8,7 @@ import CodeMirrorInput from "./CodeMirrorInput.vue";
8
8
  import { buildScopeLookup } from "./scope-refs";
9
9
  import { buildSelectionLookup } from "./selection-refs";
10
10
  import { buildStepLookup } from "./step-refs";
11
- import { buildScopeEntries, buildSelectionEntries, buildStepEntries, buildVarEntries } from "./picker-entries";
11
+ import { buildScopeEntries, buildSelectionEntries, buildStepEntries, buildVarEntries, selectShadowedScopes } from "./picker-entries";
12
12
  import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "../command";
13
13
  import { InputGroup, InputGroupAddon, InputGroupButton } from "../input-group";
14
14
  import { Popover, PopoverContent, PopoverTrigger } from "../popover";
@@ -29,7 +29,7 @@ const scopeAncestry = useScopeAncestry();
29
29
  const selectionRoster = useSelectionRoster();
30
30
  const stepRoster = useStepRoster();
31
31
  const varEntries = computed(() => buildVarEntries(celContext, props.extraVars));
32
- const scopeEntries = computed(() => buildScopeEntries(scopeAncestry.value.slice(1)));
32
+ const scopeEntries = computed(() => buildScopeEntries(selectShadowedScopes(scopeAncestry.value)));
33
33
  const selectionEntries = computed(() => buildSelectionEntries(selectionRoster.value));
34
34
  const stepEntries = computed(() => buildStepEntries(stepRoster.value));
35
35
  const scopeLookup = computed(() => buildScopeLookup(scopeAncestry.value));
@@ -16,4 +16,5 @@ export type PickVarMeta = {
16
16
  export declare function buildVarEntries(celContext: Record<string, PickVarMeta>, extraVars?: Record<string, PickVarMeta>): PickEntry[];
17
17
  export declare function buildSelectionEntries(roster: ReadonlyArray<SelectionFieldRef>): PickEntry[];
18
18
  export declare function buildStepEntries(roster: ReadonlyArray<StepRef>): PickEntry[];
19
+ export declare function selectShadowedScopes(ancestry: ReadonlyArray<ScopeAncestor>): ScopeAncestor[];
19
20
  export declare function buildScopeEntries(ancestry: ReadonlyArray<ScopeAncestor>): PickEntry[];
@@ -36,6 +36,18 @@ export function buildStepEntries(roster) {
36
36
  description: step.description
37
37
  }));
38
38
  }
39
+ export function selectShadowedScopes(ancestry) {
40
+ const claimed = /* @__PURE__ */ new Set();
41
+ const out = [];
42
+ for (const frame of ancestry) {
43
+ const members = frame.members.filter((m) => claimed.has(m.shortcut ?? m.key));
44
+ if (members.length > 0) out.push({ ...frame, members });
45
+ for (const s of frame.shadows ?? frame.members.map((m) => m.shortcut ?? m.key)) {
46
+ claimed.add(s);
47
+ }
48
+ }
49
+ return out;
50
+ }
39
51
  export function buildScopeEntries(ancestry) {
40
52
  const out = [];
41
53
  for (const ancestor of ancestry) {
@@ -3,7 +3,7 @@ export function scopeOrigin(ancestor) {
3
3
  return ancestor.name ? `${ancestor.typeName}\u300C${ancestor.name}\u300D` : ancestor.typeName;
4
4
  }
5
5
  const SCOPE_REF_RE = new RegExp(
6
- `${SCOPE_ADDRESS_VAR}\\[("(?:[^"\\\\]|\\\\.)*")\\]\\.([A-Za-z_$][\\w$]*)`,
6
+ `${SCOPE_ADDRESS_VAR}\\[("(?:[^"\\\\]|\\\\.)*")\\]\\.([A-Za-z_$][\\w$]*(?:\\["(?:[^"\\\\]|\\\\.)*"\\])?)`,
7
7
  "g"
8
8
  );
9
9
  export function scanScopeRefs(text) {
@@ -21,6 +21,16 @@ export type ScopeAncestorMember = Readonly<{
21
21
  /** CEL type shown as the picker badge. */
22
22
  type: string;
23
23
  description?: string;
24
+ /**
25
+ * The relative shortcut this member mirrors — used by the picker to decide if
26
+ * the member is worth offering cross-layer (it is, only when a nearer frame
27
+ * shadows that shortcut; otherwise the relative name already reaches it).
28
+ * Defaults to `key`. Set explicitly when the addressed key isn't the bare
29
+ * shortcut — a form's selection member has `key = selections["<uuid>"]` but
30
+ * `shortcut = "selections"`, since it's the relative `selections` map that an
31
+ * inner row/subform shadows.
32
+ */
33
+ shortcut?: string;
24
34
  }>;
25
35
  /** A scope-exposing ancestor instance, as seen by an expression-editor picker. */
26
36
  export type ScopeAncestor = Readonly<{
@@ -33,6 +43,17 @@ export type ScopeAncestor = Readonly<{
33
43
  /** Component type icon (from type metadata). */
34
44
  typeIcon?: string;
35
45
  members: ReadonlyArray<ScopeAncestorMember>;
46
+ /**
47
+ * The relative shortcut names this host *rebinds* at runtime — i.e. the
48
+ * shortcuts it shadows for everything below it. The picker uses this (not the
49
+ * host type) to decide which of a farther frame's members are genuinely
50
+ * shadowed and thus worth offering cross-layer. It is broader than `members`:
51
+ * a table offers only `row`/`index` cross-layer but its row-provider also
52
+ * rebinds `selections`, so a table must list `selections` here to (correctly)
53
+ * shadow an enclosing form's selection options. Defaults to the members'
54
+ * `shortcut`s when omitted.
55
+ */
56
+ shadows?: ReadonlyArray<string>;
36
57
  }>;
37
58
  /**
38
59
  * Contribute one scope-exposing ancestor frame. Descendant editors see it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/config",
3
- "version": "2.9.11",
3
+ "version": "2.9.13",
4
4
  "description": "Configurable UI for SHWFED",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -1 +0,0 @@
1
- import{ba as e}from"./index-Cyjm-GKs.js";import{bb as f,bc as r,bd as s}from"./index-Cyjm-GKs.js";export{f as TableConfig,r as createTableConfig,e as default,s as getColumnTechnicalKey};