@shwfed/config 3.0.16 → 3.0.17

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 (103) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/buttons/2026-06-25/com.shwfed.actions.button.state.write/config.d.vue.ts +8 -8
  3. package/dist/runtime/components/actions/buttons/2026-06-25/com.shwfed.actions.button.state.write/config.vue.d.ts +8 -8
  4. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/config.d.vue.ts +8 -8
  5. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/config.vue.d.ts +8 -8
  6. package/dist/runtime/components/actions/buttons/2026-07-13/com.shwfed.actions.button.state.write/runtime.vue +1 -16
  7. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/config.d.vue.ts +6 -6
  8. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/config.vue.d.ts +6 -6
  9. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/runtime.d.vue.ts +6 -6
  10. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/runtime.vue.d.ts +6 -6
  11. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.d.vue.ts +22 -22
  12. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.vue.d.ts +22 -22
  13. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
  14. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
  15. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.d.vue.ts +22 -22
  16. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.vue.d.ts +22 -22
  17. package/dist/runtime/components/form/index.vue +57 -2
  18. package/dist/runtime/components/form/schema.d.ts +5 -0
  19. package/dist/runtime/components/form/schema.js +14 -1
  20. package/dist/runtime/components/form/utils/state-write.d.ts +9 -0
  21. package/dist/runtime/components/form/utils/state-write.js +16 -0
  22. package/dist/runtime/components/operations/2026-07-19/com.shwfed.operation.form.state.write/config.d.vue.ts +21 -0
  23. package/dist/runtime/components/operations/2026-07-19/com.shwfed.operation.form.state.write/config.vue +100 -0
  24. package/dist/runtime/components/operations/2026-07-19/com.shwfed.operation.form.state.write/config.vue.d.ts +21 -0
  25. package/dist/runtime/components/operations/2026-07-19/com.shwfed.operation.form.state.write/schema.d.ts +18 -0
  26. package/dist/runtime/components/operations/2026-07-19/com.shwfed.operation.form.state.write/schema.js +47 -0
  27. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -0
  28. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.vue +32 -0
  29. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -0
  30. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/schema.d.ts +1 -0
  31. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/schema.js +1 -1
  32. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/config.vue +32 -0
  33. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.d.ts +1 -0
  34. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.js +1 -1
  35. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/config.vue +28 -0
  36. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/schema.d.ts +1 -0
  37. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/schema.js +1 -1
  38. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/config.vue +32 -0
  39. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.d.ts +1 -0
  40. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.js +1 -1
  41. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/config.vue +32 -0
  42. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.d.ts +1 -0
  43. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.js +1 -1
  44. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -0
  45. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.vue +32 -0
  46. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -0
  47. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/schema.d.ts +1 -0
  48. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/schema.js +1 -1
  49. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -0
  50. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.vue +22 -0
  51. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -0
  52. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/schema.d.ts +1 -0
  53. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/schema.js +1 -1
  54. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -0
  55. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.vue +22 -0
  56. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -0
  57. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/schema.d.ts +1 -0
  58. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/schema.js +1 -1
  59. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -0
  60. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue +22 -0
  61. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -0
  62. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +1 -0
  63. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/schema.js +1 -1
  64. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -0
  65. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue +22 -0
  66. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -0
  67. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/schema.d.ts +1 -0
  68. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/schema.js +1 -1
  69. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -0
  70. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue +22 -0
  71. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -0
  72. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +1 -0
  73. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.js +1 -1
  74. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -0
  75. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue +22 -0
  76. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -0
  77. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.d.ts +1 -0
  78. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.js +1 -1
  79. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -0
  80. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +22 -0
  81. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -0
  82. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +1 -0
  83. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +1 -1
  84. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -0
  85. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +22 -0
  86. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -0
  87. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +1 -0
  88. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +1 -1
  89. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +32 -0
  90. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +1 -0
  91. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +1 -1
  92. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/config.vue +32 -0
  93. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.d.ts +1 -0
  94. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.js +1 -1
  95. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/config.vue +32 -0
  96. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/schema.d.ts +1 -0
  97. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/schema.js +1 -1
  98. package/dist/runtime/components/table/index.d.vue.ts +1 -0
  99. package/dist/runtime/components/table/index.vue +12 -1
  100. package/dist/runtime/components/table/index.vue.d.ts +1 -0
  101. package/dist/runtime/components/table/utils/shared.d.ts +2 -1
  102. package/dist/runtime/components/table/utils/shared.js +24 -1
  103. package/package.json +1 -1
@@ -23,6 +23,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
23
23
  readonly locale: "en" | "ja" | "ko";
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
+ readonly required?: string | undefined;
26
27
  readonly compatibilityDate: "2026-05-28";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -87,6 +88,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
87
88
  readonly locale: "en" | "ja" | "ko";
88
89
  readonly message: string;
89
90
  }[]] | undefined;
91
+ readonly required?: string | undefined;
90
92
  readonly compatibilityDate: "2026-05-28";
91
93
  readonly grow?: boolean | undefined;
92
94
  readonly groupId?: string | undefined;
@@ -578,6 +578,28 @@ const derivedModel = computed({
578
578
  @update:model-value="(v) => setOptionalExpression('readonly', v)"
579
579
  />
580
580
  </Field>
581
+ <Field orientation="vertical">
582
+ <FieldLabel class="text-xs text-zinc-500">
583
+ <template
584
+ v-if="fieldDescription('required')"
585
+ #tooltip
586
+ >
587
+ <Markdown
588
+ :source="fieldDescription('required')"
589
+ block
590
+ class="prose prose-sm prose-zinc"
591
+ />
592
+ </template>
593
+ {{ fieldTitle("required") }}
594
+ </FieldLabel>
595
+ <ExpressionEditor
596
+ :model-value="value.required ?? ''"
597
+ placeholder="例:row.type == 'company'"
598
+ result-type="bool"
599
+ :extra-vars="ROW_VARS"
600
+ @update:model-value="(v) => setOptionalExpression('required', v)"
601
+ />
602
+ </Field>
581
603
  <Field
582
604
  orientation="vertical"
583
605
  class="col-span-2"
@@ -23,6 +23,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
23
23
  readonly locale: "en" | "ja" | "ko";
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
+ readonly required?: string | undefined;
26
27
  readonly compatibilityDate: "2026-05-28";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -87,6 +88,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
87
88
  readonly locale: "en" | "ja" | "ko";
88
89
  readonly message: string;
89
90
  }[]] | undefined;
91
+ readonly required?: string | undefined;
90
92
  readonly compatibilityDate: "2026-05-28";
91
93
  readonly grow?: boolean | undefined;
92
94
  readonly groupId?: string | undefined;
@@ -113,6 +113,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
113
113
  readonly locale: "en" | "ja" | "ko";
114
114
  readonly message: string;
115
115
  }[]], never>>;
116
+ required: Schema.optional<Schema.Schema<string, string, never>>;
116
117
  id: Schema.refine<string, typeof Schema.String>;
117
118
  groupId: Schema.optional<typeof Schema.UUID>;
118
119
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-multi"]>;
@@ -64,7 +64,7 @@ export function schema(configure) {
64
64
  return Schema.Struct({
65
65
  type: Schema.Literal(type),
66
66
  compatibilityDate: Schema.Literal(compatibilityDate),
67
- ...editableColumnFields(),
67
+ ...editableColumnFields(configure),
68
68
  placeholder: Schema.optional(Locale.annotations({
69
69
  title: "\u5360\u4F4D\u7B26",
70
70
  description: "\u672A\u9009\u4E2D\u4EFB\u4F55\u9009\u9879\u65F6\u8F93\u5165\u6846\u4E2D\u7684\u5360\u4F4D\u6587\u672C"
@@ -23,6 +23,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
23
23
  readonly locale: "en" | "ja" | "ko";
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
+ readonly required?: string | undefined;
26
27
  readonly compatibilityDate: "2026-05-28";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -86,6 +87,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
86
87
  readonly locale: "en" | "ja" | "ko";
87
88
  readonly message: string;
88
89
  }[]] | undefined;
90
+ readonly required?: string | undefined;
89
91
  readonly compatibilityDate: "2026-05-28";
90
92
  readonly grow?: boolean | undefined;
91
93
  readonly groupId?: string | undefined;
@@ -509,6 +509,28 @@ const derivedModel = computed({
509
509
  @update:model-value="(v) => setOptionalExpression('readonly', v)"
510
510
  />
511
511
  </Field>
512
+ <Field orientation="vertical">
513
+ <FieldLabel class="text-xs text-zinc-500">
514
+ <template
515
+ v-if="fieldDescription('required')"
516
+ #tooltip
517
+ >
518
+ <Markdown
519
+ :source="fieldDescription('required')"
520
+ block
521
+ class="prose prose-sm prose-zinc"
522
+ />
523
+ </template>
524
+ {{ fieldTitle("required") }}
525
+ </FieldLabel>
526
+ <ExpressionEditor
527
+ :model-value="value.required ?? ''"
528
+ placeholder="例:row.type == 'company'"
529
+ result-type="bool"
530
+ :extra-vars="ROW_VARS"
531
+ @update:model-value="(v) => setOptionalExpression('required', v)"
532
+ />
533
+ </Field>
512
534
  <Field
513
535
  orientation="vertical"
514
536
  class="col-span-2"
@@ -23,6 +23,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
23
23
  readonly locale: "en" | "ja" | "ko";
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
+ readonly required?: string | undefined;
26
27
  readonly compatibilityDate: "2026-05-28";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -86,6 +87,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
86
87
  readonly locale: "en" | "ja" | "ko";
87
88
  readonly message: string;
88
89
  }[]] | undefined;
90
+ readonly required?: string | undefined;
89
91
  readonly compatibilityDate: "2026-05-28";
90
92
  readonly grow?: boolean | undefined;
91
93
  readonly groupId?: string | undefined;
@@ -110,6 +110,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
110
110
  readonly locale: "en" | "ja" | "ko";
111
111
  readonly message: string;
112
112
  }[]], never>>;
113
+ required: Schema.optional<Schema.Schema<string, string, never>>;
113
114
  id: Schema.refine<string, typeof Schema.String>;
114
115
  groupId: Schema.optional<typeof Schema.UUID>;
115
116
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-single"]>;
@@ -64,7 +64,7 @@ export function schema(configure) {
64
64
  return Schema.Struct({
65
65
  type: Schema.Literal(type),
66
66
  compatibilityDate: Schema.Literal(compatibilityDate),
67
- ...editableColumnFields(),
67
+ ...editableColumnFields(configure),
68
68
  placeholder: Schema.optional(Locale.annotations({
69
69
  title: "\u5360\u4F4D\u7B26",
70
70
  description: "\u672A\u9009\u4E2D\u4EFB\u4F55\u9009\u9879\u65F6\u8F93\u5165\u6846\u4E2D\u7684\u5360\u4F4D\u6587\u672C"
@@ -24,6 +24,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
26
  readonly align: "center" | "left" | "right";
27
+ readonly required?: string | undefined;
27
28
  readonly compatibilityDate: "2026-06-14";
28
29
  readonly grow?: boolean | undefined;
29
30
  readonly groupId?: string | undefined;
@@ -83,6 +84,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
83
84
  readonly message: string;
84
85
  }[]] | undefined;
85
86
  readonly align: "center" | "left" | "right";
87
+ readonly required?: string | undefined;
86
88
  readonly compatibilityDate: "2026-06-14";
87
89
  readonly grow?: boolean | undefined;
88
90
  readonly groupId?: string | undefined;
@@ -602,6 +602,28 @@ const derivedModel = computed({
602
602
  @update:model-value="(v) => setOptionalExpression('readonly', v)"
603
603
  />
604
604
  </Field>
605
+ <Field orientation="vertical">
606
+ <FieldLabel class="text-xs text-zinc-500">
607
+ <template
608
+ v-if="fieldDescription('required')"
609
+ #tooltip
610
+ >
611
+ <Markdown
612
+ :source="fieldDescription('required')"
613
+ block
614
+ class="prose prose-sm prose-zinc"
615
+ />
616
+ </template>
617
+ {{ fieldTitle("required") }}
618
+ </FieldLabel>
619
+ <ExpressionEditor
620
+ :model-value="value.required ?? ''"
621
+ placeholder="例:row.type == 'company'"
622
+ result-type="bool"
623
+ :extra-vars="ROW_VARS"
624
+ @update:model-value="(v) => setOptionalExpression('required', v)"
625
+ />
626
+ </Field>
605
627
  <Field
606
628
  orientation="vertical"
607
629
  class="col-span-2"
@@ -24,6 +24,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
26
  readonly align: "center" | "left" | "right";
27
+ readonly required?: string | undefined;
27
28
  readonly compatibilityDate: "2026-06-14";
28
29
  readonly grow?: boolean | undefined;
29
30
  readonly groupId?: string | undefined;
@@ -83,6 +84,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
83
84
  readonly message: string;
84
85
  }[]] | undefined;
85
86
  readonly align: "center" | "left" | "right";
87
+ readonly required?: string | undefined;
86
88
  readonly compatibilityDate: "2026-06-14";
87
89
  readonly grow?: boolean | undefined;
88
90
  readonly groupId?: string | undefined;
@@ -99,6 +99,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
99
99
  readonly message: string;
100
100
  }[]], never>>;
101
101
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
102
+ required: Schema.optional<Schema.Schema<string, string, never>>;
102
103
  id: Schema.refine<string, typeof Schema.String>;
103
104
  groupId: Schema.optional<typeof Schema.UUID>;
104
105
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-multi"]>;
@@ -68,7 +68,7 @@ export function schema(configure) {
68
68
  return Schema.Struct({
69
69
  type: Schema.Literal(type),
70
70
  compatibilityDate: Schema.Literal(compatibilityDate),
71
- ...editableColumnFields(),
71
+ ...editableColumnFields(configure),
72
72
  align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
73
73
  placeholder: Schema.optional(Locale.annotations({
74
74
  title: "\u5360\u4F4D\u7B26",
@@ -24,6 +24,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
26
  readonly align: "center" | "left" | "right";
27
+ readonly required?: string | undefined;
27
28
  readonly compatibilityDate: "2026-06-14";
28
29
  readonly grow?: boolean | undefined;
29
30
  readonly groupId?: string | undefined;
@@ -82,6 +83,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
82
83
  readonly message: string;
83
84
  }[]] | undefined;
84
85
  readonly align: "center" | "left" | "right";
86
+ readonly required?: string | undefined;
85
87
  readonly compatibilityDate: "2026-06-14";
86
88
  readonly grow?: boolean | undefined;
87
89
  readonly groupId?: string | undefined;
@@ -533,6 +533,28 @@ const derivedModel = computed({
533
533
  @update:model-value="(v) => setOptionalExpression('readonly', v)"
534
534
  />
535
535
  </Field>
536
+ <Field orientation="vertical">
537
+ <FieldLabel class="text-xs text-zinc-500">
538
+ <template
539
+ v-if="fieldDescription('required')"
540
+ #tooltip
541
+ >
542
+ <Markdown
543
+ :source="fieldDescription('required')"
544
+ block
545
+ class="prose prose-sm prose-zinc"
546
+ />
547
+ </template>
548
+ {{ fieldTitle("required") }}
549
+ </FieldLabel>
550
+ <ExpressionEditor
551
+ :model-value="value.required ?? ''"
552
+ placeholder="例:row.type == 'company'"
553
+ result-type="bool"
554
+ :extra-vars="ROW_VARS"
555
+ @update:model-value="(v) => setOptionalExpression('required', v)"
556
+ />
557
+ </Field>
536
558
  <Field
537
559
  orientation="vertical"
538
560
  class="col-span-2"
@@ -24,6 +24,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
24
24
  readonly message: string;
25
25
  }[]] | undefined;
26
26
  readonly align: "center" | "left" | "right";
27
+ readonly required?: string | undefined;
27
28
  readonly compatibilityDate: "2026-06-14";
28
29
  readonly grow?: boolean | undefined;
29
30
  readonly groupId?: string | undefined;
@@ -82,6 +83,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
82
83
  readonly message: string;
83
84
  }[]] | undefined;
84
85
  readonly align: "center" | "left" | "right";
86
+ readonly required?: string | undefined;
85
87
  readonly compatibilityDate: "2026-06-14";
86
88
  readonly grow?: boolean | undefined;
87
89
  readonly groupId?: string | undefined;
@@ -96,6 +96,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
96
96
  readonly message: string;
97
97
  }[]], never>>;
98
98
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
99
+ required: Schema.optional<Schema.Schema<string, string, never>>;
99
100
  id: Schema.refine<string, typeof Schema.String>;
100
101
  groupId: Schema.optional<typeof Schema.UUID>;
101
102
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-single"]>;
@@ -68,7 +68,7 @@ export function schema(configure) {
68
68
  return Schema.Struct({
69
69
  type: Schema.Literal(type),
70
70
  compatibilityDate: Schema.Literal(compatibilityDate),
71
- ...editableColumnFields(),
71
+ ...editableColumnFields(configure),
72
72
  align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
73
73
  placeholder: Schema.optional(Locale.annotations({
74
74
  title: "\u5360\u4F4D\u7B26",
@@ -202,6 +202,17 @@ const readonlyModel = computed({
202
202
  }
203
203
  }
204
204
  });
205
+ const requiredModel = computed({
206
+ get: () => value.value.required ?? "",
207
+ set: (v) => {
208
+ if (v === "") {
209
+ const { required: _drop, ...rest } = value.value;
210
+ value.value = rest;
211
+ } else {
212
+ value.value = { ...value.value, required: v };
213
+ }
214
+ }
215
+ });
205
216
  const disabledDateModel = computed({
206
217
  get: () => value.value.disabledDate ?? "",
207
218
  set: (v) => {
@@ -473,6 +484,27 @@ const derivedModel = computed({
473
484
  :extra-vars="ROW_VARS"
474
485
  />
475
486
  </Field>
487
+ <Field orientation="vertical">
488
+ <FieldLabel class="text-xs text-zinc-500">
489
+ <template
490
+ v-if="fieldDescription('required')"
491
+ #tooltip
492
+ >
493
+ <Markdown
494
+ :source="fieldDescription('required')"
495
+ block
496
+ class="prose prose-sm prose-zinc"
497
+ />
498
+ </template>
499
+ {{ fieldTitle("required") }}
500
+ </FieldLabel>
501
+ <ExpressionEditor
502
+ v-model="requiredModel"
503
+ placeholder="例:row.type == 'company'"
504
+ result-type="bool"
505
+ :extra-vars="ROW_VARS"
506
+ />
507
+ </Field>
476
508
  <Field orientation="vertical">
477
509
  <FieldLabel class="text-xs text-zinc-500">
478
510
  <template
@@ -233,6 +233,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
233
233
  readonly message: string;
234
234
  }[]], never>>;
235
235
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
236
+ required: Schema.optional<Schema.Schema<string, string, never>>;
236
237
  id: Schema.refine<string, typeof Schema.String>;
237
238
  groupId: Schema.optional<typeof Schema.UUID>;
238
239
  type: Schema.Literal<["com.shwfed.table.column.date-input"]>;
@@ -48,7 +48,7 @@ export function schema(configure) {
48
48
  return Schema.Struct({
49
49
  type: Schema.Literal(type),
50
50
  compatibilityDate: Schema.Literal(compatibilityDate),
51
- ...editableColumnFields(),
51
+ ...editableColumnFields(configure),
52
52
  align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
53
53
  placeholder: Schema.optional(Locale.annotations({
54
54
  title: "\u5360\u4F4D\u7B26",
@@ -202,6 +202,17 @@ const readonlyModel = computed({
202
202
  }
203
203
  }
204
204
  });
205
+ const requiredModel = computed({
206
+ get: () => value.value.required ?? "",
207
+ set: (v) => {
208
+ if (v === "") {
209
+ const { required: _drop, ...rest } = value.value;
210
+ value.value = rest;
211
+ } else {
212
+ value.value = { ...value.value, required: v };
213
+ }
214
+ }
215
+ });
205
216
  const disabledDateModel = computed({
206
217
  get: () => value.value.disabledDate ?? "",
207
218
  set: (v) => {
@@ -569,6 +580,27 @@ const derivedModel = computed({
569
580
  :extra-vars="ROW_VARS"
570
581
  />
571
582
  </Field>
583
+ <Field orientation="vertical">
584
+ <FieldLabel class="text-xs text-zinc-500">
585
+ <template
586
+ v-if="fieldDescription('required')"
587
+ #tooltip
588
+ >
589
+ <Markdown
590
+ :source="fieldDescription('required')"
591
+ block
592
+ class="prose prose-sm prose-zinc"
593
+ />
594
+ </template>
595
+ {{ fieldTitle("required") }}
596
+ </FieldLabel>
597
+ <ExpressionEditor
598
+ v-model="requiredModel"
599
+ placeholder="例:row.type == 'company'"
600
+ result-type="bool"
601
+ :extra-vars="ROW_VARS"
602
+ />
603
+ </Field>
572
604
  <Field orientation="vertical">
573
605
  <FieldLabel class="text-xs text-zinc-500">
574
606
  <template
@@ -118,6 +118,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
118
118
  readonly message: string;
119
119
  }[]], never>>;
120
120
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
121
+ required: Schema.optional<Schema.Schema<string, string, never>>;
121
122
  id: Schema.refine<string, typeof Schema.String>;
122
123
  groupId: Schema.optional<typeof Schema.UUID>;
123
124
  type: Schema.Literal<["com.shwfed.table.column.date-range-input"]>;
@@ -46,7 +46,7 @@ export function schema(configure) {
46
46
  return Schema.Struct({
47
47
  type: Schema.Literal(type),
48
48
  compatibilityDate: Schema.Literal(compatibilityDate),
49
- ...editableColumnFields(),
49
+ ...editableColumnFields(configure),
50
50
  align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
51
51
  // Swap the inherited single-string `binding` for the range union.
52
52
  binding: bindingSchema,
@@ -79,6 +79,17 @@ const readonlyModel = computed({
79
79
  }
80
80
  }
81
81
  });
82
+ const requiredModel = computed({
83
+ get: () => value.value.required ?? "",
84
+ set: (v) => {
85
+ if (v === "") {
86
+ const { required: _drop, ...rest } = value.value;
87
+ value.value = rest;
88
+ } else {
89
+ value.value = { ...value.value, required: v };
90
+ }
91
+ }
92
+ });
82
93
  function onHiddenChange(v) {
83
94
  if (v) {
84
95
  value.value = { ...value.value, hidden: true };
@@ -746,6 +757,27 @@ const DownloadScope = defineComponent({
746
757
  :extra-vars="ROW_VARS"
747
758
  />
748
759
  </Field>
760
+ <Field orientation="vertical">
761
+ <FieldLabel class="text-xs text-zinc-500">
762
+ <template
763
+ v-if="fieldDescription('required')"
764
+ #tooltip
765
+ >
766
+ <Markdown
767
+ :source="fieldDescription('required')"
768
+ block
769
+ class="prose prose-sm prose-zinc"
770
+ />
771
+ </template>
772
+ {{ fieldTitle("required") }}
773
+ </FieldLabel>
774
+ <ExpressionEditor
775
+ v-model="requiredModel"
776
+ placeholder="例:row.type == 'company'"
777
+ result-type="bool"
778
+ :extra-vars="ROW_VARS"
779
+ />
780
+ </Field>
749
781
  </div>
750
782
 
751
783
  <div class="flex flex-wrap gap-x-8 gap-y-3">
@@ -106,6 +106,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
106
106
  readonly message: string;
107
107
  }[]], never>>;
108
108
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
109
+ required: Schema.optional<Schema.Schema<string, string, never>>;
109
110
  id: Schema.refine<string, typeof Schema.String>;
110
111
  groupId: Schema.optional<typeof Schema.UUID>;
111
112
  type: Schema.Literal<["com.shwfed.table.column.upload"]>;
@@ -46,7 +46,7 @@ export function schema(configure) {
46
46
  return Schema.Struct({
47
47
  type: Schema.Literal(type),
48
48
  compatibilityDate: Schema.Literal(compatibilityDate),
49
- ...editableColumnFields(),
49
+ ...editableColumnFields(configure),
50
50
  disabled: Schema.optional(CelBool.annotations({
51
51
  title: "\u7981\u7528\u6761\u4EF6",
52
52
  description: "\u8FD4\u56DE `true` \u65F6\u6DFB\u52A0\u6309\u94AE\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u64CD\u4F5C"
@@ -8,6 +8,7 @@ declare module '@tanstack/vue-table' {
8
8
  grow?: boolean;
9
9
  editable?: boolean;
10
10
  readonlyExpr?: string;
11
+ required?: boolean;
11
12
  }
12
13
  }
13
14
  declare const _default: typeof __VLS_export;
@@ -213,9 +213,11 @@ function translateColumn(column) {
213
213
  const contribution = entry.toColumnDef(column, { getLocaleText, $cel, inheritedContext: celBindings(inheritedContext) });
214
214
  const editable = isEditableHeader(contribution.header);
215
215
  const readonlyExpr = editable ? column.readonly : void 0;
216
+ const requiredExpr = editable ? column.required : void 0;
217
+ const required = typeof requiredExpr === "string" && requiredExpr.trim().length > 0;
216
218
  return {
217
219
  ...contribution,
218
- meta: { ...contribution.meta, editable, readonlyExpr },
220
+ meta: { ...contribution.meta, editable, readonlyExpr, required },
219
221
  id: column.id,
220
222
  // `ctx` is the functional-component props object Vue mutates in place on
221
223
  // every update, so its identity stays stable across data refetches.
@@ -998,6 +1000,15 @@ export { TableConfig, createTableConfig, getColumnTechnicalKey } from "./schema"
998
1000
  :props="header.getContext()"
999
1001
  />
1000
1002
 
1003
+ <!-- Required star: shown for editable columns carrying a
1004
+ non-empty `required` expression. Row-agnostic marker,
1005
+ mirrors the field-label star styling. -->
1006
+ <span
1007
+ v-if="!header.isPlaceholder && header.column.columnDef.meta?.required"
1008
+ aria-hidden="true"
1009
+ class="text-red-600"
1010
+ >*</span>
1011
+
1001
1012
  <!-- Edit affordance: marks an editable column, hidden when
1002
1013
  the column reads as readonly (form-wide or its own
1003
1014
  `readonly` condition). -->
@@ -8,6 +8,7 @@ declare module '@tanstack/vue-table' {
8
8
  grow?: boolean;
9
9
  editable?: boolean;
10
10
  readonlyExpr?: string;
11
+ required?: boolean;
11
12
  }
12
13
  }
13
14
  declare const _default: typeof __VLS_export;
@@ -43,7 +43,7 @@ export declare function columnFields(configure: (env: Environment) => void): {
43
43
  id: Schema.refine<string, typeof Schema.String>;
44
44
  groupId: Schema.optional<typeof Schema.UUID>;
45
45
  };
46
- export declare function editableColumnFields(): {
46
+ export declare function editableColumnFields(configure: (env: Environment) => void): {
47
47
  title: Schema.suspend<readonly [{
48
48
  readonly locale: "zh";
49
49
  readonly message: string;
@@ -76,6 +76,7 @@ export declare function editableColumnFields(): {
76
76
  readonly message: string;
77
77
  }[]], never>>;
78
78
  hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
79
+ required: Schema.optional<Schema.Schema<string, string, never>>;
79
80
  id: Schema.refine<string, typeof Schema.String>;
80
81
  groupId: Schema.optional<typeof Schema.UUID>;
81
82
  };
@@ -59,7 +59,22 @@ export function columnFields(configure) {
59
59
  }))
60
60
  };
61
61
  }
62
- export function editableColumnFields() {
62
+ function CelColumnRequired(configure) {
63
+ return Expression({
64
+ configure: (env) => {
65
+ configure(env);
66
+ const declared = new Set(env.getDefinitions().variables.map((v) => v.name));
67
+ if (!declared.has("row")) {
68
+ env.registerVariable("row", "dyn", { label: "\u5F53\u524D\u884C", description: "\u5F53\u524D\u884C\u6570\u636E" });
69
+ }
70
+ if (!declared.has("index")) {
71
+ env.registerVariable("index", "number", { label: "\u884C\u5E8F\u53F7", description: "\u884C\u7D22\u5F15" });
72
+ }
73
+ },
74
+ resultType: "bool"
75
+ });
76
+ }
77
+ export function editableColumnFields(configure) {
63
78
  return {
64
79
  ...columnIdentityFields(),
65
80
  title: Locale.annotations({ title: "\u540D\u79F0", description: "\u5217\u6807\u9898" }),
@@ -84,6 +99,14 @@ export function editableColumnFields() {
84
99
  hidden: Schema.optional(Schema.Boolean.annotations({
85
100
  title: "\u9ED8\u8BA4\u9690\u85CF",
86
101
  description: "\u5F00\u542F\u540E\u8BE5\u5217\u9ED8\u8BA4\u9690\u85CF\uFF1B\u4F7F\u7528\u8005\u53EF\u5728\u8868\u683C\u7684\u5217\u8BBE\u7F6E\u4E2D\u91CD\u65B0\u663E\u793A\u3002\u4EC5\u4F5C\u4E3A\u521D\u59CB\u72B6\u6001\uFF0C\u4E0D\u968F\u6570\u636E\u53D8\u5316"
102
+ })),
103
+ required: Schema.optional(CelColumnRequired(configure).annotations({
104
+ title: "\u5FC5\u586B",
105
+ description: md`
106
+ 返回 \`true\` 时,该列**表头显示必填星号**。可访问 \`row\` / \`index\` / \`form\`,因此可写「部分行必填」的条件(例如 \`row.type == 'company'\`)。
107
+
108
+ **当前版本星号仅作视觉标识,不会拦截提交**——实际必填校验请在表格字段的「校验规则」中用 CEL 编写(可读整表 \`form.<绑定路径>\`)。后续版本将据此表达式自动完成逐行校验并拦截提交。
109
+ `
87
110
  }))
88
111
  };
89
112
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/config",
3
- "version": "3.0.16",
3
+ "version": "3.0.17",
4
4
  "description": "Configurable UI for SHWFED",
5
5
  "type": "module",
6
6
  "publishConfig": {