refactor(form-schema): extract schema types and schema-driven behaviors to shared package

Moves formBuilder types, formValidation, useConditionalLogic, useFormSteps,
and formatFieldValue from apps/portal/src to packages/form-schema/src.
Adds @form-schema path alias to both apps/portal and apps/app.
Vue field components remain per-app to allow independent visual evolution.
Behavior-neutral: all 35 Vitest tests green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 23:57:39 +02:00
parent b6a3a17b0a
commit dda60ed5e4
48 changed files with 114 additions and 83 deletions

View File

@@ -21,8 +21,8 @@ vi.mock('@/composables/publicFormInjection', () => ({
}))
import FieldAvailabilityPicker from '@/components/public-form/FieldAvailabilityPicker.vue'
import { FormFieldType } from '@/types/formBuilder'
import type { PublicFormField, PublicFormTimeSlot } from '@/types/formBuilder'
import { FormFieldType } from '@form-schema/types/formBuilder'
import type { PublicFormField, PublicFormTimeSlot } from '@form-schema/types/formBuilder'
function field(partial: Partial<PublicFormField> = {}): PublicFormField {
return {

View File

@@ -1,8 +1,8 @@
import { mount } from '@vue/test-utils'
import { describe, expect, it } from 'vitest'
import FieldRenderer from '@/components/public-form/FieldRenderer.vue'
import { FormFieldType } from '@/types/formBuilder'
import type { PublicFormField } from '@/types/formBuilder'
import { FormFieldType } from '@form-schema/types/formBuilder'
import type { PublicFormField } from '@form-schema/types/formBuilder'
function makeField(partial: Partial<PublicFormField>): PublicFormField {
return {

View File

@@ -36,8 +36,8 @@ vi.mock('vuedraggable', () => ({
}))
import FieldSectionPriority from '@/components/public-form/FieldSectionPriority.vue'
import { FormFieldType } from '@/types/formBuilder'
import type { PublicFormField, PublicFormSectionOption } from '@/types/formBuilder'
import { FormFieldType } from '@form-schema/types/formBuilder'
import type { PublicFormField, PublicFormSectionOption } from '@form-schema/types/formBuilder'
function field(partial: Partial<PublicFormField> = {}): PublicFormField {
return {

View File

@@ -1,8 +1,8 @@
import { mount } from '@vue/test-utils'
import { describe, expect, it } from 'vitest'
import FieldTagPicker from '@/components/public-form/FieldTagPicker.vue'
import { FormFieldType } from '@/types/formBuilder'
import type { AvailableTag, PublicFormField } from '@/types/formBuilder'
import { FormFieldType } from '@form-schema/types/formBuilder'
import type { AvailableTag, PublicFormField } from '@form-schema/types/formBuilder'
function field(partial: Partial<PublicFormField> = {}): PublicFormField {
return {