@shwfed/config 2.10.12 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/mcp.mjs +46 -49
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-BeqytPDr.js → FieldGroup.vue_vue_type_script_setup_true_lang-UfhMyymD.js} +1 -1
  4. package/dist/preview/assets/{badge-DkHwLDps.js → badge-CJ9IQ3Jx.js} +1 -1
  5. package/dist/preview/assets/{config-Cft-srKd.js → config--Vx4fL61.js} +1 -1
  6. package/dist/preview/assets/{config-DJQ2LOWo.js → config-5PPug5mk.js} +1 -1
  7. package/dist/preview/assets/{config-Dx1SXsSf.js → config-7V1qHjUk.js} +1 -1
  8. package/dist/preview/assets/{config-Cedm-E2H.js → config-BYktCefJ.js} +1 -1
  9. package/dist/preview/assets/{config-DAZ2Uj6B.js → config-BeRYF_cz.js} +1 -1
  10. package/dist/preview/assets/{config-DCANpbtq.js → config-BldsYfGM.js} +1 -1
  11. package/dist/preview/assets/{config-Uw4cvZGX.js → config-CQrDCzYN.js} +1 -1
  12. package/dist/preview/assets/{config-7KeAl8UU.js → config-C_g-FYCR.js} +1 -1
  13. package/dist/preview/assets/{config-CZ1e9utV.js → config-DIsAIc7H.js} +1 -1
  14. package/dist/preview/assets/{config-OPQWANCx.js → config-DPX7vGqV.js} +1 -1
  15. package/dist/preview/assets/{config-DQVKd54J.js → config-DpLMetys.js} +1 -1
  16. package/dist/preview/assets/{config-CVPVYMuh.js → config-IMd4FZi8.js} +1 -1
  17. package/dist/preview/assets/{config-Cy6Eix27.js → config-N-FdgfwK.js} +1 -1
  18. package/dist/preview/assets/{config-DbV3RlZz.js → config-uUF-UHPt.js} +1 -1
  19. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-D4Gh9PzS.js → definition.vue_vue_type_script_setup_true_lang-B_PKfe3G.js} +1 -1
  20. package/dist/preview/assets/index-8Ph-sFDI.css +1 -0
  21. package/dist/preview/assets/index-BCl1NN6k.js +763 -0
  22. package/dist/preview/assets/index-Core7vRW.js +1 -0
  23. package/dist/preview/assets/{index-Cum0oK9u.js → index-DKWp47QP.js} +1 -1
  24. package/dist/preview/assets/{item-H4QeOpnC.js → item-XsW7swFt.js} +1 -1
  25. package/dist/preview/assets/{runtime-CTnwTJlw.js → runtime-B-ABO0r0.js} +1 -1
  26. package/dist/preview/assets/{runtime-C3532B0Y.js → runtime-BeHohaOZ.js} +1 -1
  27. package/dist/preview/assets/{runtime-CNMjRr9Y.js → runtime-BiFFwOIl.js} +1 -1
  28. package/dist/preview/assets/{runtime-ibuFFD1K.js → runtime-ByArW-jJ.js} +1 -1
  29. package/dist/preview/assets/{runtime-DvCHNIPq.js → runtime-CpVTGNFZ.js} +1 -1
  30. package/dist/preview/assets/{runtime-sPGVp7yA.js → runtime-DQ1TnQ7n.js} +1 -1
  31. package/dist/preview/assets/{runtime-CwgX0PuH.js → runtime-DY7hr7v1.js} +1 -1
  32. package/dist/preview/assets/{runtime-BotFX6qJ.js → runtime-Dn172S7t.js} +1 -1
  33. package/dist/preview/assets/{runtime-D5HcLLLR.js → runtime-JxBzvGnw.js} +1 -1
  34. package/dist/preview/assets/{runtime-cKOD2A6u.js → runtime-bq0hmEXY.js} +1 -1
  35. package/dist/preview/assets/{schema-meta-DtZNwp3h.js → schema-meta-CZ9yXnsa.js} +1 -1
  36. package/dist/preview/index.html +2 -2
  37. package/dist/runtime/components/form/fields/2026-06-09/com.shwfed.form.field.upload/runtime.vue +23 -1
  38. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/config.vue +30 -0
  39. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.d.ts +2 -1
  40. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.js +1 -1
  41. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/config.vue +30 -0
  42. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.d.ts +2 -1
  43. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.js +7 -4
  44. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/config.vue +30 -0
  45. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.d.ts +2 -1
  46. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.js +1 -1
  47. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/config.vue +30 -0
  48. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.d.ts +2 -1
  49. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.js +1 -1
  50. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.d.ts +2 -1
  51. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.js +1 -0
  52. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/config.vue +30 -0
  53. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.d.ts +2 -1
  54. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.js +1 -1
  55. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/config.vue +60 -32
  56. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +7 -9
  57. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.d.ts +4 -1
  58. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.js +2 -5
  59. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/config.vue +67 -32
  60. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +6 -9
  61. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.d.ts +4 -1
  62. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.js +2 -5
  63. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/config.vue +66 -31
  64. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +7 -9
  65. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.d.ts +4 -1
  66. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.js +2 -5
  67. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
  68. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
  69. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.d.ts +1 -1
  70. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.js +1 -0
  71. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
  72. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
  73. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.d.ts +1 -1
  74. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.js +1 -0
  75. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
  76. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
  77. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.d.ts +1 -1
  78. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.js +1 -0
  79. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
  80. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
  81. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.d.ts +1 -1
  82. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.js +1 -0
  83. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
  84. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
  85. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.d.ts +1 -1
  86. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.js +1 -0
  87. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
  88. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
  89. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.d.ts +1 -1
  90. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.js +1 -0
  91. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +4 -2
  92. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +61 -22
  93. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +4 -2
  94. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +6 -9
  95. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +4 -1
  96. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +3 -4
  97. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +4 -2
  98. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +61 -22
  99. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +4 -2
  100. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +6 -9
  101. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +4 -1
  102. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +3 -4
  103. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +4 -2
  104. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +67 -23
  105. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +4 -2
  106. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +6 -9
  107. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +4 -1
  108. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -4
  109. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +4 -2
  110. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +67 -23
  111. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +4 -2
  112. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +6 -9
  113. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +4 -1
  114. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +2 -4
  115. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +67 -32
  116. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue +7 -9
  117. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +4 -1
  118. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +2 -5
  119. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/config.vue +66 -31
  120. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/runtime.vue +5 -8
  121. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.d.ts +4 -1
  122. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.js +2 -5
  123. package/dist/runtime/components/table/index.vue +46 -7
  124. package/dist/runtime/components/table/utils/runtime.d.ts +1 -0
  125. package/dist/runtime/components/table/utils/runtime.js +5 -0
  126. package/dist/runtime/components/table/utils/shared.d.ts +3 -1
  127. package/dist/runtime/components/table/utils/shared.js +17 -5
  128. package/package.json +1 -1
  129. package/dist/preview/assets/index-B3HnlKis.js +0 -763
  130. package/dist/preview/assets/index-BAY6NLoo.css +0 -1
  131. package/dist/preview/assets/index-CxUuhfsO.js +0 -1
@@ -10,6 +10,12 @@ import {
10
10
  InputGroupInput,
11
11
  InputGroupNumberField
12
12
  } from "../../../../ui/input-group";
13
+ import {
14
+ DropdownMenu,
15
+ DropdownMenuContent,
16
+ DropdownMenuItem,
17
+ DropdownMenuTrigger
18
+ } from "../../../../ui/dropdown-menu";
13
19
  import { Locale as LocaleField } from "../../../../ui/locale";
14
20
  import { Markdown } from "../../../../ui/markdown";
15
21
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../../../ui/select";
@@ -29,6 +35,14 @@ const dataSourceSchema = DataSource(() => {
29
35
  });
30
36
  const dataSourceFieldTitle = (f) => getStructFieldTitle(dataSourceSchema, f) ?? f;
31
37
  const dataSourceFieldDescription = (f) => getStructFieldDescription(dataSourceSchema, f);
38
+ const ALIGN_OPTIONS = [
39
+ { value: "left", label: "\u5DE6\u5BF9\u9F50", icon: "fluent:text-align-left-20-regular" },
40
+ { value: "center", label: "\u5C45\u4E2D", icon: "fluent:text-align-center-20-regular" },
41
+ { value: "right", label: "\u53F3\u5BF9\u9F50", icon: "fluent:text-align-right-20-regular" }
42
+ ];
43
+ const currentAlignIcon = computed(
44
+ () => (ALIGN_OPTIONS.find((o) => o.value === (value.value.align ?? "left")) ?? ALIGN_OPTIONS[0]).icon
45
+ );
32
46
  const ROW_VARS = {
33
47
  row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
34
48
  index: { type: "number", label: "\u884C\u7D22\u5F15" }
@@ -112,6 +126,14 @@ function setDataSourceRequest(next) {
112
126
  };
113
127
  }
114
128
  }
129
+ function onHiddenChange(v) {
130
+ if (v) {
131
+ value.value = { ...value.value, hidden: true };
132
+ } else {
133
+ const { hidden: _drop, ...rest } = value.value;
134
+ value.value = rest;
135
+ }
136
+ }
115
137
  const derivedModel = computed({
116
138
  get: () => value.value.derived,
117
139
  set: (v) => {
@@ -219,6 +241,29 @@ const derivedModel = computed({
219
241
  {{ fieldTitle("size") }}
220
242
  </FieldLabel>
221
243
  <InputGroup>
244
+ <InputGroupAddon align="inline-start">
245
+ <DropdownMenu>
246
+ <DropdownMenuTrigger as-child>
247
+ <InputGroupButton
248
+ variant="ghost"
249
+ size="xs"
250
+ :title="fieldTitle('align')"
251
+ >
252
+ <Icon :icon="currentAlignIcon" />
253
+ </InputGroupButton>
254
+ </DropdownMenuTrigger>
255
+ <DropdownMenuContent align="start">
256
+ <DropdownMenuItem
257
+ v-for="opt in ALIGN_OPTIONS"
258
+ :key="opt.value"
259
+ @select="value = { ...value, align: opt.value }"
260
+ >
261
+ <Icon :icon="opt.icon" />
262
+ {{ opt.label }}
263
+ </DropdownMenuItem>
264
+ </DropdownMenuContent>
265
+ </DropdownMenu>
266
+ </InputGroupAddon>
222
267
  <InputGroupNumberField
223
268
  :model-value="value.size"
224
269
  :disabled="value.grow"
@@ -511,30 +556,8 @@ const derivedModel = computed({
511
556
  </Field>
512
557
  </div>
513
558
 
514
- <!-- 通用: 隐藏 / 禁用 / 只读 + 派生值 -->
559
+ <!-- 通用: 禁用 / 只读 + 派生值 -->
515
560
  <div class="grid grid-cols-2 gap-x-6 gap-y-4">
516
- <Field orientation="vertical">
517
- <FieldLabel class="text-xs text-zinc-500">
518
- <template
519
- v-if="fieldDescription('hidden')"
520
- #tooltip
521
- >
522
- <Markdown
523
- :source="fieldDescription('hidden')"
524
- block
525
- class="prose prose-sm prose-zinc"
526
- />
527
- </template>
528
- {{ fieldTitle("hidden") }}
529
- </FieldLabel>
530
- <ExpressionEditor
531
- :model-value="value.hidden ?? ''"
532
- placeholder="例:row.archived"
533
- result-type="bool"
534
- :extra-vars="ROW_VARS"
535
- @update:model-value="(v) => setOptionalExpression('hidden', v)"
536
- />
537
- </Field>
538
561
  <Field orientation="vertical">
539
562
  <FieldLabel class="text-xs text-zinc-500">
540
563
  <template
@@ -641,6 +664,27 @@ const derivedModel = computed({
641
664
  </InputGroupAddon>
642
665
  </InputGroup>
643
666
  </Field>
667
+ <Field orientation="vertical">
668
+ <FieldLabel class="text-xs text-zinc-500">
669
+ <template
670
+ v-if="fieldDescription('hidden')"
671
+ #tooltip
672
+ >
673
+ <Markdown
674
+ :source="fieldDescription('hidden')"
675
+ block
676
+ class="prose prose-sm prose-zinc"
677
+ />
678
+ </template>
679
+ {{ fieldTitle("hidden") }}
680
+ </FieldLabel>
681
+ <div>
682
+ <Switch
683
+ :model-value="value.hidden ?? false"
684
+ @update:model-value="onHiddenChange"
685
+ />
686
+ </div>
687
+ </Field>
644
688
  </div>
645
689
  </div>
646
690
  </template>
@@ -15,7 +15,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
15
15
  readonly locale: "en" | "ja" | "ko";
16
16
  readonly message: string;
17
17
  }[]];
18
- readonly hidden?: string | undefined;
18
+ readonly hidden?: boolean | undefined;
19
19
  readonly tooltip?: readonly [{
20
20
  readonly locale: "zh";
21
21
  readonly message: string;
@@ -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 align: "center" | "left" | "right";
26
27
  readonly compatibilityDate: "2026-06-14";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -73,7 +74,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
73
74
  readonly locale: "en" | "ja" | "ko";
74
75
  readonly message: string;
75
76
  }[]];
76
- readonly hidden?: string | undefined;
77
+ readonly hidden?: boolean | undefined;
77
78
  readonly tooltip?: readonly [{
78
79
  readonly locale: "zh";
79
80
  readonly message: string;
@@ -81,6 +82,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
81
82
  readonly locale: "en" | "ja" | "ko";
82
83
  readonly message: string;
83
84
  }[]] | undefined;
85
+ readonly align: "center" | "left" | "right";
84
86
  readonly compatibilityDate: "2026-06-14";
85
87
  readonly grow?: boolean | undefined;
86
88
  readonly groupId?: string | undefined;
@@ -15,7 +15,7 @@ import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../..
15
15
  import { Skeleton } from "../../../../ui/skeleton";
16
16
  import { Tree as UiTree } from "../../../../ui/tree";
17
17
  import { useFormState } from "../../../../form/utils/state";
18
- import { interpolateMarkdown } from "../../../utils/runtime";
18
+ import { JUSTIFY_CLASS, TEXT_ALIGN_CLASS, interpolateMarkdown } from "../../../utils/runtime";
19
19
  import { useSharedFetchLayer } from "../../../utils/shared-fetch";
20
20
  import {
21
21
  findWrappedPath,
@@ -71,7 +71,6 @@ function evalBool(expression, label) {
71
71
  return false;
72
72
  }
73
73
  }
74
- const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
75
74
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
76
75
  const formReadonly = useFormReadonly();
77
76
  const isReadonly = computed(
@@ -80,6 +79,8 @@ const isReadonly = computed(
80
79
  const effectiveReadonly = computed(
81
80
  () => isReadonly.value || props.column.derived?.mode === "formula"
82
81
  );
82
+ const justifyClass = computed(() => JUSTIFY_CLASS[props.column.align ?? "left"] ?? JUSTIFY_CLASS.left);
83
+ const textAlignClass = computed(() => TEXT_ALIGN_CLASS[props.column.align ?? "left"] ?? TEXT_ALIGN_CLASS.left);
83
84
  const committedKeys = computed(() => {
84
85
  const raw = formState.getAt(props.column.binding);
85
86
  return Array.isArray(raw) ? raw.map((v) => String(v)) : [];
@@ -325,10 +326,6 @@ const hoveredTooltip = computed(() => {
325
326
 
326
327
  <template>
327
328
  <div class="p-[0.125rem] w-full">
328
- <span
329
- v-if="isHidden"
330
- class="block h-7 w-full"
331
- />
332
329
  <!--
333
330
  Readonly empty state mirrors the `text` column exactly: a centered,
334
331
  faded, non-selectable `-` in `font-mono`, so a readonly grid reads
@@ -336,10 +333,10 @@ const hoveredTooltip = computed(() => {
336
333
  left-aligned dark text.
337
334
  -->
338
335
  <span
339
- v-else-if="effectiveReadonly"
336
+ v-if="effectiveReadonly"
340
337
  :class="[
341
338
  'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
342
- readonlyLabel ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
339
+ readonlyLabel ? ['text-zinc-700', justifyClass] : 'justify-center font-mono text-zinc-300 select-none'
343
340
  ]"
344
341
  >
345
342
  {{ readonlyLabel || "-" }}
@@ -358,7 +355,7 @@ const hoveredTooltip = computed(() => {
358
355
  :model-value="triggerLabel"
359
356
  :disabled="isDisabled"
360
357
  :placeholder="placeholderText"
361
- class="h-7 text-[0.75rem] md:text-[0.75rem] px-2 cursor-pointer text-left"
358
+ :class="['h-7 text-[0.75rem] md:text-[0.75rem] px-2 cursor-pointer', textAlignClass]"
362
359
  readonly
363
360
  />
364
361
  </PopoverTrigger>
@@ -10,6 +10,9 @@ export declare const metadata: {
10
10
  readonly selection: true;
11
11
  };
12
12
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
13
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
14
+ default: () => "left";
15
+ }>;
13
16
  placeholder: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
14
17
  locale: Schema.Literal<["zh"]>;
15
18
  message: Schema.SchemaClass<string, string, never>;
@@ -17,7 +20,6 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
17
20
  locale: Schema.Literal<["ja", "en", "ko"]>;
18
21
  message: Schema.SchemaClass<string, string, never>;
19
22
  }>]>>;
20
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
21
23
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
22
24
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
23
25
  derived: Schema.optional<Schema.Struct<{
@@ -71,6 +73,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
71
73
  locale: Schema.Literal<["ja", "en", "ko"]>;
72
74
  message: Schema.SchemaClass<string, string, never>;
73
75
  }>]>>;
76
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
74
77
  id: Schema.refine<string, typeof Schema.String>;
75
78
  groupId: Schema.optional<typeof Schema.UUID>;
76
79
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-multi"]>;
@@ -4,6 +4,7 @@ import { Locale } from "../../../../../share/locale.js";
4
4
  import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
5
5
  import { registerNodeVariableIfAbsent } from "../../../../../share/tree-node-var.js";
6
6
  import {
7
+ Align,
7
8
  CelRowAccess,
8
9
  derivedRowField,
9
10
  editableColumnFields,
@@ -67,14 +68,11 @@ export function schema(configure) {
67
68
  type: Schema.Literal(type),
68
69
  compatibilityDate: Schema.Literal(compatibilityDate),
69
70
  ...editableColumnFields(),
71
+ align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
70
72
  placeholder: Schema.optional(Locale.annotations({
71
73
  title: "\u5360\u4F4D\u7B26",
72
74
  description: "\u672A\u9009\u4E2D\u4EFB\u4F55\u9009\u9879\u65F6\u8F93\u5165\u6846\u4E2D\u7684\u5360\u4F4D\u6587\u672C"
73
75
  })),
74
- hidden: Schema.optional(CelBool.annotations({
75
- title: "\u9690\u85CF\u6761\u4EF6",
76
- description: "\u8FD4\u56DE `true` \u65F6\u8BE5\u884C\u7684\u4E0B\u62C9\u6811\u4E0D\u6E32\u67D3\uFF08\u5176\u4F59\u884C\u4E0D\u53D7\u5F71\u54CD\uFF09"
77
- })),
78
76
  disabled: Schema.optional(CelBool.annotations({
79
77
  title: "\u7981\u7528\u6761\u4EF6",
80
78
  description: "\u8FD4\u56DE `true` \u65F6\u4E0B\u62C9\u6811\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u9009\u62E9"
@@ -15,7 +15,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
15
15
  readonly locale: "en" | "ja" | "ko";
16
16
  readonly message: string;
17
17
  }[]];
18
- readonly hidden?: string | undefined;
18
+ readonly hidden?: boolean | undefined;
19
19
  readonly tooltip?: readonly [{
20
20
  readonly locale: "zh";
21
21
  readonly message: string;
@@ -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 align: "center" | "left" | "right";
26
27
  readonly compatibilityDate: "2026-06-14";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -72,7 +73,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
72
73
  readonly locale: "en" | "ja" | "ko";
73
74
  readonly message: string;
74
75
  }[]];
75
- readonly hidden?: string | undefined;
76
+ readonly hidden?: boolean | undefined;
76
77
  readonly tooltip?: readonly [{
77
78
  readonly locale: "zh";
78
79
  readonly message: string;
@@ -80,6 +81,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
80
81
  readonly locale: "en" | "ja" | "ko";
81
82
  readonly message: string;
82
83
  }[]] | undefined;
84
+ readonly align: "center" | "left" | "right";
83
85
  readonly compatibilityDate: "2026-06-14";
84
86
  readonly grow?: boolean | undefined;
85
87
  readonly groupId?: string | undefined;
@@ -10,6 +10,12 @@ import {
10
10
  InputGroupInput,
11
11
  InputGroupNumberField
12
12
  } from "../../../../ui/input-group";
13
+ import {
14
+ DropdownMenu,
15
+ DropdownMenuContent,
16
+ DropdownMenuItem,
17
+ DropdownMenuTrigger
18
+ } from "../../../../ui/dropdown-menu";
13
19
  import { Locale as LocaleField } from "../../../../ui/locale";
14
20
  import { Markdown } from "../../../../ui/markdown";
15
21
  import { Separator } from "../../../../ui/separator";
@@ -28,6 +34,14 @@ const dataSourceSchema = DataSource(() => {
28
34
  });
29
35
  const dataSourceFieldTitle = (f) => getStructFieldTitle(dataSourceSchema, f) ?? f;
30
36
  const dataSourceFieldDescription = (f) => getStructFieldDescription(dataSourceSchema, f);
37
+ const ALIGN_OPTIONS = [
38
+ { value: "left", label: "\u5DE6\u5BF9\u9F50", icon: "fluent:text-align-left-20-regular" },
39
+ { value: "center", label: "\u5C45\u4E2D", icon: "fluent:text-align-center-20-regular" },
40
+ { value: "right", label: "\u53F3\u5BF9\u9F50", icon: "fluent:text-align-right-20-regular" }
41
+ ];
42
+ const currentAlignIcon = computed(
43
+ () => (ALIGN_OPTIONS.find((o) => o.value === (value.value.align ?? "left")) ?? ALIGN_OPTIONS[0]).icon
44
+ );
31
45
  const ROW_VARS = {
32
46
  row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
33
47
  index: { type: "number", label: "\u884C\u7D22\u5F15" }
@@ -68,6 +82,14 @@ function setOptionalExpression(key, next) {
68
82
  value.value = { ...value.value, [key]: next };
69
83
  }
70
84
  }
85
+ function onHiddenChange(v) {
86
+ if (v) {
87
+ value.value = { ...value.value, hidden: true };
88
+ } else {
89
+ const { hidden: _drop, ...rest } = value.value;
90
+ value.value = rest;
91
+ }
92
+ }
71
93
  function setDataSourceData(next) {
72
94
  value.value = {
73
95
  ...value.value,
@@ -193,6 +215,29 @@ const derivedModel = computed({
193
215
  {{ fieldTitle("size") }}
194
216
  </FieldLabel>
195
217
  <InputGroup>
218
+ <InputGroupAddon align="inline-start">
219
+ <DropdownMenu>
220
+ <DropdownMenuTrigger as-child>
221
+ <InputGroupButton
222
+ variant="ghost"
223
+ size="xs"
224
+ :title="fieldTitle('align')"
225
+ >
226
+ <Icon :icon="currentAlignIcon" />
227
+ </InputGroupButton>
228
+ </DropdownMenuTrigger>
229
+ <DropdownMenuContent align="start">
230
+ <DropdownMenuItem
231
+ v-for="opt in ALIGN_OPTIONS"
232
+ :key="opt.value"
233
+ @select="value = { ...value, align: opt.value }"
234
+ >
235
+ <Icon :icon="opt.icon" />
236
+ {{ opt.label }}
237
+ </DropdownMenuItem>
238
+ </DropdownMenuContent>
239
+ </DropdownMenu>
240
+ </InputGroupAddon>
196
241
  <InputGroupNumberField
197
242
  :model-value="value.size"
198
243
  :disabled="value.grow"
@@ -442,30 +487,8 @@ const derivedModel = computed({
442
487
  </Field>
443
488
  </div>
444
489
 
445
- <!-- 通用: 隐藏 / 禁用 / 只读 + 派生值 -->
490
+ <!-- 通用: 禁用 / 只读 + 派生值 -->
446
491
  <div class="grid grid-cols-2 gap-x-6 gap-y-4">
447
- <Field orientation="vertical">
448
- <FieldLabel class="text-xs text-zinc-500">
449
- <template
450
- v-if="fieldDescription('hidden')"
451
- #tooltip
452
- >
453
- <Markdown
454
- :source="fieldDescription('hidden')"
455
- block
456
- class="prose prose-sm prose-zinc"
457
- />
458
- </template>
459
- {{ fieldTitle("hidden") }}
460
- </FieldLabel>
461
- <ExpressionEditor
462
- :model-value="value.hidden ?? ''"
463
- placeholder="例:row.archived"
464
- result-type="bool"
465
- :extra-vars="ROW_VARS"
466
- @update:model-value="(v) => setOptionalExpression('hidden', v)"
467
- />
468
- </Field>
469
492
  <Field orientation="vertical">
470
493
  <FieldLabel class="text-xs text-zinc-500">
471
494
  <template
@@ -572,6 +595,27 @@ const derivedModel = computed({
572
595
  </InputGroupAddon>
573
596
  </InputGroup>
574
597
  </Field>
598
+ <Field orientation="vertical">
599
+ <FieldLabel class="text-xs text-zinc-500">
600
+ <template
601
+ v-if="fieldDescription('hidden')"
602
+ #tooltip
603
+ >
604
+ <Markdown
605
+ :source="fieldDescription('hidden')"
606
+ block
607
+ class="prose prose-sm prose-zinc"
608
+ />
609
+ </template>
610
+ {{ fieldTitle("hidden") }}
611
+ </FieldLabel>
612
+ <div>
613
+ <Switch
614
+ :model-value="value.hidden ?? false"
615
+ @update:model-value="onHiddenChange"
616
+ />
617
+ </div>
618
+ </Field>
575
619
  </div>
576
620
  </div>
577
621
  </template>
@@ -15,7 +15,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
15
15
  readonly locale: "en" | "ja" | "ko";
16
16
  readonly message: string;
17
17
  }[]];
18
- readonly hidden?: string | undefined;
18
+ readonly hidden?: boolean | undefined;
19
19
  readonly tooltip?: readonly [{
20
20
  readonly locale: "zh";
21
21
  readonly message: string;
@@ -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 align: "center" | "left" | "right";
26
27
  readonly compatibilityDate: "2026-06-14";
27
28
  readonly grow?: boolean | undefined;
28
29
  readonly groupId?: string | undefined;
@@ -72,7 +73,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
72
73
  readonly locale: "en" | "ja" | "ko";
73
74
  readonly message: string;
74
75
  }[]];
75
- readonly hidden?: string | undefined;
76
+ readonly hidden?: boolean | undefined;
76
77
  readonly tooltip?: readonly [{
77
78
  readonly locale: "zh";
78
79
  readonly message: string;
@@ -80,6 +81,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
80
81
  readonly locale: "en" | "ja" | "ko";
81
82
  readonly message: string;
82
83
  }[]] | undefined;
84
+ readonly align: "center" | "left" | "right";
83
85
  readonly compatibilityDate: "2026-06-14";
84
86
  readonly grow?: boolean | undefined;
85
87
  readonly groupId?: string | undefined;
@@ -15,7 +15,7 @@ import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../..
15
15
  import { Skeleton } from "../../../../ui/skeleton";
16
16
  import { Tree as UiTree } from "../../../../ui/tree";
17
17
  import { useFormState } from "../../../../form/utils/state";
18
- import { interpolateMarkdown } from "../../../utils/runtime";
18
+ import { JUSTIFY_CLASS, TEXT_ALIGN_CLASS, interpolateMarkdown } from "../../../utils/runtime";
19
19
  import { useSharedFetchLayer } from "../../../utils/shared-fetch";
20
20
  import {
21
21
  findWrappedPath,
@@ -71,7 +71,6 @@ function evalBool(expression, label) {
71
71
  return false;
72
72
  }
73
73
  }
74
- const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
75
74
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
76
75
  const formReadonly = useFormReadonly();
77
76
  const isReadonly = computed(
@@ -80,6 +79,8 @@ const isReadonly = computed(
80
79
  const effectiveReadonly = computed(
81
80
  () => isReadonly.value || props.column.derived?.mode === "formula"
82
81
  );
82
+ const justifyClass = computed(() => JUSTIFY_CLASS[props.column.align ?? "left"] ?? JUSTIFY_CLASS.left);
83
+ const textAlignClass = computed(() => TEXT_ALIGN_CLASS[props.column.align ?? "left"] ?? TEXT_ALIGN_CLASS.left);
83
84
  const model = computed({
84
85
  get: () => {
85
86
  const raw = formState.getAt(props.column.binding);
@@ -291,10 +292,6 @@ const hoveredTooltip = computed(() => {
291
292
 
292
293
  <template>
293
294
  <div class="p-[0.125rem] w-full">
294
- <span
295
- v-if="isHidden"
296
- class="block h-7 w-full"
297
- />
298
295
  <!--
299
296
  Readonly empty state mirrors the `text` column exactly: a centered,
300
297
  faded, non-selectable `-` in `font-mono`, so a readonly grid reads
@@ -302,10 +299,10 @@ const hoveredTooltip = computed(() => {
302
299
  left-aligned dark text.
303
300
  -->
304
301
  <span
305
- v-else-if="effectiveReadonly"
302
+ v-if="effectiveReadonly"
306
303
  :class="[
307
304
  'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
308
- triggerLabel ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
305
+ triggerLabel ? ['text-zinc-700', justifyClass] : 'justify-center font-mono text-zinc-300 select-none'
309
306
  ]"
310
307
  >
311
308
  {{ triggerLabel || "-" }}
@@ -324,7 +321,7 @@ const hoveredTooltip = computed(() => {
324
321
  :model-value="triggerLabel"
325
322
  :disabled="isDisabled"
326
323
  :placeholder="placeholderText"
327
- class="h-7 text-[0.75rem] md:text-[0.75rem] px-2 cursor-pointer text-left"
324
+ :class="['h-7 text-[0.75rem] md:text-[0.75rem] px-2 cursor-pointer', textAlignClass]"
328
325
  readonly
329
326
  />
330
327
  </PopoverTrigger>
@@ -10,6 +10,9 @@ export declare const metadata: {
10
10
  readonly selection: true;
11
11
  };
12
12
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
13
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
14
+ default: () => "left";
15
+ }>;
13
16
  placeholder: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
14
17
  locale: Schema.Literal<["zh"]>;
15
18
  message: Schema.SchemaClass<string, string, never>;
@@ -17,7 +20,6 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
17
20
  locale: Schema.Literal<["ja", "en", "ko"]>;
18
21
  message: Schema.SchemaClass<string, string, never>;
19
22
  }>]>>;
20
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
21
23
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
22
24
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
23
25
  derived: Schema.optional<Schema.Struct<{
@@ -68,6 +70,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
68
70
  locale: Schema.Literal<["ja", "en", "ko"]>;
69
71
  message: Schema.SchemaClass<string, string, never>;
70
72
  }>]>>;
73
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
71
74
  id: Schema.refine<string, typeof Schema.String>;
72
75
  groupId: Schema.optional<typeof Schema.UUID>;
73
76
  type: Schema.Literal<["com.shwfed.table.column.tree-combobox-single"]>;
@@ -4,6 +4,7 @@ import { Locale } from "../../../../../share/locale.js";
4
4
  import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
5
5
  import { registerNodeVariableIfAbsent } from "../../../../../share/tree-node-var.js";
6
6
  import {
7
+ Align,
7
8
  CelRowAccess,
8
9
  derivedRowField,
9
10
  editableColumnFields,
@@ -67,14 +68,11 @@ export function schema(configure) {
67
68
  type: Schema.Literal(type),
68
69
  compatibilityDate: Schema.Literal(compatibilityDate),
69
70
  ...editableColumnFields(),
71
+ align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
70
72
  placeholder: Schema.optional(Locale.annotations({
71
73
  title: "\u5360\u4F4D\u7B26",
72
74
  description: "\u672A\u9009\u4E2D\u4EFB\u4F55\u9009\u9879\u65F6\u8F93\u5165\u6846\u4E2D\u7684\u5360\u4F4D\u6587\u672C"
73
75
  })),
74
- hidden: Schema.optional(CelBool.annotations({
75
- title: "\u9690\u85CF\u6761\u4EF6",
76
- description: "\u8FD4\u56DE `true` \u65F6\u8BE5\u884C\u7684\u4E0B\u62C9\u6811\u4E0D\u6E32\u67D3\uFF08\u5176\u4F59\u884C\u4E0D\u53D7\u5F71\u54CD\uFF09"
77
- })),
78
76
  disabled: Schema.optional(CelBool.annotations({
79
77
  title: "\u7981\u7528\u6761\u4EF6",
80
78
  description: "\u8FD4\u56DE `true` \u65F6\u4E0B\u62C9\u6811\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u9009\u62E9"