diff --git a/console/src/formkit/formkit.config.ts b/console/src/formkit/formkit.config.ts index 47f143593..58ea8869c 100644 --- a/console/src/formkit/formkit.config.ts +++ b/console/src/formkit/formkit.config.ts @@ -3,6 +3,7 @@ import theme from "./theme"; import { zh, en } from "@formkit/i18n"; import type { DefaultConfigOptions } from "@formkit/vue"; import { form } from "./inputs/form"; +import { group } from "./inputs/group"; import { attachment } from "./inputs/attachment"; import { code } from "./inputs/code"; import { repeater } from "./inputs/repeater"; @@ -28,6 +29,7 @@ const config: DefaultConfigOptions = { plugins: [radioAlt, stopImplicitSubmission, passwordPreventAutocomplete], inputs: { form, + group, attachment, code, repeater, diff --git a/console/src/formkit/inputs/group.ts b/console/src/formkit/inputs/group.ts new file mode 100644 index 000000000..a58dd8889 --- /dev/null +++ b/console/src/formkit/inputs/group.ts @@ -0,0 +1,29 @@ +import type { FormKitTypeDefinition } from "@formkit/core"; + +import { + disablesChildren, + outer, + fieldset, + legend, + help, + inner, + message, + messages, +} from "@formkit/inputs"; + +export const group: FormKitTypeDefinition = { + schema: outer( + fieldset( + legend("$label"), + help("$help"), + inner("$slots.default"), + messages(message("$message.value")) + ) + ), + + type: "group", + + props: [], + + features: [disablesChildren], +}; diff --git a/console/src/formkit/inputs/repeater/Repeater.vue b/console/src/formkit/inputs/repeater/Repeater.vue index 0a8fd8abb..b289e6a7c 100644 --- a/console/src/formkit/inputs/repeater/Repeater.vue +++ b/console/src/formkit/inputs/repeater/Repeater.vue @@ -7,6 +7,7 @@ import { IconArrowDownCircleLine, } from "@halo-dev/components"; import type { FormKitFrameworkContext } from "@formkit/core"; +import { group } from "@formkit/inputs"; import type { PropType } from "vue"; import cloneDeep from "lodash.clonedeep"; @@ -62,7 +63,7 @@ const handleMoveDown = (index: number) => { :id="`${context.node.name}-group-${index}`" :key="`${context.node.name}-group-${index}`" :model-value="item" - type="group" + :type="group" > diff --git a/console/src/formkit/theme.ts b/console/src/formkit/theme.ts index 3e7b386a9..c88655e0a 100644 --- a/console/src/formkit/theme.ts +++ b/console/src/formkit/theme.ts @@ -88,9 +88,17 @@ const theme: Record> = { inner: "flex flex-col gap-4", items: "flex flex-col w-full gap-2", item: "border rounded-base grid grid-cols-12 focus-within:border-primary transition-all overflow-hidden focus-within:shadow-sm", - content: "flex-1 p-2 col-span-11", + content: "flex-1 p-2 col-span-11 divide-y divide-gray-100", controls: "bg-gray-200 col-span-1 flex items-center justify-center", }, + group: { + label: textClassification.label, + legend: `${textClassification.label} px-2`, + fieldset: boxClassification.fieldset, + wrapper: boxClassification.wrapper, + help: boxClassification.wrapper, + inner: "flex flex-col px-2 divide-y divide-gray-100", + }, tagSelect: { ...textClassification, inner: `${textClassification.inner} !overflow-visible !h-auto min-h-[2.25rem]`,