@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.
- package/dist/mcp.mjs +88 -54
- package/dist/module.json +1 -1
- 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
- package/dist/preview/assets/{badge-DkHwLDps.js → badge-BkYCxTFK.js} +1 -1
- package/dist/preview/assets/{config-Dx1SXsSf.js → config-74YmXQsH.js} +1 -1
- package/dist/preview/assets/{config-DbV3RlZz.js → config-B62b9dMF.js} +1 -1
- package/dist/preview/assets/{config-OPQWANCx.js → config-BHYlKhDX.js} +1 -1
- package/dist/preview/assets/{config-Cft-srKd.js → config-Bbbyd5lB.js} +1 -1
- package/dist/preview/assets/{config-Uw4cvZGX.js → config-BcZe-bR9.js} +1 -1
- package/dist/preview/assets/{config-DJQ2LOWo.js → config-Bt6--diX.js} +1 -1
- package/dist/preview/assets/{config-CVPVYMuh.js → config-COr2MFhN.js} +1 -1
- package/dist/preview/assets/{config-7KeAl8UU.js → config-CPsd0ppi.js} +1 -1
- package/dist/preview/assets/{config-DAZ2Uj6B.js → config-CYVafGLc.js} +1 -1
- package/dist/preview/assets/{config-DQVKd54J.js → config-C_Ia1CDq.js} +1 -1
- package/dist/preview/assets/{config-CZ1e9utV.js → config-Cbp7aAAw.js} +1 -1
- package/dist/preview/assets/{config-DCANpbtq.js → config-Dk9OegYx.js} +1 -1
- package/dist/preview/assets/{config-Cedm-E2H.js → config-Dt8k1gnT.js} +1 -1
- package/dist/preview/assets/{config-Cy6Eix27.js → config-sCP15_0f.js} +1 -1
- 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
- package/dist/preview/assets/{index-Cum0oK9u.js → index-BMOizF8g.js} +1 -1
- package/dist/preview/assets/index-C9G8y6qZ.js +1 -0
- package/dist/preview/assets/index-DjG-VVR4.js +763 -0
- package/dist/preview/assets/index-DqRQ67sX.css +1 -0
- package/dist/preview/assets/{item-H4QeOpnC.js → item-C1efxuFt.js} +1 -1
- package/dist/preview/assets/{runtime-C3532B0Y.js → runtime-7z9N9JGG.js} +1 -1
- package/dist/preview/assets/{runtime-sPGVp7yA.js → runtime-Bpa1zRxG.js} +1 -1
- package/dist/preview/assets/{runtime-DvCHNIPq.js → runtime-Csv04MYG.js} +1 -1
- package/dist/preview/assets/{runtime-CwgX0PuH.js → runtime-D0bjM4NL.js} +1 -1
- package/dist/preview/assets/{runtime-CNMjRr9Y.js → runtime-DoLpKFu-.js} +1 -1
- package/dist/preview/assets/{runtime-BotFX6qJ.js → runtime-Du0ghzR2.js} +1 -1
- package/dist/preview/assets/{runtime-CTnwTJlw.js → runtime-Dz3ZQYdq.js} +1 -1
- package/dist/preview/assets/{runtime-cKOD2A6u.js → runtime-Dz7SCudL.js} +1 -1
- package/dist/preview/assets/{runtime-D5HcLLLR.js → runtime-LgZuN2Tf.js} +1 -1
- package/dist/preview/assets/{runtime-ibuFFD1K.js → runtime-S9eZ2nJS.js} +1 -1
- package/dist/preview/assets/{schema-meta-DtZNwp3h.js → schema-meta-CYKPEnu9.js} +1 -1
- package/dist/preview/index.html +2 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/schema.js +10 -1
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.d.vue.ts +4 -4
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.vue.d.ts +4 -4
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.d.vue.ts +6 -6
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.vue.d.ts +6 -6
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.d.vue.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.vue.d.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/schema.js +10 -1
- package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +4 -4
- package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +4 -4
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +22 -22
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +22 -22
- package/dist/runtime/components/form/fields/2026-06-09/com.shwfed.form.field.upload/runtime.vue +23 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/config.vue +30 -0
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.date/schema.js +1 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/config.vue +30 -0
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.icon/schema.js +7 -4
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/config.vue +30 -0
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.number/schema.js +1 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/config.vue +30 -0
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/schema.js +1 -1
- package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/config.vue +30 -0
- package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.d.ts +2 -1
- package/dist/runtime/components/table/columns/2026-05-13/com.shwfed.table.column.switch.remote/schema.js +1 -1
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/config.vue +60 -32
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +7 -9
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/schema.js +12 -6
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/config.vue +67 -32
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +6 -9
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/schema.js +2 -5
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/config.vue +66 -31
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +7 -9
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/schema.js +12 -6
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.d.ts +1 -1
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.js +1 -0
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +6 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +61 -22
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +6 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +6 -9
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +3 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +6 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +61 -22
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +6 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +6 -9
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +3 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +4 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +67 -23
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +4 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +6 -9
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -4
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +4 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +67 -23
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +4 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +6 -9
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +2 -4
- package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +67 -32
- package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue +7 -9
- package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +2 -5
- package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/config.vue +66 -31
- package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/runtime.vue +5 -8
- package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.d.ts +4 -1
- package/dist/runtime/components/table/columns/2026-06-22/com.shwfed.table.column.date-range-input/schema.js +4 -6
- package/dist/runtime/components/table/index.vue +46 -7
- package/dist/runtime/components/table/utils/runtime.d.ts +1 -0
- package/dist/runtime/components/table/utils/runtime.js +5 -0
- package/dist/runtime/components/table/utils/shared.d.ts +3 -1
- package/dist/runtime/components/table/utils/shared.js +17 -5
- package/dist/runtime/components/ui/date-picker/DatePickerInput.d.vue.ts +1 -1
- package/dist/runtime/components/ui/date-picker/DatePickerInput.vue +9 -2
- package/dist/runtime/components/ui/date-picker/DatePickerInput.vue.d.ts +1 -1
- package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.d.vue.ts +1 -1
- package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.vue.d.ts +1 -1
- package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.d.vue.ts +1 -1
- package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue +13 -4
- package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue.d.ts +1 -1
- package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.d.vue.ts +2 -2
- package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.vue.d.ts +2 -2
- package/package.json +1 -1
- package/dist/preview/assets/index-B3HnlKis.js +0 -763
- package/dist/preview/assets/index-BAY6NLoo.css +0 -1
- 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-
|
|
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
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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-
|
|
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
|
|
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 (
|
|
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-
|
|
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"]>;
|