@shwfed/config 2.10.3 → 2.10.5

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 (159) hide show
  1. package/dist/mcp.mjs +1600 -1317
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-sT5i_dnE.js → FieldGroup.vue_vue_type_script_setup_true_lang-D-COryaS.js} +1 -1
  4. package/dist/preview/assets/{badge-ZFj45FMd.js → badge-Sb01O_E2.js} +1 -1
  5. package/dist/preview/assets/{config-3rP_f_3o.js → config-99L3dMcP.js} +1 -1
  6. package/dist/preview/assets/{config-cD091sze.js → config-BgJWNJ-L.js} +1 -1
  7. package/dist/preview/assets/{config-CEBzJOHo.js → config-BjSI3yTw.js} +1 -1
  8. package/dist/preview/assets/{config-BBvebIQw.js → config-BzMW9qCl.js} +1 -1
  9. package/dist/preview/assets/{config-BLesYihN.js → config-CEM0BCax.js} +1 -1
  10. package/dist/preview/assets/{config-D1uMzMiN.js → config-CtKXZjQl.js} +1 -1
  11. package/dist/preview/assets/{config-CSR1JNVB.js → config-CyRpAiSg.js} +1 -1
  12. package/dist/preview/assets/{config-Rz0II9u6.js → config-Cz3VQcLY.js} +1 -1
  13. package/dist/preview/assets/{config-2iinn_1E.js → config-D6BiWm3q.js} +1 -1
  14. package/dist/preview/assets/{config-lskK7grq.js → config-DA1Knc1V.js} +1 -1
  15. package/dist/preview/assets/{config-DfVc2Iy9.js → config-DGBuMIqU.js} +1 -1
  16. package/dist/preview/assets/{config-BwDPPmtn.js → config-DK0wxXG_.js} +1 -1
  17. package/dist/preview/assets/{config-DZPLqFqt.js → config-Du8kzY9H.js} +1 -1
  18. package/dist/preview/assets/{config-CgM75jSO.js → config-n4AGAnL-.js} +1 -1
  19. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-Ce_NeQUa.js → definition.vue_vue_type_script_setup_true_lang-BtOF0dda.js} +1 -1
  20. package/dist/preview/assets/{index-_KA5_QIV.js → index-BOnw60vg.js} +1 -1
  21. package/dist/preview/assets/index-BZlqSG2R.js +763 -0
  22. package/dist/preview/assets/index-D3Az3yzR.css +1 -0
  23. package/dist/preview/assets/index-Rj5bF6fM.js +1 -0
  24. package/dist/preview/assets/{item-CBFJ6f6b.js → item-D7avZRKo.js} +1 -1
  25. package/dist/preview/assets/{runtime-DO9HS0Rb.js → runtime-BWlX7BAG.js} +1 -1
  26. package/dist/preview/assets/{runtime-BKqyqEeD.js → runtime-Bek88ifk.js} +1 -1
  27. package/dist/preview/assets/{runtime-CIc3k_jd.js → runtime-C9kOkTYc.js} +1 -1
  28. package/dist/preview/assets/{runtime-Q_isegB9.js → runtime-CSrgcLuC.js} +1 -1
  29. package/dist/preview/assets/{runtime-jWibKv1T.js → runtime-CWTz9Iy4.js} +1 -1
  30. package/dist/preview/assets/{runtime-Cu0RJn8g.js → runtime-D-HZWcV-.js} +1 -1
  31. package/dist/preview/assets/{runtime-CvMryNNx.js → runtime-DMsPs0Pz.js} +1 -1
  32. package/dist/preview/assets/{runtime-BIGEoc5L.js → runtime-DOqVHcvv.js} +1 -1
  33. package/dist/preview/assets/{runtime-DQXLscBz.js → runtime-Dhl0NpTL.js} +1 -1
  34. package/dist/preview/assets/{runtime-enspc5HG.js → runtime-Dxb1-gUN.js} +1 -1
  35. package/dist/preview/assets/{schema-meta-B5tln_XH.js → schema-meta-DXS0vi6v.js} +1 -1
  36. package/dist/preview/index.html +2 -2
  37. package/dist/runtime/components/block-layout-editor/index.vue +8 -0
  38. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +1 -0
  39. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.js +5 -1
  40. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.d.vue.ts +223 -0
  41. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.vue +496 -0
  42. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.vue.d.ts +223 -0
  43. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.d.vue.ts +10 -0
  44. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.vue +25 -0
  45. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.vue.d.ts +10 -0
  46. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.d.vue.ts +228 -0
  47. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.vue +355 -0
  48. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.vue.d.ts +228 -0
  49. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/schema.d.ts +227 -0
  50. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/schema.js +130 -0
  51. package/dist/runtime/components/config/utils/resolve.d.ts +16 -0
  52. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.d.vue.ts +134 -0
  53. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.vue +78 -2
  54. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.vue.d.ts +134 -0
  55. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/runtime.vue +24 -0
  56. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/schema.d.ts +132 -0
  57. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/schema.js +14 -1
  58. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.d.vue.ts +134 -0
  59. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.vue +77 -2
  60. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.vue.d.ts +134 -0
  61. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/runtime.vue +24 -0
  62. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/schema.d.ts +132 -0
  63. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/schema.js +14 -1
  64. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  65. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  66. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/schema.js +2 -1
  67. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  68. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  69. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/schema.js +2 -1
  70. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  71. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  72. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/schema.js +2 -1
  73. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  74. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  75. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/schema.js +2 -1
  76. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  77. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  78. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/schema.js +2 -1
  79. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  80. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  81. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/schema.js +2 -1
  82. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +22 -22
  83. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +22 -22
  84. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/schema.js +2 -1
  85. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.select/runtime.vue +3 -3
  86. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/runtime.vue +54 -2
  87. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  88. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  89. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
  90. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
  91. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
  92. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
  93. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  94. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  95. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
  96. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
  97. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
  98. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
  99. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  100. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  101. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
  102. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
  103. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  104. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  105. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
  106. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
  107. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  108. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  109. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  110. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  111. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  112. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  113. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  114. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  115. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  116. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  117. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  118. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  119. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  120. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  121. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  122. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  123. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  124. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  125. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  126. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  127. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  128. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  129. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  130. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  131. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  132. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  133. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.d.vue.ts +10 -0
  134. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +543 -0
  135. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue.d.ts +10 -0
  136. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.d.vue.ts +9 -0
  137. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue +110 -0
  138. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue.d.ts +9 -0
  139. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +76 -0
  140. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +89 -0
  141. package/dist/runtime/components/ui/tree/Tree.d.vue.ts +13 -0
  142. package/dist/runtime/components/ui/tree/Tree.vue +8 -1
  143. package/dist/runtime/components/ui/tree/Tree.vue.d.ts +13 -0
  144. package/dist/runtime/components/ui/tree/TreeNode.d.vue.ts +2 -0
  145. package/dist/runtime/components/ui/tree/TreeNode.vue +5 -2
  146. package/dist/runtime/components/ui/tree/TreeNode.vue.d.ts +2 -0
  147. package/dist/runtime/share/slot-renderer.d.vue.ts +5 -0
  148. package/dist/runtime/share/slot-renderer.vue +43 -28
  149. package/dist/runtime/share/slot-renderer.vue.d.ts +5 -0
  150. package/dist/runtime/share/tree-node-var.d.ts +25 -0
  151. package/dist/runtime/share/tree-node-var.js +10 -0
  152. package/dist/runtime/vendor/cel-js/CLAUDE.md +1 -1
  153. package/dist/runtime/vendor/cel-js/PROMPT.md +6 -0
  154. package/dist/runtime/vendor/cel-js/lib/http-builtins.d.ts +0 -14
  155. package/dist/runtime/vendor/cel-js/lib/http-builtins.js +17 -0
  156. package/package.json +1 -1
  157. package/dist/preview/assets/index-Zc4Mcm3J.js +0 -761
  158. package/dist/preview/assets/index-pkoEF5dC.css +0 -1
  159. package/dist/preview/assets/index-snO3CfdE.js +0 -1
@@ -0,0 +1,543 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { Icon } from "@iconify/vue";
4
+ import { format as formatDate } from "date-fns";
5
+ import { ExpressionEditor } from "../../../../ui/expression-editor";
6
+ import { Separator } from "../../../../ui/separator";
7
+ import { Button } from "../../../../ui/button";
8
+ import { Field, FieldLabel } from "../../../../ui/field";
9
+ import { Locale } from "../../../../ui/locale";
10
+ import {
11
+ InputGroup,
12
+ InputGroupAddon,
13
+ InputGroupButton,
14
+ InputGroupInput,
15
+ InputGroupNumberField,
16
+ InputGroupText
17
+ } from "../../../../ui/input-group";
18
+ import { getStructFieldDescription, getStructFieldTitle } from "../../../utils/schema-meta";
19
+ import { Markdown } from "../../../../ui/markdown";
20
+ import DerivedValueEditor from "../../../../form/DerivedValueEditor.vue";
21
+ import { presetSchema, schema } from "./schema";
22
+ defineOptions({ name: "ShwfedTableDateInputRendererConfig" });
23
+ const value = defineModel({ type: Object, ...{ required: true } });
24
+ const fieldSchema = schema(() => {
25
+ });
26
+ const fieldTitle = (field) => getStructFieldTitle(fieldSchema, field) ?? field;
27
+ const fieldDescription = (field) => getStructFieldDescription(fieldSchema, field);
28
+ const presetFieldSchema = presetSchema(() => {
29
+ });
30
+ const presetFieldTitle = (field) => getStructFieldTitle(presetFieldSchema, field) ?? field;
31
+ const presetFieldDescription = (field) => getStructFieldDescription(presetFieldSchema, field);
32
+ const ROW_VARS = {
33
+ row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
34
+ index: { type: "number", label: "\u884C\u7D22\u5F15" }
35
+ };
36
+ const presets = computed(() => value.value.presets ?? []);
37
+ function newId() {
38
+ return typeof crypto !== "undefined" && "randomUUID" in crypto ? crypto.randomUUID() : "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
39
+ const r = Math.random() * 16 | 0;
40
+ const v = c === "x" ? r : r & 3 | 8;
41
+ return v.toString(16);
42
+ });
43
+ }
44
+ function newPreset() {
45
+ return { id: newId(), label: [{ locale: "zh", message: "" }], value: "" };
46
+ }
47
+ function patchPreset(index, patch) {
48
+ const next = [...value.value.presets ?? []];
49
+ const cur = next[index];
50
+ if (!cur) return;
51
+ next[index] = { ...cur, ...patch };
52
+ value.value = { ...value.value, presets: next };
53
+ }
54
+ function addPreset() {
55
+ value.value = { ...value.value, presets: [...value.value.presets ?? [], newPreset()] };
56
+ }
57
+ function removePreset(index) {
58
+ const next = [...value.value.presets ?? []];
59
+ next.splice(index, 1);
60
+ value.value = { ...value.value, presets: next };
61
+ }
62
+ function setPresetLabel(index, label) {
63
+ patchPreset(index, { label });
64
+ }
65
+ function setPresetValue(index, expr) {
66
+ patchPreset(index, { value: expr });
67
+ }
68
+ const bindingText = computed({
69
+ get: () => value.value.binding ?? "",
70
+ set: (v) => {
71
+ const trimmed = v.trim();
72
+ if (trimmed === "") {
73
+ const { binding: _drop, ...rest } = value.value;
74
+ value.value = rest;
75
+ } else {
76
+ value.value = { ...value.value, binding: trimmed };
77
+ }
78
+ }
79
+ });
80
+ const formatText = computed({
81
+ get: () => value.value.format ?? "",
82
+ set: (v) => {
83
+ const trimmed = v.trim();
84
+ if (trimmed === "") {
85
+ const { format: _drop, ...rest } = value.value;
86
+ value.value = rest;
87
+ } else {
88
+ value.value = { ...value.value, format: trimmed };
89
+ }
90
+ }
91
+ });
92
+ const valueFormatText = computed({
93
+ get: () => value.value.valueFormat ?? "",
94
+ set: (v) => {
95
+ const trimmed = v.trim();
96
+ if (trimmed === "") {
97
+ const { valueFormat: _drop, ...rest } = value.value;
98
+ value.value = rest;
99
+ } else {
100
+ value.value = { ...value.value, valueFormat: trimmed };
101
+ }
102
+ }
103
+ });
104
+ function previewFormat(fmt) {
105
+ if (!fmt) return "";
106
+ try {
107
+ return formatDate(/* @__PURE__ */ new Date(), fmt);
108
+ } catch {
109
+ return "(\u65E0\u6548\u683C\u5F0F)";
110
+ }
111
+ }
112
+ const formatExample = computed(() => previewFormat(value.value.format ?? ""));
113
+ 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
+ const disabledModel = computed({
126
+ get: () => value.value.disabled ?? "",
127
+ set: (v) => {
128
+ if (v === "") {
129
+ const { disabled: _drop, ...rest } = value.value;
130
+ value.value = rest;
131
+ } else {
132
+ value.value = { ...value.value, disabled: v };
133
+ }
134
+ }
135
+ });
136
+ const readonlyModel = computed({
137
+ get: () => value.value.readonly ?? "",
138
+ set: (v) => {
139
+ if (v === "") {
140
+ const { readonly: _drop, ...rest } = value.value;
141
+ value.value = rest;
142
+ } else {
143
+ value.value = { ...value.value, readonly: v };
144
+ }
145
+ }
146
+ });
147
+ const derivedModel = computed({
148
+ get: () => value.value.derived,
149
+ set: (v) => {
150
+ if (v == null) {
151
+ const { derived: _drop, ...rest } = value.value;
152
+ value.value = rest;
153
+ } else {
154
+ value.value = { ...value.value, derived: v };
155
+ }
156
+ }
157
+ });
158
+ </script>
159
+
160
+ <template>
161
+ <div class="space-y-5">
162
+ <div class="grid grid-cols-2 gap-x-6 gap-y-4">
163
+ <Field orientation="vertical">
164
+ <FieldLabel class="text-xs text-zinc-500">
165
+ <template
166
+ v-if="fieldDescription('title')"
167
+ #tooltip
168
+ >
169
+ <Markdown
170
+ :source="fieldDescription('title')"
171
+ block
172
+ class="prose prose-sm prose-zinc"
173
+ />
174
+ </template>
175
+ {{ fieldTitle("title") }}
176
+ </FieldLabel>
177
+ <Locale
178
+ :model-value="value.title"
179
+ @update:model-value="(v) => value = { ...value, title: v }"
180
+ />
181
+ </Field>
182
+ <Field orientation="vertical">
183
+ <FieldLabel class="text-xs text-zinc-500">
184
+ <template
185
+ v-if="fieldDescription('tooltip')"
186
+ #tooltip
187
+ >
188
+ <Markdown
189
+ :source="fieldDescription('tooltip')"
190
+ block
191
+ class="prose prose-sm prose-zinc"
192
+ />
193
+ </template>
194
+ {{ fieldTitle("tooltip") }}
195
+ </FieldLabel>
196
+ <Locale
197
+ :model-value="value.tooltip"
198
+ markdown
199
+ @update:model-value="(v) => value = { ...value, tooltip: v }"
200
+ />
201
+ </Field>
202
+ </div>
203
+ <div class="grid grid-cols-2 gap-x-6 gap-y-4">
204
+ <Field orientation="vertical">
205
+ <FieldLabel class="text-xs text-zinc-500">
206
+ <template
207
+ v-if="fieldDescription('binding')"
208
+ #tooltip
209
+ >
210
+ <Markdown
211
+ :source="fieldDescription('binding')"
212
+ block
213
+ class="prose prose-sm prose-zinc"
214
+ />
215
+ </template>
216
+ {{ fieldTitle("binding") }}
217
+ </FieldLabel>
218
+ <InputGroup>
219
+ <InputGroupInput
220
+ v-model="bindingText"
221
+ placeholder="例:joinDate"
222
+ class="font-mono"
223
+ />
224
+ </InputGroup>
225
+ </Field>
226
+ <Field orientation="vertical">
227
+ <FieldLabel class="text-xs text-zinc-500">
228
+ <template
229
+ v-if="fieldDescription('placeholder')"
230
+ #tooltip
231
+ >
232
+ <Markdown
233
+ :source="fieldDescription('placeholder')"
234
+ block
235
+ class="prose prose-sm prose-zinc"
236
+ />
237
+ </template>
238
+ {{ fieldTitle("placeholder") }}
239
+ </FieldLabel>
240
+ <Locale
241
+ :model-value="value.placeholder"
242
+ @update:model-value="(v) => value = { ...value, placeholder: v }"
243
+ />
244
+ </Field>
245
+ <Field orientation="vertical">
246
+ <FieldLabel class="text-xs text-zinc-500">
247
+ <template #tooltip>
248
+ <Markdown
249
+ :source="fieldDescription('format') ?? '\u8F93\u5165\u6846\u4E2D\u5C55\u793A\u65E5\u671F\u7684 `date-fns` \u683C\u5F0F\u4E32'"
250
+ block
251
+ class="prose prose-sm prose-zinc"
252
+ />
253
+ </template>
254
+ {{ fieldTitle("format") }}
255
+ </FieldLabel>
256
+ <InputGroup>
257
+ <InputGroupInput
258
+ v-model="formatText"
259
+ placeholder="例:yyyy-MM-dd"
260
+ class="font-mono"
261
+ />
262
+ <InputGroupAddon
263
+ v-if="formatExample"
264
+ align="inline-end"
265
+ >
266
+ <InputGroupText class="text-xs text-zinc-400">
267
+ {{ formatExample }}
268
+ </InputGroupText>
269
+ </InputGroupAddon>
270
+ </InputGroup>
271
+ </Field>
272
+ <Field orientation="vertical">
273
+ <FieldLabel class="text-xs text-zinc-500">
274
+ <template #tooltip>
275
+ <Markdown
276
+ :source="fieldDescription('valueFormat') ?? '\u5199\u5165\u884C\u6570\u636E\u7684 `date-fns` \u683C\u5F0F\u4E32'"
277
+ block
278
+ class="prose prose-sm prose-zinc"
279
+ />
280
+ </template>
281
+ {{ fieldTitle("valueFormat") }}
282
+ </FieldLabel>
283
+ <InputGroup>
284
+ <InputGroupInput
285
+ v-model="valueFormatText"
286
+ placeholder="例:yyyy-MM-dd"
287
+ class="font-mono"
288
+ />
289
+ <InputGroupAddon
290
+ v-if="valueFormatExample"
291
+ align="inline-end"
292
+ >
293
+ <InputGroupText class="text-xs text-zinc-400">
294
+ {{ valueFormatExample }}
295
+ </InputGroupText>
296
+ </InputGroupAddon>
297
+ </InputGroup>
298
+ </Field>
299
+ <Field orientation="vertical">
300
+ <FieldLabel class="text-xs text-zinc-500">
301
+ <template
302
+ v-if="fieldDescription('size')"
303
+ #tooltip
304
+ >
305
+ <Markdown
306
+ :source="fieldDescription('size')"
307
+ block
308
+ class="prose prose-sm prose-zinc"
309
+ />
310
+ </template>
311
+ {{ fieldTitle("size") }}
312
+ </FieldLabel>
313
+ <InputGroup>
314
+ <InputGroupNumberField
315
+ :model-value="value.size"
316
+ :disabled="value.grow"
317
+ :min="0"
318
+ @update:model-value="(v) => value = { ...value, size: v }"
319
+ />
320
+ <InputGroupAddon align="inline-end">
321
+ <InputGroupButton
322
+ :variant="value.grow ? 'primary' : 'ghost'"
323
+ size="xs"
324
+ @click="value = { ...value, grow: !value.grow }"
325
+ >
326
+ <Icon :icon="value.grow ? 'fluent:lock-closed-20-regular' : 'fluent:arrow-autofit-width-20-regular'" />
327
+ {{ fieldTitle("grow") }}
328
+ </InputGroupButton>
329
+ </InputGroupAddon>
330
+ </InputGroup>
331
+ </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
+ <Field orientation="vertical">
354
+ <FieldLabel class="text-xs text-zinc-500">
355
+ <template
356
+ v-if="fieldDescription('disabled')"
357
+ #tooltip
358
+ >
359
+ <Markdown
360
+ :source="fieldDescription('disabled')"
361
+ block
362
+ class="prose prose-sm prose-zinc"
363
+ />
364
+ </template>
365
+ {{ fieldTitle("disabled") }}
366
+ </FieldLabel>
367
+ <ExpressionEditor
368
+ v-model="disabledModel"
369
+ placeholder="例:row.locked"
370
+ result-type="bool"
371
+ :extra-vars="ROW_VARS"
372
+ />
373
+ </Field>
374
+ <Field orientation="vertical">
375
+ <FieldLabel class="text-xs text-zinc-500">
376
+ <template
377
+ v-if="fieldDescription('readonly')"
378
+ #tooltip
379
+ >
380
+ <Markdown
381
+ :source="fieldDescription('readonly')"
382
+ block
383
+ class="prose prose-sm prose-zinc"
384
+ />
385
+ </template>
386
+ {{ fieldTitle("readonly") }}
387
+ </FieldLabel>
388
+ <ExpressionEditor
389
+ v-model="readonlyModel"
390
+ placeholder="例:row.id != null"
391
+ result-type="bool"
392
+ :extra-vars="ROW_VARS"
393
+ />
394
+ </Field>
395
+ <Field
396
+ orientation="vertical"
397
+ class="col-span-2"
398
+ >
399
+ <FieldLabel class="text-xs text-zinc-500">
400
+ <template
401
+ v-if="fieldDescription('derived')"
402
+ #tooltip
403
+ >
404
+ <Markdown
405
+ :source="fieldDescription('derived')"
406
+ block
407
+ class="prose prose-sm prose-zinc"
408
+ />
409
+ </template>
410
+ {{ fieldTitle("derived") }}
411
+ </FieldLabel>
412
+ <DerivedValueEditor
413
+ v-model="derivedModel"
414
+ result-type="string"
415
+ placeholder="例:row.startDate"
416
+ />
417
+ </Field>
418
+ </div>
419
+ <Field orientation="vertical">
420
+ <FieldLabel class="text-xs text-zinc-500">
421
+ <template
422
+ v-if="fieldDescription('presets')"
423
+ #tooltip
424
+ >
425
+ <Markdown
426
+ :source="fieldDescription('presets')"
427
+ block
428
+ class="prose prose-sm prose-zinc"
429
+ />
430
+ </template>
431
+ {{ fieldTitle("presets") }}
432
+ </FieldLabel>
433
+ <div class="flex flex-col gap-3">
434
+ <div
435
+ v-for="(preset, index) in presets"
436
+ :key="preset.id"
437
+ data-slot="date-input-preset"
438
+ class="relative pt-8 grid grid-cols-2 gap-3 rounded border border-zinc-200 bg-zinc-50/40 p-3"
439
+ >
440
+ <InputGroupButton
441
+ variant="destructive"
442
+ size="icon-xs"
443
+ data-slot="date-input-preset-delete"
444
+ aria-label="删除预设"
445
+ class="absolute right-2 top-2 z-10"
446
+ @click="removePreset(index)"
447
+ >
448
+ <Icon icon="fluent:delete-20-regular" />
449
+ </InputGroupButton>
450
+ <Field orientation="vertical">
451
+ <FieldLabel class="text-xs text-zinc-500">
452
+ <template
453
+ v-if="presetFieldDescription('label')"
454
+ #tooltip
455
+ >
456
+ <Markdown
457
+ :source="presetFieldDescription('label')"
458
+ block
459
+ class="prose prose-sm prose-zinc"
460
+ />
461
+ </template>
462
+ {{ presetFieldTitle("label") }}
463
+ </FieldLabel>
464
+ <Locale
465
+ :model-value="preset.label"
466
+ @update:model-value="(v) => setPresetLabel(index, v)"
467
+ />
468
+ </Field>
469
+ <Field orientation="vertical">
470
+ <FieldLabel class="text-xs text-zinc-500">
471
+ <template
472
+ v-if="presetFieldDescription('value')"
473
+ #tooltip
474
+ >
475
+ <Markdown
476
+ :source="presetFieldDescription('value')"
477
+ block
478
+ class="prose prose-sm prose-zinc"
479
+ />
480
+ </template>
481
+ {{ presetFieldTitle("value") }}
482
+ </FieldLabel>
483
+ <ExpressionEditor
484
+ :model-value="preset.value"
485
+ placeholder="例:now.offset(-7, &quot;days&quot;)"
486
+ result-type="Date"
487
+ class="min-h-10"
488
+ :extra-vars="ROW_VARS"
489
+ @update:model-value="(v) => setPresetValue(index, v)"
490
+ />
491
+ </Field>
492
+ </div>
493
+ <Button
494
+ type="button"
495
+ data-slot="date-input-add-preset"
496
+ class="w-full justify-center"
497
+ @click="addPreset"
498
+ >
499
+ <Icon icon="fluent:add-20-regular" />
500
+ <span>增加快捷选项</span>
501
+ </Button>
502
+ </div>
503
+ </Field>
504
+ <Separator />
505
+ <div class="flex flex-wrap gap-x-8 gap-y-3">
506
+ <Field
507
+ orientation="vertical"
508
+ class="w-full max-w-xs"
509
+ >
510
+ <FieldLabel class="text-xs text-zinc-500">
511
+ <template
512
+ v-if="fieldDescription('enableSorting')"
513
+ #tooltip
514
+ >
515
+ <Markdown
516
+ :source="fieldDescription('enableSorting')"
517
+ block
518
+ class="prose prose-sm prose-zinc"
519
+ />
520
+ </template>
521
+ {{ fieldTitle("enableSorting") }}
522
+ </FieldLabel>
523
+ <InputGroup>
524
+ <InputGroupInput
525
+ :model-value="value.sortKey"
526
+ placeholder="例:created_at"
527
+ @update:model-value="(v) => value = { ...value, sortKey: v || void 0 }"
528
+ />
529
+ <InputGroupAddon align="inline-end">
530
+ <InputGroupButton
531
+ :variant="value.enableSorting ? 'primary' : 'ghost'"
532
+ size="xs"
533
+ @click="value = { ...value, enableSorting: !value.enableSorting }"
534
+ >
535
+ <Icon :icon="value.enableSorting ? 'fluent:arrow-sort-up-16-regular' : 'fluent:arrow-sort-16-regular'" />
536
+ {{ fieldTitle("enableSorting") }}
537
+ </InputGroupButton>
538
+ </InputGroupAddon>
539
+ </InputGroup>
540
+ </Field>
541
+ </div>
542
+ </div>
543
+ </template>
@@ -0,0 +1,10 @@
1
+ type __VLS_ModelProps = {
2
+ modelValue: Record<string, any>;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
5
+ "update:modelValue": (value: Record<string, any>) => any;
6
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
7
+ "onUpdate:modelValue"?: ((value: Record<string, any>) => any) | undefined;
8
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import type { CellContext } from '@tanstack/vue-table';
2
+ import type { Value } from './schema.js';
3
+ type __VLS_Props = {
4
+ column: Value;
5
+ ctx: CellContext<unknown, unknown>;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,110 @@
1
+ <script setup>
2
+ import { Effect } from "effect";
3
+ import { computed } from "vue";
4
+ import { useI18n } from "vue-i18n";
5
+ import { format as formatDate } from "date-fns";
6
+ import { cel as $cel } from "../../../../../utils/cel";
7
+ import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
9
+ import { getLocalizedText } from "../../../../../share/locale";
10
+ import { DATE_PICKER_DEFAULT_FORMATS, DatePicker } from "../../../../ui/date-picker";
11
+ import { useFormState } from "../../../../form/utils/state";
12
+ defineOptions({ name: "ShwfedTableDateInputRendererRuntime" });
13
+ const props = defineProps({
14
+ column: { type: null, required: true },
15
+ ctx: { type: Object, required: true }
16
+ });
17
+ const { locale } = useI18n();
18
+ const celContext = injectCELContext();
19
+ const formState = useFormState();
20
+ const placeholderText = computed(
21
+ () => props.column.placeholder ? getLocalizedText(props.column.placeholder, locale.value) : void 0
22
+ );
23
+ function evalBool(expression, label) {
24
+ if (!expression) return false;
25
+ try {
26
+ return Effect.runSync($cel(expression, celBindings(celContext))) === true;
27
+ } catch (e) {
28
+ console.error(`[shwfed-table] date-input ${label} failed`, e);
29
+ return false;
30
+ }
31
+ }
32
+ const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
33
+ const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
34
+ const formReadonly = useFormReadonly();
35
+ const isReadonly = computed(
36
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
37
+ );
38
+ const effectiveReadonly = computed(
39
+ () => isReadonly.value || props.column.derived?.mode === "formula"
40
+ );
41
+ const resolvedValueFormat = computed(
42
+ () => props.column.valueFormat ?? DATE_PICKER_DEFAULT_FORMATS.date.value
43
+ );
44
+ const shortcuts = computed(() => {
45
+ const list = props.column.presets;
46
+ if (!list || list.length === 0) return void 0;
47
+ return list.map((preset) => ({
48
+ name: preset.label,
49
+ value: () => {
50
+ try {
51
+ const d = Effect.runSync($cel(preset.value, celBindings(celContext)));
52
+ return formatDate(d, resolvedValueFormat.value);
53
+ } catch (e) {
54
+ console.error(`[shwfed-table] date-input preset "${preset.value}" failed`, e);
55
+ return "";
56
+ }
57
+ }
58
+ }));
59
+ });
60
+ const model = computed({
61
+ get: () => {
62
+ const v = formState.getAt(props.column.binding);
63
+ return typeof v === "string" && v.length > 0 ? v : void 0;
64
+ },
65
+ set: (next) => {
66
+ formState.setAt(props.column.binding, next ?? null);
67
+ }
68
+ });
69
+ </script>
70
+
71
+ <template>
72
+ <!--
73
+ 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
75
+ sized identically so rows do not jump when a CEL condition flips.
76
+ -->
77
+ <div class="p-[0.125rem] w-full">
78
+ <span
79
+ v-if="isHidden"
80
+ class="block h-7 w-full"
81
+ />
82
+ <!--
83
+ Readonly empty state mirrors the `text-input` column: a centered, faded,
84
+ non-selectable `-` so a readonly grid reads uniformly regardless of which
85
+ column type backs each cell. A non-empty readonly value keeps left-aligned
86
+ dark text.
87
+ -->
88
+ <span
89
+ v-else-if="effectiveReadonly"
90
+ :class="[
91
+ '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'
93
+ ]"
94
+ >
95
+ {{ model || "-" }}
96
+ </span>
97
+ <DatePicker
98
+ v-else
99
+ v-model="model"
100
+ type="date"
101
+ size="sm"
102
+ class="w-full"
103
+ :format="column.format"
104
+ :value-format="column.valueFormat"
105
+ :placeholder="placeholderText"
106
+ :disabled="isDisabled"
107
+ :shortcuts="shortcuts"
108
+ />
109
+ </div>
110
+ </template>
@@ -0,0 +1,9 @@
1
+ import type { CellContext } from '@tanstack/vue-table';
2
+ import type { Value } from './schema.js';
3
+ type __VLS_Props = {
4
+ column: Value;
5
+ ctx: CellContext<unknown, unknown>;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;