@masterteam/form-builder 0.0.6 → 0.0.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-form-builder.mjs","sources":["../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.actions.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.model.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.state.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.facade.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/condition-constants.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.html","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.html","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.html","../../../../packages/masterteam/form-builder/src/lib/form-builder.ts","../../../../packages/masterteam/form-builder/src/lib/form-builder.html","../../../../packages/masterteam/form-builder/src/public-api.ts","../../../../packages/masterteam/form-builder/src/masterteam-form-builder.ts"],"sourcesContent":["import type {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\n\r\n// ============================================================================\r\n// Module Configuration Actions\r\n// ============================================================================\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[FormBuilder] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class ResetFormBuilderState {\r\n static readonly type = '[FormBuilder] Reset State';\r\n}\r\n\r\nexport class SetProperties {\r\n static readonly type = '[FormBuilder] Set Properties';\r\n constructor(public properties: PropertyItem[]) {}\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration Actions\r\n// ============================================================================\r\n\r\nexport class GetFormConfiguration {\r\n static readonly type = '[FormBuilder] Get Form Configuration';\r\n}\r\n\r\nexport class ResetFormConfiguration {\r\n static readonly type = '[FormBuilder] Reset Form Configuration';\r\n}\r\n\r\n// ============================================================================\r\n// Section Actions\r\n// ============================================================================\r\n\r\nexport class AddSection {\r\n static readonly type = '[FormBuilder] Add Section';\r\n constructor(public payload: AddSectionPayload) {}\r\n}\r\n\r\nexport class UpdateSection {\r\n static readonly type = '[FormBuilder] Update Section';\r\n constructor(\r\n public sectionId: string,\r\n public payload: UpdateSectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteSection {\r\n static readonly type = '[FormBuilder] Delete Section';\r\n constructor(public sectionId: string) {}\r\n}\r\n\r\n// ============================================================================\r\n// Field Actions\r\n// ============================================================================\r\n\r\nexport class AddField {\r\n static readonly type = '[FormBuilder] Add Field';\r\n constructor(\r\n public sectionId: string,\r\n public payload: AddFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateField {\r\n static readonly type = '[FormBuilder] Update Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: UpdateFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteField {\r\n static readonly type = '[FormBuilder] Delete Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n ) {}\r\n}\r\n\r\nexport class ReorderFields {\r\n static readonly type = '[FormBuilder] Reorder Fields';\r\n constructor(\r\n public sectionId: string,\r\n public payload: ReorderFieldPayload[],\r\n ) {}\r\n}\r\n\r\nexport class MoveField {\r\n static readonly type = '[FormBuilder] Move Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: MoveFieldPayload,\r\n ) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum FormBuilderActionKey {\r\n // Form Configuration\r\n GetFormConfiguration = 'getFormConfiguration',\r\n ResetFormConfiguration = 'resetFormConfiguration',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyId: number;\r\n width: FieldWidth;\r\n order: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n _pending?: boolean; // Optimistic: field is being added\r\n _deleting?: boolean; // Optimistic: field is being deleted\r\n}\r\n\r\nexport interface FormSection {\r\n id: string;\r\n name: {\r\n en: string;\r\n ar: string;\r\n };\r\n order: number;\r\n fields: FormField[];\r\n}\r\n\r\nexport interface FormConfiguration {\r\n isActive: boolean;\r\n sections: FormSection[];\r\n}\r\n\r\n// ============================================================================\r\n// Request Payloads\r\n// ============================================================================\r\n\r\nexport interface AddSectionPayload {\r\n name: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface UpdateSectionPayload {\r\n name?: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface AddFieldPayload {\r\n propertyId: number;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n}\r\n\r\nexport interface UpdateFieldPayload {\r\n width?: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string | null;\r\n}\r\n\r\nexport interface MoveFieldPayload {\r\n targetSectionId: string;\r\n order?: number;\r\n}\r\n\r\nexport interface ReorderFieldPayload {\r\n id: string;\r\n order: number;\r\n}\r\n\r\n// ============================================================================\r\n// Property Item (for enrichment)\r\n// ============================================================================\r\nexport interface PropertyItem {\r\n id: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n [key: string]: any;\r\n}\r\n\r\n// ============================================================================\r\n// Enriched Types (for UI display)\r\n// ============================================================================\r\n\r\n// Enriched field with UI properties (from PropertyItem)\r\nexport interface EnrichedFormField extends FormField {\r\n name: string;\r\n type: string;\r\n data?: any;\r\n}\r\n\r\n// Enriched section for UI display\r\nexport interface EnrichedFormSection extends Omit<FormSection, 'fields'> {\r\n fields: EnrichedFormField[];\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface FormBuilderStateModel extends LoadingStateShape<FormBuilderActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Form data\r\n formConfiguration: FormConfiguration | null;\r\n\r\n // Properties for field enrichment\r\n properties: PropertyItem[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n FormBuilderActionKey,\r\n FormBuilderStateModel,\r\n FormConfiguration,\r\n FormField,\r\n FormSection,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\n\r\n// Default State\r\nconst DEFAULT_STATE: FormBuilderStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Form data\r\n formConfiguration: null,\r\n\r\n // Properties for field enrichment\r\n properties: [],\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<FormBuilderStateModel>({\r\n name: 'formBuilder',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class FormBuilderState extends CrudStateBase<\r\n FormSection,\r\n FormBuilderStateModel,\r\n FormBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n private baseUrl = 'formConfigurations';\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private getApiPath(state: FormBuilderStateModel): string {\r\n const { parentPath, moduleType, moduleId } = state;\r\n return `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`;\r\n }\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getState(state: FormBuilderStateModel): FormBuilderStateModel {\r\n return state ?? DEFAULT_STATE;\r\n }\r\n\r\n @Selector()\r\n static getFormConfiguration(\r\n state: FormBuilderStateModel,\r\n ): FormConfiguration | null {\r\n return state?.formConfiguration ?? null;\r\n }\r\n\r\n @Selector()\r\n static getSections(state: FormBuilderStateModel): FormSection[] {\r\n return state?.formConfiguration?.sections ?? [];\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.moduleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: FormBuilderStateModel): string | number | null {\r\n return state?.moduleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getProperties(state: FormBuilderStateModel) {\r\n return state?.properties ?? [];\r\n }\r\n\r\n // ============================================================================\r\n // Module Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(ResetFormBuilderState)\r\n resetState(ctx: StateContext<FormBuilderStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n @Action(SetProperties)\r\n setProperties(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetProperties,\r\n ) {\r\n ctx.patchState({\r\n properties: action.properties,\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(GetFormConfiguration)\r\n getFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = this.getApiPath(state);\r\n const req$ = this.http.get<Response<FormConfiguration>>(apiPath);\r\n\r\n return this.load(ctx, {\r\n key: FormBuilderActionKey.GetFormConfiguration,\r\n request$: req$,\r\n updateState: (_state, data) => ({\r\n formConfiguration: data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormConfiguration)\r\n resetFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset`;\r\n const req$ = this.http.delete<Response<FormConfiguration>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormConfiguration,\r\n request$: req$,\r\n onSuccess: (res, _currentState) => ({\r\n formConfiguration: res.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Section Actions\r\n // ============================================================================\r\n\r\n @Action(AddSection)\r\n addSection(ctx: StateContext<FormBuilderStateModel>, action: AddSection) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections`;\r\n const req$ = this.http.post<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.addOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateSection)\r\n updateSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.put<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.upsertOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteSection)\r\n deleteSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: DeleteSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.delete<Response<{ id: string }>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.removeOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data.id,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Field Actions\r\n // ============================================================================\r\n\r\n @Action(AddField)\r\n addField(ctx: StateContext<FormBuilderStateModel>, action: AddField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields`;\r\n const req$ = this.http.post<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Generate temp ID for optimistic update\r\n const tempId = `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n const tempField: FormField = {\r\n id: tempId,\r\n sectionId: action.sectionId,\r\n propertyId: action.payload.propertyId,\r\n width: action.payload.width,\r\n order: action.payload.order ?? 0,\r\n hiddenInCreation: action.payload.hiddenInCreation,\r\n _pending: true,\r\n };\r\n\r\n // Optimistically add the temp field\r\n const sectionsWithTemp = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const insertIndex = action.payload.order ?? fields.length;\r\n fields.splice(insertIndex, 0, tempField);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithTemp,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const newField = res.data;\r\n // Replace temp field with real field\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === tempId ? newField : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove temp field on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== tempId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateField)\r\n updateField(ctx: StateContext<FormBuilderStateModel>, action: UpdateField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update for order changes\r\n if (action.payload.order !== undefined) {\r\n const newOrder = action.payload.order;\r\n const sections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const currentIndex = fields.findIndex(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (currentIndex !== -1) {\r\n const [movedField] = fields.splice(currentIndex, 1);\r\n fields.splice(newOrder, 0, movedField);\r\n }\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections,\r\n },\r\n });\r\n }\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n // Update the field but preserve current array order (from optimistic update)\r\n // Don't re-sort by order property as other fields may have stale order values\r\n const updatedFields = section.fields.map((f, index) =>\r\n f.id === updatedField.id\r\n ? { ...updatedField, order: index }\r\n : { ...f, order: index },\r\n );\r\n return {\r\n ...section,\r\n fields: updatedFields,\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error - reload original state\r\n if (action.payload.order !== undefined) {\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n }\r\n return {};\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteField)\r\n deleteField(ctx: StateContext<FormBuilderStateModel>, action: DeleteField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ =\r\n this.http.delete<Response<{ id: string; sectionId: string }>>(apiPath);\r\n\r\n // Optimistically mark field as deleting\r\n const sectionsWithDeleting = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: true } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithDeleting,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const { id: deletedId, sectionId } = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== deletedId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove _deleting flag on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: false } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ReorderFields)\r\n reorderFields(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderFields,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/reorder`;\r\n const req$ = this.http.put<Response<{ fields: FormField[] }>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n // Create order map for optimistic update\r\n const orderMap = new Map(action.payload.map((p) => [p.id, p.order]));\r\n\r\n // Apply optimistic update\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const reorderedFields = section.fields\r\n .map((f) => ({\r\n ...f,\r\n order: orderMap.get(f.id) ?? f.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: reorderedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: optimisticSections,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ReorderFields,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedFields = res.data.fields;\r\n const fieldMap = new Map(updatedFields.map((f) => [f.id, f]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const mergedFields = section.fields\r\n .map((f) => fieldMap.get(f.id) ?? f)\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: mergedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert to original state on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(MoveField)\r\n moveField(ctx: StateContext<FormBuilderStateModel>, action: MoveField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}/move`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update - move field immediately\r\n const sourceSectionId = action.sectionId;\r\n const targetSectionId = action.payload.targetSectionId;\r\n const targetOrder = action.payload.order ?? 0;\r\n\r\n let movedFieldData: FormField | null = null;\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sourceSectionId) {\r\n const fieldToMove = section.fields.find(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (fieldToMove) {\r\n movedFieldData = { ...fieldToMove, order: targetOrder };\r\n }\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== action.fieldId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n // Add to target section\r\n const sectionsWithMoved = optimisticSections.map((section) => {\r\n if (section.id === targetSectionId && movedFieldData) {\r\n const fields = [...section.fields];\r\n fields.splice(targetOrder, 0, movedFieldData);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n });\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithMoved,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.MoveField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const movedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n // Update the moved field with server response\r\n if (section.id === targetSectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields\r\n .map((f) => (f.id === movedField.id ? movedField : f))\r\n .sort((a, b) => a.order - b.order),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n}\r\n","import { computed, Injectable, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\n\r\nimport {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n FormBuilderActionKey,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\nimport { FormBuilderState } from './form-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // State Selectors\r\n // ============================================================================\r\n\r\n private readonly stateSignal = select(FormBuilderState.getState);\r\n\r\n readonly formConfiguration = select(FormBuilderState.getFormConfiguration);\r\n readonly sections = select(FormBuilderState.getSections);\r\n readonly properties = select(FormBuilderState.getProperties);\r\n readonly moduleType = select(FormBuilderState.getModuleType);\r\n readonly moduleId = select(FormBuilderState.getModuleId);\r\n\r\n // ============================================================================\r\n // Loading Signals\r\n // ============================================================================\r\n\r\n readonly isLoadingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.GetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isResettingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isAddingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddSection),\r\n );\r\n\r\n readonly isUpdatingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateSection,\r\n ),\r\n );\r\n\r\n readonly isDeletingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.DeleteSection,\r\n ),\r\n );\r\n\r\n readonly isAddingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddField),\r\n );\r\n\r\n readonly isUpdatingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.UpdateField),\r\n );\r\n\r\n readonly isDeletingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.DeleteField),\r\n );\r\n\r\n readonly isMovingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.MoveField),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals\r\n // ============================================================================\r\n\r\n readonly formConfigurationError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.GetFormConfiguration] ??\r\n null,\r\n );\r\n\r\n readonly sectionError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddSection] ??\r\n errors[FormBuilderActionKey.UpdateSection] ??\r\n errors[FormBuilderActionKey.DeleteSection] ??\r\n null\r\n );\r\n });\r\n\r\n readonly fieldError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddField] ??\r\n errors[FormBuilderActionKey.UpdateField] ??\r\n errors[FormBuilderActionKey.DeleteField] ??\r\n errors[FormBuilderActionKey.MoveField] ??\r\n null\r\n );\r\n });\r\n\r\n // ============================================================================\r\n // Module Configuration Dispatchers\r\n // ============================================================================\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetFormBuilderState());\r\n }\r\n\r\n setProperties(properties: PropertyItem[]) {\r\n return this.store.dispatch(new SetProperties(properties));\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Dispatchers\r\n // ============================================================================\r\n\r\n getFormConfiguration() {\r\n return this.store.dispatch(new GetFormConfiguration());\r\n }\r\n\r\n resetFormConfiguration() {\r\n return this.store.dispatch(new ResetFormConfiguration());\r\n }\r\n\r\n // ============================================================================\r\n // Section Dispatchers\r\n // ============================================================================\r\n\r\n addSection(payload: AddSectionPayload) {\r\n return this.store.dispatch(new AddSection(payload));\r\n }\r\n\r\n updateSection(sectionId: string, payload: UpdateSectionPayload) {\r\n return this.store.dispatch(new UpdateSection(sectionId, payload));\r\n }\r\n\r\n deleteSection(sectionId: string) {\r\n return this.store.dispatch(new DeleteSection(sectionId));\r\n }\r\n\r\n // ============================================================================\r\n // Field Dispatchers\r\n // ============================================================================\r\n\r\n addField(sectionId: string, payload: AddFieldPayload) {\r\n return this.store.dispatch(new AddField(sectionId, payload));\r\n }\r\n\r\n updateField(sectionId: string, fieldId: string, payload: UpdateFieldPayload) {\r\n return this.store.dispatch(new UpdateField(sectionId, fieldId, payload));\r\n }\r\n\r\n deleteField(sectionId: string, fieldId: string) {\r\n return this.store.dispatch(new DeleteField(sectionId, fieldId));\r\n }\r\n\r\n reorderFields(sectionId: string, payload: ReorderFieldPayload[]) {\r\n return this.store.dispatch(new ReorderFields(sectionId, payload));\r\n }\r\n\r\n moveField(sectionId: string, fieldId: string, payload: MoveFieldPayload) {\r\n return this.store.dispatch(new MoveField(sectionId, fieldId, payload));\r\n }\r\n}\r\n","/**\r\n * Condition Formula Constants\r\n * Static functions and operators for condition formulas (Show/Hide/Enable/Disable)\r\n */\r\n\r\nimport type {\r\n FunctionCategoryGroup,\r\n OperatorDefinition,\r\n} from '@masterteam/components/formula';\r\n\r\n/**\r\n * Functions for field conditions\r\n */\r\nexport const CONDITION_FUNCTION_CATEGORIES: FunctionCategoryGroup[] = [\r\n {\r\n name: 'Logic',\r\n displayName: 'Field Visibility',\r\n functions: [\r\n {\r\n name: 'SHOW_IF',\r\n category: 'Logic',\r\n description: 'Show this field when condition is true',\r\n signature: 'SHOW_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is visible',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'SHOW_IF(@Status == \"Active\")',\r\n 'SHOW_IF(@Type == \"Custom\")',\r\n ],\r\n },\r\n {\r\n name: 'HIDE_IF',\r\n category: 'Logic',\r\n description: 'Hide this field when condition is true',\r\n signature: 'HIDE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is hidden',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['HIDE_IF(@Status == \"Closed\")', 'HIDE_IF(ISNULL(@Parent))'],\r\n },\r\n {\r\n name: 'DISABLE_IF',\r\n category: 'Logic',\r\n description: 'Disable this field when condition is true',\r\n signature: 'DISABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is disabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'DISABLE_IF(@IsLocked == true)',\r\n 'DISABLE_IF(@Status == \"Approved\")',\r\n ],\r\n },\r\n {\r\n name: 'ENABLE_IF',\r\n category: 'Logic',\r\n description: 'Enable this field when condition is true',\r\n signature: 'ENABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is enabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'ENABLE_IF(@Status == \"Draft\")',\r\n 'ENABLE_IF(@CanEdit == true)',\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Aggregation',\r\n displayName: 'Logic Helpers',\r\n functions: [\r\n {\r\n name: 'AND',\r\n category: 'Aggregation',\r\n description: 'Returns true if all conditions are true',\r\n signature: 'AND(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AND(@Status == \"Active\", @Priority > 0)'],\r\n },\r\n {\r\n name: 'OR',\r\n category: 'Aggregation',\r\n description: 'Returns true if any condition is true',\r\n signature: 'OR(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['OR(@Status == \"Active\", @Status == \"Pending\")'],\r\n },\r\n {\r\n name: 'NOT',\r\n category: 'Aggregation',\r\n description: 'Returns the opposite of the condition',\r\n signature: 'NOT(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'The condition to negate',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['NOT(@IsCompleted)'],\r\n },\r\n {\r\n name: 'ISNULL',\r\n category: 'Aggregation',\r\n description: 'Returns true if value is null or empty',\r\n signature: 'ISNULL(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'The value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['ISNULL(@Description)'],\r\n },\r\n {\r\n name: 'CONTAINS',\r\n category: 'Aggregation',\r\n description: 'Returns true if text contains the search string',\r\n signature: 'CONTAINS(text, search)',\r\n parameters: [\r\n {\r\n name: 'text',\r\n type: 'string',\r\n description: 'The text to search in',\r\n required: true,\r\n },\r\n {\r\n name: 'search',\r\n type: 'string',\r\n description: 'The string to search for',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['CONTAINS(@Name, \"Project\")'],\r\n },\r\n ],\r\n },\r\n];\r\n\r\n/**\r\n * Operators for conditions\r\n */\r\nexport const CONDITION_OPERATORS: OperatorDefinition[] = [\r\n // Comparison\r\n {\r\n symbol: '==',\r\n name: 'Equal',\r\n type: 'comparison',\r\n description: 'Equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '!=',\r\n name: 'Not Equal',\r\n type: 'comparison',\r\n description: 'Not equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>',\r\n name: 'Greater Than',\r\n type: 'comparison',\r\n description: 'Greater than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<',\r\n name: 'Less Than',\r\n type: 'comparison',\r\n description: 'Less than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '>=',\r\n name: 'Greater or Equal',\r\n type: 'comparison',\r\n description: 'Greater than or equal',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<=',\r\n name: 'Less or Equal',\r\n type: 'comparison',\r\n description: 'Less than or equal',\r\n precedence: 4,\r\n },\r\n // Logical\r\n {\r\n symbol: '&&',\r\n name: 'And',\r\n type: 'logical',\r\n description: 'Logical AND',\r\n precedence: 2,\r\n },\r\n {\r\n symbol: '||',\r\n name: 'Or',\r\n type: 'logical',\r\n description: 'Logical OR',\r\n precedence: 1,\r\n },\r\n];\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs\r\n /** Initial formula (JSON string from backend) */\r\n readonly initialFormula = input<string>('');\r\n\r\n /** Available fields from the form builder (other fields that can be referenced) */\r\n readonly availableFields = input<ConditionFieldProperty[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n\r\n // Form control for the formula editor (tokens array)\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n // View child for the editor\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n // Condition-specific functions and operators\r\n readonly functionCategories = CONDITION_FUNCTION_CATEGORIES;\r\n readonly operators = CONDITION_OPERATORS;\r\n\r\n /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = {\r\n functions: 'Functions',\r\n properties: 'Fields',\r\n operators: 'Operators',\r\n noPropertiesAvailable: 'No fields available',\r\n };\r\n\r\n ngOnInit(): void {\r\n // Parse JSON string to tokens\r\n const formula = this.initialFormula();\r\n if (formula) {\r\n try {\r\n const tokens = JSON.parse(formula) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10 flex flex-col gap-3\">\r\n <!-- Formula Toolbar -->\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n RadioCardsFieldConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n FieldWidth,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n FBFieldConditions,\r\n ConditionFieldProperty,\r\n} from '../fb-field-conditions/fb-field-conditions';\r\n\r\n@Component({\r\n selector: 'mt-fb-field-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n DynamicForm,\r\n Button,\r\n ToggleField,\r\n ],\r\n templateUrl: './fb-field-form.html',\r\n})\r\nexport class FBFieldForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string>('');\r\n readonly initialData = input<EnrichedFormField | null>(null);\r\n /** All sections with enriched fields (to get available fields for conditions) */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n readonly conditionalDisplayFormula = signal<string>('');\r\n private conditionsDialogRef: any;\r\n\r\n /**\r\n * Compute available fields for condition formula\r\n * Excludes the current field being edited\r\n */\r\n readonly availableFields = computed<ConditionFieldProperty[]>(() => {\r\n const sections = this.allSections();\r\n const currentField = this.initialData();\r\n const fields: ConditionFieldProperty[] = [];\r\n\r\n for (const section of sections) {\r\n for (const field of section.fields) {\r\n // Exclude the current field being edited\r\n if (currentField && field.id === currentField.id) continue;\r\n\r\n fields.push({\r\n key: field.name,\r\n name: field.name,\r\n type: field.type,\r\n });\r\n }\r\n }\r\n\r\n return fields;\r\n });\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly showHideControl = new FormControl(false);\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'isRequired',\r\n label: this.transloco.translate('formBuilder.is-required'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'hiddenInCreation',\r\n label: this.transloco.translate('formBuilder.hidden-in-creation'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n {\r\n key: 'hiddenInEditForm',\r\n label: this.transloco.translate('formBuilder.hidden-in-edit-form'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 3,\r\n },\r\n new RadioCardsFieldConfig({\r\n key: 'size',\r\n label: this.transloco.translate('formBuilder.size'),\r\n placeholder: this.transloco.translate('formBuilder.size'),\r\n options: [\r\n { id: 's', name: 'S' },\r\n { id: 'm', name: 'M' },\r\n { id: 'l', name: 'L' },\r\n ],\r\n order: 4,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n const widthToSize: Record<string, string> = {\r\n '25': 's',\r\n '50': 'm',\r\n '100': 'l',\r\n };\r\n this.formControl.patchValue({\r\n isRequired: data.isRequired ?? false,\r\n hiddenInCreation: data.hiddenInCreation ?? false,\r\n hiddenInEditForm: data.hiddenInEditForm ?? false,\r\n size: widthToSize[data.width] ?? 'l',\r\n });\r\n // Set show/hide toggle based on existing value\r\n this.showHideControl.patchValue(\r\n data.showConditionalDisplayFormula ?? false,\r\n );\r\n this.conditionalDisplayFormula.set(\r\n data.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n const widthMap: Record<string, FieldWidth> = {\r\n s: '25',\r\n m: '50',\r\n l: '100',\r\n };\r\n\r\n const payload = {\r\n width: widthMap[formValue.size] ?? '100',\r\n hiddenInCreation: formValue.hiddenInCreation ?? false,\r\n hiddenInEditForm: formValue.hiddenInEditForm ?? false,\r\n isRequired: formValue.isRequired ?? false,\r\n showConditionalDisplayFormula: this.showHideControl.value ?? false,\r\n conditionalDisplayFormula: this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null,\r\n };\r\n\r\n this.submitting.set(true);\r\n this.facade.updateField(sectionId, field.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onSetConditions(): void {\r\n this.conditionsDialogRef = this.modalService.openModal(\r\n FBFieldConditions,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('formBuilder.set-conditions'),\r\n styleClass: '!w-[73%] !absolute ',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialFormula: this.conditionalDisplayFormula(),\r\n availableFields: this.availableFields(),\r\n },\r\n },\r\n );\r\n\r\n this.conditionsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n this.conditionalDisplayFormula.set(\r\n result.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n },\r\n );\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteField(sectionId, field.id).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-2 h-full overflow-y-auto pb-10 flex flex-col gap-4\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n\r\n <!-- Show/Hide Toggle with Set Conditions -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n class=\"mt-3\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('set-conditions')\"\r\n size=\"small\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (initialData()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import { Component, effect, inject, input, signal } from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (sectionId()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n outlined\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n CdkDrag,\r\n CdkDragDrop,\r\n CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n // UI State\r\n readonly expanded = signal(true);\r\n\r\n // Form groups cache for dynamic fields\r\n private readonly formGroupsCache = new Map<string, FormGroup>();\r\n\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n modal: true,\r\n dismissible: true,\r\n\r\n inputValues: {\r\n sectionId: section.id,\r\n initialData: section.name,\r\n sectionsCount: this.sectionsCount(),\r\n },\r\n });\r\n }\r\n\r\n removeField(event: Event, field: EnrichedFormField): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.facade.deleteField(this.section().id, field.id);\r\n },\r\n });\r\n }\r\n\r\n editField(field: EnrichedFormField): void {\r\n this.modalService.openModal(FBFieldForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.field-settings'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none',\r\n position: 'end',\r\n modal: true,\r\n dismissible: true,\r\n\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialData: field,\r\n sectionId: this.section().id,\r\n allSections: this.allSections(),\r\n },\r\n });\r\n }\r\n\r\n getFieldColSpan(field: EnrichedFormField): string {\r\n switch (field.width) {\r\n case '100':\r\n return 'col-span-12';\r\n case '50':\r\n return 'col-span-6';\r\n case '25':\r\n return 'col-span-3';\r\n default:\r\n return 'col-span-12';\r\n }\r\n }\r\n\r\n getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex justify-between items-center bg-primary py-3 px-3 text-primary-contrast rounded-xl\"\r\n >\r\n <mt-icon\r\n class=\"text-2xl cursor-pointer transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex gap-3 items-center\">\r\n <span class=\"font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"fields()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"fields().length === 0\"\r\n >\r\n @for (field of fields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"field._pending || field._deleting\"\r\n [class]=\"\r\n getFieldColSpan(field) + ' cursor-grab active:cursor-grabbing'\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div class=\"flex items-center gap-4 mb-2\">\r\n <div class=\"font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n <!-- <div class=\"flex gap-2\">\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-primary\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editField(field)\"\r\n [mtTooltip]=\"t('edit-field')\"\r\n ></mt-icon>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-red-700\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeField($event, field)\"\r\n [mtTooltip]=\"t('remove-field')\"\r\n ></mt-icon>\r\n </div> -->\r\n </div>\r\n\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"{\r\n readonly: true,\r\n type: getFieldType(field),\r\n }\"\r\n />\r\n </form>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, DynamicFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport type { EnrichedFormSection } from '../../store/form-builder/form-builder.model';\r\n\r\ntype PreviewMode = 'create' | 'edit';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Tabs],\r\n templateUrl: './fb-preview-form.html',\r\n})\r\nexport class FBPreviewForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Inputs\r\n readonly sections = input<EnrichedFormSection[]>([]);\r\n\r\n // Tab state\r\n readonly activeTab = signal<PreviewMode>('create');\r\n readonly isLoading = signal(false);\r\n readonly tabOptions = [\r\n {\r\n label: this.transloco.translate('formBuilder.create-form'),\r\n value: 'create',\r\n },\r\n { label: this.transloco.translate('formBuilder.edit-form'), value: 'edit' },\r\n ];\r\n\r\n // Form control for dynamic form\r\n readonly formControl = new FormControl();\r\n\r\n constructor() {\r\n // Show skeleton briefly when tab changes to force rebuild\r\n effect(() => {\r\n this.activeTab(); // Track tab changes\r\n this.isLoading.set(true);\r\n setTimeout(() => this.isLoading.set(false), 50);\r\n });\r\n }\r\n\r\n // Convert enriched sections to DynamicFormConfig based on active tab\r\n readonly formConfig = computed<DynamicFormConfig>(() => {\r\n const sections = this.sections();\r\n const mode = this.activeTab();\r\n\r\n return {\r\n sections: sections\r\n .map((section, sectionIndex) => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\r\n\r\n // Filter fields based on mode\r\n const visibleFields = section.fields.filter((field) => {\r\n if (mode === 'create') {\r\n return !field.hiddenInCreation;\r\n } else {\r\n return !field.hiddenInEditForm;\r\n }\r\n });\r\n\r\n return {\r\n key: section.id,\r\n label: sectionName,\r\n type: 'header' as const,\r\n columns: 12,\r\n order: section.order ?? sectionIndex,\r\n fields: visibleFields.map((field, fieldIndex) => {\r\n const colSpan = this.getColSpan(field.width);\r\n\r\n return {\r\n key: `field_${field.propertyId}`,\r\n label: field.name,\r\n type: this.mapFieldType(field.type),\r\n colSpan,\r\n order: field.order ?? fieldIndex,\r\n placeholder: field.name,\r\n } as DynamicFieldConfig;\r\n }),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0), // Hide empty sections\r\n };\r\n });\r\n\r\n /**\r\n * Map property view type to dynamic form field type\r\n */\r\n private mapFieldType(viewType: string): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[viewType] ?? 'text';\r\n }\r\n\r\n /**\r\n * Convert field width to colSpan\r\n */\r\n private getColSpan(width: string): number {\r\n const widthMap: Record<string, number> = {\r\n '25': 3,\r\n '50': 6,\r\n '100': 12,\r\n };\r\n\r\n return widthMap[width] ?? 12;\r\n }\r\n\r\n onClose(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <!-- Tabs for Create/Edit mode -->\r\n <div class=\"flex justify-center mb-4\">\r\n <mt-tabs [options]=\"tabOptions\" [(active)]=\"activeTab\"></mt-tabs>\r\n </div>\r\n\r\n <div class=\"h-full overflow-y-auto px-3 pb-10\">\r\n @if (isLoading()) {\r\n <div class=\"space-y-4 animate-pulse\">\r\n <div class=\"h-6 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded w-2/3\"></div>\r\n </div>\r\n } @else if (formConfig().sections.length > 0) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n } @else {\r\n <div\r\n class=\"flex justify-center items-center h-64 text-muted-color text-lg\"\r\n >\r\n {{ t(\"no-fields-visible\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, signal, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { FBSection } from './fb-section/fb-section';\r\nimport type {\r\n EnrichedFormSection,\r\n EnrichedFormField,\r\n FieldWidth,\r\n PropertyItem,\r\n} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\n@Component({\r\n selector: 'mt-form-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TabsModule,\r\n SkeletonModule,\r\n Button,\r\n Card,\r\n TextField,\r\n TranslocoDirective,\r\n FBSection,\r\n DragDropModule,\r\n Icon,\r\n ],\r\n templateUrl: './form-builder.html',\r\n styleUrl: './form-builder.scss',\r\n})\r\nexport class FormBuilder {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n protected readonly facade = inject(FormBuilderFacade);\r\n\r\n private dialogRef: any;\r\n\r\n // Local UI state\r\n readonly activeTab = signal<string>('system');\r\n readonly searchQuery = signal<string>('');\r\n\r\n // State from facade\r\n readonly sections = this.facade.sections;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly error = this.facade.formConfigurationError;\r\n\r\n // Properties map for enrichment\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<number, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.id, prop);\r\n }\r\n return map;\r\n });\r\n\r\n // Enrich sections with property data for UI display\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = propsMap.get(field.propertyId);\r\n const propName = prop?.name;\r\n const name =\r\n typeof propName === 'string'\r\n ? propName\r\n : (propName?.[lang] ??\r\n propName?.['en'] ??\r\n `Property ${field.propertyId}`);\r\n\r\n return {\r\n ...field,\r\n name,\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n // Available properties for toolbox tabs\r\n readonly availableTabs = computed(() => {\r\n const tabs: Array<{\r\n id: string;\r\n title: string;\r\n properties: PropertyItem[];\r\n }> = [];\r\n const usedPropertyIds = new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyId)),\r\n );\r\n\r\n const availableProps = this.properties().filter(\r\n (p) => !usedPropertyIds.has(p.id),\r\n );\r\n\r\n const systemProps = availableProps.filter((p) => p['isSystem']);\r\n const customProps = availableProps.filter((p) => !p['isSystem']);\r\n\r\n if (systemProps.length > 0) {\r\n tabs.push({ id: 'system', title: 'System', properties: systemProps });\r\n }\r\n if (customProps.length > 0) {\r\n tabs.push({ id: 'custom', title: 'Custom', properties: customProps });\r\n }\r\n\r\n return tabs;\r\n });\r\n\r\n // Filtered properties based on search query\r\n readonly filteredPropertiesByTab = computed(() => {\r\n const query = this.searchQuery().toLowerCase().trim();\r\n const tabs = this.availableTabs();\r\n\r\n if (!query) {\r\n return tabs;\r\n }\r\n\r\n return tabs.map((tab) => ({\r\n ...tab,\r\n properties: tab.properties.filter((prop) => {\r\n const name: any = prop.name;\r\n return name.toLowerCase().includes(query);\r\n }),\r\n }));\r\n });\r\n\r\n constructor() {\r\n // Update active tab when tabs change\r\n effect(() => {\r\n const tabs = this.availableTabs();\r\n const currentTab = this.activeTab();\r\n if (tabs.length > 0 && !tabs.some((t) => t.id === currentTab)) {\r\n this.activeTab.set(tabs[0].id);\r\n }\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<EnrichedFormField[] | PropertyItem[]>): void {\r\n const targetSectionId = event.container.id;\r\n\r\n if (event.previousContainer === event.container) {\r\n // Reordering within the same section\r\n const fields = [...(event.container.data as EnrichedFormField[])];\r\n const [movedField] = fields.splice(event.previousIndex, 1);\r\n fields.splice(event.currentIndex, 0, movedField);\r\n\r\n // Build bulk reorder payload with new order values\r\n const reorderPayload = fields.map((field, index) => ({\r\n id: field.id,\r\n order: index,\r\n }));\r\n\r\n this.facade.reorderFields(targetSectionId, reorderPayload);\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n // Adding from toolbox\r\n const propertyItem = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyId: propertyItem.id,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n // Moving between sections\r\n const sourceSectionId = event.previousContainer.id;\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(sourceSectionId, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n addSection(): void {\r\n this.dialogRef = this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.add-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sectionsCount: this.sections().length,\r\n },\r\n });\r\n }\r\n\r\n openPreview(): void {\r\n this.dialogRef = this.modalService.openModal(FBPreviewForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.preview'),\r\n styleClass: '!w-[79%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sections: this.enrichedSections(),\r\n },\r\n });\r\n }\r\n\r\n resetFormConfiguration(): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n acceptButtonStyleClass: 'p-button-danger',\r\n accept: () => {\r\n this.facade.resetFormConfiguration();\r\n },\r\n });\r\n }\r\n\r\n noReturnPredicate = (): boolean => false;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of filteredPropertiesByTab(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full flex flex-col\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden flex-1 overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\">\r\n <mt-text-field\r\n [placeholder]=\"t('search-properties')\"\r\n [(ngModel)]=\"searchQuery\"\r\n icon=\"general.search-lg\"\r\n />\r\n </div>\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n @if (searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else {\r\n All {{ tab.title }} items are in use\r\n }\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA;AACA;AACA;MAEa,aAAa,CAAA;AAGf,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,gBAAA;AACA,IAAA,cAAA;AACA,IAAA,UAAA;AANT,IAAA,OAAgB,IAAI,GAAG,+BAA+B;IACtD,WAAA,CACS,UAAkB,EAClB,QAAyB,EACzB,gBAAyB,EACzB,cAAgC,EAChC,UAAmB,EAAA;QAJnB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;IAChB;;MAGQ,qBAAqB,CAAA;AAChC,IAAA,OAAgB,IAAI,GAAG,2BAA2B;;MAGvC,aAAa,CAAA;AAEL,IAAA,UAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,8BAA8B;AACrD,IAAA,WAAA,CAAmB,UAA0B,EAAA;QAA1B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAmB;;AAGlD;AACA;AACA;MAEa,oBAAoB,CAAA;AAC/B,IAAA,OAAgB,IAAI,GAAG,sCAAsC;;MAGlD,sBAAsB,CAAA;AACjC,IAAA,OAAgB,IAAI,GAAG,wCAAwC;;AAGjE;AACA;AACA;MAEa,UAAU,CAAA;AAEF,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,2BAA2B;AAClD,IAAA,WAAA,CAAmB,OAA0B,EAAA;QAA1B,IAAA,CAAA,OAAO,GAAP,OAAO;IAAsB;;MAGrC,aAAa,CAAA;AAGf,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,8BAA8B;IACrD,WAAA,CACS,SAAiB,EACjB,OAA6B,EAAA;QAD7B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,aAAa,CAAA;AAEL,IAAA,SAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,8BAA8B;AACrD,IAAA,WAAA,CAAmB,SAAiB,EAAA;QAAjB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAW;;AAGzC;AACA;AACA;MAEa,QAAQ,CAAA;AAGV,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,yBAAyB;IAChD,WAAA,CACS,SAAiB,EACjB,OAAwB,EAAA;QADxB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,WAAW,CAAA;AAGb,IAAA,SAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,4BAA4B;AACnD,IAAA,WAAA,CACS,SAAiB,EACjB,OAAe,EACf,OAA2B,EAAA;QAF3B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,WAAW,CAAA;AAGb,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,4BAA4B;IACnD,WAAA,CACS,SAAiB,EACjB,OAAe,EAAA;QADf,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,aAAa,CAAA;AAGf,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,8BAA8B;IACrD,WAAA,CACS,SAAiB,EACjB,OAA8B,EAAA;QAD9B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,SAAS,CAAA;AAGX,IAAA,SAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,0BAA0B;AACjD,IAAA,WAAA,CACS,SAAiB,EACjB,OAAe,EACf,OAAyB,EAAA;QAFzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;;AC7GL;AACA;AACA;IACY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;;AAE9B,IAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,oBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;;AAGjD,IAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;;AAG/B,IAAA,oBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AACjC,CAAC,EAhBW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;AC2BhC;AACA,MAAM,aAAa,GAA0B;;AAE3C,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,UAAU,EAAE,EAAE;;AAGd,IAAA,iBAAiB,EAAE,IAAI;;AAGvB,IAAA,UAAU,EAAE,EAAE;;AAGd,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,MAAM,EAAE,EAAE;CACX;AAOM,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,aAIrC,CAAA;AACS,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,OAAO,GAAG,oBAAoB;;;;AAM9B,IAAA,UAAU,CAAC,KAA4B,EAAA;QAC7C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK;QAClD,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;IACjE;;;;AAOO,IAAP,OAAO,QAAQ,CAAC,KAA4B,EAAA;QAC1C,OAAO,KAAK,IAAI,aAAa;IAC/B;AAGO,IAAP,OAAO,oBAAoB,CACzB,KAA4B,EAAA;AAE5B,QAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,IAAI;IACzC;AAGO,IAAP,OAAO,WAAW,CAAC,KAA4B,EAAA;AAC7C,QAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,IAAI,EAAE;IACjD;AAGO,IAAP,OAAO,aAAa,CAAC,KAA4B,EAAA;AAC/C,QAAA,OAAO,KAAK,EAAE,UAAU,IAAI,IAAI;IAClC;AAGO,IAAP,OAAO,WAAW,CAAC,KAA4B,EAAA;AAC7C,QAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,IAAI;IAChC;AAGO,IAAP,OAAO,aAAa,CAAC,KAA4B,EAAA;AAC/C,QAAA,OAAO,KAAK,EAAE,UAAU,IAAI,EAAE;IAChC;;;;IAOA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;QAErB,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,EAAE;YACpD,UAAU,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,CAAA,CAAE;QACrE;AAAO,aAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AAC5B,YAAA,UAAU,GAAG,MAAM,CAAC,UAAU;QAChC;QACA,GAAG,CAAC,UAAU,CAAC;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;AACjD,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,UAAU,EAAE,UAAU,IAAI,EAAE;AAC7B,SAAA,CAAC;IACJ;AAGA,IAAA,UAAU,CAAC,GAAwC,EAAA;AACjD,QAAA,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC7B;IAGA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;QAErB,GAAG,CAAC,UAAU,CAAC;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;AAC9B,SAAA,CAAC;IACJ;;;;AAOA,IAAA,oBAAoB,CAAC,GAAwC,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8B,OAAO,CAAC;AAEhE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACpB,GAAG,EAAE,oBAAoB,CAAC,oBAAoB;AAC9C,YAAA,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,CAAC,MAAM,EAAE,IAAI,MAAM;gBAC9B,iBAAiB,EAAE,IAAI,IAAI,IAAI;aAChC,CAAC;AACH,SAAA,CAAC;IACJ;AAGA,IAAA,sBAAsB,CAAC,GAAwC,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,MAAA,CAAQ;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAA8B,OAAO,CAAC;AAEnE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,sBAAsB;AAChD,YAAA,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,GAAG,EAAE,aAAa,MAAM;AAClC,gBAAA,iBAAiB,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;aACpC,CAAC;AACH,SAAA,CAAC;IACJ;;;;IAOA,UAAU,CAAC,GAAwC,EAAE,MAAkB,EAAA;AACrE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,SAAA,CAAW;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAwB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AAE3E,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,UAAU;AACpC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAClC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAC9C,GAAG,CAAC,IAAI,CACT;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,EAAE;AACxE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAwB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AAE1E,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,aAAa;AACvC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACrC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAC9C,GAAG,CAAC,IAAI,EACR,IAAI,CACL;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,EAAE;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2B,OAAO,CAAC;AAEhE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,aAAa;AACvC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACrC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,EACX,IAAI,CACL;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;;;;IAOA,QAAQ,CAAC,GAAwC,EAAE,MAAgB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,SAAS;AAC/E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;;QAGzE,MAAM,MAAM,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AAC9E,QAAA,MAAM,SAAS,GAAc;AAC3B,YAAA,EAAE,EAAE,MAAM;YACV,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,YAAA,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;AACrC,YAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;AAC3B,YAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAChC,YAAA,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB;AACjD,YAAA,QAAQ,EAAE,IAAI;SACf;;AAGD,QAAA,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACpE,CAAC,OAAO,KAAI;YACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;gBACnC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;gBAClC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM;gBACzD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC;AACxC,gBAAA,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;YAC/B;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CACF;QACD,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,iBAAiB,EAAE;gBACjB,GAAG,KAAK,CAAC,iBAAkB;AAC3B,gBAAA,QAAQ,EAAE,gBAAgB;AAC3B,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,QAAQ;AAClC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI;;AAEzB,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;oBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;wBACnC,OAAO;AACL,4BAAA,GAAG,OAAO;4BACV,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAC3B,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG,QAAQ,GAAG,CAAC,CAC/B;yBACF;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,KAAI;;AAEhC,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;oBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;wBACnC,OAAO;AACL,4BAAA,GAAG,OAAO;AACV,4BAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;yBACtD;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,WAAW,CAAC,GAAwC,EAAE,MAAmB,EAAA;AACvE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,CAAA,QAAA,EAAW,MAAM,CAAC,OAAO,EAAE;AACjG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;;QAGxE,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;AACrC,YAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CAC5D,CAAC,OAAO,KAAI;gBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;oBACnC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AAClC,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CACnC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAC/B;AACD,oBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;AACvB,wBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;wBACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC;oBACxC;AACA,oBAAA,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;gBAC/B;AACA,gBAAA,OAAO,OAAO;AAChB,YAAA,CAAC,CACF;YACD,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,iBAAiB,EAAE;oBACjB,GAAG,KAAK,CAAC,iBAAkB;oBAC3B,QAAQ;AACT,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,WAAW;AACrC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI;AAC7B,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;oBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;;;wBAGnC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAChD,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC;8BAClB,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,KAAK;8BAC/B,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAC3B;wBACD,OAAO;AACL,4BAAA,GAAG,OAAO;AACV,4BAAA,MAAM,EAAE,aAAa;yBACtB;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAI;;gBAEjC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;oBACtC,OAAO;wBACL,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;qBAC3C;gBACH;AACA,gBAAA,OAAO,EAAE;YACX,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,WAAW,CAAC,GAAwC,EAAE,MAAmB,EAAA;AACvE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,CAAA,QAAA,EAAW,MAAM,CAAC,OAAO,EAAE;QACjG,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAA8C,OAAO,CAAC;;AAGxE,QAAA,MAAM,oBAAoB,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACxE,CAAC,OAAO,KAAI;YACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;gBACnC,OAAO;AACL,oBAAA,GAAG,OAAO;AACV,oBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAC3B,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CACxD;iBACF;YACH;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CACF;QACD,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,iBAAiB,EAAE;gBACjB,GAAG,KAAK,CAAC,iBAAkB;AAC3B,gBAAA,QAAQ,EAAE,oBAAoB;AAC/B,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,WAAW;AACrC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;gBAC/B,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI;AAC7C,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;AACV,oBAAA,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE;wBAC5B,OAAO;AACL,4BAAA,GAAG,OAAO;AACV,4BAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC;yBACzD;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,KAAI;;AAEhC,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;oBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;wBACnC,OAAO;AACL,4BAAA,GAAG,OAAO;AACV,4BAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAC3B,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CACzD;yBACF;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,iBAAiB;AACvF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,OAAO,EACP,MAAM,CAAC,OAAO,CACf;;QAGD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;AAGpE,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACtE,CAAC,OAAO,KAAI;YACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;AACnC,gBAAA,MAAM,eAAe,GAAG,OAAO,CAAC;AAC7B,qBAAA,GAAG,CAAC,CAAC,CAAC,MAAM;AACX,oBAAA,GAAG,CAAC;AACJ,oBAAA,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK;AACrC,iBAAA,CAAC;AACD,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBACpC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE;YAChD;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CACF;QAED,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,iBAAiB,EAAE;gBACjB,GAAG,KAAK,CAAC,iBAAkB;AAC3B,gBAAA,QAAQ,EAAE,kBAAkB;AAC7B,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,aAAa;AACvC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM;gBACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7D,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;oBACV,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE;AACnC,wBAAA,MAAM,YAAY,GAAG,OAAO,CAAC;AAC1B,6BAAA,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AAClC,6BAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;wBACpC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;oBAC7C;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAI;;gBAEjC,OAAO;oBACL,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;iBAC3C;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,SAAS,CAAC,GAAwC,EAAE,MAAiB,EAAA;AACnE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,MAAM,CAAC,SAAS,CAAA,QAAA,EAAW,MAAM,CAAC,OAAO,OAAO;AACtG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;;AAGxE,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS;AACxC,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe;QACtD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;QAE7C,IAAI,cAAc,GAAqB,IAAI;AAC3C,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACtE,CAAC,OAAO,KAAI;AACV,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,EAAE;gBAClC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CACrC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAC/B;gBACD,IAAI,WAAW,EAAE;oBACf,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;gBACzD;gBACA,OAAO;AACL,oBAAA,GAAG,OAAO;AACV,oBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC;iBAC9D;YACH;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CACF;;QAGD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;YAC3D,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,IAAI,cAAc,EAAE;gBACpD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,cAAc,CAAC;AAC7C,gBAAA,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;YAC/B;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;QAEF,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,iBAAiB,EAAE;gBACjB,GAAG,KAAK,CAAC,iBAAkB;AAC3B,gBAAA,QAAQ,EAAE,iBAAiB;AAC5B,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,SAAS;AACnC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI;AAC3B,gBAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,GAAG,CACnE,CAAC,OAAO,KAAI;;AAEV,oBAAA,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,EAAE;wBAClC,OAAO;AACL,4BAAA,GAAG,OAAO;4BACV,MAAM,EAAE,OAAO,CAAC;iCACb,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;AACpD,iCAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;yBACrC;oBACH;AACA,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CACF;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,QAAQ;AACT,qBAAA;iBACF;YACH,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAI;;gBAEjC,OAAO;oBACL,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;iBAC3C;YACH,CAAC;AACF,SAAA,CAAC;IACJ;uGApmBW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;AA0D3B,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AAkBpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,qBAAqB;AAG5B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AAQpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,oBAAoB;AAa3B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAc7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,UAAU;AAuBjB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AA2BpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AA2BpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,QAAQ;AAqFf,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,WAAW;AA0ElB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,WAAW;AA2ElB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AAuEpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,SAAS;AAiFhB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AA9kBM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAnDU,gBAAgB,GAAA,UAAA,CAAA;AAL5B,IAAA,KAAK,CAAwB;AAC5B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE,aAAa;KACxB;AAEY,CAAA,EAAA,gBAAgB,CAqmB5B;2FArmBY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCzBY,iBAAiB,CAAA;AACX,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;;;AAMrB,IAAA,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAEvD,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;AACjE,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC/C,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACnD,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACnD,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;;;;IAM/C,0BAA0B,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,oBAAoB,CAC1C,sEACF;IAEQ,4BAA4B,GAAG,QAAQ,CAAC,MAC/C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,sBAAsB,CAC5C,wEACF;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,2DAC3E;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,6DACF;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,6DACF;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,yDACzE;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,2DAC5E;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,2DAC5E;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,yDAC1E;;;;AAMQ,IAAA,sBAAsB,GAAG,QAAQ,CACxC,MACE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;AACpE,QAAA,IAAI,kEACP;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,QAAA,QACE,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACvC,YAAA,MAAM,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC1C,YAAA,MAAM,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC1C,YAAA,IAAI;AAER,IAAA,CAAC,wDAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,QAAA,QACE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACrC,YAAA,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI;AAER,IAAA,CAAC,sDAAC;;;;IAMF,aAAa,CACX,UAAkB,EAClB,QAAyB,EACzB,gBAAyB,EACzB,cAAgC,EAChC,UAAmB,EAAA;QAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,IAAI,aAAa,CACf,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,UAAU,CACX,CACF;IACH;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC;IACzD;AAEA,IAAA,aAAa,CAAC,UAA0B,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3D;;;;IAMA,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC;IACxD;IAEA,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;IAC1D;;;;AAMA,IAAA,UAAU,CAAC,OAA0B,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD;IAEA,aAAa,CAAC,SAAiB,EAAE,OAA6B,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnE;AAEA,IAAA,aAAa,CAAC,SAAiB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1D;;;;IAMA,QAAQ,CAAC,SAAiB,EAAE,OAAwB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D;AAEA,IAAA,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAE,OAA2B,EAAA;AACzE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E;IAEA,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE;IAEA,aAAa,CAAC,SAAiB,EAAE,OAA8B,EAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnE;AAEA,IAAA,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAE,OAAyB,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxE;uGA9KW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC9BlC;;;AAGG;AAOH;;AAEG;AACI,MAAM,6BAA6B,GAA4B;AACpE,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,SAAS,EAAE;AACT,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,wCAAwC;AACrD,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,6BAA6B;AAC1C,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,QAAQ,EAAE;oBACR,8BAA8B;oBAC9B,4BAA4B;AAC7B,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,wCAAwC;AACrD,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,4BAA4B;AACzC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,QAAQ,EAAE,CAAC,8BAA8B,EAAE,0BAA0B,CAAC;AACvE,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,2CAA2C;AACxD,gBAAA,SAAS,EAAE,uBAAuB;AAClC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,8BAA8B;AAC3C,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,QAAQ,EAAE;oBACR,+BAA+B;oBAC/B,mCAAmC;AACpC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,0CAA0C;AACvD,gBAAA,SAAS,EAAE,sBAAsB;AACjC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,6BAA6B;AAC1C,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,QAAQ,EAAE;oBACR,+BAA+B;oBAC/B,6BAA6B;AAC9B,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,SAAS,EAAE;AACT,YAAA;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,WAAW,EAAE,yCAAyC;AACtD,gBAAA,SAAS,EAAE,6BAA6B;AACxC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,kBAAkB;AAC/B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,yCAAyC,CAAC;AACtD,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,WAAW,EAAE,uCAAuC;AACpD,gBAAA,SAAS,EAAE,4BAA4B;AACvC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,kBAAkB;AAC/B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,+CAA+C,CAAC;AAC5D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,WAAW,EAAE,uCAAuC;AACpD,gBAAA,SAAS,EAAE,gBAAgB;AAC3B,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,WAAW,EAAE,yBAAyB;AACtC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,mBAAmB,CAAC;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,WAAW,EAAE,wCAAwC;AACrD,gBAAA,SAAS,EAAE,eAAe;AAC1B,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,WAAW,EAAE,oBAAoB;AACjC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,sBAAsB,CAAC;AACnC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,WAAW,EAAE,iDAAiD;AAC9D,gBAAA,SAAS,EAAE,wBAAwB;AACnC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,0BAA0B;AACvC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC,4BAA4B,CAAC;AACzC,aAAA;AACF,SAAA;AACF,KAAA;CACF;AAED;;AAEG;AACI,MAAM,mBAAmB,GAAyB;;AAEvD,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,uBAAuB;AACpC,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,oBAAoB;AACjC,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;;AAED,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;CACF;;AChOD;;;;;AAKG;MAaU,iBAAiB,CAAA;AACT,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;;;AAI9B,IAAA,cAAc,GAAG,KAAK,CAAS,EAAE,0DAAC;;AAGlC,IAAA,eAAe,GAAG,KAAK,CAA2B,EAAE,2DAAC;;AAGrD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,cAAc,GAAG,IAAI,WAAW,CAAiB,EAAE,CAAC;;AAG5C,IAAA,SAAS,GAAG,SAAS,CAAgB,QAAQ,qDAAC;;IAGtD,kBAAkB,GAAG,6BAA6B;IAClD,SAAS,GAAG,mBAAmB;;IAG/B,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACzC;;AAGQ,IAAA,aAAa,GAAG;AACvB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,qBAAqB,EAAE,qBAAqB;KAC7C;IAED,QAAQ,GAAA;;AAEN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACrC,IAAI,OAAO,EAAE;AACX,YAAA,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB;AACpD,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;YACxC;AAAE,YAAA,MAAM;;YAER;QACF;IACF;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAC/B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,MAAM,GAAA;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/D,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAClC;uGAlEW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvD9B,+nCAmCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDYI,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,cAAc,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIJ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,MAAM;wBACN,cAAc;wBACd,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,+nCAAA,EAAA;iSAqBqD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME9BnD,WAAW,CAAA;AACL,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,WAAW,GAAG,KAAK,CAA2B,IAAI,uDAAC;;AAEnD,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,uDAAC;;AAG9C,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,IAAA,yBAAyB,GAAG,MAAM,CAAS,EAAE,qEAAC;AAC/C,IAAA,mBAAmB;AAE3B;;;AAGG;AACM,IAAA,eAAe,GAAG,QAAQ,CAA2B,MAAK;AACjE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,MAAM,MAAM,GAA6B,EAAE;AAE3C,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;;gBAElC,IAAI,YAAY,IAAI,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE;oBAAE;gBAElD,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,KAAK,CAAC,IAAI;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,2DAAC;;AAGO,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAC/B,IAAA,eAAe,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AACxC,IAAA,UAAU,GAAsB;AACvC,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,GAAG,EAAE,YAAY;wBACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC1D,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,GAAG,EAAE,kBAAkB;wBACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,GAAG,EAAE,kBAAkB;wBACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC;AAClE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACD,oBAAA,IAAI,qBAAqB,CAAC;AACxB,wBAAA,GAAG,EAAE,MAAM;wBACX,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC;wBACnD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACzD,wBAAA,OAAO,EAAE;AACP,4BAAA,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AACtB,4BAAA,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AACtB,4BAAA,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AACvB,yBAAA;AACD,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,IAAI,EAAE,OAAO;qBACd,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,WAAW,GAA2B;AAC1C,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,KAAK,EAAE,GAAG;iBACX;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC1B,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;AACpC,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK;AAChD,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK;oBAChD,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG;AACrC,iBAAA,CAAC;;gBAEF,IAAI,CAAC,eAAe,CAAC,UAAU,CAC7B,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAC5C;gBACD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAChC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CACrC;YACH;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;AAE9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAElC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;YAAE;AAE1B,QAAA,MAAM,QAAQ,GAA+B;AAC3C,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,KAAK;SACT;AAED,QAAA,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK;AACxC,YAAA,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,IAAI,KAAK;AACrD,YAAA,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,IAAI,KAAK;AACrD,YAAA,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,KAAK;AACzC,YAAA,6BAA6B,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,KAAK;AAClE,YAAA,yBAAyB,EAAE,IAAI,CAAC,eAAe,CAAC;AAC9C,kBAAE,IAAI,CAAC,yBAAyB;AAChC,kBAAE,IAAI;SACT;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;YAC9D,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CACpD,iBAAiB,EACjB,QAAQ,EACR;YACE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC9D,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE;AACX,gBAAA,cAAc,EAAE,IAAI,CAAC,yBAAyB,EAAE;AAChD,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACxC,aAAA;AACF,SAAA,CACF;QAED,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CACxC,CAAC,MAA8D,KAAI;AACjE,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;gBACjB,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAChC,MAAM,CAAC,yBAAyB,IAAI,EAAE,CACvC;YACH;AACF,QAAA,CAAC,CACF;IACH;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAElC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;YAAE;AAE1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrC,KAAK;AACL,YAAA,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;oBACrD,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;uGA7MW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CxB,07DA4DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzBI,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIF,WAAW,EAAA,UAAA,EAAA,CAAA;kBAZvB,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,MAAM;wBACN,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,07DAAA,EAAA;;;MEvBU,aAAa,CAAA;AACP,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAoC,IAAI,uDAAC;AAC5D,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,yDAAC;;AAGhC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;;AAGxB,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAC/B,IAAA,UAAU,GAAsB;AACvC,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AACtD,wBAAA,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC5D,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AACtD,wBAAA,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC5D,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;oBAC1B,SAAS,EAAE,IAAI,CAAC,EAAE;oBAClB,SAAS,EAAE,IAAI,CAAC,EAAE;AACnB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;AAE9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACxC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC;AACxB,gBAAA,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC;AACzB,aAAA;SACF;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,SAAS,EAAE;;YAEb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;gBACtD,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,aAAA,CAAC;QACJ;aAAO;;AAEL,YAAA,IAAI,CAAC;AACF,iBAAA,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE;AACtD,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,aAAA,CAAC;QACN;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrC,KAAK;AACL,YAAA,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;oBAC7C,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;uGA7GW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB1B,mrCAsCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxBY,kBAAkB,+LAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAG3D,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,CAAC,EAAA,QAAA,EAAA,mrCAAA,EAAA;;;MEoC5D,SAAS,CAAA;AACH,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAuB;AAC/C,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,yDAAC;;AAEhC,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,uDAAC;;IAG9C,WAAW,GAAG,MAAM,EAAoC;;AAGxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAmB;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,IAAA,CAAC,uDAAC;AAEO,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,kDAAC;;AAG9C,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,oDAAC;;AAGf,IAAA,eAAe,GAAG,IAAI,GAAG,EAAqB;AAE/D,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;gBAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAE3C,IAAI,EAAE,EAAE;;YAEN,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC5B,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI;gBAE/D,EAAE,GAAG,IAAI,SAAS,CAAC;oBACjB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AACrC,iBAAA,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;YACxC;QACF;aAAO;YACL,EAAE,GAAG,IAAI,SAAS,CAAC;AACjB,gBAAA,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAChD,aAAA,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACxC;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,KAAuC,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAE9B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE;YACnD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,0BAA0B,CAAC;AACnE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,sBAAsB;AAClC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,IAAI;AAEjB,YAAA,WAAW,EAAE;gBACX,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;AACzB,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACpC,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,WAAW,CAAC,KAAY,EAAE,KAAwB,EAAA;AAChD,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrC,KAAK;AACL,YAAA,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YACtD,CAAC;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAwB,EAAA;QAChC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE;YACjD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,4BAA4B,CAAC;AACrE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,iCAAiC;AAC7C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,IAAI;AAEjB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE;AACX,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAChC,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAwB,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,KAAK;AACjB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,YAAY;AACrB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,YAAY;AACrB,YAAA;AACE,gBAAA,OAAO,aAAa;;IAE1B;AAEA,IAAA,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,iBAAiB,EAAE,QAAQ;AAC3B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,gBAAgB,EAAE,iBAAiB;AACnC,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,QAAQ,EAAE,QAAQ;SACnB;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM;IACtC;uGAjKW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClDtB,8mMAsJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjHI,MAAM,4VACN,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,OAAO,wcACP,WAAW,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,gMAClB,YAAY,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,OAAO,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA;;2FAIE,SAAS,EAAA,UAAA,EAAA,CAAA;kBAjBrB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,MAAM;wBACN,IAAI;wBACJ,IAAI;wBACJ,OAAO;wBACP,WAAW;wBACX,kBAAkB;wBAClB,kBAAkB;wBAClB,YAAY;wBACZ,mBAAmB;wBACnB,OAAO;AACR,qBAAA,EAAA,QAAA,EAAA,8mMAAA,EAAA;;;MEtBU,aAAa,CAAA;AACL,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG5C,IAAA,QAAQ,GAAG,KAAK,CAAwB,EAAE,oDAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAc,QAAQ,qDAAC;AACzC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,UAAU,GAAG;AACpB,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC1D,YAAA,KAAK,EAAE,QAAQ;AAChB,SAAA;AACD,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5E;;AAGQ,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAExC,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;IACJ;;AAGS,IAAA,UAAU,GAAG,QAAQ,CAAoB,MAAK;AACrD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAE7B,OAAO;AACL,YAAA,QAAQ,EAAE;AACP,iBAAA,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,KAAI;AAC7B,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAmB;AACzD,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;gBAGlE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AACpD,oBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,wBAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB;oBAChC;yBAAO;AACL,wBAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB;oBAChC;AACF,gBAAA,CAAC,CAAC;gBAEF,OAAO;oBACL,GAAG,EAAE,OAAO,CAAC,EAAE;AACf,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,QAAiB;AACvB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,YAAY;oBACpC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,KAAI;wBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;wBAE5C,OAAO;AACL,4BAAA,GAAG,EAAE,CAAA,MAAA,EAAS,KAAK,CAAC,UAAU,CAAA,CAAE;4BAChC,KAAK,EAAE,KAAK,CAAC,IAAI;4BACjB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;4BACnC,OAAO;AACP,4BAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,UAAU;4BAChC,WAAW,EAAE,KAAK,CAAC,IAAI;yBACF;AACzB,oBAAA,CAAC,CAAC;iBACH;AACH,YAAA,CAAC;AACA,iBAAA,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;SAClD;AACH,IAAA,CAAC,sDAAC;AAEF;;AAEG;AACK,IAAA,YAAY,CAAC,QAAgB,EAAA;AACnC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,iBAAiB,EAAE,QAAQ;AAC3B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,gBAAgB,EAAE,iBAAiB;AACnC,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,QAAQ,EAAE,QAAQ;SACnB;AAED,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM;IACpC;AAEA;;AAEG;AACK,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAA2B;AACvC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,EAAE;SACV;AAED,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;IAC9B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;uGAxHW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB1B,+rCA+BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTY,kBAAkB,+LAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGzD,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,+rCAAA,EAAA;;;MEqB1D,WAAW,CAAA;AACL,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE7C,IAAA,SAAS;;AAGR,IAAA,SAAS,GAAG,MAAM,CAAS,QAAQ,qDAAC;AACpC,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;;AAGhC,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B;AAClD,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB;;AAGlC,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACpC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QACxB;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,yDAAC;;AAGO,IAAA,gBAAgB,GAAG,QAAQ,CAAwB,MAAK;AAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAmB;QAEzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AAChC,YAAA,GAAG,OAAO;YACV,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAuB;gBACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC3C,gBAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI;AAC3B,gBAAA,MAAM,IAAI,GACR,OAAO,QAAQ,KAAK;AAClB,sBAAE;AACF,uBAAG,QAAQ,GAAG,IAAI,CAAC;wBACjB,QAAQ,GAAG,IAAI,CAAC;AAChB,wBAAA,CAAA,SAAA,EAAY,KAAK,CAAC,UAAU,CAAA,CAAE,CAAC;gBAErC,OAAO;AACL,oBAAA,GAAG,KAAK;oBACR,IAAI;AACJ,oBAAA,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,MAAM;AAC9B,oBAAA,IAAI,EAAE,IAAI;iBACX;AACH,YAAA,CAAC,CAAC;AACH,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,4DAAC;;AAGO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,IAAI,GAIL,EAAE;AACP,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAClE;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAC7C,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC;AAED,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;AAC/D,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAEhE,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACvE;AACA,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACvE;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,yDAAC;;AAGO,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QAEjC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AACxB,YAAA,GAAG,GAAG;YACN,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACzC,gBAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,IAAI;gBAC3B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,YAAA,CAAC,CAAC;AACH,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,mEAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE;AAC7D,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,KAAwD,EAAA;AAC3D,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE;QAE1C,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS,EAAE;;YAE/C,MAAM,MAAM,GAAG,CAAC,GAAI,KAAK,CAAC,SAAS,CAAC,IAA4B,CAAC;AACjE,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC;;AAGhD,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM;gBACnD,EAAE,EAAE,KAAK,CAAC,EAAE;AACZ,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,cAAc,CAAC;QAC5D;aAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;;AAE5D,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAoB;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;gBACpC,UAAU,EAAE,YAAY,CAAC,EAAE;AAC3B,gBAAA,KAAK,EAAE,KAAmB;gBAC1B,KAAK,EAAE,KAAK,CAAC,YAAY;AACzB,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CAAC;QACJ;aAAO;;AAEL,YAAA,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAyB;YAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/C,eAAe;gBACf,KAAK,EAAE,KAAK,CAAC,YAAY;AAC1B,aAAA,CAAC;QACJ;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE;YACpE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAClE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,mCAAmC;AAC/C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AACtC,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE;YACpE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC9D,YAAA,UAAU,EAAE,mCAAmC;AAC/C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,sBAAsB,EAAE,iBAAiB;YACzC,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;YACtC,CAAC;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,iBAAiB,GAAG,MAAe,KAAK;uGAzL7B,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CxB,woQAkMA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtKI,YAAY,8BACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,kBAAkB,gMAClB,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKK,WAAW,EAAA,UAAA,EAAA,CAAA;kBAnBvB,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,UAAU;wBACV,cAAc;wBACd,MAAM;wBACN,IAAI;wBACJ,SAAS;wBACT,kBAAkB;wBAClB,SAAS;wBACT,cAAc;wBACd,IAAI;AACL,qBAAA,EAAA,QAAA,EAAA,woQAAA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA;;;AEvCH;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"masterteam-form-builder.mjs","sources":["../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.actions.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.model.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.state.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.facade.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/condition-constants.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.html","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.html","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-validation-rule-form/validation-constants.ts","../../../../packages/masterteam/form-builder/src/lib/fb-validation-rule-form/fb-validation-rule-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-validation-rule-form/fb-validation-rule-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-validation-rules/fb-validation-rules.ts","../../../../packages/masterteam/form-builder/src/lib/fb-validation-rules/fb-validation-rules.html","../../../../packages/masterteam/form-builder/src/lib/form-builder.ts","../../../../packages/masterteam/form-builder/src/lib/form-builder.html","../../../../packages/masterteam/form-builder/src/public-api.ts","../../../../packages/masterteam/form-builder/src/masterteam-form-builder.ts"],"sourcesContent":["import type {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n AddValidationPayload,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n UpdateValidationPayload,\r\n} from './form-builder.model';\r\n\r\n// ============================================================================\r\n// Module Configuration Actions\r\n// ============================================================================\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[FormBuilder] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class ResetFormBuilderState {\r\n static readonly type = '[FormBuilder] Reset State';\r\n}\r\n\r\nexport class SetProperties {\r\n static readonly type = '[FormBuilder] Set Properties';\r\n constructor(public properties: PropertyItem[]) {}\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration Actions\r\n// ============================================================================\r\n\r\nexport class GetFormConfiguration {\r\n static readonly type = '[FormBuilder] Get Form Configuration';\r\n}\r\n\r\nexport class ResetFormConfiguration {\r\n static readonly type = '[FormBuilder] Reset Form Configuration';\r\n}\r\n\r\n// ============================================================================\r\n// Section Actions\r\n// ============================================================================\r\n\r\nexport class AddSection {\r\n static readonly type = '[FormBuilder] Add Section';\r\n constructor(public payload: AddSectionPayload) {}\r\n}\r\n\r\nexport class UpdateSection {\r\n static readonly type = '[FormBuilder] Update Section';\r\n constructor(\r\n public sectionId: string,\r\n public payload: UpdateSectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteSection {\r\n static readonly type = '[FormBuilder] Delete Section';\r\n constructor(public sectionId: string) {}\r\n}\r\n\r\n// ============================================================================\r\n// Field Actions\r\n// ============================================================================\r\n\r\nexport class AddField {\r\n static readonly type = '[FormBuilder] Add Field';\r\n constructor(\r\n public sectionId: string,\r\n public payload: AddFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateField {\r\n static readonly type = '[FormBuilder] Update Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: UpdateFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteField {\r\n static readonly type = '[FormBuilder] Delete Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n ) {}\r\n}\r\n\r\nexport class ReorderFields {\r\n static readonly type = '[FormBuilder] Reorder Fields';\r\n constructor(\r\n public sectionId: string,\r\n public payload: ReorderFieldPayload[],\r\n ) {}\r\n}\r\n\r\nexport class MoveField {\r\n static readonly type = '[FormBuilder] Move Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: MoveFieldPayload,\r\n ) {}\r\n}\r\n\r\n// ============================================================================\r\n// Validation Actions\r\n// ============================================================================\r\n\r\nexport class AddValidation {\r\n static readonly type = '[FormBuilder] Add Validation';\r\n constructor(public payload: AddValidationPayload) {}\r\n}\r\n\r\nexport class UpdateValidation {\r\n static readonly type = '[FormBuilder] Update Validation';\r\n constructor(\r\n public validationId: string | number,\r\n public payload: UpdateValidationPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteValidation {\r\n static readonly type = '[FormBuilder] Delete Validation';\r\n constructor(public validationId: string | number) {}\r\n}\r\n\r\nexport class ToggleValidationActive {\r\n static readonly type = '[FormBuilder] Toggle Validation Active';\r\n constructor(\r\n public validationId: string | number,\r\n public payload: ToggleValidationPayload,\r\n ) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum FormBuilderActionKey {\r\n // Form Configuration\r\n GetFormConfiguration = 'getFormConfiguration',\r\n ResetFormConfiguration = 'resetFormConfiguration',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n\r\n // Validation Rules\r\n AddValidation = 'addValidation',\r\n UpdateValidation = 'updateValidation',\r\n DeleteValidation = 'deleteValidation',\r\n ToggleValidationActive = 'toggleValidationActive',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyId: number;\r\n width: FieldWidth;\r\n order: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n _pending?: boolean; // Optimistic: field is being added\r\n _deleting?: boolean; // Optimistic: field is being deleted\r\n}\r\n\r\nexport interface FormSection {\r\n id: string;\r\n name: {\r\n en: string;\r\n ar: string;\r\n };\r\n order: number;\r\n fields: FormField[];\r\n}\r\n\r\nexport interface FormConfiguration {\r\n isActive: boolean;\r\n sections: FormSection[];\r\n validations?: ValidationRule[];\r\n}\r\n\r\nexport type ValidationSeverity = 'error' | 'warning';\r\n\r\nexport interface ValidationRule {\r\n id: string | number;\r\n formulaTokens: string;\r\n formulaText: string;\r\n message: {\r\n en: string;\r\n ar: string;\r\n };\r\n severity: ValidationSeverity;\r\n enabled: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Request Payloads\r\n// ============================================================================\r\n\r\nexport interface AddSectionPayload {\r\n name: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface UpdateSectionPayload {\r\n name?: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface AddFieldPayload {\r\n propertyId: number;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n}\r\n\r\nexport interface UpdateFieldPayload {\r\n width?: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string | null;\r\n}\r\n\r\nexport interface MoveFieldPayload {\r\n targetSectionId: string;\r\n order?: number;\r\n}\r\n\r\nexport interface ReorderFieldPayload {\r\n id: string;\r\n order: number;\r\n}\r\n\r\nexport interface AddValidationPayload {\r\n formulaTokens: string;\r\n formulaText: string;\r\n message: {\r\n en: string;\r\n ar: string;\r\n };\r\n severity: ValidationSeverity;\r\n}\r\n\r\nexport interface UpdateValidationPayload {\r\n formulaTokens: string;\r\n formulaText: string;\r\n message: {\r\n en: string;\r\n ar: string;\r\n };\r\n severity: ValidationSeverity;\r\n}\r\n\r\nexport interface ToggleValidationPayload {\r\n enabled: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Property Item (for enrichment)\r\n// ============================================================================\r\nexport interface PropertyItem {\r\n id: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n [key: string]: any;\r\n}\r\n\r\n// ============================================================================\r\n// Enriched Types (for UI display)\r\n// ============================================================================\r\n\r\n// Enriched field with UI properties (from PropertyItem)\r\nexport interface EnrichedFormField extends FormField {\r\n name: string;\r\n type: string;\r\n data?: any;\r\n}\r\n\r\n// Enriched section for UI display\r\nexport interface EnrichedFormSection extends Omit<FormSection, 'fields'> {\r\n fields: EnrichedFormField[];\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface FormBuilderStateModel extends LoadingStateShape<FormBuilderActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Form data\r\n formConfiguration: FormConfiguration | null;\r\n\r\n // Properties for field enrichment\r\n properties: PropertyItem[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n FormBuilderActionKey,\r\n FormBuilderStateModel,\r\n FormConfiguration,\r\n FormField,\r\n FormSection,\r\n ValidationRule,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n AddValidation,\r\n DeleteField,\r\n DeleteSection,\r\n DeleteValidation,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateSection,\r\n UpdateValidation,\r\n} from './form-builder.actions';\r\n\r\n// Default State\r\nconst DEFAULT_STATE: FormBuilderStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Form data\r\n formConfiguration: null,\r\n\r\n // Properties for field enrichment\r\n properties: [],\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<FormBuilderStateModel>({\r\n name: 'formBuilder',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class FormBuilderState extends CrudStateBase<\r\n FormSection,\r\n FormBuilderStateModel,\r\n FormBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n private baseUrl = 'formConfigurations';\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private getApiPath(state: FormBuilderStateModel): string {\r\n const { parentPath, moduleType, moduleId } = state;\r\n return `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`;\r\n }\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getState(state: FormBuilderStateModel): FormBuilderStateModel {\r\n return state ?? DEFAULT_STATE;\r\n }\r\n\r\n @Selector()\r\n static getFormConfiguration(\r\n state: FormBuilderStateModel,\r\n ): FormConfiguration | null {\r\n return state?.formConfiguration ?? null;\r\n }\r\n\r\n @Selector()\r\n static getSections(state: FormBuilderStateModel): FormSection[] {\r\n return state?.formConfiguration?.sections ?? [];\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.moduleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: FormBuilderStateModel): string | number | null {\r\n return state?.moduleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getProperties(state: FormBuilderStateModel) {\r\n return state?.properties ?? [];\r\n }\r\n\r\n @Selector()\r\n static getValidations(state: FormBuilderStateModel): ValidationRule[] {\r\n return state?.formConfiguration?.validations ?? [];\r\n }\r\n\r\n // ============================================================================\r\n // Module Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(ResetFormBuilderState)\r\n resetState(ctx: StateContext<FormBuilderStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n @Action(SetProperties)\r\n setProperties(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetProperties,\r\n ) {\r\n ctx.patchState({\r\n properties: action.properties,\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(GetFormConfiguration)\r\n getFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = this.getApiPath(state);\r\n const req$ = this.http.get<Response<FormConfiguration>>(apiPath);\r\n\r\n return this.load(ctx, {\r\n key: FormBuilderActionKey.GetFormConfiguration,\r\n request$: req$,\r\n updateState: (_state, data) => ({\r\n formConfiguration: data\r\n ? { ...data, validations: data.validations ?? [] }\r\n : null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormConfiguration)\r\n resetFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset`;\r\n const req$ = this.http.delete<Response<FormConfiguration>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormConfiguration,\r\n request$: req$,\r\n onSuccess: (res, _currentState) => ({\r\n formConfiguration: res.data\r\n ? { ...res.data, validations: res.data.validations ?? [] }\r\n : null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Section Actions\r\n // ============================================================================\r\n\r\n @Action(AddSection)\r\n addSection(ctx: StateContext<FormBuilderStateModel>, action: AddSection) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections`;\r\n const req$ = this.http.post<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.addOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateSection)\r\n updateSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.put<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.upsertOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteSection)\r\n deleteSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: DeleteSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.delete<Response<{ id: string }>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.removeOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data.id,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Field Actions\r\n // ============================================================================\r\n\r\n @Action(AddField)\r\n addField(ctx: StateContext<FormBuilderStateModel>, action: AddField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields`;\r\n const req$ = this.http.post<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Generate temp ID for optimistic update\r\n const tempId = `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n const tempField: FormField = {\r\n id: tempId,\r\n sectionId: action.sectionId,\r\n propertyId: action.payload.propertyId,\r\n width: action.payload.width,\r\n order: action.payload.order ?? 0,\r\n hiddenInCreation: action.payload.hiddenInCreation,\r\n _pending: true,\r\n };\r\n\r\n // Optimistically add the temp field\r\n const sectionsWithTemp = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const insertIndex = action.payload.order ?? fields.length;\r\n fields.splice(insertIndex, 0, tempField);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithTemp,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const newField = res.data;\r\n // Replace temp field with real field\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === tempId ? newField : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove temp field on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== tempId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateField)\r\n updateField(ctx: StateContext<FormBuilderStateModel>, action: UpdateField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update for order changes\r\n if (action.payload.order !== undefined) {\r\n const newOrder = action.payload.order;\r\n const sections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const currentIndex = fields.findIndex(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (currentIndex !== -1) {\r\n const [movedField] = fields.splice(currentIndex, 1);\r\n fields.splice(newOrder, 0, movedField);\r\n }\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections,\r\n },\r\n });\r\n }\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n // Update the field but preserve current array order (from optimistic update)\r\n // Don't re-sort by order property as other fields may have stale order values\r\n const updatedFields = section.fields.map((f, index) =>\r\n f.id === updatedField.id\r\n ? { ...updatedField, order: index }\r\n : { ...f, order: index },\r\n );\r\n return {\r\n ...section,\r\n fields: updatedFields,\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error - reload original state\r\n if (action.payload.order !== undefined) {\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n }\r\n return {};\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteField)\r\n deleteField(ctx: StateContext<FormBuilderStateModel>, action: DeleteField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ =\r\n this.http.delete<Response<{ id: string; sectionId: string }>>(apiPath);\r\n\r\n // Optimistically mark field as deleting\r\n const sectionsWithDeleting = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: true } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithDeleting,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const { id: deletedId, sectionId } = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== deletedId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove _deleting flag on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: false } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ReorderFields)\r\n reorderFields(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderFields,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/reorder`;\r\n const req$ = this.http.put<Response<{ fields: FormField[] }>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n // Create order map for optimistic update\r\n const orderMap = new Map(action.payload.map((p) => [p.id, p.order]));\r\n\r\n // Apply optimistic update\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const reorderedFields = section.fields\r\n .map((f) => ({\r\n ...f,\r\n order: orderMap.get(f.id) ?? f.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: reorderedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: optimisticSections,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ReorderFields,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedFields = res.data.fields;\r\n const fieldMap = new Map(updatedFields.map((f) => [f.id, f]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const mergedFields = section.fields\r\n .map((f) => fieldMap.get(f.id) ?? f)\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: mergedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert to original state on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(MoveField)\r\n moveField(ctx: StateContext<FormBuilderStateModel>, action: MoveField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}/move`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update - move field immediately\r\n const sourceSectionId = action.sectionId;\r\n const targetSectionId = action.payload.targetSectionId;\r\n const targetOrder = action.payload.order ?? 0;\r\n\r\n let movedFieldData: FormField | null = null;\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sourceSectionId) {\r\n const fieldToMove = section.fields.find(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (fieldToMove) {\r\n movedFieldData = { ...fieldToMove, order: targetOrder };\r\n }\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== action.fieldId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n // Add to target section\r\n const sectionsWithMoved = optimisticSections.map((section) => {\r\n if (section.id === targetSectionId && movedFieldData) {\r\n const fields = [...section.fields];\r\n fields.splice(targetOrder, 0, movedFieldData);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n });\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithMoved,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.MoveField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const movedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n // Update the moved field with server response\r\n if (section.id === targetSectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields\r\n .map((f) => (f.id === movedField.id ? movedField : f))\r\n .sort((a, b) => a.order - b.order),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Validation Actions\r\n // ============================================================================\r\n\r\n @Action(AddValidation)\r\n addValidation(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: AddValidation,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/validations`;\r\n const req$ = this.http.post<Response<ValidationRule>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddValidation,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const validations = [\r\n ...(currentState.formConfiguration?.validations ?? []),\r\n res.data,\r\n ];\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n validations,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateValidation)\r\n updateValidation(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateValidation,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/validations/${action.validationId}`;\r\n const req$ = this.http.put<Response<ValidationRule>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateValidation,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const validations = (\r\n currentState.formConfiguration?.validations ?? []\r\n ).map((rule) => (rule.id === res.data.id ? res.data : rule));\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n validations,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteValidation)\r\n deleteValidation(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: DeleteValidation,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/validations/${action.validationId}`;\r\n const req$ = this.http.delete<Response<{ id: string | number }>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteValidation,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const validations = (\r\n currentState.formConfiguration?.validations ?? []\r\n ).filter((rule) => rule.id !== res.data.id);\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n validations,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ToggleValidationActive)\r\n toggleValidationActive(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ToggleValidationActive,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/validations/${action.validationId}/active`;\r\n const req$ = this.http.patch<Response<ValidationRule>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ToggleValidationActive,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const validations = (\r\n currentState.formConfiguration?.validations ?? []\r\n ).map((rule) => (rule.id === res.data.id ? res.data : rule));\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n validations,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n}\r\n","import { computed, Injectable, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\n\r\nimport {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n AddValidationPayload,\r\n FormBuilderActionKey,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n UpdateValidationPayload,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n AddValidation,\r\n DeleteField,\r\n DeleteSection,\r\n DeleteValidation,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateSection,\r\n UpdateValidation,\r\n} from './form-builder.actions';\r\nimport { FormBuilderState } from './form-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // State Selectors\r\n // ============================================================================\r\n\r\n private readonly stateSignal = select(FormBuilderState.getState);\r\n\r\n readonly formConfiguration = select(FormBuilderState.getFormConfiguration);\r\n readonly sections = select(FormBuilderState.getSections);\r\n readonly properties = select(FormBuilderState.getProperties);\r\n readonly validations = select(FormBuilderState.getValidations);\r\n readonly moduleType = select(FormBuilderState.getModuleType);\r\n readonly moduleId = select(FormBuilderState.getModuleId);\r\n\r\n // ============================================================================\r\n // Loading Signals\r\n // ============================================================================\r\n\r\n readonly isLoadingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.GetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isResettingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isAddingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddSection),\r\n );\r\n\r\n readonly isUpdatingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateSection,\r\n ),\r\n );\r\n\r\n readonly isDeletingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.DeleteSection,\r\n ),\r\n );\r\n\r\n readonly isAddingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddField),\r\n );\r\n\r\n readonly isUpdatingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.UpdateField),\r\n );\r\n\r\n readonly isDeletingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.DeleteField),\r\n );\r\n\r\n readonly isMovingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.MoveField),\r\n );\r\n\r\n readonly isAddingValidation = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.AddValidation,\r\n ),\r\n );\r\n\r\n readonly isUpdatingValidation = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateValidation,\r\n ),\r\n );\r\n\r\n readonly isDeletingValidation = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.DeleteValidation,\r\n ),\r\n );\r\n\r\n readonly isTogglingValidation = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ToggleValidationActive,\r\n ),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals\r\n // ============================================================================\r\n\r\n readonly formConfigurationError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.GetFormConfiguration] ??\r\n null,\r\n );\r\n\r\n readonly sectionError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddSection] ??\r\n errors[FormBuilderActionKey.UpdateSection] ??\r\n errors[FormBuilderActionKey.DeleteSection] ??\r\n null\r\n );\r\n });\r\n\r\n readonly fieldError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddField] ??\r\n errors[FormBuilderActionKey.UpdateField] ??\r\n errors[FormBuilderActionKey.DeleteField] ??\r\n errors[FormBuilderActionKey.MoveField] ??\r\n null\r\n );\r\n });\r\n\r\n readonly validationError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddValidation] ??\r\n errors[FormBuilderActionKey.UpdateValidation] ??\r\n errors[FormBuilderActionKey.DeleteValidation] ??\r\n errors[FormBuilderActionKey.ToggleValidationActive] ??\r\n null\r\n );\r\n });\r\n\r\n // ============================================================================\r\n // Module Configuration Dispatchers\r\n // ============================================================================\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetFormBuilderState());\r\n }\r\n\r\n setProperties(properties: PropertyItem[]) {\r\n return this.store.dispatch(new SetProperties(properties));\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Dispatchers\r\n // ============================================================================\r\n\r\n getFormConfiguration() {\r\n return this.store.dispatch(new GetFormConfiguration());\r\n }\r\n\r\n resetFormConfiguration() {\r\n return this.store.dispatch(new ResetFormConfiguration());\r\n }\r\n\r\n // ============================================================================\r\n // Section Dispatchers\r\n // ============================================================================\r\n\r\n addSection(payload: AddSectionPayload) {\r\n return this.store.dispatch(new AddSection(payload));\r\n }\r\n\r\n updateSection(sectionId: string, payload: UpdateSectionPayload) {\r\n return this.store.dispatch(new UpdateSection(sectionId, payload));\r\n }\r\n\r\n deleteSection(sectionId: string) {\r\n return this.store.dispatch(new DeleteSection(sectionId));\r\n }\r\n\r\n // ============================================================================\r\n // Field Dispatchers\r\n // ============================================================================\r\n\r\n addField(sectionId: string, payload: AddFieldPayload) {\r\n return this.store.dispatch(new AddField(sectionId, payload));\r\n }\r\n\r\n updateField(sectionId: string, fieldId: string, payload: UpdateFieldPayload) {\r\n return this.store.dispatch(new UpdateField(sectionId, fieldId, payload));\r\n }\r\n\r\n deleteField(sectionId: string, fieldId: string) {\r\n return this.store.dispatch(new DeleteField(sectionId, fieldId));\r\n }\r\n\r\n reorderFields(sectionId: string, payload: ReorderFieldPayload[]) {\r\n return this.store.dispatch(new ReorderFields(sectionId, payload));\r\n }\r\n\r\n moveField(sectionId: string, fieldId: string, payload: MoveFieldPayload) {\r\n return this.store.dispatch(new MoveField(sectionId, fieldId, payload));\r\n }\r\n\r\n // ============================================================================\r\n // Validation Dispatchers\r\n // ============================================================================\r\n\r\n addValidation(payload: AddValidationPayload) {\r\n return this.store.dispatch(new AddValidation(payload));\r\n }\r\n\r\n updateValidation(\r\n validationId: string | number,\r\n payload: UpdateValidationPayload,\r\n ) {\r\n return this.store.dispatch(new UpdateValidation(validationId, payload));\r\n }\r\n\r\n deleteValidation(validationId: string | number) {\r\n return this.store.dispatch(new DeleteValidation(validationId));\r\n }\r\n\r\n toggleValidationActive(\r\n validationId: string | number,\r\n payload: ToggleValidationPayload,\r\n ) {\r\n return this.store.dispatch(\r\n new ToggleValidationActive(validationId, payload),\r\n );\r\n }\r\n}\r\n","/**\r\n * Condition Formula Constants\r\n * Static functions and operators for condition formulas (Show/Hide/Enable/Disable)\r\n */\r\n\r\nimport type {\r\n FunctionCategoryGroup,\r\n OperatorDefinition,\r\n} from '@masterteam/components/formula';\r\n\r\n/**\r\n * Functions for field conditions\r\n */\r\nexport const CONDITION_FUNCTION_CATEGORIES: FunctionCategoryGroup[] = [\r\n {\r\n name: 'Logic',\r\n displayName: 'Field Visibility',\r\n functions: [\r\n {\r\n name: 'SHOW_IF',\r\n category: 'Logic',\r\n description: 'Show this field when condition is true',\r\n signature: 'SHOW_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is visible',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'SHOW_IF(@Status == \"Active\")',\r\n 'SHOW_IF(@Type == \"Custom\")',\r\n ],\r\n },\r\n {\r\n name: 'HIDE_IF',\r\n category: 'Logic',\r\n description: 'Hide this field when condition is true',\r\n signature: 'HIDE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is hidden',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['HIDE_IF(@Status == \"Closed\")', 'HIDE_IF(ISNULL(@Parent))'],\r\n },\r\n {\r\n name: 'DISABLE_IF',\r\n category: 'Logic',\r\n description: 'Disable this field when condition is true',\r\n signature: 'DISABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is disabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'DISABLE_IF(@IsLocked == true)',\r\n 'DISABLE_IF(@Status == \"Approved\")',\r\n ],\r\n },\r\n {\r\n name: 'ENABLE_IF',\r\n category: 'Logic',\r\n description: 'Enable this field when condition is true',\r\n signature: 'ENABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is enabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'ENABLE_IF(@Status == \"Draft\")',\r\n 'ENABLE_IF(@CanEdit == true)',\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Aggregation',\r\n displayName: 'Logic Helpers',\r\n functions: [\r\n {\r\n name: 'AND',\r\n category: 'Aggregation',\r\n description: 'Returns true if all conditions are true',\r\n signature: 'AND(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AND(@Status == \"Active\", @Priority > 0)'],\r\n },\r\n {\r\n name: 'OR',\r\n category: 'Aggregation',\r\n description: 'Returns true if any condition is true',\r\n signature: 'OR(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['OR(@Status == \"Active\", @Status == \"Pending\")'],\r\n },\r\n {\r\n name: 'NOT',\r\n category: 'Aggregation',\r\n description: 'Returns the opposite of the condition',\r\n signature: 'NOT(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'The condition to negate',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['NOT(@IsCompleted)'],\r\n },\r\n {\r\n name: 'ISNULL',\r\n category: 'Aggregation',\r\n description: 'Returns true if value is null or empty',\r\n signature: 'ISNULL(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'The value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['ISNULL(@Description)'],\r\n },\r\n {\r\n name: 'CONTAINS',\r\n category: 'Aggregation',\r\n description: 'Returns true if text contains the search string',\r\n signature: 'CONTAINS(text, search)',\r\n parameters: [\r\n {\r\n name: 'text',\r\n type: 'string',\r\n description: 'The text to search in',\r\n required: true,\r\n },\r\n {\r\n name: 'search',\r\n type: 'string',\r\n description: 'The string to search for',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['CONTAINS(@Name, \"Project\")'],\r\n },\r\n ],\r\n },\r\n];\r\n\r\n/**\r\n * Operators for conditions\r\n */\r\nexport const CONDITION_OPERATORS: OperatorDefinition[] = [\r\n // Comparison\r\n {\r\n symbol: '==',\r\n name: 'Equal',\r\n type: 'comparison',\r\n description: 'Equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '!=',\r\n name: 'Not Equal',\r\n type: 'comparison',\r\n description: 'Not equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>',\r\n name: 'Greater Than',\r\n type: 'comparison',\r\n description: 'Greater than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<',\r\n name: 'Less Than',\r\n type: 'comparison',\r\n description: 'Less than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '>=',\r\n name: 'Greater or Equal',\r\n type: 'comparison',\r\n description: 'Greater than or equal',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<=',\r\n name: 'Less or Equal',\r\n type: 'comparison',\r\n description: 'Less than or equal',\r\n precedence: 4,\r\n },\r\n // Logical\r\n {\r\n symbol: '&&',\r\n name: 'And',\r\n type: 'logical',\r\n description: 'Logical AND',\r\n precedence: 2,\r\n },\r\n {\r\n symbol: '||',\r\n name: 'Or',\r\n type: 'logical',\r\n description: 'Logical OR',\r\n precedence: 1,\r\n },\r\n];\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs\r\n /** Initial formula (JSON string from backend) */\r\n readonly initialFormula = input<string>('');\r\n\r\n /** Available fields from the form builder (other fields that can be referenced) */\r\n readonly availableFields = input<ConditionFieldProperty[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n\r\n // Form control for the formula editor (tokens array)\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n // View child for the editor\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n // Condition-specific functions and operators\r\n readonly functionCategories = CONDITION_FUNCTION_CATEGORIES;\r\n readonly operators = CONDITION_OPERATORS;\r\n\r\n /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = {\r\n functions: 'Functions',\r\n properties: 'Fields',\r\n operators: 'Operators',\r\n noPropertiesAvailable: 'No fields available',\r\n };\r\n\r\n ngOnInit(): void {\r\n // Parse JSON string to tokens\r\n const formula = this.initialFormula();\r\n if (formula) {\r\n try {\r\n const tokens = JSON.parse(formula) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10 flex flex-col gap-3\">\r\n <!-- Formula Toolbar -->\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n RadioCardsFieldConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n FieldWidth,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n FBFieldConditions,\r\n ConditionFieldProperty,\r\n} from '../fb-field-conditions/fb-field-conditions';\r\n\r\n@Component({\r\n selector: 'mt-fb-field-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n DynamicForm,\r\n Button,\r\n ToggleField,\r\n ],\r\n templateUrl: './fb-field-form.html',\r\n})\r\nexport class FBFieldForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string>('');\r\n readonly initialData = input<EnrichedFormField | null>(null);\r\n /** All sections with enriched fields (to get available fields for conditions) */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n readonly conditionalDisplayFormula = signal<string>('');\r\n private conditionsDialogRef: any;\r\n\r\n /**\r\n * Compute available fields for condition formula\r\n * Excludes the current field being edited\r\n */\r\n readonly availableFields = computed<ConditionFieldProperty[]>(() => {\r\n const sections = this.allSections();\r\n const currentField = this.initialData();\r\n const fields: ConditionFieldProperty[] = [];\r\n\r\n for (const section of sections) {\r\n for (const field of section.fields) {\r\n // Exclude the current field being edited\r\n if (currentField && field.id === currentField.id) continue;\r\n\r\n fields.push({\r\n key: field.name,\r\n name: field.name,\r\n type: field.type,\r\n });\r\n }\r\n }\r\n\r\n return fields;\r\n });\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly showHideControl = new FormControl(false);\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'isRequired',\r\n label: this.transloco.translate('formBuilder.is-required'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'hiddenInCreation',\r\n label: this.transloco.translate('formBuilder.hidden-in-creation'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n {\r\n key: 'hiddenInEditForm',\r\n label: this.transloco.translate('formBuilder.hidden-in-edit-form'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 3,\r\n },\r\n new RadioCardsFieldConfig({\r\n key: 'size',\r\n label: this.transloco.translate('formBuilder.size'),\r\n placeholder: this.transloco.translate('formBuilder.size'),\r\n options: [\r\n { id: 's', name: 'S' },\r\n { id: 'm', name: 'M' },\r\n { id: 'l', name: 'L' },\r\n ],\r\n order: 4,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n const widthToSize: Record<string, string> = {\r\n '25': 's',\r\n '50': 'm',\r\n '100': 'l',\r\n };\r\n this.formControl.patchValue({\r\n isRequired: data.isRequired ?? false,\r\n hiddenInCreation: data.hiddenInCreation ?? false,\r\n hiddenInEditForm: data.hiddenInEditForm ?? false,\r\n size: widthToSize[data.width] ?? 'l',\r\n });\r\n // Set show/hide toggle based on existing value\r\n this.showHideControl.patchValue(\r\n data.showConditionalDisplayFormula ?? false,\r\n );\r\n this.conditionalDisplayFormula.set(\r\n data.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n const widthMap: Record<string, FieldWidth> = {\r\n s: '25',\r\n m: '50',\r\n l: '100',\r\n };\r\n\r\n const payload = {\r\n width: widthMap[formValue.size] ?? '100',\r\n hiddenInCreation: formValue.hiddenInCreation ?? false,\r\n hiddenInEditForm: formValue.hiddenInEditForm ?? false,\r\n isRequired: formValue.isRequired ?? false,\r\n showConditionalDisplayFormula: this.showHideControl.value ?? false,\r\n conditionalDisplayFormula: this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null,\r\n };\r\n\r\n this.submitting.set(true);\r\n this.facade.updateField(sectionId, field.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onSetConditions(): void {\r\n this.conditionsDialogRef = this.modalService.openModal(\r\n FBFieldConditions,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('formBuilder.set-conditions'),\r\n styleClass: '!w-[73%] !absolute ',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialFormula: this.conditionalDisplayFormula(),\r\n availableFields: this.availableFields(),\r\n },\r\n },\r\n );\r\n\r\n this.conditionsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n this.conditionalDisplayFormula.set(\r\n result.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n },\r\n );\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteField(sectionId, field.id).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-2 h-full overflow-y-auto pb-10 flex flex-col gap-4\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n\r\n <!-- Show/Hide Toggle with Set Conditions -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n class=\"mt-3\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('set-conditions')\"\r\n size=\"small\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (initialData()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import { Component, effect, inject, input, signal } from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (sectionId()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n outlined\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n CdkDrag,\r\n CdkDragDrop,\r\n CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n // UI State\r\n readonly expanded = signal(true);\r\n\r\n // Form groups cache for dynamic fields\r\n private readonly formGroupsCache = new Map<string, FormGroup>();\r\n\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n modal: true,\r\n dismissible: true,\r\n\r\n inputValues: {\r\n sectionId: section.id,\r\n initialData: section.name,\r\n sectionsCount: this.sectionsCount(),\r\n },\r\n });\r\n }\r\n\r\n removeField(event: Event, field: EnrichedFormField): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.facade.deleteField(this.section().id, field.id);\r\n },\r\n });\r\n }\r\n\r\n editField(field: EnrichedFormField): void {\r\n this.modalService.openModal(FBFieldForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.field-settings'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none',\r\n position: 'end',\r\n modal: true,\r\n dismissible: true,\r\n\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialData: field,\r\n sectionId: this.section().id,\r\n allSections: this.allSections(),\r\n },\r\n });\r\n }\r\n\r\n getFieldColSpan(field: EnrichedFormField): string {\r\n switch (field.width) {\r\n case '100':\r\n return 'col-span-12';\r\n case '50':\r\n return 'col-span-6';\r\n case '25':\r\n return 'col-span-3';\r\n default:\r\n return 'col-span-12';\r\n }\r\n }\r\n\r\n getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex justify-between items-center bg-primary py-3 px-3 text-primary-contrast rounded-xl\"\r\n >\r\n <mt-icon\r\n class=\"text-2xl cursor-pointer transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex gap-3 items-center\">\r\n <span class=\"font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"fields()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"fields().length === 0\"\r\n >\r\n @for (field of fields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"field._pending || field._deleting\"\r\n [class]=\"\r\n getFieldColSpan(field) + ' cursor-grab active:cursor-grabbing'\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div class=\"flex items-center gap-4 mb-2\">\r\n <div class=\"font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n <!-- <div class=\"flex gap-2\">\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-primary\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editField(field)\"\r\n [mtTooltip]=\"t('edit-field')\"\r\n ></mt-icon>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-red-700\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeField($event, field)\"\r\n [mtTooltip]=\"t('remove-field')\"\r\n ></mt-icon>\r\n </div> -->\r\n </div>\r\n\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"{\r\n readonly: true,\r\n type: getFieldType(field),\r\n }\"\r\n />\r\n </form>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, DynamicFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport type { EnrichedFormSection } from '../../store/form-builder/form-builder.model';\r\n\r\ntype PreviewMode = 'create' | 'edit';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Tabs],\r\n templateUrl: './fb-preview-form.html',\r\n})\r\nexport class FBPreviewForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Inputs\r\n readonly sections = input<EnrichedFormSection[]>([]);\r\n\r\n // Tab state\r\n readonly activeTab = signal<PreviewMode>('create');\r\n readonly isLoading = signal(false);\r\n readonly tabOptions = [\r\n {\r\n label: this.transloco.translate('formBuilder.create-form'),\r\n value: 'create',\r\n },\r\n { label: this.transloco.translate('formBuilder.edit-form'), value: 'edit' },\r\n ];\r\n\r\n // Form control for dynamic form\r\n readonly formControl = new FormControl();\r\n\r\n constructor() {\r\n // Show skeleton briefly when tab changes to force rebuild\r\n effect(() => {\r\n this.activeTab(); // Track tab changes\r\n this.isLoading.set(true);\r\n setTimeout(() => this.isLoading.set(false), 50);\r\n });\r\n }\r\n\r\n // Convert enriched sections to DynamicFormConfig based on active tab\r\n readonly formConfig = computed<DynamicFormConfig>(() => {\r\n const sections = this.sections();\r\n const mode = this.activeTab();\r\n\r\n return {\r\n sections: sections\r\n .map((section, sectionIndex) => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\r\n\r\n // Filter fields based on mode\r\n const visibleFields = section.fields.filter((field) => {\r\n if (mode === 'create') {\r\n return !field.hiddenInCreation;\r\n } else {\r\n return !field.hiddenInEditForm;\r\n }\r\n });\r\n\r\n return {\r\n key: section.id,\r\n label: sectionName,\r\n type: 'header' as const,\r\n columns: 12,\r\n order: section.order ?? sectionIndex,\r\n fields: visibleFields.map((field, fieldIndex) => {\r\n const colSpan = this.getColSpan(field.width);\r\n\r\n return {\r\n key: `field_${field.propertyId}`,\r\n label: field.name,\r\n type: this.mapFieldType(field.type),\r\n colSpan,\r\n order: field.order ?? fieldIndex,\r\n placeholder: field.name,\r\n } as DynamicFieldConfig;\r\n }),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0), // Hide empty sections\r\n };\r\n });\r\n\r\n /**\r\n * Map property view type to dynamic form field type\r\n */\r\n private mapFieldType(viewType: string): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[viewType] ?? 'text';\r\n }\r\n\r\n /**\r\n * Convert field width to colSpan\r\n */\r\n private getColSpan(width: string): number {\r\n const widthMap: Record<string, number> = {\r\n '25': 3,\r\n '50': 6,\r\n '100': 12,\r\n };\r\n\r\n return widthMap[width] ?? 12;\r\n }\r\n\r\n onClose(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <!-- Tabs for Create/Edit mode -->\r\n <div class=\"flex justify-center mb-4\">\r\n <mt-tabs [options]=\"tabOptions\" [(active)]=\"activeTab\"></mt-tabs>\r\n </div>\r\n\r\n <div class=\"h-full overflow-y-auto px-3 pb-10\">\r\n @if (isLoading()) {\r\n <div class=\"space-y-4 animate-pulse\">\r\n <div class=\"h-6 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded w-2/3\"></div>\r\n </div>\r\n } @else if (formConfig().sections.length > 0) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n } @else {\r\n <div\r\n class=\"flex justify-center items-center h-64 text-muted-color text-lg\"\r\n >\r\n {{ t(\"no-fields-visible\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/**\r\n * Validation Formula Constants\r\n * Functions and operators for validation formulas\r\n */\r\n\r\nimport type {\r\n FunctionCategoryGroup,\r\n OperatorDefinition,\r\n} from '@masterteam/components/formula';\r\n\r\nexport const VALIDATION_FUNCTION_CATEGORIES: FunctionCategoryGroup[] = [\r\n {\r\n name: 'Validation',\r\n displayName: 'Validation',\r\n functions: [\r\n {\r\n name: 'REQUIRED',\r\n category: 'Validation',\r\n description: 'Returns true when value is not empty',\r\n signature: 'REQUIRED(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'Value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['REQUIRED(@Email)'],\r\n },\r\n {\r\n name: 'ISNULL',\r\n category: 'Validation',\r\n description: 'Returns true if value is null or empty',\r\n signature: 'ISNULL(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'Value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['ISNULL(@Phone)'],\r\n },\r\n {\r\n name: 'MIN_LENGTH',\r\n category: 'Validation',\r\n description: 'Returns true if value length is at least min',\r\n signature: 'MIN_LENGTH(value, min)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'string',\r\n description: 'Value to check',\r\n required: true,\r\n },\r\n {\r\n name: 'min',\r\n type: 'number',\r\n description: 'Minimum length',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['MIN_LENGTH(@Password, 8)'],\r\n },\r\n {\r\n name: 'MAX_LENGTH',\r\n category: 'Validation',\r\n description: 'Returns true if value length is at most max',\r\n signature: 'MAX_LENGTH(value, max)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'string',\r\n description: 'Value to check',\r\n required: true,\r\n },\r\n {\r\n name: 'max',\r\n type: 'number',\r\n description: 'Maximum length',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['MAX_LENGTH(@Title, 120)'],\r\n },\r\n {\r\n name: 'REGEX',\r\n category: 'Validation',\r\n description: 'Returns true if value matches regex pattern',\r\n signature: 'REGEX(value, pattern)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'string',\r\n description: 'Value to check',\r\n required: true,\r\n },\r\n {\r\n name: 'pattern',\r\n type: 'string',\r\n description: 'Regex pattern',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['REGEX(@Email, \"^[^@]+@[^@]+\\\\.[^@]+$\")'],\r\n },\r\n {\r\n name: 'BEFORE',\r\n category: 'Validation',\r\n description: 'Returns true if date is before reference date',\r\n signature: 'BEFORE(date, reference)',\r\n parameters: [\r\n {\r\n name: 'date',\r\n type: 'date',\r\n description: 'Date to check',\r\n required: true,\r\n },\r\n {\r\n name: 'reference',\r\n type: 'date',\r\n description: 'Reference date',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['BEFORE(@EndDate, @StartDate)'],\r\n },\r\n {\r\n name: 'AFTER',\r\n category: 'Validation',\r\n description: 'Returns true if date is after reference date',\r\n signature: 'AFTER(date, reference)',\r\n parameters: [\r\n {\r\n name: 'date',\r\n type: 'date',\r\n description: 'Date to check',\r\n required: true,\r\n },\r\n {\r\n name: 'reference',\r\n type: 'date',\r\n description: 'Reference date',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AFTER(@StartDate, @EndDate)'],\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Logic',\r\n displayName: 'Logic Helpers',\r\n functions: [\r\n {\r\n name: 'AND',\r\n category: 'Logic',\r\n description: 'Returns true if all conditions are true',\r\n signature: 'AND(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AND(REQUIRED(@Email), REGEX(@Email, \"^.+@.+$\"))'],\r\n },\r\n {\r\n name: 'OR',\r\n category: 'Logic',\r\n description: 'Returns true if any condition is true',\r\n signature: 'OR(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['OR(ISNULL(@Phone), REGEX(@Phone, \"^\\\\+?[0-9]+$\"))'],\r\n },\r\n {\r\n name: 'NOT',\r\n category: 'Logic',\r\n description: 'Returns the opposite of a condition',\r\n signature: 'NOT(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'Condition to negate',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['NOT(ISNULL(@Password))'],\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const VALIDATION_OPERATORS: OperatorDefinition[] = [\r\n // Arithmetic\r\n {\r\n symbol: '+',\r\n name: 'Add',\r\n type: 'arithmetic',\r\n description: 'Addition',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '-',\r\n name: 'Subtract',\r\n type: 'arithmetic',\r\n description: 'Subtraction',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '*',\r\n name: 'Multiply',\r\n type: 'arithmetic',\r\n description: 'Multiplication',\r\n precedence: 5,\r\n },\r\n {\r\n symbol: '/',\r\n name: 'Divide',\r\n type: 'arithmetic',\r\n description: 'Division',\r\n precedence: 5,\r\n },\r\n // Comparison\r\n {\r\n symbol: '==',\r\n name: 'Equal',\r\n type: 'comparison',\r\n description: 'Equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '!=',\r\n name: 'Not Equal',\r\n type: 'comparison',\r\n description: 'Not equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>',\r\n name: 'Greater Than',\r\n type: 'comparison',\r\n description: 'Greater than',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '<',\r\n name: 'Less Than',\r\n type: 'comparison',\r\n description: 'Less than',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>=',\r\n name: 'Greater or Equal',\r\n type: 'comparison',\r\n description: 'Greater than or equal',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '<=',\r\n name: 'Less or Equal',\r\n type: 'comparison',\r\n description: 'Less than or equal',\r\n precedence: 3,\r\n },\r\n // Logical\r\n {\r\n symbol: '&&',\r\n name: 'And',\r\n type: 'logical',\r\n description: 'Logical AND',\r\n precedence: 2,\r\n },\r\n {\r\n symbol: '||',\r\n name: 'Or',\r\n type: 'logical',\r\n description: 'Logical OR',\r\n precedence: 1,\r\n },\r\n];\r\n","import {\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { RadioCards, type RadioItem } from '@masterteam/components/radio-cards';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n serializeTokens,\r\n} from '@masterteam/components/formula';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n VALIDATION_FUNCTION_CATEGORIES,\r\n VALIDATION_OPERATORS,\r\n} from './validation-constants';\r\nimport type {\r\n ValidationRule,\r\n ValidationSeverity,\r\n} from '../../store/form-builder/form-builder.model';\r\n\r\nexport interface ValidationFieldProperty {\r\n key: string;\r\n name: string;\r\n type?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-fb-validation-rule-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n TextField,\r\n RadioCards,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-validation-rule-form.html',\r\n})\r\nexport class FBValidationRuleForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly facade = inject(FormBuilderFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly initialData = input<ValidationRule | null>(null);\r\n readonly availableFields = input<ValidationFieldProperty[]>([]);\r\n\r\n readonly submitting = signal(false);\r\n readonly activeLang = signal<'en' | 'ar'>(\r\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\r\n );\r\n\r\n readonly messageEnControl = new FormControl<string>('');\r\n readonly messageArControl = new FormControl<string>('');\r\n readonly severityControl = new FormControl<ValidationSeverity>('error', {\r\n nonNullable: true,\r\n });\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n readonly functionCategories = VALIDATION_FUNCTION_CATEGORIES;\r\n readonly operators = VALIDATION_OPERATORS;\r\n\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((field) => field.key),\r\n );\r\n\r\n readonly toolbarLabels = {\r\n functions: 'Functions',\r\n properties: 'Fields',\r\n operators: 'Operators',\r\n noPropertiesAvailable: 'No fields available',\r\n };\r\n\r\n readonly severityOptions = computed<RadioItem[]>(() => {\r\n const _lang = this.activeLang();\r\n return [\r\n {\r\n id: 'error',\r\n name: this.transloco.translate('formBuilder.severity-error'),\r\n },\r\n {\r\n id: 'warning',\r\n name: this.transloco.translate('formBuilder.severity-warning'),\r\n },\r\n ];\r\n });\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => {\r\n this.activeLang.set((lang as 'en' | 'ar') ?? 'en');\r\n });\r\n\r\n effect(() => {\r\n const data = this.initialData();\r\n if (!data) {\r\n this.messageEnControl.reset('');\r\n this.messageArControl.reset('');\r\n this.severityControl.setValue('error');\r\n this.formulaControl.reset([]);\r\n return;\r\n }\r\n\r\n this.messageEnControl.setValue(data.message?.en ?? '');\r\n this.messageArControl.setValue(data.message?.ar ?? '');\r\n this.severityControl.setValue(data.severity ?? 'error');\r\n\r\n if (data.formulaTokens) {\r\n try {\r\n const tokens = JSON.parse(data.formulaTokens) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n this.formulaControl.reset([]);\r\n }\r\n } else {\r\n this.formulaControl.reset([]);\r\n }\r\n });\r\n }\r\n\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSeverityChange(item: RadioItem): void {\r\n this.severityControl.setValue(item.id as ValidationSeverity);\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formulaTokens = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n const formulaText = tokens.length > 0 ? serializeTokens(tokens) : '';\r\n\r\n const payload = {\r\n formulaTokens,\r\n formulaText,\r\n message: {\r\n en: this.messageEnControl.value ?? '',\r\n ar: this.messageArControl.value ?? '',\r\n },\r\n severity: this.severityControl.value ?? 'error',\r\n };\r\n\r\n const data = this.initialData();\r\n this.submitting.set(true);\r\n\r\n if (data?.id !== undefined && data?.id !== null) {\r\n this.facade.updateValidation(data.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n return;\r\n }\r\n\r\n this.facade.addValidation(payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10 flex flex-col gap-4\">\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('validation-formula-placeholder')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <mt-text-field\r\n [label]=\"t('message-en')\"\r\n [placeholder]=\"t('message-en')\"\r\n [formControl]=\"messageEnControl\"\r\n />\r\n <mt-text-field\r\n [label]=\"t('message-ar')\"\r\n [placeholder]=\"t('message-ar')\"\r\n [formControl]=\"messageArControl\"\r\n />\r\n </div>\r\n <div class=\"grid gap-2\">\r\n <label class=\"text-sm font-medium text-gray-700 dark:text-gray-100\">\r\n {{ t(\"severity\") }}\r\n </label>\r\n <mt-radio-cards\r\n [options]=\"severityOptions()\"\r\n [activeId]=\"severityControl.value\"\r\n (selectionChange)=\"onSeverityChange($event)\"\r\n ></mt-radio-cards>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { Component, DestroyRef, computed, inject, signal } from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n Table,\r\n ColumnDef,\r\n TableAction,\r\n CellChangeEvent,\r\n} from '@masterteam/components/table';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n FBValidationRuleForm,\r\n ValidationFieldProperty,\r\n} from '../fb-validation-rule-form/fb-validation-rule-form';\r\nimport type { ValidationRule } from '../../store/form-builder/form-builder.model';\r\n\r\n@Component({\r\n selector: 'mt-fb-validation-rules',\r\n standalone: true,\r\n imports: [TranslocoDirective, Table, Button],\r\n templateUrl: './fb-validation-rules.html',\r\n})\r\nexport class FBValidationRules {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly validations = this.facade.validations;\r\n readonly sections = this.facade.sections;\r\n readonly properties = this.facade.properties;\r\n\r\n readonly activeLang = signal<'en' | 'ar'>(\r\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\r\n );\r\n\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<number, any>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.id, prop);\r\n }\r\n return map;\r\n });\r\n\r\n readonly availableFields = computed<ValidationFieldProperty[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = this.activeLang();\r\n const fields: ValidationFieldProperty[] = [];\r\n\r\n for (const section of sections) {\r\n for (const field of section.fields) {\r\n const prop = propsMap.get(field.propertyId);\r\n const propName = prop?.name;\r\n const name =\r\n typeof propName === 'string'\r\n ? propName\r\n : (propName?.[lang] ??\r\n propName?.['en'] ??\r\n `Property ${field.propertyId}`);\r\n\r\n fields.push({\r\n key: name,\r\n name,\r\n type: prop?.viewType || 'text',\r\n });\r\n }\r\n }\r\n\r\n return fields;\r\n });\r\n\r\n readonly tableRows = computed(() => {\r\n const lang = this.activeLang();\r\n return this.validations().map((rule) => ({\r\n ...rule,\r\n messageText: rule.message?.[lang] ?? rule.message?.en ?? '',\r\n }));\r\n });\r\n\r\n readonly tableColumns = computed<ColumnDef[]>(() => {\r\n const _lang = this.activeLang();\r\n return [\r\n {\r\n key: 'messageText',\r\n label: this.transloco.translate('formBuilder.validation-message'),\r\n },\r\n {\r\n key: 'enabled',\r\n label: this.transloco.translate('formBuilder.validation-active'),\r\n type: 'boolean',\r\n },\r\n ];\r\n });\r\n\r\n readonly rowActions = computed<TableAction[]>(() => {\r\n const _lang = this.activeLang();\r\n return [\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('formBuilder.edit-validation-rule'),\r\n action: (row: ValidationRule) => this.openEdit(row),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('formBuilder.delete'),\r\n action: (row: ValidationRule) => this.deleteRule(row),\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n },\r\n ];\r\n });\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => {\r\n this.activeLang.set((lang as 'en' | 'ar') ?? 'en');\r\n });\r\n }\r\n\r\n openCreate(): void {\r\n this.modalService.openModal(FBValidationRuleForm, 'drawer', {\r\n header: this.transloco.translate('formBuilder.add-validation-rule'),\r\n styleClass: '!w-[65%] !absolute',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n availableFields: this.availableFields(),\r\n },\r\n });\r\n }\r\n\r\n openEdit(row: ValidationRule): void {\r\n this.modalService.openModal(FBValidationRuleForm, 'drawer', {\r\n header: this.transloco.translate('formBuilder.edit-validation-rule'),\r\n styleClass: '!w-[65%] !absolute',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialData: row,\r\n availableFields: this.availableFields(),\r\n },\r\n });\r\n }\r\n\r\n deleteRule(row: ValidationRule): void {\r\n this.facade.deleteValidation(row.id).subscribe();\r\n }\r\n\r\n onCellChange(event: CellChangeEvent): void {\r\n if (event.column !== 'enabled') return;\r\n\r\n this.facade\r\n .toggleValidationActive(event.row.id, { enabled: event.value })\r\n .subscribe();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-auto']\">\r\n <div class=\"flex justify-end pb-4\">\r\n <mt-button\r\n [label]=\"t('add-validation-rule')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n (onClick)=\"openCreate()\"\r\n ></mt-button>\r\n </div>\r\n <mt-table\r\n [data]=\"tableRows()\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n (cellChange)=\"onCellChange($event)\"\r\n ></mt-table>\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, signal, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { FBSection } from './fb-section/fb-section';\r\nimport type {\r\n EnrichedFormSection,\r\n EnrichedFormField,\r\n FieldWidth,\r\n PropertyItem,\r\n} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FBValidationRules } from './fb-validation-rules/fb-validation-rules';\r\n\r\n@Component({\r\n selector: 'mt-form-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TabsModule,\r\n SkeletonModule,\r\n Button,\r\n Card,\r\n TextField,\r\n TranslocoDirective,\r\n FBSection,\r\n DragDropModule,\r\n Icon,\r\n ],\r\n templateUrl: './form-builder.html',\r\n styleUrl: './form-builder.scss',\r\n})\r\nexport class FormBuilder {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n protected readonly facade = inject(FormBuilderFacade);\r\n\r\n private dialogRef: any;\r\n\r\n // Local UI state\r\n readonly activeTab = signal<string>('system');\r\n readonly searchQuery = signal<string>('');\r\n\r\n // State from facade\r\n readonly sections = this.facade.sections;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly error = this.facade.formConfigurationError;\r\n\r\n // Properties map for enrichment\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<number, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.id, prop);\r\n }\r\n return map;\r\n });\r\n\r\n // Enrich sections with property data for UI display\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = propsMap.get(field.propertyId);\r\n const propName = prop?.name;\r\n const name =\r\n typeof propName === 'string'\r\n ? propName\r\n : (propName?.[lang] ??\r\n propName?.['en'] ??\r\n `Property ${field.propertyId}`);\r\n\r\n return {\r\n ...field,\r\n name,\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n // Available properties for toolbox tabs\r\n readonly availableTabs = computed(() => {\r\n const tabs: Array<{\r\n id: string;\r\n title: string;\r\n properties: PropertyItem[];\r\n }> = [];\r\n const usedPropertyIds = new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyId)),\r\n );\r\n\r\n const availableProps = this.properties().filter(\r\n (p) => !usedPropertyIds.has(p.id),\r\n );\r\n\r\n const systemProps = availableProps.filter((p) => p['isSystem']);\r\n const customProps = availableProps.filter((p) => !p['isSystem']);\r\n\r\n if (systemProps.length > 0) {\r\n tabs.push({ id: 'system', title: 'System', properties: systemProps });\r\n }\r\n if (customProps.length > 0) {\r\n tabs.push({ id: 'custom', title: 'Custom', properties: customProps });\r\n }\r\n\r\n return tabs;\r\n });\r\n\r\n // Filtered properties based on search query\r\n readonly filteredPropertiesByTab = computed(() => {\r\n const query = this.searchQuery().toLowerCase().trim();\r\n const tabs = this.availableTabs();\r\n\r\n if (!query) {\r\n return tabs;\r\n }\r\n\r\n return tabs.map((tab) => ({\r\n ...tab,\r\n properties: tab.properties.filter((prop) => {\r\n const name: any = prop.name;\r\n return name.toLowerCase().includes(query);\r\n }),\r\n }));\r\n });\r\n\r\n constructor() {\r\n // Update active tab when tabs change\r\n effect(() => {\r\n const tabs = this.availableTabs();\r\n const currentTab = this.activeTab();\r\n if (tabs.length > 0 && !tabs.some((t) => t.id === currentTab)) {\r\n this.activeTab.set(tabs[0].id);\r\n }\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<EnrichedFormField[] | PropertyItem[]>): void {\r\n const targetSectionId = event.container.id;\r\n\r\n if (event.previousContainer === event.container) {\r\n // Reordering within the same section\r\n const fields = [...(event.container.data as EnrichedFormField[])];\r\n const [movedField] = fields.splice(event.previousIndex, 1);\r\n fields.splice(event.currentIndex, 0, movedField);\r\n\r\n // Build bulk reorder payload with new order values\r\n const reorderPayload = fields.map((field, index) => ({\r\n id: field.id,\r\n order: index,\r\n }));\r\n\r\n this.facade.reorderFields(targetSectionId, reorderPayload);\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n // Adding from toolbox\r\n const propertyItem = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyId: propertyItem.id,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n // Moving between sections\r\n const sourceSectionId = event.previousContainer.id;\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(sourceSectionId, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n addSection(): void {\r\n this.dialogRef = this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.add-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sectionsCount: this.sections().length,\r\n },\r\n });\r\n }\r\n\r\n openPreview(): void {\r\n this.dialogRef = this.modalService.openModal(FBPreviewForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.preview'),\r\n styleClass: '!w-[79%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sections: this.enrichedSections(),\r\n },\r\n });\r\n }\r\n\r\n openValidationRules(): void {\r\n this.dialogRef = this.modalService.openModal(FBValidationRules, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.validation-rules'),\r\n styleClass: '!w-[35%] !absolute !shadow-none',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n resetFormConfiguration(): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n acceptButtonStyleClass: 'p-button-danger',\r\n accept: () => {\r\n this.facade.resetFormConfiguration();\r\n },\r\n });\r\n }\r\n\r\n noReturnPredicate = (): boolean => false;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of filteredPropertiesByTab(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full flex flex-col\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden flex-1 overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\">\r\n <mt-text-field\r\n [placeholder]=\"t('search-properties')\"\r\n [(ngModel)]=\"searchQuery\"\r\n icon=\"general.search-lg\"\r\n />\r\n </div>\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n @if (searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else {\r\n All {{ tab.title }} items are in use\r\n }\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n [label]=\"t('validation-rules')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openValidationRules()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|