@shwfed/config 2.10.12 → 2.11.1

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 (171) hide show
  1. package/dist/mcp.mjs +88 -54
  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-CosmpPSu.js} +1 -1
  4. package/dist/preview/assets/{badge-DkHwLDps.js → badge-BkYCxTFK.js} +1 -1
  5. package/dist/preview/assets/{config-Dx1SXsSf.js → config-74YmXQsH.js} +1 -1
  6. package/dist/preview/assets/{config-DbV3RlZz.js → config-B62b9dMF.js} +1 -1
  7. package/dist/preview/assets/{config-OPQWANCx.js → config-BHYlKhDX.js} +1 -1
  8. package/dist/preview/assets/{config-Cft-srKd.js → config-Bbbyd5lB.js} +1 -1
  9. package/dist/preview/assets/{config-Uw4cvZGX.js → config-BcZe-bR9.js} +1 -1
  10. package/dist/preview/assets/{config-DJQ2LOWo.js → config-Bt6--diX.js} +1 -1
  11. package/dist/preview/assets/{config-CVPVYMuh.js → config-COr2MFhN.js} +1 -1
  12. package/dist/preview/assets/{config-7KeAl8UU.js → config-CPsd0ppi.js} +1 -1
  13. package/dist/preview/assets/{config-DAZ2Uj6B.js → config-CYVafGLc.js} +1 -1
  14. package/dist/preview/assets/{config-DQVKd54J.js → config-C_Ia1CDq.js} +1 -1
  15. package/dist/preview/assets/{config-CZ1e9utV.js → config-Cbp7aAAw.js} +1 -1
  16. package/dist/preview/assets/{config-DCANpbtq.js → config-Dk9OegYx.js} +1 -1
  17. package/dist/preview/assets/{config-Cedm-E2H.js → config-Dt8k1gnT.js} +1 -1
  18. package/dist/preview/assets/{config-Cy6Eix27.js → config-sCP15_0f.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-C3NiB99t.js} +1 -1
  20. package/dist/preview/assets/{index-Cum0oK9u.js → index-BMOizF8g.js} +1 -1
  21. package/dist/preview/assets/index-C9G8y6qZ.js +1 -0
  22. package/dist/preview/assets/index-DjG-VVR4.js +763 -0
  23. package/dist/preview/assets/index-DqRQ67sX.css +1 -0
  24. package/dist/preview/assets/{item-H4QeOpnC.js → item-C1efxuFt.js} +1 -1
  25. package/dist/preview/assets/{runtime-C3532B0Y.js → runtime-7z9N9JGG.js} +1 -1
  26. package/dist/preview/assets/{runtime-sPGVp7yA.js → runtime-Bpa1zRxG.js} +1 -1
  27. package/dist/preview/assets/{runtime-DvCHNIPq.js → runtime-Csv04MYG.js} +1 -1
  28. package/dist/preview/assets/{runtime-CwgX0PuH.js → runtime-D0bjM4NL.js} +1 -1
  29. package/dist/preview/assets/{runtime-CNMjRr9Y.js → runtime-DoLpKFu-.js} +1 -1
  30. package/dist/preview/assets/{runtime-BotFX6qJ.js → runtime-Du0ghzR2.js} +1 -1
  31. package/dist/preview/assets/{runtime-CTnwTJlw.js → runtime-Dz3ZQYdq.js} +1 -1
  32. package/dist/preview/assets/{runtime-cKOD2A6u.js → runtime-Dz7SCudL.js} +1 -1
  33. package/dist/preview/assets/{runtime-D5HcLLLR.js → runtime-LgZuN2Tf.js} +1 -1
  34. package/dist/preview/assets/{runtime-ibuFFD1K.js → runtime-S9eZ2nJS.js} +1 -1
  35. package/dist/preview/assets/{schema-meta-DtZNwp3h.js → schema-meta-CYKPEnu9.js} +1 -1
  36. package/dist/preview/index.html +2 -2
  37. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/schema.js +10 -1
  38. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
  39. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
  40. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.d.vue.ts +4 -4
  41. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.vue.d.ts +4 -4
  42. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.d.vue.ts +6 -6
  43. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.vue.d.ts +6 -6
  44. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.d.vue.ts +2 -2
  45. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.vue.d.ts +2 -2
  46. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/schema.js +10 -1
  47. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  48. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  49. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +4 -4
  50. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +4 -4
  51. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  52. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  53. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  54. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  55. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  56. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  57. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  58. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  59. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  60. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  61. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +22 -22
  62. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +22 -22
  63. package/dist/runtime/components/form/fields/2026-06-09/com.shwfed.form.field.upload/runtime.vue +23 -1
  64. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/config.vue +30 -0
  65. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.d.ts +2 -1
  66. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.js +1 -1
  67. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/config.vue +30 -0
  68. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.d.ts +2 -1
  69. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.js +7 -4
  70. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/config.vue +30 -0
  71. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.d.ts +2 -1
  72. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.js +1 -1
  73. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/config.vue +30 -0
  74. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.d.ts +2 -1
  75. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.js +1 -1
  76. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.d.ts +2 -1
  77. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.js +1 -0
  78. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/config.vue +30 -0
  79. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.d.ts +2 -1
  80. package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.js +1 -1
  81. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/config.vue +60 -32
  82. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +7 -9
  83. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.d.ts +4 -1
  84. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.js +12 -6
  85. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/config.vue +67 -32
  86. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +6 -9
  87. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.d.ts +4 -1
  88. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.js +2 -5
  89. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/config.vue +66 -31
  90. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +7 -9
  91. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.d.ts +4 -1
  92. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.js +12 -6
  93. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
  94. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
  95. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.d.ts +1 -1
  96. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.js +1 -0
  97. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
  98. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
  99. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.d.ts +1 -1
  100. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.js +1 -0
  101. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
  102. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
  103. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.d.ts +1 -1
  104. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.js +1 -0
  105. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
  106. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
  107. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.d.ts +1 -1
  108. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.js +1 -0
  109. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
  110. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
  111. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.d.ts +1 -1
  112. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.js +1 -0
  113. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
  114. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
  115. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.d.ts +1 -1
  116. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.js +1 -0
  117. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  118. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  119. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  120. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  121. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +6 -4
  122. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +61 -22
  123. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +6 -4
  124. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +6 -9
  125. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +4 -1
  126. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +3 -4
  127. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +6 -4
  128. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +61 -22
  129. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +6 -4
  130. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +6 -9
  131. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +4 -1
  132. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +3 -4
  133. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +4 -2
  134. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +67 -23
  135. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +4 -2
  136. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +6 -9
  137. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +4 -1
  138. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -4
  139. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +4 -2
  140. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +67 -23
  141. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +4 -2
  142. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +6 -9
  143. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +4 -1
  144. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +2 -4
  145. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +67 -32
  146. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue +7 -9
  147. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +4 -1
  148. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +2 -5
  149. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/config.vue +66 -31
  150. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/runtime.vue +5 -8
  151. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.d.ts +4 -1
  152. package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.js +4 -6
  153. package/dist/runtime/components/table/index.vue +46 -7
  154. package/dist/runtime/components/table/utils/runtime.d.ts +1 -0
  155. package/dist/runtime/components/table/utils/runtime.js +5 -0
  156. package/dist/runtime/components/table/utils/shared.d.ts +3 -1
  157. package/dist/runtime/components/table/utils/shared.js +17 -5
  158. package/dist/runtime/components/ui/date-picker/DatePickerInput.d.vue.ts +1 -1
  159. package/dist/runtime/components/ui/date-picker/DatePickerInput.vue +9 -2
  160. package/dist/runtime/components/ui/date-picker/DatePickerInput.vue.d.ts +1 -1
  161. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.d.vue.ts +1 -1
  162. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.vue.d.ts +1 -1
  163. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.d.vue.ts +1 -1
  164. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue +13 -4
  165. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue.d.ts +1 -1
  166. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.d.vue.ts +2 -2
  167. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.vue.d.ts +2 -2
  168. package/package.json +1 -1
  169. package/dist/preview/assets/index-B3HnlKis.js +0 -763
  170. package/dist/preview/assets/index-BAY6NLoo.css +0 -1
  171. package/dist/preview/assets/index-CxUuhfsO.js +0 -1
@@ -9,6 +9,9 @@ export declare const metadata: {
9
9
  readonly icon: "fluent:number-symbol-20-regular";
10
10
  };
11
11
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
12
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
13
+ default: () => "right";
14
+ }>;
12
15
  placeholder: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
13
16
  locale: Schema.Literal<["zh"]>;
14
17
  message: Schema.SchemaClass<string, string, never>;
@@ -16,7 +19,6 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
16
19
  locale: Schema.Literal<["ja", "en", "ko"]>;
17
20
  message: Schema.SchemaClass<string, string, never>;
18
21
  }>]>>;
19
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
20
22
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
21
23
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
22
24
  precision: Schema.optional<Schema.refine<number, Schema.filter<typeof Schema.Number>>>;
@@ -180,6 +182,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
180
182
  locale: Schema.Literal<["ja", "en", "ko"]>;
181
183
  message: Schema.SchemaClass<string, string, never>;
182
184
  }>]>>;
185
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
183
186
  id: Schema.refine<string, typeof Schema.String>;
184
187
  groupId: Schema.optional<typeof Schema.UUID>;
185
188
  type: Schema.Literal<["com.shwfed.table.column.number-input"]>;
@@ -2,7 +2,7 @@ import { Schema } from "effect";
2
2
  import { getProperty } from "dot-prop";
3
3
  import { Locale } from "../../../../../share/locale.js";
4
4
  import { ActionSchemaFields } from "../../../../actions/schema.js";
5
- import { CelRowAccess, derivedRowField, editableColumnFields, editableHeader, registerRowVariablesIfAbsent } from "../../../utils/shared.js";
5
+ import { Align, CelRowAccess, derivedRowField, editableColumnFields, editableHeader, registerRowVariablesIfAbsent } from "../../../utils/shared.js";
6
6
  export const type = "com.shwfed.table.column.number-input";
7
7
  export const compatibilityDate = "2026-05-20";
8
8
  export const metadata = {
@@ -31,14 +31,11 @@ export function schema(configure) {
31
31
  type: Schema.Literal(type),
32
32
  compatibilityDate: Schema.Literal(compatibilityDate),
33
33
  ...editableColumnFields(),
34
+ align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "right" }),
34
35
  placeholder: Schema.optional(Locale.annotations({
35
36
  title: "\u5360\u4F4D\u7B26",
36
37
  description: "\u5355\u5143\u683C\u4E3A\u7A7A\u65F6\u663E\u793A\u7684\u63D0\u793A\u6587\u672C"
37
38
  })),
38
- hidden: Schema.optional(CelBool.annotations({
39
- title: "\u9690\u85CF\u6761\u4EF6",
40
- description: "\u8FD4\u56DE `true` \u65F6\u8BE5\u884C\u7684\u8F93\u5165\u6846\u4E0D\u6E32\u67D3\uFF08\u5176\u4F59\u884C\u4E0D\u53D7\u5F71\u54CD\uFF09"
41
- })),
42
39
  disabled: Schema.optional(CelBool.annotations({
43
40
  title: "\u7981\u7528\u6761\u4EF6",
44
41
  description: "\u8FD4\u56DE `true` \u65F6\u8F93\u5165\u6846\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u7F16\u8F91"
@@ -72,7 +69,16 @@ export function schema(configure) {
72
69
  description: "\u5141\u8BB8\u8F93\u5165\u7684\u6700\u5927\u503C\u8868\u8FBE\u5F0F\uFF0C\u53EF\u8BBF\u95EE `row` / `index` \u548C `form`\uFF1B\u7559\u7A7A\u65F6\u4E0D\u9650\u5236\u4E0A\u9650"
73
70
  })),
74
71
  derived: derivedRowField(configure, "number"),
75
- addon: Schema.optional(AddonActions(configure))
72
+ // `Schema.optional` rebuilds the struct's union member, and because the
73
+ // `optionalWith`-default fields make `AddonActions` a `Transformation`, the
74
+ // inner struct's `title`/`description` don't survive onto the rebuilt
75
+ // member. The config editor's `getStructFieldTitle('addon')` would then fall
76
+ // back to the raw key "addon" (the v2.10.12 regression). Re-state them on the
77
+ // property signature, which the meta reader checks before the field type.
78
+ addon: Schema.optional(AddonActions(configure)).annotations({
79
+ title: "\u8F93\u5165\u6846\u5185\u6309\u94AE",
80
+ description: "\u5728\u8F93\u5165\u6846\u53F3\u4FA7\u5185\u5D4C\u4E00\u7EC4\u64CD\u4F5C\u6309\u94AE"
81
+ })
76
82
  }).annotations({ title: "NumberInputRenderer", description: "\u6570\u503C\u8F93\u5165\u6E32\u67D3\u5668\uFF08\u53EF\u7F16\u8F91\uFF09" });
77
83
  }
78
84
  export function defaults() {
@@ -12,8 +12,15 @@ import {
12
12
  InputGroupInput,
13
13
  InputGroupNumberField
14
14
  } from "../../../../ui/input-group";
15
+ import {
16
+ DropdownMenu,
17
+ DropdownMenuContent,
18
+ DropdownMenuItem,
19
+ DropdownMenuTrigger
20
+ } from "../../../../ui/dropdown-menu";
15
21
  import { getStructFieldDescription, getStructFieldTitle } from "../../../utils/schema-meta";
16
22
  import { Markdown } from "../../../../ui/markdown";
23
+ import { Switch } from "../../../../ui/switch";
17
24
  import DerivedValueEditor from "../../../../form/DerivedValueEditor.vue";
18
25
  import { schema } from "./schema";
19
26
  defineOptions({ name: "ShwfedTableSwitchRendererConfig" });
@@ -22,6 +29,14 @@ const fieldSchema = schema(() => {
22
29
  });
23
30
  const fieldTitle = (field) => getStructFieldTitle(fieldSchema, field) ?? field;
24
31
  const fieldDescription = (field) => getStructFieldDescription(fieldSchema, field);
32
+ const ALIGN_OPTIONS = [
33
+ { value: "left", label: "\u5DE6\u5BF9\u9F50", icon: "fluent:text-align-left-20-regular" },
34
+ { value: "center", label: "\u5C45\u4E2D", icon: "fluent:text-align-center-20-regular" },
35
+ { value: "right", label: "\u53F3\u5BF9\u9F50", icon: "fluent:text-align-right-20-regular" }
36
+ ];
37
+ const currentAlignIcon = computed(
38
+ () => (ALIGN_OPTIONS.find((o) => o.value === (value.value.align ?? "center")) ?? ALIGN_OPTIONS[1]).icon
39
+ );
25
40
  const ROW_VARS = {
26
41
  row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
27
42
  index: { type: "number", label: "\u884C\u7D22\u5F15" }
@@ -38,17 +53,6 @@ const bindingText = computed({
38
53
  }
39
54
  }
40
55
  });
41
- const hiddenModel = computed({
42
- get: () => value.value.hidden ?? "",
43
- set: (v) => {
44
- if (v === "") {
45
- const { hidden: _drop, ...rest } = value.value;
46
- value.value = rest;
47
- } else {
48
- value.value = { ...value.value, hidden: v };
49
- }
50
- }
51
- });
52
56
  const disabledModel = computed({
53
57
  get: () => value.value.disabled ?? "",
54
58
  set: (v) => {
@@ -71,6 +75,14 @@ const readonlyModel = computed({
71
75
  }
72
76
  }
73
77
  });
78
+ function onHiddenChange(v) {
79
+ if (v) {
80
+ value.value = { ...value.value, hidden: true };
81
+ } else {
82
+ const { hidden: _drop, ...rest } = value.value;
83
+ value.value = rest;
84
+ }
85
+ }
74
86
  const derivedModel = computed({
75
87
  get: () => value.value.derived,
76
88
  set: (v) => {
@@ -165,6 +177,29 @@ const derivedModel = computed({
165
177
  {{ fieldTitle("size") }}
166
178
  </FieldLabel>
167
179
  <InputGroup>
180
+ <InputGroupAddon align="inline-start">
181
+ <DropdownMenu>
182
+ <DropdownMenuTrigger as-child>
183
+ <InputGroupButton
184
+ variant="ghost"
185
+ size="xs"
186
+ :title="fieldTitle('align')"
187
+ >
188
+ <Icon :icon="currentAlignIcon" />
189
+ </InputGroupButton>
190
+ </DropdownMenuTrigger>
191
+ <DropdownMenuContent align="start">
192
+ <DropdownMenuItem
193
+ v-for="opt in ALIGN_OPTIONS"
194
+ :key="opt.value"
195
+ @select="value = { ...value, align: opt.value }"
196
+ >
197
+ <Icon :icon="opt.icon" />
198
+ {{ opt.label }}
199
+ </DropdownMenuItem>
200
+ </DropdownMenuContent>
201
+ </DropdownMenu>
202
+ </InputGroupAddon>
168
203
  <InputGroupNumberField
169
204
  :model-value="value.size"
170
205
  :disabled="value.grow"
@@ -223,27 +258,6 @@ const derivedModel = computed({
223
258
  </Field>
224
259
  </div>
225
260
  <div class="grid grid-cols-2 gap-x-6 gap-y-4">
226
- <Field orientation="vertical">
227
- <FieldLabel class="text-xs text-zinc-500">
228
- <template
229
- v-if="fieldDescription('hidden')"
230
- #tooltip
231
- >
232
- <Markdown
233
- :source="fieldDescription('hidden')"
234
- block
235
- class="prose prose-sm prose-zinc"
236
- />
237
- </template>
238
- {{ fieldTitle("hidden") }}
239
- </FieldLabel>
240
- <ExpressionEditor
241
- v-model="hiddenModel"
242
- placeholder="例:row.archived"
243
- result-type="bool"
244
- :extra-vars="ROW_VARS"
245
- />
246
- </Field>
247
261
  <Field orientation="vertical">
248
262
  <FieldLabel class="text-xs text-zinc-500">
249
263
  <template
@@ -347,6 +361,27 @@ const derivedModel = computed({
347
361
  </InputGroupAddon>
348
362
  </InputGroup>
349
363
  </Field>
364
+ <Field orientation="vertical">
365
+ <FieldLabel class="text-xs text-zinc-500">
366
+ <template
367
+ v-if="fieldDescription('hidden')"
368
+ #tooltip
369
+ >
370
+ <Markdown
371
+ :source="fieldDescription('hidden')"
372
+ block
373
+ class="prose prose-sm prose-zinc"
374
+ />
375
+ </template>
376
+ {{ fieldTitle("hidden") }}
377
+ </FieldLabel>
378
+ <div>
379
+ <Switch
380
+ :model-value="value.hidden ?? false"
381
+ @update:model-value="onHiddenChange"
382
+ />
383
+ </div>
384
+ </Field>
350
385
  </div>
351
386
  </div>
352
387
  </template>
@@ -8,6 +8,7 @@ import { useFormReadonly } from "../../../../form/utils/readonly";
8
8
  import { getLocalizedText } from "../../../../../share/locale";
9
9
  import { Switch } from "../../../../ui/switch";
10
10
  import { useFieldValue } from "../../../../form/utils/field-value";
11
+ import { JUSTIFY_CLASS } from "../../../utils/runtime";
11
12
  defineOptions({ name: "ShwfedTableSwitchRendererRuntime" });
12
13
  const props = defineProps({
13
14
  column: { type: null, required: true },
@@ -25,7 +26,6 @@ function evalBool(expression, label) {
25
26
  return false;
26
27
  }
27
28
  }
28
- const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
29
29
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
30
30
  const formReadonly = useFormReadonly();
31
31
  const isReadonly = computed(
@@ -40,6 +40,7 @@ const trueText = computed(
40
40
  const falseText = computed(
41
41
  () => getLocalizedText(props.column.falseLabel, locale.value) || "\u5426"
42
42
  );
43
+ const justifyClass = computed(() => JUSTIFY_CLASS[props.column.align ?? "center"] ?? JUSTIFY_CLASS.center);
43
44
  const { draft, commit } = useFieldValue({
44
45
  binding: () => props.column.binding,
45
46
  fromState: (raw) => raw === true,
@@ -56,23 +57,19 @@ function onUpdate(next) {
56
57
  Row budget matches the editable text/number cells: 2px outer inset around
57
58
  an `h-7` (28px) row — 32px total. The switch is centered inside that row;
58
59
  `sm` size (h-3.5) keeps it visually compact against the surrounding cells.
59
- Every branch (hidden / readonly / editable) is sized identically so rows
60
+ Every branch (readonly / editable) is sized identically so rows
60
61
  do not jump when a CEL condition flips.
61
62
  -->
62
63
  <div class="p-[0.125rem] w-full">
63
64
  <span
64
- v-if="isHidden"
65
- class="block h-7 w-full"
66
- />
67
- <span
68
- v-else-if="effectiveReadonly"
69
- class="flex items-center justify-center h-7 w-full px-2 text-[0.75rem] text-zinc-700 truncate"
65
+ v-if="effectiveReadonly"
66
+ :class="['flex items-center h-7 w-full px-2 text-[0.75rem] text-zinc-700 truncate', justifyClass]"
70
67
  >
71
68
  {{ draft ? trueText : falseText }}
72
69
  </span>
73
70
  <span
74
71
  v-else
75
- class="flex items-center justify-center h-7 w-full"
72
+ :class="['flex items-center h-7 w-full', justifyClass]"
76
73
  >
77
74
  <Switch
78
75
  size="sm"
@@ -9,7 +9,9 @@ export declare const metadata: {
9
9
  readonly icon: "fluent:toggle-left-20-regular";
10
10
  };
11
11
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
12
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
12
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
13
+ default: () => "center";
14
+ }>;
13
15
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
14
16
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
15
17
  trueLabel: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
@@ -49,6 +51,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
49
51
  locale: Schema.Literal<["ja", "en", "ko"]>;
50
52
  message: Schema.SchemaClass<string, string, never>;
51
53
  }>]>>;
54
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
52
55
  id: Schema.refine<string, typeof Schema.String>;
53
56
  groupId: Schema.optional<typeof Schema.UUID>;
54
57
  type: Schema.Literal<["com.shwfed.table.column.switch.local"]>;
@@ -1,7 +1,7 @@
1
1
  import { Effect, Schema } from "effect";
2
2
  import { getProperty } from "dot-prop";
3
3
  import { Locale } from "../../../../../share/locale.js";
4
- import { CelRowAccess, derivedRowField, editableColumnFields, editableHeader } from "../../../utils/shared.js";
4
+ import { Align, CelRowAccess, derivedRowField, editableColumnFields, editableHeader } from "../../../utils/shared.js";
5
5
  export const type = "com.shwfed.table.column.switch.local";
6
6
  export const compatibilityDate = "2026-05-20";
7
7
  export const metadata = {
@@ -14,10 +14,7 @@ export function schema(configure) {
14
14
  type: Schema.Literal(type),
15
15
  compatibilityDate: Schema.Literal(compatibilityDate),
16
16
  ...editableColumnFields(),
17
- hidden: Schema.optional(CelBool.annotations({
18
- title: "\u9690\u85CF\u6761\u4EF6",
19
- description: "\u8FD4\u56DE `true` \u65F6\u8BE5\u884C\u7684\u5F00\u5173\u4E0D\u6E32\u67D3\uFF08\u5176\u4F59\u884C\u4E0D\u53D7\u5F71\u54CD\uFF09"
20
- })),
17
+ align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "center" }),
21
18
  disabled: Schema.optional(CelBool.annotations({
22
19
  title: "\u7981\u7528\u6761\u4EF6",
23
20
  description: "\u8FD4\u56DE `true` \u65F6\u5F00\u5173\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u5207\u6362"
@@ -3,6 +3,7 @@ import { computed, inject, onBeforeUnmount, ref, watch } from "vue";
3
3
  import { Icon } from "@iconify/vue";
4
4
  import { ExpressionEditor } from "../../../../ui/expression-editor";
5
5
  import { Separator } from "../../../../ui/separator";
6
+ import { Switch } from "../../../../ui/switch";
6
7
  import { Button } from "../../../../ui/button";
7
8
  import { Field, FieldLabel } from "../../../../ui/field";
8
9
  import { Locale } from "../../../../ui/locale";
@@ -13,6 +14,12 @@ import {
13
14
  InputGroupInput,
14
15
  InputGroupNumberField
15
16
  } from "../../../../ui/input-group";
17
+ import {
18
+ DropdownMenu,
19
+ DropdownMenuContent,
20
+ DropdownMenuItem,
21
+ DropdownMenuTrigger
22
+ } from "../../../../ui/dropdown-menu";
16
23
  import ActionsConfigEditor from "../../../../actions/config.vue";
17
24
  import { getStructFieldDescription, getStructFieldTitle } from "../../../utils/schema-meta";
18
25
  import { Markdown } from "../../../../ui/markdown";
@@ -27,6 +34,14 @@ const fieldSchema = schema(() => {
27
34
  });
28
35
  const fieldTitle = (field) => getStructFieldTitle(fieldSchema, field) ?? field;
29
36
  const fieldDescription = (field) => getStructFieldDescription(fieldSchema, field);
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
+ );
30
45
  const ROW_VARS = {
31
46
  row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
32
47
  index: { type: "number", label: "\u884C\u7D22\u5F15" }
@@ -84,17 +99,14 @@ const bindingText = computed({
84
99
  }
85
100
  }
86
101
  });
87
- const hiddenModel = computed({
88
- get: () => value.value.hidden ?? "",
89
- set: (v) => {
90
- if (v === "") {
91
- const { hidden: _drop, ...rest } = value.value;
92
- value.value = rest;
93
- } else {
94
- value.value = { ...value.value, hidden: v };
95
- }
102
+ function onHiddenChange(v) {
103
+ if (v) {
104
+ value.value = { ...value.value, hidden: true };
105
+ } else {
106
+ const { hidden: _drop, ...rest } = value.value;
107
+ value.value = rest;
96
108
  }
97
- });
109
+ }
98
110
  const disabledModel = computed({
99
111
  get: () => value.value.disabled ?? "",
100
112
  set: (v) => {
@@ -240,6 +252,29 @@ const derivedModel = computed({
240
252
  {{ fieldTitle("size") }}
241
253
  </FieldLabel>
242
254
  <InputGroup>
255
+ <InputGroupAddon align="inline-start">
256
+ <DropdownMenu>
257
+ <DropdownMenuTrigger as-child>
258
+ <InputGroupButton
259
+ variant="ghost"
260
+ size="xs"
261
+ :title="fieldTitle('align')"
262
+ >
263
+ <Icon :icon="currentAlignIcon" />
264
+ </InputGroupButton>
265
+ </DropdownMenuTrigger>
266
+ <DropdownMenuContent align="start">
267
+ <DropdownMenuItem
268
+ v-for="opt in ALIGN_OPTIONS"
269
+ :key="opt.value"
270
+ @select="value = { ...value, align: opt.value }"
271
+ >
272
+ <Icon :icon="opt.icon" />
273
+ {{ opt.label }}
274
+ </DropdownMenuItem>
275
+ </DropdownMenuContent>
276
+ </DropdownMenu>
277
+ </InputGroupAddon>
243
278
  <InputGroupNumberField
244
279
  :model-value="value.size"
245
280
  :disabled="value.grow"
@@ -258,27 +293,6 @@ const derivedModel = computed({
258
293
  </InputGroupAddon>
259
294
  </InputGroup>
260
295
  </Field>
261
- <Field orientation="vertical">
262
- <FieldLabel class="text-xs text-zinc-500">
263
- <template
264
- v-if="fieldDescription('hidden')"
265
- #tooltip
266
- >
267
- <Markdown
268
- :source="fieldDescription('hidden')"
269
- block
270
- class="prose prose-sm prose-zinc"
271
- />
272
- </template>
273
- {{ fieldTitle("hidden") }}
274
- </FieldLabel>
275
- <ExpressionEditor
276
- v-model="hiddenModel"
277
- placeholder="例:row.archived"
278
- result-type="bool"
279
- :extra-vars="ROW_VARS"
280
- />
281
- </Field>
282
296
  <Field orientation="vertical">
283
297
  <FieldLabel class="text-xs text-zinc-500">
284
298
  <template
@@ -382,6 +396,27 @@ const derivedModel = computed({
382
396
  </InputGroupAddon>
383
397
  </InputGroup>
384
398
  </Field>
399
+ <Field orientation="vertical">
400
+ <FieldLabel class="text-xs text-zinc-500">
401
+ <template
402
+ v-if="fieldDescription('hidden')"
403
+ #tooltip
404
+ >
405
+ <Markdown
406
+ :source="fieldDescription('hidden')"
407
+ block
408
+ class="prose prose-sm prose-zinc"
409
+ />
410
+ </template>
411
+ {{ fieldTitle("hidden") }}
412
+ </FieldLabel>
413
+ <div>
414
+ <Switch
415
+ :model-value="value.hidden ?? false"
416
+ @update:model-value="onHiddenChange"
417
+ />
418
+ </div>
419
+ </Field>
385
420
  </div>
386
421
  <Separator />
387
422
  <Field orientation="vertical">
@@ -15,6 +15,7 @@ import {
15
15
  } from "../../../../ui/input-group";
16
16
  import ShwfedActions from "../../../../actions/components/group.vue";
17
17
  import { useFormState } from "../../../../form/utils/state";
18
+ import { JUSTIFY_CLASS, TEXT_ALIGN_CLASS } from "../../../utils/runtime";
18
19
  defineOptions({ name: "ShwfedTableTextInputRendererRuntime" });
19
20
  const props = defineProps({
20
21
  column: { type: null, required: true },
@@ -35,7 +36,6 @@ function evalBool(expression, label) {
35
36
  return false;
36
37
  }
37
38
  }
38
- const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
39
39
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
40
40
  const formReadonly = useFormReadonly();
41
41
  const isReadonly = computed(
@@ -78,6 +78,8 @@ const addonConfig = computed(() => {
78
78
  };
79
79
  });
80
80
  const showClear = computed(() => !isDisabled.value && draft.value.length > 0);
81
+ const justifyClass = computed(() => JUSTIFY_CLASS[props.column.align ?? "left"] ?? JUSTIFY_CLASS.left);
82
+ const textAlignClass = computed(() => TEXT_ALIGN_CLASS[props.column.align ?? "left"] ?? TEXT_ALIGN_CLASS.left);
81
83
  function handleClear() {
82
84
  draft.value = "";
83
85
  commit();
@@ -89,7 +91,7 @@ function handleClear() {
89
91
  Row budget: 2px outer inset (`p-[0.125rem]`) on each side around a 28px
90
92
  (`h-7`) input — total 32px. The inset is the deliberate gap between the
91
93
  input border and the td borders; the 28px input gives the 12px text some
92
- vertical breathing room. Every branch (hidden / readonly / editable) is
94
+ vertical breathing room. Every branch (readonly / editable) is
93
95
  sized identically so rows do not jump when a CEL condition flips. The
94
96
  default `Input` ships `h-9` + `text-base` + `md:text-sm` — we override
95
97
  each at the same breakpoint or `md:text-sm` would beat our unprefixed
@@ -102,10 +104,6 @@ function handleClear() {
102
104
  oversized.
103
105
  -->
104
106
  <div class="p-[0.125rem] w-full">
105
- <span
106
- v-if="isHidden"
107
- class="block h-7 w-full"
108
- />
109
107
  <!--
110
108
  Readonly empty state mirrors the `text` column exactly: a centered,
111
109
  faded, non-selectable `-` rendered in `font-mono`, so a readonly grid
@@ -114,10 +112,10 @@ function handleClear() {
114
112
  text.
115
113
  -->
116
114
  <span
117
- v-else-if="effectiveReadonly"
115
+ v-if="effectiveReadonly"
118
116
  :class="[
119
117
  'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
120
- draft ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
118
+ draft ? ['text-zinc-700', justifyClass] : 'justify-center font-mono text-zinc-300 select-none'
121
119
  ]"
122
120
  >
123
121
  {{ draft || "-" }}
@@ -138,7 +136,7 @@ function handleClear() {
138
136
  v-model="draft"
139
137
  :placeholder="placeholderText"
140
138
  :disabled="isDisabled"
141
- class="h-7 text-[0.75rem] md:text-[0.75rem] px-2"
139
+ :class="['h-7 text-[0.75rem] md:text-[0.75rem] px-2', textAlignClass]"
142
140
  @focus="onFocus"
143
141
  @blur="onBlur"
144
142
  @keydown.enter="commit"
@@ -9,6 +9,9 @@ export declare const metadata: {
9
9
  readonly icon: "fluent:text-field-20-regular";
10
10
  };
11
11
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
12
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
13
+ default: () => "left";
14
+ }>;
12
15
  placeholder: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
13
16
  locale: Schema.Literal<["zh"]>;
14
17
  message: Schema.SchemaClass<string, string, never>;
@@ -16,7 +19,6 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
16
19
  locale: Schema.Literal<["ja", "en", "ko"]>;
17
20
  message: Schema.SchemaClass<string, string, never>;
18
21
  }>]>>;
19
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
20
22
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
21
23
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
22
24
  derived: Schema.optional<Schema.Struct<{
@@ -174,6 +176,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
174
176
  locale: Schema.Literal<["ja", "en", "ko"]>;
175
177
  message: Schema.SchemaClass<string, string, never>;
176
178
  }>]>>;
179
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
177
180
  id: Schema.refine<string, typeof Schema.String>;
178
181
  groupId: Schema.optional<typeof Schema.UUID>;
179
182
  type: Schema.Literal<["com.shwfed.table.column.text-input"]>;
@@ -2,7 +2,7 @@ import { Schema } from "effect";
2
2
  import { getProperty } from "dot-prop";
3
3
  import { Locale } from "../../../../../share/locale.js";
4
4
  import { ActionSchemaFields } from "../../../../actions/schema.js";
5
- import { CelRowAccess, derivedRowField, editableColumnFields, editableHeader, registerRowVariablesIfAbsent } from "../../../utils/shared.js";
5
+ import { Align, CelRowAccess, derivedRowField, editableColumnFields, editableHeader, registerRowVariablesIfAbsent } from "../../../utils/shared.js";
6
6
  export const type = "com.shwfed.table.column.text-input";
7
7
  export const compatibilityDate = "2026-05-20";
8
8
  export const metadata = {
@@ -30,14 +30,11 @@ export function schema(configure) {
30
30
  type: Schema.Literal(type),
31
31
  compatibilityDate: Schema.Literal(compatibilityDate),
32
32
  ...editableColumnFields(),
33
+ align: Schema.optionalWith(Align.annotations({ title: "\u5BF9\u9F50" }), { default: () => "left" }),
33
34
  placeholder: Schema.optional(Locale.annotations({
34
35
  title: "\u5360\u4F4D\u7B26",
35
36
  description: "\u5355\u5143\u683C\u4E3A\u7A7A\u65F6\u663E\u793A\u7684\u63D0\u793A\u6587\u672C"
36
37
  })),
37
- hidden: Schema.optional(CelBool.annotations({
38
- title: "\u9690\u85CF\u6761\u4EF6",
39
- description: "\u8FD4\u56DE `true` \u65F6\u8BE5\u884C\u7684\u8F93\u5165\u6846\u4E0D\u6E32\u67D3\uFF08\u5176\u4F59\u884C\u4E0D\u53D7\u5F71\u54CD\uFF09"
40
- })),
41
38
  disabled: Schema.optional(CelBool.annotations({
42
39
  title: "\u7981\u7528\u6761\u4EF6",
43
40
  description: "\u8FD4\u56DE `true` \u65F6\u8F93\u5165\u6846\u4ECD\u7136\u6E32\u67D3\u4F46\u4E0D\u53EF\u7F16\u8F91"
@@ -47,7 +44,16 @@ export function schema(configure) {
47
44
  description: "\u8FD4\u56DE `true` \u65F6\u4EC5\u4EE5\u7EAF\u6587\u672C\u5C55\u793A\u5F53\u524D\u503C"
48
45
  })),
49
46
  derived: derivedRowField(configure, "string"),
50
- addon: Schema.optional(AddonActions(configure))
47
+ // `Schema.optional` rebuilds the struct's union member, and because the
48
+ // `optionalWith`-default fields make `AddonActions` a `Transformation`, the
49
+ // inner struct's `title`/`description` don't survive onto the rebuilt
50
+ // member. The config editor's `getStructFieldTitle('addon')` would then fall
51
+ // back to the raw key "addon" (the v2.10.12 regression). Re-state them on the
52
+ // property signature, which the meta reader checks before the field type.
53
+ addon: Schema.optional(AddonActions(configure)).annotations({
54
+ title: "\u8F93\u5165\u6846\u5185\u6309\u94AE",
55
+ description: "\u5728\u8F93\u5165\u6846\u53F3\u4FA7\u5185\u5D4C\u4E00\u7EC4\u64CD\u4F5C\u6309\u94AE"
56
+ })
51
57
  }).annotations({ title: "TextInputRenderer", description: "\u6587\u672C\u8F93\u5165\u6E32\u67D3\u5668\uFF08\u53EF\u7F16\u8F91\uFF09" });
52
58
  }
53
59
  export function defaults() {
@@ -53,9 +53,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly locale: "en" | "ja" | "ko";
54
54
  readonly message: string;
55
55
  }[]];
56
- readonly accessor: string;
57
56
  readonly sortKey?: string | undefined;
58
57
  readonly successMessage?: string | undefined;
58
+ readonly accessor?: string | undefined;
59
59
  }) => any;
60
60
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
61
61
  "onUpdate:modelValue"?: ((value: {
@@ -108,9 +108,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
108
108
  readonly locale: "en" | "ja" | "ko";
109
109
  readonly message: string;
110
110
  }[]];
111
- readonly accessor: string;
112
111
  readonly sortKey?: string | undefined;
113
112
  readonly successMessage?: string | undefined;
113
+ readonly accessor?: string | undefined;
114
114
  }) => any) | undefined;
115
115
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
116
116
  declare const _default: typeof __VLS_export;
@@ -53,9 +53,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly locale: "en" | "ja" | "ko";
54
54
  readonly message: string;
55
55
  }[]];
56
- readonly accessor: string;
57
56
  readonly sortKey?: string | undefined;
58
57
  readonly successMessage?: string | undefined;
58
+ readonly accessor?: string | undefined;
59
59
  }) => any;
60
60
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
61
61
  "onUpdate:modelValue"?: ((value: {
@@ -108,9 +108,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
108
108
  readonly locale: "en" | "ja" | "ko";
109
109
  readonly message: string;
110
110
  }[]];
111
- readonly accessor: string;
112
111
  readonly sortKey?: string | undefined;
113
112
  readonly successMessage?: string | undefined;
113
+ readonly accessor?: string | undefined;
114
114
  }) => any) | undefined;
115
115
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
116
116
  declare const _default: typeof __VLS_export;
@@ -68,7 +68,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
68
68
  locale: Schema.Literal<["ja", "en", "ko"]>;
69
69
  message: Schema.SchemaClass<string, string, never>;
70
70
  }>]>;
71
- accessor: Schema.Schema<string, string, never>;
71
+ accessor: Schema.optional<Schema.Schema<string, string, never>>;
72
72
  enableSorting: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
73
73
  sortKey: Schema.optional<Schema.refine<string, typeof Schema.String>>;
74
74
  size: Schema.optional<Schema.refine<number, Schema.filter<typeof Schema.Number>>>;
@@ -129,6 +129,7 @@ export function toColumnDef(value, { getLocaleText, $cel, inheritedContext }) {
129
129
  return {
130
130
  header: editableHeader(getLocaleText(value.title)),
131
131
  accessorFn: (row, index) => {
132
+ if (!value.accessor) return void 0;
132
133
  try {
133
134
  return Effect.runSync($cel(value.accessor, { ...inheritedContext, row, index }));
134
135
  } catch (e) {