@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
@@ -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"
@@ -4,6 +4,7 @@ import { Icon } from "@iconify/vue";
4
4
  import { format as formatDate } from "date-fns";
5
5
  import { ExpressionEditor } from "../../../../ui/expression-editor";
6
6
  import { Separator } from "../../../../ui/separator";
7
+ import { Switch } from "../../../../ui/switch";
7
8
  import { Button } from "../../../../ui/button";
8
9
  import { Field, FieldLabel } from "../../../../ui/field";
9
10
  import { Locale } from "../../../../ui/locale";
@@ -15,6 +16,12 @@ import {
15
16
  InputGroupNumberField,
16
17
  InputGroupText
17
18
  } from "../../../../ui/input-group";
19
+ import {
20
+ DropdownMenu,
21
+ DropdownMenuContent,
22
+ DropdownMenuItem,
23
+ DropdownMenuTrigger
24
+ } from "../../../../ui/dropdown-menu";
18
25
  import { getStructFieldDescription, getStructFieldTitle } from "../../../utils/schema-meta";
19
26
  import { Markdown } from "../../../../ui/markdown";
20
27
  import DerivedValueEditor from "../../../../form/DerivedValueEditor.vue";
@@ -29,6 +36,14 @@ const presetFieldSchema = presetSchema(() => {
29
36
  });
30
37
  const presetFieldTitle = (field) => getStructFieldTitle(presetFieldSchema, field) ?? field;
31
38
  const presetFieldDescription = (field) => getStructFieldDescription(presetFieldSchema, field);
39
+ const ALIGN_OPTIONS = [
40
+ { value: "left", label: "\u5DE6\u5BF9\u9F50", icon: "fluent:text-align-left-20-regular" },
41
+ { value: "center", label: "\u5C45\u4E2D", icon: "fluent:text-align-center-20-regular" },
42
+ { value: "right", label: "\u53F3\u5BF9\u9F50", icon: "fluent:text-align-right-20-regular" }
43
+ ];
44
+ const currentAlignIcon = computed(
45
+ () => (ALIGN_OPTIONS.find((o) => o.value === (value.value.align ?? "left")) ?? ALIGN_OPTIONS[0]).icon
46
+ );
32
47
  const ROW_VARS = {
33
48
  row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
34
49
  index: { type: "number", label: "\u884C\u7D22\u5F15" }
@@ -77,6 +92,14 @@ const bindingText = computed({
77
92
  }
78
93
  }
79
94
  });
95
+ function onHiddenChange(v) {
96
+ if (v) {
97
+ value.value = { ...value.value, hidden: true };
98
+ } else {
99
+ const { hidden: _drop, ...rest } = value.value;
100
+ value.value = rest;
101
+ }
102
+ }
80
103
  const formatText = computed({
81
104
  get: () => value.value.format ?? "",
82
105
  set: (v) => {
@@ -111,17 +134,6 @@ function previewFormat(fmt) {
111
134
  }
112
135
  const formatExample = computed(() => previewFormat(value.value.format ?? ""));
113
136
  const valueFormatExample = computed(() => previewFormat(value.value.valueFormat ?? ""));
114
- const hiddenModel = computed({
115
- get: () => value.value.hidden ?? "",
116
- set: (v) => {
117
- if (v === "") {
118
- const { hidden: _drop, ...rest } = value.value;
119
- value.value = rest;
120
- } else {
121
- value.value = { ...value.value, hidden: v };
122
- }
123
- }
124
- });
125
137
  const disabledModel = computed({
126
138
  get: () => value.value.disabled ?? "",
127
139
  set: (v) => {
@@ -311,6 +323,29 @@ const derivedModel = computed({
311
323
  {{ fieldTitle("size") }}
312
324
  </FieldLabel>
313
325
  <InputGroup>
326
+ <InputGroupAddon align="inline-start">
327
+ <DropdownMenu>
328
+ <DropdownMenuTrigger as-child>
329
+ <InputGroupButton
330
+ variant="ghost"
331
+ size="xs"
332
+ :title="fieldTitle('align')"
333
+ >
334
+ <Icon :icon="currentAlignIcon" />
335
+ </InputGroupButton>
336
+ </DropdownMenuTrigger>
337
+ <DropdownMenuContent align="start">
338
+ <DropdownMenuItem
339
+ v-for="opt in ALIGN_OPTIONS"
340
+ :key="opt.value"
341
+ @select="value = { ...value, align: opt.value }"
342
+ >
343
+ <Icon :icon="opt.icon" />
344
+ {{ opt.label }}
345
+ </DropdownMenuItem>
346
+ </DropdownMenuContent>
347
+ </DropdownMenu>
348
+ </InputGroupAddon>
314
349
  <InputGroupNumberField
315
350
  :model-value="value.size"
316
351
  :disabled="value.grow"
@@ -329,27 +364,6 @@ const derivedModel = computed({
329
364
  </InputGroupAddon>
330
365
  </InputGroup>
331
366
  </Field>
332
- <Field orientation="vertical">
333
- <FieldLabel class="text-xs text-zinc-500">
334
- <template
335
- v-if="fieldDescription('hidden')"
336
- #tooltip
337
- >
338
- <Markdown
339
- :source="fieldDescription('hidden')"
340
- block
341
- class="prose prose-sm prose-zinc"
342
- />
343
- </template>
344
- {{ fieldTitle("hidden") }}
345
- </FieldLabel>
346
- <ExpressionEditor
347
- v-model="hiddenModel"
348
- placeholder="例:row.archived"
349
- result-type="bool"
350
- :extra-vars="ROW_VARS"
351
- />
352
- </Field>
353
367
  <Field orientation="vertical">
354
368
  <FieldLabel class="text-xs text-zinc-500">
355
369
  <template
@@ -538,6 +552,27 @@ const derivedModel = computed({
538
552
  </InputGroupAddon>
539
553
  </InputGroup>
540
554
  </Field>
555
+ <Field orientation="vertical">
556
+ <FieldLabel class="text-xs text-zinc-500">
557
+ <template
558
+ v-if="fieldDescription('hidden')"
559
+ #tooltip
560
+ >
561
+ <Markdown
562
+ :source="fieldDescription('hidden')"
563
+ block
564
+ class="prose prose-sm prose-zinc"
565
+ />
566
+ </template>
567
+ {{ fieldTitle("hidden") }}
568
+ </FieldLabel>
569
+ <div>
570
+ <Switch
571
+ :model-value="value.hidden ?? false"
572
+ @update:model-value="onHiddenChange"
573
+ />
574
+ </div>
575
+ </Field>
541
576
  </div>
542
577
  </div>
543
578
  </template>
@@ -9,6 +9,7 @@ import { useFormReadonly } from "../../../../form/utils/readonly";
9
9
  import { getLocalizedText } from "../../../../../share/locale";
10
10
  import { DATE_PICKER_DEFAULT_FORMATS, DatePicker } from "../../../../ui/date-picker";
11
11
  import { useFormState } from "../../../../form/utils/state";
12
+ import { JUSTIFY_CLASS, TEXT_ALIGN_CLASS } from "../../../utils/runtime";
12
13
  defineOptions({ name: "ShwfedTableDateInputRendererRuntime" });
13
14
  const props = defineProps({
14
15
  column: { type: null, required: true },
@@ -29,7 +30,6 @@ function evalBool(expression, label) {
29
30
  return false;
30
31
  }
31
32
  }
32
- const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
33
33
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
34
34
  const formReadonly = useFormReadonly();
35
35
  const isReadonly = computed(
@@ -41,6 +41,8 @@ const effectiveReadonly = computed(
41
41
  const resolvedValueFormat = computed(
42
42
  () => props.column.valueFormat ?? DATE_PICKER_DEFAULT_FORMATS.date.value
43
43
  );
44
+ const justifyClass = computed(() => JUSTIFY_CLASS[props.column.align ?? "left"] ?? JUSTIFY_CLASS.left);
45
+ const textAlignClass = computed(() => TEXT_ALIGN_CLASS[props.column.align ?? "left"] ?? TEXT_ALIGN_CLASS.left);
44
46
  const shortcuts = computed(() => {
45
47
  const list = props.column.presets;
46
48
  if (!list || list.length === 0) return void 0;
@@ -71,14 +73,10 @@ const model = computed({
71
73
  <template>
72
74
  <!--
73
75
  Row budget matches the editable input columns: 2px outer inset around a 28px
74
- (`h-7`) control — total 32px. Every branch (hidden / readonly / editable) is
76
+ (`h-7`) control — total 32px. Every branch (readonly / editable) is
75
77
  sized identically so rows do not jump when a CEL condition flips.
76
78
  -->
77
79
  <div class="p-[0.125rem] w-full">
78
- <span
79
- v-if="isHidden"
80
- class="block h-7 w-full"
81
- />
82
80
  <!--
83
81
  Readonly empty state mirrors the `text-input` column: a centered, faded,
84
82
  non-selectable `-` so a readonly grid reads uniformly regardless of which
@@ -86,10 +84,10 @@ const model = computed({
86
84
  dark text.
87
85
  -->
88
86
  <span
89
- v-else-if="effectiveReadonly"
87
+ v-if="effectiveReadonly"
90
88
  :class="[
91
89
  'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
92
- model ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
90
+ model ? ['text-zinc-700', justifyClass] : 'justify-center font-mono text-zinc-300 select-none'
93
91
  ]"
94
92
  >
95
93
  {{ model || "-" }}
@@ -107,7 +105,7 @@ const model = computed({
107
105
  type="date"
108
106
  size="sm"
109
107
  class="w-full"
110
- input-class="border-zinc-200/30 hover:border-zinc-200 focus-within:border-zinc-200 transition-colors ease-out duration-180"
108
+ :input-class="['border-zinc-200/30 hover:border-zinc-200 focus-within:border-zinc-200 transition-colors ease-out duration-180', textAlignClass]"
111
109
  :format="column.format"
112
110
  :value-format="column.valueFormat"
113
111
  :placeholder="placeholderText"
@@ -20,6 +20,9 @@ export declare function presetSchema(configure: (env: Environment) => void): Sch
20
20
  value: Schema.Schema<string, string, never>;
21
21
  }>;
22
22
  export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
23
+ align: Schema.optionalWith<Schema.Literal<["left", "center", "right"]>, {
24
+ default: () => "left";
25
+ }>;
23
26
  placeholder: Schema.optional<Schema.TupleType<readonly [Schema.Struct<{
24
27
  locale: Schema.Literal<["zh"]>;
25
28
  message: Schema.SchemaClass<string, string, never>;
@@ -27,7 +30,6 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
27
30
  locale: Schema.Literal<["ja", "en", "ko"]>;
28
31
  message: Schema.SchemaClass<string, string, never>;
29
32
  }>]>>;
30
- hidden: Schema.optional<Schema.Schema<string, string, never>>;
31
33
  disabled: Schema.optional<Schema.Schema<string, string, never>>;
32
34
  readonly: Schema.optional<Schema.Schema<string, string, never>>;
33
35
  derived: Schema.optional<Schema.Struct<{
@@ -66,6 +68,7 @@ export declare function schema(configure: (env: Environment) => void): Schema.St
66
68
  locale: Schema.Literal<["ja", "en", "ko"]>;
67
69
  message: Schema.SchemaClass<string, string, never>;
68
70
  }>]>>;
71
+ hidden: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
69
72
  id: Schema.refine<string, typeof Schema.String>;
70
73
  groupId: Schema.optional<typeof Schema.UUID>;
71
74
  type: Schema.Literal<["com.shwfed.table.column.date-input"]>;