@masterteam/form-builder 0.0.45 → 0.0.46

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/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/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/services/form-builder-context.service.ts","../../../../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 PreviewInfo,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ReorderSectionPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateFormSettingsPayload,\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\nexport class SetPreviewInfo {\r\n static readonly type = '[FormBuilder] Set Preview Info';\r\n constructor(public payload: PreviewInfo) {}\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\nexport class ResetFormFromAppForm {\r\n static readonly type = '[FormBuilder] Reset Form From App Form';\r\n}\r\n\r\nexport class UpdateFormSettings {\r\n static readonly type = '[FormBuilder] Update Form Settings';\r\n constructor(public payload: UpdateFormSettingsPayload) {}\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\nexport class ReorderSections {\r\n static readonly type = '[FormBuilder] Reorder Sections';\r\n constructor(public payload: ReorderSectionPayload[]) {}\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 ResetFormFromAppForm = 'resetFormFromAppForm',\r\n UpdateFormSettings = 'updateFormSettings',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n ReorderSections = 'reorderSections',\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\nexport type FormRenderMode =\r\n | 'sections'\r\n | 'steps'\r\n | 'tabs'\r\n | 'wizard'\r\n | undefined;\r\n\r\nexport interface LocalizedText {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyKey: string;\r\n property?: PropertyItem;\r\n propertyMetadata?: PropertyItem;\r\n width: FieldWidth;\r\n order: number;\r\n /** Optional custom label override (per-locale) stored on the field. */\r\n label?: LocalizedText;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 type FormBuilderMode = 'builder' | 'manageProperties';\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 renderMode?: FormRenderMode;\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 propertyKey: string;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 /**\r\n * Custom label override (per-locale). Omit the key entirely to keep the\r\n * existing override unchanged. To reset back to the inherited label, send\r\n * `useInheritedLabel: true` instead of clearing this with empty strings.\r\n */\r\n label?: LocalizedText;\r\n /** Reset the field back to its inherited (property) label, dropping any override. */\r\n useInheritedLabel?: boolean;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 ReorderSectionPayload {\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 key: string;\r\n propertyId?: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n isTranslatable?: boolean;\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// Preview Info\r\n// ============================================================================\r\nexport interface PreviewInfo {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number;\r\n levelId?: number;\r\n levelDataId?: number;\r\n moduleDataId?: number;\r\n requestSchemaId?: number;\r\n}\r\n\r\nexport interface UpdateFormSettingsPayload {\r\n renderMode?: FormRenderMode;\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 // Preview form context\r\n previewInfo: PreviewInfo | null;\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 ReorderSections,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n ResetFormFromAppForm,\r\n SetModuleInfo,\r\n SetPreviewInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateFormSettings,\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 // Preview form context\r\n previewInfo: null,\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 private normalizeFormConfiguration(\r\n config: FormConfiguration | null | undefined,\r\n ): FormConfiguration | null {\r\n if (!config) return null;\r\n\r\n return {\r\n ...config,\r\n renderMode: config.renderMode ?? 'sections',\r\n validations: config.validations ?? [],\r\n };\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 getParentModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.parentModuleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getParentModuleId(\r\n state: FormBuilderStateModel,\r\n ): string | number | null {\r\n return state?.parentModuleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getParentPath(state: FormBuilderStateModel): string {\r\n return state?.parentPath ?? '';\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 @Selector()\r\n static getPreviewInfo(state: FormBuilderStateModel) {\r\n return state?.previewInfo ?? null;\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 @Action(SetPreviewInfo)\r\n setPreviewInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetPreviewInfo,\r\n ) {\r\n ctx.patchState({\r\n previewInfo: action.payload,\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: this.normalizeFormConfiguration(data),\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: this.normalizeFormConfiguration(res.data),\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormFromAppForm)\r\n resetFormFromAppForm(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset-from-app-form`;\r\n const req$ = this.http.post<Response<FormConfiguration>>(apiPath, {});\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormFromAppForm,\r\n request$: req$,\r\n onSuccess: (res) => ({\r\n formConfiguration: this.normalizeFormConfiguration(res.data),\r\n }),\r\n });\r\n }\r\n\r\n @Action(UpdateFormSettings)\r\n updateFormSettings(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateFormSettings,\r\n ) {\r\n const state = ctx.getState();\r\n const currentConfig = state.formConfiguration;\r\n if (!currentConfig) return;\r\n\r\n const optimisticConfig = this.normalizeFormConfiguration({\r\n ...currentConfig,\r\n ...action.payload,\r\n });\r\n const apiPath = `${this.getApiPath(state)}/settings`;\r\n const req$ = this.http.put<Response<FormConfiguration>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: optimisticConfig,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateFormSettings,\r\n request$: req$,\r\n onSuccess: (res) => ({\r\n formConfiguration:\r\n this.normalizeFormConfiguration(res.data) ?? optimisticConfig,\r\n }),\r\n onError: () => ({\r\n formConfiguration: currentConfig,\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(ReorderSections)\r\n reorderSections(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderSections,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/reorder`;\r\n const req$ = this.http.put<Response<{ sections: FormSection[] }>>(\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 ?? [])\r\n .map((section) => ({\r\n ...section,\r\n order: orderMap.get(section.id) ?? section.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\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.ReorderSections,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedSections = res.data.sections;\r\n const sectionMap = new Map(updatedSections.map((s) => [s.id, s]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? [])\r\n .map((s) => {\r\n const updated = sectionMap.get(s.id);\r\n return updated ? { ...updated, fields: s.fields } : s;\r\n })\r\n .sort((a, b) => a.order - b.order);\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(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 propertyKey: action.payload.propertyKey,\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 PreviewInfo,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ReorderSectionPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateFormSettingsPayload,\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 ReorderSections,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n ResetFormFromAppForm,\r\n SetModuleInfo,\r\n SetPreviewInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateFormSettings,\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 readonly parentModuleType = select(FormBuilderState.getParentModuleType);\r\n readonly parentModuleId = select(FormBuilderState.getParentModuleId);\r\n readonly parentPath = select(FormBuilderState.getParentPath);\r\n readonly previewInfo = select(FormBuilderState.getPreviewInfo);\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 isResettingFormFromAppForm = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormFromAppForm,\r\n ),\r\n );\r\n\r\n readonly resetFormFromAppFormError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.ResetFormFromAppForm] ??\r\n null,\r\n );\r\n\r\n readonly isUpdatingFormSettings = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateFormSettings,\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 isReorderingSections = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ReorderSections,\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 setPreviewInfo(payload: PreviewInfo) {\r\n return this.store.dispatch(new SetPreviewInfo(payload));\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 resetFormFromAppForm() {\r\n return this.store.dispatch(new ResetFormFromAppForm());\r\n }\r\n\r\n updateFormSettings(payload: UpdateFormSettingsPayload) {\r\n return this.store.dispatch(new UpdateFormSettings(payload));\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 reorderSections(payload: ReorderSectionPayload[]) {\r\n return this.store.dispatch(new ReorderSections(payload));\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","import {\r\n Component,\r\n computed,\r\n DestroyRef,\r\n inject,\r\n input,\r\n OnInit,\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 { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n type SmartBlock,\r\n type 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\ninterface ConditionToolbarPropertyItem {\r\n key: string;\r\n name: string;\r\n description: 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 private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\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 readonly activeLang = signal<'en' | 'ar'>(\r\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\r\n );\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 /** Property display items for toolbar; keys remain the persisted formula value. */\r\n readonly propertyItems = computed<ConditionToolbarPropertyItem[]>(() =>\r\n this.availableFields().map((field) => ({\r\n key: field.key,\r\n name: field.name,\r\n description: field.type ? `${field.name} (${field.type})` : field.name,\r\n })),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = computed(() => {\r\n const _lang = this.activeLang();\r\n return {\r\n functions: this.transloco.translate('formBuilder.toolbar-functions'),\r\n properties: this.transloco.translate('formBuilder.toolbar-fields'),\r\n operators: this.transloco.translate('formBuilder.toolbar-operators'),\r\n noPropertiesAvailable: this.transloco.translate(\r\n 'formBuilder.toolbar-no-fields',\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 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(this.withPropertyDisplayNames(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 private withPropertyDisplayNames(tokens: FormulaToken[]): FormulaToken[] {\r\n const namesByKey = new Map(\r\n this.availableFields().map((field) => [field.key, field.name]),\r\n );\r\n\r\n if (namesByKey.size === 0) {\r\n return tokens;\r\n }\r\n\r\n return tokens.map((token) => {\r\n if (token.type !== 'property') {\r\n return token;\r\n }\r\n\r\n const key = this.extractPropertyKey(token.value);\r\n const display = key ? namesByKey.get(key) : undefined;\r\n\r\n return display ? { ...token, display } : token;\r\n });\r\n }\r\n\r\n private extractPropertyKey(value: string): string {\r\n const pathSeparatorIndex = value.lastIndexOf('::');\r\n const raw =\r\n pathSeparatorIndex >= 0\r\n ? value.slice(pathSeparatorIndex + 2)\r\n : value.replace(/^[@*$]+\\./, '').replace(/^@/, '');\r\n\r\n return raw.trim();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-4 flex h-full min-h-0 flex-col gap-3 overflow-y-auto pb-10\">\r\n <!-- Formula Toolbar -->\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyItems()\"\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\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\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 { TextField } from '@masterteam/components/text-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 FormBuilderMode,\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 TextField,\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 readonly mode = input<FormBuilderMode>('builder');\r\n\r\n readonly isManageProperties = computed(\r\n () => this.mode() === 'manageProperties',\r\n );\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.propertyKey,\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 isReadControl = new FormControl(true);\r\n readonly isWriteControl = new FormControl(true);\r\n\r\n // Custom label override\r\n readonly editLabelControl = new FormControl(false);\r\n readonly labelEnControl = new FormControl('', { nonNullable: true });\r\n readonly labelArControl = new FormControl('', { nonNullable: true });\r\n /** Whether the field already had a custom label when the dialog opened. */\r\n private readonly hadInitialLabel = signal(false);\r\n\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 /** Simplified form config for manageProperties mode: only size */\r\n readonly managePropertiesFormConfig: 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 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: 1,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n readonly activeFormConfig = computed(() =>\r\n this.isManageProperties()\r\n ? this.managePropertiesFormConfig\r\n : this.formConfig,\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 // isRead/isWrite controls\r\n this.isReadControl.patchValue(data.isRead !== false);\r\n this.isWriteControl.patchValue(data.isWrite !== false);\r\n // Custom label override\r\n const label = data.label;\r\n const hasLabel =\r\n !!label &&\r\n ((label.en ?? '').trim() !== '' || (label.ar ?? '').trim() !== '');\r\n this.hadInitialLabel.set(hasLabel);\r\n this.editLabelControl.patchValue(hasLabel);\r\n this.labelEnControl.patchValue(label?.en ?? '');\r\n this.labelArControl.patchValue(label?.ar ?? '');\r\n }\r\n });\r\n\r\n // Cascade: isWrite=true forces isRead=true\r\n this.isWriteControl.valueChanges.subscribe((isWrite) => {\r\n if (isWrite && !this.isReadControl.value) {\r\n this.isReadControl.patchValue(true, { emitEvent: false });\r\n }\r\n });\r\n\r\n // Cascade: isRead=false forces isWrite=false\r\n this.isReadControl.valueChanges.subscribe((isRead) => {\r\n if (!isRead && this.isWriteControl.value) {\r\n this.isWriteControl.patchValue(false, { emitEvent: false });\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: Record<string, any> = {\r\n width: widthMap[formValue.size] ?? '100',\r\n };\r\n\r\n payload['isRead'] = this.isReadControl.value ?? true;\r\n payload['isWrite'] = this.isWriteControl.value ?? true;\r\n\r\n if (!this.isManageProperties()) {\r\n payload['hiddenInCreation'] = formValue.hiddenInCreation ?? false;\r\n payload['hiddenInEditForm'] = formValue.hiddenInEditForm ?? false;\r\n payload['isRequired'] = formValue.isRequired ?? false;\r\n payload['showConditionalDisplayFormula'] =\r\n this.showHideControl.value ?? false;\r\n payload['conditionalDisplayFormula'] = this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null;\r\n\r\n // Custom label override:\r\n // - toggle on → send the entered ar/en values\r\n // - toggle off but a label existed → reset to the inherited label\r\n // - toggle off and no label existed → omit (backend keeps as-is)\r\n if (this.editLabelControl.value) {\r\n payload['label'] = {\r\n ar: this.labelArControl.value.trim(),\r\n en: this.labelEnControl.value.trim(),\r\n };\r\n } else if (this.hadInitialLabel()) {\r\n payload['useInheritedLabel'] = true;\r\n }\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[73%]',\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-2 flex h-full min-h-0 flex-col gap-4 overflow-y-auto pb-10\">\r\n <mt-dynamic-form\r\n [formConfig]=\"activeFormConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n\r\n <!-- isRead Toggle -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('is-read')\"\r\n [descriptionCard]=\"t('is-read-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"isReadControl\"\r\n ></mt-toggle-field>\r\n\r\n <!-- isWrite Toggle -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('is-write')\"\r\n [descriptionCard]=\"t('is-write-description')\"\r\n icon=\"general.edit-02\"\r\n [formControl]=\"isWriteControl\"\r\n ></mt-toggle-field>\r\n\r\n @if (!isManageProperties()) {\r\n <!-- Edit Label Toggle with localized label inputs -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('edit-label')\"\r\n [descriptionCard]=\"t('edit-label-description')\"\r\n icon=\"general.translate-01\"\r\n [formControl]=\"editLabelControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (editLabelControl.value) {\r\n <div class=\"mt-3 grid gap-3\">\r\n <mt-text-field\r\n [label]=\"t('label-en')\"\r\n [formControl]=\"labelEnControl\"\r\n ></mt-text-field>\r\n <mt-text-field\r\n [label]=\"t('label-ar')\"\r\n [formControl]=\"labelArControl\"\r\n ></mt-text-field>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\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 styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\r\n @if (initialData() && !isManageProperties()) {\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=\"self-start sm:me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting() || deleting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\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, ValidatorConfig } 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\nconst hasNonWhitespaceValue = (value: unknown): boolean => {\r\n if (value === null || value === undefined || value === '') return true;\r\n return typeof value !== 'string' || value.trim().length > 0;\r\n};\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 validators: [\r\n ValidatorConfig.required(\r\n this.transloco.translate('formBuilder.required'),\r\n ),\r\n ValidatorConfig.custom(\r\n hasNonWhitespaceValue,\r\n this.transloco.translate('formBuilder.whitespace-invalid'),\r\n ),\r\n ],\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 validators: [\r\n ValidatorConfig.required(\r\n this.transloco.translate('formBuilder.required'),\r\n ),\r\n ValidatorConfig.custom(\r\n hasNonWhitespaceValue,\r\n this.transloco.translate('formBuilder.whitespace-invalid'),\r\n ),\r\n ],\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 nameAr = String(formValue['name-ar'] ?? '').trim();\r\n const nameEn = String(formValue['name-en'] ?? '').trim();\r\n\r\n if (!nameAr || !nameEn) return;\r\n\r\n const payload = {\r\n name: {\r\n ar: nameAr,\r\n en: nameEn,\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-4 h-full min-h-0 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\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\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=\"self-start sm:me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting() || deleting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import {\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n effect,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport type {\n EnrichedFormField,\n EnrichedFormSection,\n FormBuilderMode,\n} from '../../store/form-builder/form-builder.model';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport { ModalService } from '@masterteam/components/modal';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragHandle,\n CdkDragPlaceholder,\n CdkDropList,\n} from '@angular/cdk/drag-drop';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\nimport { Icon } from '@masterteam/icons';\nimport { FormBuilderFacade } from '../../store/form-builder';\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\nimport { Tooltip } from '@masterteam/components/tooltip';\n\n@Component({\n selector: 'mt-fb-section',\n standalone: true,\n imports: [\n Button,\n Card,\n Icon,\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n CdkDragPlaceholder,\n TranslocoDirective,\n DynamicField,\n ReactiveFormsModule,\n Tooltip,\n ],\n templateUrl: './fb-section.html',\n})\nexport class FBSection {\n private readonly confirmationService = inject(ConfirmationService);\n private readonly modalService = inject(ModalService);\n private readonly translocoService = inject(TranslocoService);\n private readonly activeLang = toSignal(this.translocoService.langChanges$, {\n initialValue: this.translocoService.getActiveLang(),\n });\n private readonly facade = inject(FormBuilderFacade);\n\n // Inputs\n readonly section = input.required<EnrichedFormSection>();\n readonly sectionsCount = input<number>(0);\n /** All sections - used to get available fields for condition formulas */\n readonly allSections = input<EnrichedFormSection[]>([]);\n /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write only). */\n readonly mode = input<FormBuilderMode>('builder');\n readonly connectedDropLists = input<readonly string[]>([]);\n\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\n\n // Computed\n readonly sectionName = computed(() => {\n const lang = this.activeLang() as 'en' | 'ar';\n const section = this.section();\n return section.name[lang] ?? section.name['en'];\n });\n\n readonly fields = computed(() => this.section().fields);\n\n /** In manageProperties mode, isRead=false fields go to the end */\n readonly displayFields = computed(() => {\n const raw = this.fields();\n if (this.mode() !== 'manageProperties') return raw;\n const readable = raw.filter((f) => f.isRead !== false);\n const unreadable = raw.filter((f) => f.isRead === false);\n return [...readable, ...unreadable];\n });\n\n readonly isManageProperties = computed(\n () => this.mode() === 'manageProperties',\n );\n\n // UI State\n readonly expanded = signal(true);\n\n // Form groups cache for dynamic fields\n private readonly formGroupsCache = new Map<string, FormGroup>();\n private readonly translatableViewTypes = new Set(['Text', 'LongText']);\n\n constructor() {\n // Cleanup stale form groups when fields change\n effect(() => {\n const currentIds = new Set(this.fields().map((f) => f.id));\n for (const id of this.formGroupsCache.keys()) {\n if (!currentIds.has(id)) {\n this.formGroupsCache.delete(id);\n }\n }\n });\n }\n\n getFormGroup(field: EnrichedFormField): FormGroup {\n let fg = this.formGroupsCache.get(field.id);\n const controlNames = this.getFieldControlNames(field);\n\n if (fg) {\n const existingKeys = Object.keys(fg.controls);\n const hasSameControls =\n existingKeys.length === controlNames.length &&\n controlNames.every((key) => fg?.contains(key));\n\n if (!hasSameControls) {\n fg = this.createFieldFormGroup(field, controlNames);\n this.formGroupsCache.set(field.id, fg);\n }\n } else {\n fg = this.createFieldFormGroup(field, controlNames);\n this.formGroupsCache.set(field.id, fg);\n }\n\n return fg;\n }\n\n getTranslatableFieldControls(\n field: EnrichedFormField,\n ): Array<{ key: string; config: Record<string, any> }> {\n return [\n {\n key: this.getTranslatableControlName(field, 'en'),\n config: this.getFieldConfig(field, 'English'),\n },\n {\n key: this.getTranslatableControlName(field, 'ar'),\n config: this.getFieldConfig(field, 'Arabic'),\n },\n ];\n }\n\n isTranslatableTextField(field: EnrichedFormField): boolean {\n const prop = field.property ?? field.data;\n return (\n prop?.isTranslatable === true &&\n this.translatableViewTypes.has(prop?.viewType ?? field.type)\n );\n }\n\n private createFieldFormGroup(\n field: EnrichedFormField,\n controlNames: string[],\n ): FormGroup {\n const initialValue = field.data?.data;\n const value =\n initialValue && typeof initialValue === 'object' ? initialValue : {};\n const controls = controlNames.reduce<Record<string, FormControl>>(\n (acc, key) => {\n const language = key.endsWith('-en')\n ? 'en'\n : key.endsWith('-ar')\n ? 'ar'\n : null;\n acc[key] = new FormControl(language ? value?.[language] : initialValue);\n return acc;\n },\n {},\n );\n\n return new FormGroup(controls);\n }\n\n private getFieldControlNames(field: EnrichedFormField): string[] {\n if (this.isTranslatableTextField(field)) {\n return [\n this.getTranslatableControlName(field, 'en'),\n this.getTranslatableControlName(field, 'ar'),\n ];\n }\n\n return [field.name];\n }\n\n private getTranslatableControlName(\n field: EnrichedFormField,\n lang: 'en' | 'ar',\n ): string {\n return `${field.id}-${lang}`;\n }\n\n toggleExpanded(): void {\n this.expanded.update((v) => !v);\n }\n\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\n this.onFieldDrop.emit(event);\n }\n\n /** Reject section drags — only fields/properties can be dropped into a field list. */\n fieldsDropPredicate = (drag: CdkDrag): boolean => {\n return drag.dropContainer.id !== 'sections-list';\n };\n\n editSection(event: Event): void {\n event.stopPropagation();\n const section = this.section();\n\n this.modalService.openModal(FBSectionForm, 'drawer', {\n header: this.translocoService.translate('formBuilder.edit-section'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\n position: 'end',\n appendTo: '#page-content',\n modal: true,\n dismissible: true,\n\n inputValues: {\n sectionId: section.id,\n initialData: section.name,\n sectionsCount: this.sectionsCount(),\n },\n });\n }\n\n removeField(event: Event, field: EnrichedFormField): void {\n this.confirmationService.confirmDelete({\n event,\n type: 'popup',\n accept: () => {\n this.facade.deleteField(this.section().id, field.id);\n },\n });\n }\n\n editField(field: EnrichedFormField): void {\n this.modalService.openModal(FBFieldForm, 'drawer', {\n header: this.translocoService.translate('formBuilder.field-settings'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\n position: 'end',\n modal: true,\n dismissible: true,\n\n appendTo: '#page-content',\n inputValues: {\n initialData: field,\n sectionId: this.section().id,\n allSections: this.allSections(),\n mode: this.mode(),\n },\n });\n }\n\n getFieldColSpan(field: EnrichedFormField): string {\n if (this.isTranslatableTextField(field)) {\n return this.getTranslatableFieldGroupColSpan(field);\n }\n\n switch (field.width) {\n case '100':\n return 'col-span-12';\n case '50':\n return 'col-span-12 sm:col-span-6';\n case '25':\n return 'col-span-12 sm:col-span-6 xl:col-span-3';\n default:\n return 'col-span-12';\n }\n }\n\n getTranslatableFieldControlColSpan(field: EnrichedFormField): string {\n if (field.width === '100') {\n return 'col-span-12';\n }\n\n return 'col-span-12 md:col-span-6';\n }\n\n private getTranslatableFieldGroupColSpan(field: EnrichedFormField): string {\n if (field.width === '25') {\n return 'col-span-12 sm:col-span-6';\n }\n\n return 'col-span-12';\n }\n\n getFieldType(field: EnrichedFormField): string {\n const typeMap: Record<string, string> = {\n User: 'select',\n Text: 'text',\n LongText: 'editor-field',\n Percentage: 'slider',\n Date: 'date',\n Currency: 'text',\n Number: 'number',\n Lookup: 'select',\n LookupMultiSelect: 'select',\n Checkbox: 'toggle',\n InternalModule: 'select',\n DynamicList: 'select',\n API: 'select',\n Time: 'date',\n Status: 'select',\n Attachment: 'attachment',\n EditableListView: 'actionableTable',\n LookupLog: 'actionableTable',\n LookupModuleCheckList: 'actionableTable',\n LookupMatrix: 'select',\n Location: 'select',\n Connection: 'schema-connection',\n };\n\n return typeMap[field.type] ?? 'text';\n }\n\n getFieldConfig(\n field: EnrichedFormField,\n languageLabel?: string,\n ): Record<string, any> {\n const type = this.getFieldType(field);\n const base: Record<string, any> = {\n readonly: true,\n type,\n label: languageLabel ? `${field.name} (${languageLabel})` : undefined,\n };\n\n if (type === 'schema-connection') {\n const prop = field.property;\n base['configuration'] = prop ? (prop['configuration'] ?? {}) : {};\n }\n\n return base;\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\n <div class=\"flex flex-col\">\n <div\n cdkDragHandle\n [class]=\"\n 'flex items-center justify-between gap-3 rounded-xl bg-primary px-3 py-3 text-primary-contrast' +\n (isManageProperties() ? '' : ' cursor-grab active:cursor-grabbing')\n \"\n >\n <div class=\"flex min-w-0 items-center gap-3\">\n <mt-icon\n class=\"shrink-0 cursor-pointer text-2xl transition-[rotate]\"\n [class.rotate-180]=\"expanded()\"\n icon=\"arrow.chevron-down\"\n (click)=\"toggleExpanded()\"\n ></mt-icon>\n\n <span class=\"truncate font-semibold\">\n {{ sectionName() }}\n </span>\n @if (!isManageProperties()) {\n <mt-icon\n class=\"text-lg cursor-pointer\"\n icon=\"general.edit-02\"\n (click)=\"editSection($event)\"\n [mtTooltip]=\"t('edit-section')\"\n ></mt-icon>\n }\n </div>\n <span></span>\n </div>\n @if (expanded()) {\n <div\n cdkDropList\n [id]=\"section().id\"\n cdkDropListOrientation=\"mixed\"\n [cdkDropListData]=\"displayFields()\"\n [cdkDropListConnectedTo]=\"connectedDropLists()\"\n [cdkDropListDisabled]=\"isManageProperties()\"\n [cdkDropListEnterPredicate]=\"fieldsDropPredicate\"\n (cdkDropListDropped)=\"onDrop($event)\"\n class=\"grid grid-cols-12 gap-4 relative py-2\"\n [class.min-h-27]=\"displayFields().length === 0\"\n >\n @for (field of displayFields(); track field.id) {\n <div\n cdkDrag\n [cdkDragData]=\"field\"\n [cdkDragDisabled]=\"\n isManageProperties() || field._pending || field._deleting\n \"\n [class]=\"\n getFieldColSpan(field) +\n (isManageProperties()\n ? ''\n : ' cursor-grab active:cursor-grabbing')\n \"\n >\n <div\n *cdkDragPlaceholder\n [class]=\"\n 'h-full min-h-27 bg-black/10 rounded-lg ' +\n getFieldColSpan(field)\n \"\n ></div>\n @if (field._pending) {\n <!-- Skeleton for pending field -->\n <mt-card class=\"h-full animate-pulse\">\n <div class=\"flex flex-col gap-3 sm:flex-row\">\n <div class=\"flex-1 space-y-3\">\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\n <div class=\"h-10 bg-surface-200 rounded\"></div>\n </div>\n <div class=\"flex shrink-0 flex-row gap-1 sm:flex-col\">\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\n </div>\n </div>\n </mt-card>\n } @else {\n <mt-card\n class=\"h-full relative transition-all duration-200\"\n [class.opacity-50]=\"field._deleting\"\n >\n @if (field._deleting) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\n >\n <div\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\n ></div>\n </div>\n }\n <div class=\"flex flex-col gap-3 sm:flex-row\">\n <div class=\"min-w-0 flex-1\">\n <form [formGroup]=\"getFormGroup(field)\">\n <div\n class=\"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-4\"\n >\n <div class=\"min-w-0 break-words font-semibold\">\n {{ field.name }}\n </div>\n @if (isManageProperties()) {\n <div\n class=\"flex flex-wrap items-center gap-1.5 sm:ms-auto\"\n >\n @if (field.isRead === false) {\n <span\n class=\"text-xs font-medium text-red-500 bg-red-50 px-1.5 py-0.5 rounded\"\n >\n {{ t(\"hidden\") }}\n </span>\n } @else if (field.isWrite === false) {\n <span\n class=\"text-xs font-medium text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded\"\n >\n {{ t(\"read-only\") }}\n </span>\n }\n </div>\n }\n </div>\n\n <div\n class=\"transition-all duration-200\"\n [class.opacity-40]=\"\n isManageProperties() && field.isRead === false\n \"\n [class.blur-[1px]]=\"\n isManageProperties() && field.isRead === false\n \"\n >\n @if (isTranslatableTextField(field)) {\n <div class=\"grid grid-cols-12 gap-3\">\n @for (\n control of getTranslatableFieldControls(field);\n track control.key\n ) {\n <div\n [class]=\"\n getTranslatableFieldControlColSpan(field)\n \"\n >\n <mt-dynamic-field\n [fieldName]=\"control.key\"\n [fieldConfig]=\"control.config\"\n />\n </div>\n }\n </div>\n } @else {\n <mt-dynamic-field\n [fieldName]=\"field.name\"\n [fieldConfig]=\"getFieldConfig(field)\"\n />\n }\n </div>\n </form>\n </div>\n <div\n class=\"flex shrink-0 flex-row gap-1 self-end sm:flex-col sm:self-start\"\n >\n <mt-button\n size=\"small\"\n icon=\"general.settings-01\"\n [tooltip]=\"t('edit-field')\"\n [variant]=\"'outlined'\"\n [disabled]=\"field._deleting\"\n (onClick)=\"editField(field)\"\n ></mt-button>\n @if (!isManageProperties()) {\n <mt-button\n size=\"small\"\n icon=\"general.trash-01\"\n severity=\"danger\"\n [variant]=\"'outlined'\"\n [tooltip]=\"t('remove-field')\"\n [disabled]=\"field._deleting\"\n (onClick)=\"removeField($event, field)\"\n ></mt-button>\n }\n </div>\n </div>\n </mt-card>\n }\n </div>\n } @empty {\n <mt-card class=\"absolute inset-0 top-4\" paddingless>\n <div class=\"size-full p-4\">\n <div\n class=\"flex h-full items-center justify-center gap-4 rounded-xl border-1 border-primary bg-primary-50 px-4 text-center text-primary\"\n >\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\n <span>{{ t(\"drag-from-the-side\") }}</span>\n </div>\n </div>\n </mt-card>\n }\n </div>\n }\n </div>\n</ng-container>\n","import { Component, computed, inject } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { FormBuilderFacade } from '../../store/form-builder/form-builder.facade';\r\nimport type { FormRenderMode } from '../../store/form-builder/form-builder.model';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ClientForm],\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 protected readonly facade = inject(FormBuilderFacade);\r\n\r\n readonly previewInfo = this.facade.previewInfo;\r\n readonly moduleType = this.facade.moduleType;\r\n readonly builderModuleId = this.facade.moduleId;\r\n readonly parentModuleType = this.facade.parentModuleType;\r\n readonly builderParentModuleId = this.facade.parentModuleId;\r\n readonly formConfiguration = this.facade.formConfiguration;\r\n readonly moduleKey = computed(() => {\r\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\r\n const moduleType = this.moduleType();\r\n\r\n if (moduleType === 'module') {\r\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\r\n return 'ModuleData';\r\n }\r\n }\r\n\r\n if (moduleType === 'level') {\r\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\r\n return 'LevelData';\r\n }\r\n }\r\n\r\n return previewModuleKey ?? '';\r\n });\r\n readonly operationKey = computed(\r\n () => this.previewInfo()?.operationKey ?? '',\r\n );\r\n readonly previewModuleId = computed(() => {\r\n const previewModuleId = this.previewInfo()?.moduleId;\r\n if (previewModuleId != null) {\r\n return previewModuleId;\r\n }\r\n\r\n if (this.moduleType() === 'module') {\r\n return this.builderModuleId() ?? undefined;\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly previewLevelId = computed(() => {\r\n const previewLevelId = this.previewInfo()?.levelId;\r\n if (previewLevelId != null) {\r\n return previewLevelId;\r\n }\r\n\r\n // A level scope's own builder module id IS the level id; a module scope's\r\n // level id is its parent level (parentModuleId). `process-form-load` needs\r\n // the owning level id in both cases, so derive it rather than dropping it.\r\n if (this.moduleType() === 'level') {\r\n return this.builderModuleId() ?? undefined;\r\n }\r\n\r\n if (this.moduleType() === 'module' && this.parentModuleType() === 'level') {\r\n return this.builderParentModuleId() ?? undefined;\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly renderMode = computed<FormRenderMode | 'form'>(() => {\r\n const renderMode = this.formConfiguration()?.renderMode;\r\n if (\r\n renderMode === 'steps' ||\r\n renderMode === 'tabs' ||\r\n renderMode === 'wizard'\r\n )\r\n return this.formConfiguration()?.renderMode;\r\n if (renderMode === 'sections') return 'form';\r\n return undefined;\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"h-full min-h-0 overflow-y-auto px-3 pb-10\">\r\n @if (moduleKey() && operationKey()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"previewModuleId()\"\r\n [levelId]=\"previewLevelId()\"\r\n [levelDataId]=\"previewInfo()?.levelDataId\"\r\n [moduleDataId]=\"previewInfo()?.moduleDataId\"\r\n [requestSchemaId]=\"previewInfo()?.requestSchemaId\"\r\n [autoLoad]=\"true\"\r\n [renderMode]=\"renderMode()\"\r\n />\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 {\r\n Component,\r\n DestroyRef,\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, Validators } from '@angular/forms';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { startWith } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { RadioItem } from '@masterteam/components/radio-cards';\r\nimport { RadioCardsField } from '@masterteam/components/radio-cards-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n serializeTokens,\r\n tokenizeFormulaTemplate,\r\n type FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n type ValidationResult,\r\n} from '@masterteam/formula-builder';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\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\nconst EMPTY_FORMULA_VALIDATION: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n dependencies: [],\r\n complexity: 0,\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 RadioCardsField,\r\n FormulaBuilder,\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 readonly moduleType = this.facade.moduleType;\r\n readonly moduleId = this.facade.moduleId;\r\n readonly parentModuleId = this.facade.parentModuleId;\r\n readonly previewInfo = this.facade.previewInfo;\r\n\r\n readonly submitting = signal(false);\r\n readonly saveError = signal<string | null>(null);\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 nonNullable: true,\r\n validators: Validators.required,\r\n });\r\n readonly messageArControl = new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: Validators.required,\r\n });\r\n readonly severityControl = new FormControl<ValidationSeverity>('error', {\r\n nonNullable: true,\r\n });\r\n readonly formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n private readonly formulaValue = toSignal(\r\n this.formulaControl.valueChanges.pipe(startWith(this.formulaControl.value)),\r\n { initialValue: this.formulaControl.value },\r\n );\r\n private readonly messageEnStatus = toSignal(\r\n this.messageEnControl.statusChanges.pipe(\r\n startWith(this.messageEnControl.status),\r\n ),\r\n { initialValue: this.messageEnControl.status },\r\n );\r\n private readonly messageArStatus = toSignal(\r\n this.messageArControl.statusChanges.pipe(\r\n startWith(this.messageArControl.status),\r\n ),\r\n { initialValue: this.messageArControl.status },\r\n );\r\n readonly formulaValidation = signal<ValidationResult>(\r\n EMPTY_FORMULA_VALIDATION,\r\n );\r\n readonly builderSchemaId = computed(() => {\r\n const parentModuleId = this.toNumericId(this.parentModuleId());\r\n return parentModuleId ?? this.toNumericId(this.moduleId());\r\n });\r\n readonly builderModuleId = computed(() => {\r\n const parentModuleId = this.toNumericId(this.parentModuleId());\r\n if (parentModuleId === undefined) {\r\n return undefined;\r\n }\r\n\r\n return this.toNumericId(this.moduleId());\r\n });\r\n readonly builderContextEntityTypeKey = computed(() => {\r\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\r\n const moduleType = this.moduleType();\r\n\r\n if (moduleType === 'module') {\r\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\r\n return 'ModuleData';\r\n }\r\n }\r\n\r\n if (moduleType === 'level') {\r\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\r\n return 'LevelData';\r\n }\r\n }\r\n\r\n if (previewModuleKey) {\r\n return previewModuleKey;\r\n }\r\n\r\n if (moduleType === 'level') {\r\n return 'LevelData';\r\n }\r\n\r\n if (moduleType === 'module') {\r\n return 'ModuleData';\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly formulaPropertiesByPath = computed(() => {\r\n const fields = this.availableFields();\r\n if (fields.length === 0) {\r\n return {};\r\n }\r\n\r\n return {\r\n Current: fields.map((field) => ({\r\n key: field.key,\r\n name: field.name,\r\n })),\r\n };\r\n });\r\n readonly hasFormula = computed(() => {\r\n const value = this.formulaValue();\r\n const expression = value?.expression?.trim() ?? '';\r\n return expression.length > 0 || (value?.builder?.length ?? 0) > 0;\r\n });\r\n readonly canSave = computed(() => {\r\n return (\r\n this.hasFormula() &&\r\n this.formulaValidation().isValid &&\r\n !this.submitting() &&\r\n this.messageEnStatus() === 'VALID' &&\r\n this.messageArStatus() === 'VALID'\r\n );\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(null);\r\n this.formulaValidation.set(EMPTY_FORMULA_VALIDATION);\r\n this.saveError.set(null);\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 const builder = this.parseStoredFormulaTokens(data.formulaTokens);\r\n const expression =\r\n data.formulaText?.trim() || serializeTokens(builder) || '';\r\n this.formulaControl.setValue({\r\n expression,\r\n builder,\r\n });\r\n this.formulaValidation.set(EMPTY_FORMULA_VALIDATION);\r\n this.saveError.set(null);\r\n });\r\n }\r\n\r\n onFormulaValidationChange(result: ValidationResult): void {\r\n this.formulaValidation.set(result);\r\n }\r\n\r\n onSave(): void {\r\n const formulaValue = this.formulaValue();\r\n const formulaPayload = this.buildFormulaPayload(formulaValue);\r\n\r\n if (!formulaPayload || !this.formulaValidation().isValid) {\r\n return;\r\n }\r\n\r\n const payload = {\r\n formulaTokens: formulaPayload.formulaTokens,\r\n formulaText: formulaPayload.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 this.saveError.set(null);\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: (error) => this.handleSaveError(error),\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: (error) => this.handleSaveError(error),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n private toNumericId(\r\n value: string | number | null | undefined,\r\n ): number | undefined {\r\n if (value === null || value === undefined) {\r\n return undefined;\r\n }\r\n\r\n const numericValue = Number(value);\r\n return Number.isFinite(numericValue) ? numericValue : undefined;\r\n }\r\n\r\n private parseStoredFormulaTokens(\r\n value: string | null | undefined,\r\n ): FormulaToken[] {\r\n const normalized = value?.trim();\r\n if (!normalized) {\r\n return [];\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(normalized);\r\n return Array.isArray(parsed) ? (parsed as FormulaToken[]) : [];\r\n } catch {\r\n // Support legacy rows that stored raw expression text instead of token JSON.\r\n return tokenizeFormulaTemplate(normalized);\r\n }\r\n }\r\n\r\n private buildFormulaPayload(\r\n value: FormulaBuilderValue | null,\r\n ): { formulaTokens: string; formulaText: string } | null {\r\n const expression = value?.expression?.trim() ?? '';\r\n let builder = Array.isArray(value?.builder) ? value.builder : [];\r\n\r\n if (builder.length === 0 && expression) {\r\n builder = tokenizeFormulaTemplate(expression);\r\n }\r\n\r\n const formulaText = expression || serializeTokens(builder);\r\n if (!formulaText || builder.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n formulaTokens: JSON.stringify(builder),\r\n formulaText,\r\n };\r\n }\r\n\r\n private handleSaveError(error: any): void {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to save validation rule';\r\n\r\n this.submitting.set(false);\r\n this.saveError.set(message);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-4 flex h-full min-h-0 flex-col gap-4 overflow-y-auto pb-10\">\r\n <mt-formula-builder\r\n [placeholder]=\"t('validation-formula-placeholder')\"\r\n [formControl]=\"formulaControl\"\r\n [levelSchemaId]=\"builderSchemaId()\"\r\n [moduleId]=\"builderModuleId()\"\r\n [contextEntityTypeKey]=\"builderContextEntityTypeKey()\"\r\n [propertiesByPath]=\"formulaPropertiesByPath()\"\r\n (validationChange)=\"onFormulaValidationChange($event)\"\r\n />\r\n <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\r\n <mt-text-field\r\n [label]=\"t('message-en')\"\r\n [placeholder]=\"t('message-en')\"\r\n [formControl]=\"messageEnControl\"\r\n [required]=\"true\"\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 [required]=\"true\"\r\n />\r\n </div>\r\n <mt-radio-cards-field\r\n [label]=\"t('severity')\"\r\n [hint]=\"t('severity-hint')\"\r\n [options]=\"severityOptions()\"\r\n [formControl]=\"severityControl\"\r\n />\r\n @if (saveError(); as error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700\"\r\n >\r\n {{ error }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 [disabled]=\"!canSave()\"\r\n styleClass=\"w-full sm:w-auto\"\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<string, any>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.key, 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 = field.property ?? propsMap.get(field.propertyKey);\r\n const name = this.resolvePropertyName(prop, field.propertyKey, lang);\r\n\r\n fields.push({\r\n key: field.propertyKey,\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 private resolvePropertyName(\r\n property: any,\r\n fallbackKey: string,\r\n lang: 'en' | 'ar',\r\n ): string {\r\n if (!property) {\r\n return `Property ${fallbackKey}`;\r\n }\r\n\r\n const name = property?.name as string | Record<string, string> | undefined;\r\n if (typeof name === 'string') {\r\n return name;\r\n }\r\n\r\n const display = name?.['display'];\r\n if (typeof display === 'string' && display.trim().length > 0) {\r\n return display;\r\n }\r\n\r\n const localized = name?.[lang] ?? name?.['en'] ?? name?.['ar'];\r\n if (typeof localized === 'string' && localized.trim().length > 0) {\r\n return localized;\r\n }\r\n\r\n return property?.key ?? `Property ${fallbackKey}`;\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[65%]',\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[65%]',\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-auto',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"flex justify-end pb-4 max-[640px]:justify-stretch\">\r\n <mt-button\r\n [label]=\"t('add-validation-rule')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"openCreate()\"\r\n ></mt-button>\r\n </div>\r\n <mt-table\r\n noCard\r\n [data]=\"tableRows()\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n storageKey=\"fb-validation-rules-table\"\r\n (cellChange)=\"onCellChange($event)\"\r\n ></mt-table>\r\n </div>\r\n</ng-container>\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, catchError, map, of } from 'rxjs';\r\nimport type { PropertyItem } from '../../store/form-builder/form-builder.model';\r\n\r\nexport interface ContextNavigationPath {\r\n contextKey: string;\r\n contextType?: string;\r\n contextId?: string | number;\r\n key?: string;\r\n name?: string;\r\n distance?: number;\r\n}\r\n\r\nexport interface ContextNavigationPaths {\r\n parent?: ContextNavigationPath[];\r\n children?: ContextNavigationPath[];\r\n ancestors?: ContextNavigationPath[];\r\n descendants?: ContextNavigationPath[];\r\n related?: ContextNavigationPath[];\r\n hostContext?: ContextNavigationPath | null;\r\n siblingContexts?: ContextNavigationPath[];\r\n}\r\n\r\nexport interface ContextResolveResponse {\r\n currentState?: {\r\n contextType?: string;\r\n contextId?: string | number;\r\n contextPath?: string;\r\n instanceId?: string | number | null;\r\n };\r\n navigationPaths?: ContextNavigationPaths;\r\n properties?: PropertyItem[];\r\n propertyValuesBatch?: unknown;\r\n connectionMetadata?: unknown;\r\n relatedContextValues?: Record<string, unknown>;\r\n}\r\n\r\nexport interface ContextResolveOptions {\r\n displayTags?: string[];\r\n propertyFlags?: number | string;\r\n matchAllTags?: boolean;\r\n includeVirtual?: boolean;\r\n includeNavigationPaths?: boolean;\r\n includeConnectionMetadata?: boolean;\r\n includeRelatedContextValues?: boolean;\r\n relatedContextsToInclude?: string[];\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormBuilderContextService {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'context';\r\n\r\n /**\r\n * Resolves context data including navigation paths and properties.\r\n * No caching - always fetches fresh data.\r\n */\r\n resolveContext(\r\n contextKey: string,\r\n options: ContextResolveOptions = {},\r\n ): Observable<ContextResolveResponse | null> {\r\n if (!contextKey) return of(null);\r\n\r\n return this.http\r\n .post<any>(`${this.baseUrl}/resolve`, {\r\n contextKey,\r\n displayTags: options.displayTags,\r\n propertyFlags: options.propertyFlags,\r\n matchAllTags: options.matchAllTags,\r\n includeVirtual: options.includeVirtual,\r\n includeNavigationPaths: options.includeNavigationPaths,\r\n includeConnectionMetadata: options.includeConnectionMetadata,\r\n includeRelatedContextValues: options.includeRelatedContextValues,\r\n relatedContextsToInclude: options.relatedContextsToInclude,\r\n })\r\n .pipe(\r\n map((response) => this.normalizeResponse(response)),\r\n catchError((error) => {\r\n console.warn('Failed to resolve context:', error);\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Gets properties for a context.\r\n * No caching - always fetches fresh data.\r\n */\r\n getProperties(\r\n contextKey: string,\r\n options: ContextResolveOptions = {},\r\n ): Observable<PropertyItem[]> {\r\n if (!contextKey) return of([]);\r\n\r\n return this.resolveContext(contextKey, options).pipe(\r\n map((resolved) => resolved?.properties ?? []),\r\n );\r\n }\r\n\r\n private normalizeResponse(response: any): ContextResolveResponse | null {\r\n const payload = response?.data ?? response;\r\n if (!payload) return null;\r\n\r\n const properties = this.normalizeProperties(payload.properties ?? []);\r\n\r\n return {\r\n ...payload,\r\n properties,\r\n };\r\n }\r\n\r\n private normalizeProperties(raw: any[]): PropertyItem[] {\r\n return (raw ?? [])\r\n .map((prop) => {\r\n const key = prop?.key ?? prop?.propertyKey;\r\n if (!key) return null;\r\n const name = prop?.name ?? prop?.displayName ?? key;\r\n return {\r\n ...prop,\r\n key,\r\n name,\r\n } as PropertyItem;\r\n })\r\n .filter((prop): prop is PropertyItem => Boolean(prop));\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n effect,\r\n viewChildren,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\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 { Popover, PopoverModule } from 'primeng/popover';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { SelectField } from '@masterteam/components/select-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 FormBuilderMode,\r\n FormRenderMode,\r\n ReorderSectionPayload,\r\n} from '../store/form-builder/form-builder.model';\r\n\r\nconst SECTIONS_DROP_LIST_ID = 'sections-list';\r\nimport {\r\n CdkDragDrop,\r\n DragDropModule,\r\n type CdkDrag,\r\n} 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\nimport {\r\n FormBuilderContextService,\r\n type ContextNavigationPath,\r\n type ContextResolveResponse,\r\n} from './services/form-builder-context.service';\r\n\r\n// ============================================================================\r\n// Types & Constants\r\n// ============================================================================\r\n\r\ntype ScopeKey =\r\n | 'Current'\r\n | 'Host'\r\n | 'Parent'\r\n | 'Ancestors'\r\n | 'Children'\r\n | 'Descendants'\r\n | 'Related'\r\n | 'Siblings';\r\ntype PathToken = Exclude<ScopeKey, 'Current'>;\r\n\r\ninterface ContextOption {\r\n contextKey: string;\r\n label: string;\r\n}\r\n\r\ninterface PathSegment {\r\n token: PathToken;\r\n value: string;\r\n label: string;\r\n}\r\n\r\nconst SCOPE_ORDER: ScopeKey[] = [\r\n 'Current',\r\n 'Host',\r\n 'Parent',\r\n // 'Ancestors',\r\n // 'Children',\r\n // 'Descendants',\r\n // 'Related',\r\n // 'Siblings',\r\n];\r\nconst PATH_TOKENS: PathToken[] = [\r\n 'Parent',\r\n 'Ancestors',\r\n 'Children',\r\n 'Descendants',\r\n 'Related',\r\n 'Siblings',\r\n 'Host',\r\n];\r\n// ============================================================================\r\n// Component\r\n// ============================================================================\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 PopoverModule,\r\n Button,\r\n Card,\r\n TextField,\r\n SelectField,\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 implements OnInit {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly activeLang = toSignal(this.translocoService.langChanges$, {\r\n initialValue: this.translocoService.getActiveLang(),\r\n });\r\n protected readonly facade = inject(FormBuilderFacade);\r\n private readonly contextService = inject(FormBuilderContextService);\r\n private readonly popovers = viewChildren(Popover);\r\n\r\n /** Extra CSS class(es) applied to the main canvas wrapper div. */\r\n readonly canvasStyleClass = input<string>('');\r\n\r\n /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write permissions only). */\r\n readonly mode = input<FormBuilderMode>('builder');\r\n\r\n /** Controls the draggable properties sidebar independently from the main builder canvas. */\r\n readonly showPropertiesSection = input(true, { transform: booleanAttribute });\r\n\r\n private dialogRef: any;\r\n\r\n // ============================================================================\r\n // Facade State\r\n // ============================================================================\r\n\r\n readonly sections = this.facade.sections;\r\n readonly formConfiguration = this.facade.formConfiguration;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly isUpdatingFormSettings = this.facade.isUpdatingFormSettings;\r\n readonly error = this.facade.formConfigurationError;\r\n readonly moduleType = this.facade.moduleType;\r\n readonly moduleId = this.facade.moduleId;\r\n readonly parentPath = this.facade.parentPath;\r\n\r\n // ============================================================================\r\n // UI State (Simple Signals)\r\n // ============================================================================\r\n\r\n readonly activeScope = signal<ScopeKey>('Current');\r\n readonly searchQuery = signal('');\r\n readonly isContextLoading = signal(false);\r\n\r\n // Initial context data (from first load)\r\n private readonly initialContext = signal<ContextResolveResponse | null>(null);\r\n private readonly currentProperties = signal<PropertyItem[]>([]);\r\n\r\n // Non-current scope state (reset on tab change)\r\n readonly scopeLoading = signal(false);\r\n readonly scopeProperties = signal<PropertyItem[]>([]);\r\n readonly scopePath = signal<PathSegment[]>([]);\r\n private scopeNavigation = signal<ContextResolveResponse | null>(null);\r\n\r\n // Request tracking\r\n private initialRequestId = 0;\r\n private scopeRequestId = 0;\r\n private lastFormConfigurationContextKey = '';\r\n private lastResolvedContextKey = '';\r\n private hasResolvedContextState = false;\r\n private initialContextStateCleared = false;\r\n\r\n // ============================================================================\r\n // Computed Values\r\n // ============================================================================\r\n\r\n private readonly contextKey = computed(() => {\r\n const type = this.moduleType();\r\n const id = this.moduleId();\r\n const parent = this.parentPath();\r\n if (!type || id === null || id === undefined) return '';\r\n\r\n const segments: string[] = [];\r\n const raw = parent.split('/').filter(Boolean);\r\n for (let i = 0; i < raw.length; i += 2) {\r\n if (raw[i] && raw[i + 1] !== undefined) {\r\n segments.push(`${raw[i]}:${raw[i + 1]}`);\r\n }\r\n }\r\n segments.push(`${type}:${id}`);\r\n return segments.join('/');\r\n });\r\n\r\n readonly propertiesSectionVisible = computed(() => {\r\n const mode = this.mode();\r\n return mode !== 'manageProperties';\r\n });\r\n\r\n private readonly usedPropertyKeys = computed(() => {\r\n return new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyKey)),\r\n );\r\n });\r\n\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<string, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.key, prop);\r\n }\r\n return map;\r\n });\r\n\r\n /** Navigation options from initial context */\r\n readonly baseScopeContexts = computed<Record<ScopeKey, ContextOption[]>>(\r\n () => {\r\n const ctx = this.initialContext();\r\n const nav = ctx?.navigationPaths;\r\n const currentKey = ctx?.currentState?.contextPath ?? this.contextKey();\r\n\r\n return {\r\n Current: currentKey\r\n ? [this.createContextOption(currentKey, ctx?.currentState)]\r\n : [],\r\n Host: nav?.hostContext\r\n ? [this.createContextOption(nav.hostContext)]\r\n : [],\r\n Parent: this.mergeContextOptions(nav?.parent),\r\n Ancestors: this.mergeContextOptions(nav?.ancestors),\r\n Children: this.mergeContextOptions(nav?.children),\r\n Descendants: this.mergeContextOptions(nav?.descendants),\r\n Related: this.mergeContextOptions(nav?.related),\r\n Siblings: this.mergeContextOptions(nav?.siblingContexts),\r\n };\r\n },\r\n );\r\n\r\n /** Available scope tabs */\r\n readonly scopeOptions = computed(() => {\r\n if (!this.propertiesSectionVisible()) return [];\r\n\r\n const contexts = this.baseScopeContexts();\r\n return SCOPE_ORDER.filter((s) => (contexts[s] ?? []).length > 0).map(\r\n (s) => ({\r\n key: s,\r\n label: this.getScopeLabel(s),\r\n }),\r\n );\r\n });\r\n\r\n readonly fieldDropListIds = computed(() =>\r\n this.sections().map((section) => section.id),\r\n );\r\n\r\n private readonly toolboxDropListIds = computed(() =>\r\n this.propertiesSectionVisible()\r\n ? this.scopeOptions().map((scope) => `toolbox-${scope.key}`)\r\n : [],\r\n );\r\n\r\n readonly fieldDropListConnections = computed(() => [\r\n ...this.fieldDropListIds(),\r\n ...this.toolboxDropListIds(),\r\n ]);\r\n\r\n /** Enriched sections for display */\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = this.activeLang() 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 =\r\n propsMap.get(field.propertyKey) ??\r\n field.property ??\r\n field.propertyMetadata;\r\n return {\r\n ...field,\r\n name: this.resolvePropertyName(prop, field.propertyKey, lang),\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n readonly selectedRenderMode = computed<FormRenderMode>(() => {\r\n return this.formConfiguration()?.renderMode ?? 'sections';\r\n });\r\n\r\n readonly renderModeOptions = computed(() => [\r\n {\r\n label: this.translocoService.translate('formBuilder.sections'),\r\n value: 'sections' as const,\r\n icon: 'layout.layers-three-01',\r\n color: '#0284c7',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.steps'),\r\n value: 'steps' as const,\r\n icon: 'layout.list',\r\n color: '#0f766e',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.tabs'),\r\n value: 'tabs' as const,\r\n icon: 'layout.layout-top',\r\n color: '#d97706',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.wizard'),\r\n value: 'wizard' as const,\r\n icon: 'general.check-square-broken',\r\n color: '#7c3aed',\r\n },\r\n ]);\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n constructor() {\r\n // Effect: watch context/sidebar visibility changes and load only data the UI uses.\r\n effect(() => {\r\n this.syncContextData();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.syncContextData();\r\n }\r\n\r\n private syncContextData(): void {\r\n const key = this.contextKey();\r\n if (!key) {\r\n this.lastFormConfigurationContextKey = '';\r\n this.clearInitialContextState();\r\n return;\r\n }\r\n\r\n if (\r\n this.mode() === 'manageProperties' &&\r\n key !== this.lastFormConfigurationContextKey\r\n ) {\r\n this.lastFormConfigurationContextKey = key;\r\n this.facade.getFormConfiguration();\r\n }\r\n\r\n if (!this.propertiesSectionVisible()) {\r\n this.clearInitialContextState();\r\n return;\r\n }\r\n\r\n if (key === this.lastResolvedContextKey) return;\r\n\r\n this.lastResolvedContextKey = key;\r\n this.loadInitialContext(key);\r\n }\r\n\r\n // ============================================================================\r\n // Initial Context Loading\r\n // ============================================================================\r\n\r\n private loadInitialContext(contextKey: string): void {\r\n const requestId = ++this.initialRequestId;\r\n\r\n this.hasResolvedContextState = true;\r\n this.initialContextStateCleared = false;\r\n this.isContextLoading.set(true);\r\n this.initialContext.set(null);\r\n this.currentProperties.set([]);\r\n this.resetScopeState();\r\n this.activeScope.set('Current');\r\n\r\n this.contextService\r\n .resolveContext(contextKey, {\r\n propertyFlags: 'None',\r\n includeVirtual: true,\r\n includeNavigationPaths: true,\r\n includeConnectionMetadata: true,\r\n matchAllTags: true,\r\n includeRelatedContextValues: true,\r\n })\r\n .subscribe((response) => {\r\n if (requestId !== this.initialRequestId) return;\r\n\r\n this.isContextLoading.set(false);\r\n this.initialContext.set(response);\r\n this.currentProperties.set(response?.properties ?? []);\r\n this.facade.setProperties(response?.properties ?? []);\r\n });\r\n }\r\n\r\n private clearInitialContextState(): void {\r\n if (\r\n this.initialContextStateCleared &&\r\n !this.hasResolvedContextState &&\r\n !this.lastResolvedContextKey\r\n ) {\r\n return;\r\n }\r\n\r\n if (this.hasResolvedContextState || this.lastResolvedContextKey) {\r\n ++this.initialRequestId;\r\n }\r\n ++this.scopeRequestId;\r\n this.lastResolvedContextKey = '';\r\n this.hasResolvedContextState = false;\r\n this.initialContextStateCleared = true;\r\n this.isContextLoading.set(false);\r\n this.initialContext.set(null);\r\n this.currentProperties.set([]);\r\n this.facade.setProperties([]);\r\n this.resetScopeState();\r\n this.activeScope.set('Current');\r\n }\r\n\r\n // ============================================================================\r\n // Tab Change Handler (Called from template)\r\n // ============================================================================\r\n\r\n onScopeChange(scope: ScopeKey): void {\r\n if (scope === this.activeScope()) return;\r\n\r\n this.activeScope.set(scope);\r\n this.resetScopeState();\r\n\r\n if (scope === 'Current') {\r\n return;\r\n }\r\n\r\n // Get first context option for this scope\r\n const options = this.baseScopeContexts()[scope] ?? [];\r\n if (options.length === 0) return;\r\n\r\n const firstOption = options[0];\r\n this.scopePath.set([\r\n {\r\n token: scope as PathToken,\r\n value: firstOption.contextKey,\r\n label: firstOption.label,\r\n },\r\n ]);\r\n this.loadScopeContext(firstOption.contextKey);\r\n }\r\n\r\n // ============================================================================\r\n // Scope Context Loading\r\n // ============================================================================\r\n\r\n private loadScopeContext(contextKey: string): void {\r\n const requestId = ++this.scopeRequestId;\r\n this.scopeLoading.set(true);\r\n\r\n this.contextService\r\n .resolveContext(contextKey, {\r\n propertyFlags: 'None',\r\n includeVirtual: true,\r\n includeNavigationPaths: true,\r\n includeConnectionMetadata: true,\r\n matchAllTags: true,\r\n includeRelatedContextValues: true,\r\n })\r\n .subscribe((response) => {\r\n if (requestId !== this.scopeRequestId) return;\r\n\r\n this.scopeLoading.set(false);\r\n this.scopeNavigation.set(response);\r\n this.scopeProperties.set(response?.properties ?? []);\r\n });\r\n }\r\n\r\n private resetScopeState(): void {\r\n this.scopeLoading.set(false);\r\n this.scopeProperties.set([]);\r\n this.scopePath.set([]);\r\n this.scopeNavigation.set(null);\r\n this.hideAllPopovers();\r\n }\r\n\r\n // ============================================================================\r\n // Path Segment Methods (accept scope parameter for template compatibility)\r\n // ============================================================================\r\n\r\n getScopeBaseContexts(scope: ScopeKey): ContextOption[] {\r\n return this.baseScopeContexts()[scope] ?? [];\r\n }\r\n\r\n /** Template calls this with scope.key */\r\n getScopePath(_scope?: ScopeKey): PathSegment[] {\r\n return this.scopePath();\r\n }\r\n\r\n getTokenLabel(token: PathToken): string {\r\n return this.getScopeLabel(token);\r\n }\r\n\r\n getScopeSegmentLabel(_scope: ScopeKey, index: number): string {\r\n const path = this.scopePath();\r\n const segment = path[index];\r\n if (!segment?.value) return `Select ${this.getTokenLabel(segment?.token)}`;\r\n\r\n // Use stored label - don't look up from options (which change on resolve)\r\n return segment.label || this.formatContextKey(segment.value);\r\n }\r\n\r\n getScopeSegmentOptions(_scope: ScopeKey, index: number): ContextOption[] {\r\n const path = this.scopePath();\r\n const segment = path[index];\r\n if (!segment) return [];\r\n\r\n if (index === 0) {\r\n return this.getScopeBaseContexts(this.activeScope());\r\n }\r\n\r\n const nav = this.scopeNavigation();\r\n return this.getNavigationOptionsByToken(nav, segment.token);\r\n }\r\n\r\n setScopeSegmentValue(\r\n _scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n label?: string,\r\n ): void {\r\n const path = this.scopePath();\r\n const newPath = path.slice(0, index + 1);\r\n if (newPath[index]) {\r\n // Store label at selection time so it doesn't change on resolve\r\n const segmentLabel =\r\n label || this.findOptionLabel(_scope, index, contextKey);\r\n newPath[index] = {\r\n ...newPath[index],\r\n value: contextKey,\r\n label: segmentLabel,\r\n };\r\n }\r\n this.scopePath.set(newPath);\r\n this.loadScopeContext(contextKey);\r\n }\r\n\r\n private findOptionLabel(\r\n _scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n ): string {\r\n const options = this.getScopeSegmentOptions(_scope, index);\r\n const option = options.find((o) => o.contextKey === contextKey);\r\n return option?.label ?? this.formatContextKey(contextKey);\r\n }\r\n\r\n /** Template handler: hide popover first, then set value (like formula-builder) */\r\n onSetScopeSegmentValue(\r\n scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n popover: { hide: () => void },\r\n ): void {\r\n popover.hide();\r\n this.setScopeSegmentValue(scope, index, contextKey);\r\n }\r\n\r\n addScopeSegment(_scope: ScopeKey, token: PathToken): void {\r\n const path = this.scopePath();\r\n this.scopePath.set([...path, { token, value: '', label: '' }]);\r\n }\r\n\r\n /** Template handler: hide popover first, then add segment (like formula-builder) */\r\n onAddScopeSegment(\r\n scope: ScopeKey,\r\n token: PathToken,\r\n popover: { hide: () => void },\r\n ): void {\r\n popover.hide();\r\n this.addScopeSegment(scope, token);\r\n }\r\n\r\n getScopeNextTokens(_scope?: ScopeKey): PathToken[] {\r\n const path = this.scopePath();\r\n const last = path[path.length - 1];\r\n if (!last?.value) return [];\r\n\r\n const nav = this.scopeNavigation();\r\n if (!nav) return [];\r\n\r\n return PATH_TOKENS.filter(\r\n (t) => this.getNavigationOptionsByToken(nav, t).length > 0,\r\n );\r\n }\r\n\r\n canAddNextScopeSegment(_scope?: ScopeKey): boolean {\r\n const path = this.scopePath();\r\n if (path.length === 0) return false;\r\n if (!path.every((s) => Boolean(s.value))) return false;\r\n return this.getScopeNextTokens().length > 0;\r\n }\r\n\r\n canRemoveScopePath(_scope?: ScopeKey): boolean {\r\n return this.scopePath().length > 1;\r\n }\r\n\r\n removeScopePath(_scope?: ScopeKey): void {\r\n const path = this.scopePath();\r\n if (path.length <= 1) return;\r\n\r\n const newPath = path.slice(0, -1);\r\n this.scopePath.set(newPath);\r\n\r\n const last = newPath[newPath.length - 1];\r\n if (last?.value) {\r\n this.loadScopeContext(last.value);\r\n }\r\n }\r\n\r\n /** Template-compatible version (returns properties array for the scope) */\r\n getScopeProperties(_scope?: ScopeKey): PropertyItem[] {\r\n const scope = _scope ?? this.activeScope();\r\n return scope === 'Current'\r\n ? this.currentProperties()\r\n : this.scopeProperties();\r\n }\r\n\r\n // ============================================================================\r\n // Property Methods (accept scope parameter for template compatibility)\r\n // ============================================================================\r\n\r\n getFilteredProperties(_scope?: ScopeKey): PropertyItem[] {\r\n const scope = _scope ?? this.activeScope();\r\n const used = this.usedPropertyKeys();\r\n const query = this.searchQuery().toLowerCase().trim();\r\n const properties =\r\n scope === 'Current' ? this.currentProperties() : this.scopeProperties();\r\n\r\n let available = properties.filter((p) => !used.has(p.key));\r\n if (query) {\r\n available = available.filter((p) =>\r\n this.getPropertyLabel(p).toLowerCase().includes(query),\r\n );\r\n }\r\n return available;\r\n }\r\n\r\n isScopePropertiesLoading(_scope?: ScopeKey): boolean {\r\n const scope = _scope ?? this.activeScope();\r\n return scope !== 'Current' && this.scopeLoading();\r\n }\r\n\r\n getPropertyLabel(property: PropertyItem): string {\r\n const lang = this.activeLang() as 'en' | 'ar';\r\n return this.resolvePropertyName(property, property.key, lang);\r\n }\r\n\r\n // ============================================================================\r\n // Helper Methods\r\n // ============================================================================\r\n\r\n private hideAllPopovers(): void {\r\n for (const popover of this.popovers()) {\r\n popover.hide();\r\n }\r\n }\r\n\r\n private getScopeLabel(scope: ScopeKey | PathToken): string {\r\n const translationKey =\r\n scope === 'Host' && this.moduleType()?.toLowerCase() === 'module'\r\n ? 'formBuilder.scope-level'\r\n : 'formBuilder.scope-' + scope.toLowerCase();\r\n\r\n return this.translocoService.translate(translationKey);\r\n }\r\n\r\n private getNavigationOptionsByToken(\r\n response: ContextResolveResponse | null,\r\n token: PathToken,\r\n ): ContextOption[] {\r\n const nav = response?.navigationPaths;\r\n if (!nav) return [];\r\n\r\n switch (token) {\r\n case 'Parent':\r\n return this.mergeContextOptions(nav.parent);\r\n case 'Ancestors':\r\n return this.mergeContextOptions(nav.ancestors);\r\n case 'Children':\r\n return this.mergeContextOptions(nav.children);\r\n case 'Descendants':\r\n return this.mergeContextOptions(nav.descendants);\r\n case 'Related':\r\n return this.mergeContextOptions(nav.related);\r\n case 'Siblings':\r\n return this.mergeContextOptions(nav.siblingContexts);\r\n case 'Host':\r\n return nav.hostContext\r\n ? [this.createContextOption(nav.hostContext)]\r\n : [];\r\n default:\r\n return [];\r\n }\r\n }\r\n\r\n private resolvePropertyName(\r\n property: PropertyItem | undefined,\r\n fallbackKey: string,\r\n lang: 'en' | 'ar',\r\n ): string {\r\n if (!property) return `Property ${fallbackKey}`;\r\n\r\n const name = property.name as string | Record<string, string> | undefined;\r\n if (typeof name === 'string') return name;\r\n\r\n const display = name?.['display'];\r\n if (typeof display === 'string' && display.trim()) return display;\r\n\r\n const localized = name?.[lang] ?? name?.['en'] ?? name?.['ar'];\r\n if (typeof localized === 'string' && localized.trim()) return localized;\r\n\r\n return property.key ?? `Property ${fallbackKey}`;\r\n }\r\n\r\n private createContextOption(\r\n pathOrKey: ContextNavigationPath | string,\r\n currentState?: ContextResolveResponse['currentState'],\r\n ): ContextOption {\r\n if (typeof pathOrKey === 'string') {\r\n return {\r\n contextKey: pathOrKey,\r\n label: this.formatContextLabel({\r\n contextKey: pathOrKey,\r\n contextType: currentState?.contextType,\r\n contextId: currentState?.contextId,\r\n }),\r\n };\r\n }\r\n return {\r\n contextKey: pathOrKey.contextKey,\r\n label: this.formatContextLabel(pathOrKey),\r\n };\r\n }\r\n\r\n private formatContextLabel(path: Partial<ContextNavigationPath>): string {\r\n // Just return the name - no path formatting needed\r\n if (path.name) return path.name;\r\n if (path.key) return path.key;\r\n if (path.contextType && path.contextId !== undefined)\r\n return `${path.contextType} ${path.contextId}`;\r\n return path.contextKey || 'Context';\r\n }\r\n\r\n private formatContextKey(contextKey: string): string {\r\n return contextKey\r\n .split('/')\r\n .filter(Boolean)\r\n .map((seg) => {\r\n const [type, id] = seg.split(':');\r\n return id !== undefined ? `${type} ${id}` : type;\r\n })\r\n .join(' / ');\r\n }\r\n\r\n private mergeContextOptions(\r\n items?: ContextNavigationPath[],\r\n ): ContextOption[] {\r\n if (!items?.length) return [];\r\n const seen = new Set<string>();\r\n return items\r\n .slice()\r\n .sort((a, b) => (a.distance ?? 0) - (b.distance ?? 0))\r\n .filter((item) => {\r\n if (!item?.contextKey || seen.has(item.contextKey)) return false;\r\n seen.add(item.contextKey);\r\n return true;\r\n })\r\n .map((item) => this.createContextOption(item));\r\n }\r\n\r\n // ============================================================================\r\n // Drag & Drop\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 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 this.facade.reorderFields(\r\n targetSectionId,\r\n fields.map((f, i) => ({ id: f.id, order: i })),\r\n );\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n const prop = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyKey: prop.key,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(event.previousContainer.id, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n dropSection(event: CdkDragDrop<EnrichedFormSection[]>): void {\r\n if (event.previousIndex === event.currentIndex) return;\r\n\r\n const sections = [...event.container.data];\r\n const [movedSection] = sections.splice(event.previousIndex, 1);\r\n sections.splice(event.currentIndex, 0, movedSection);\r\n\r\n const payload: ReorderSectionPayload[] = sections.map((s, i) => ({\r\n id: s.id,\r\n order: i,\r\n }));\r\n this.facade.reorderSections(payload);\r\n }\r\n\r\n /** Sections list only accepts other sections — block fields/properties from dropping in. */\r\n sectionsDropPredicate = (drag: CdkDrag): boolean => {\r\n return drag.dropContainer.id === SECTIONS_DROP_LIST_ID;\r\n };\r\n\r\n // ============================================================================\r\n // Modal Actions\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 styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: { sectionsCount: this.sections().length },\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[79%]',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n onRenderModeChange(renderMode: FormRenderMode): void {\r\n if (renderMode === this.selectedRenderMode()) return;\r\n this.facade.updateFormSettings({ renderMode });\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:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[32rem] xl:!w-[35%]',\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: () => this.facade.resetFormConfiguration(),\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\r\n cdkScrollable\r\n class=\"flex h-full w-full gap-7 overflow-hidden max-[1025px]:min-h-0 max-[1025px]:min-w-0 max-[1025px]:flex-col max-[1025px]:gap-4 max-[1025px]:overflow-x-hidden max-[1025px]:overflow-y-auto\"\r\n >\r\n <!-- Properties Sidebar -->\r\n @if (propertiesSectionVisible()) {\r\n <mt-card\r\n class=\"h-full w-1/5 flex flex-col overflow-hidden max-[1025px]:h-auto max-[1025px]:max-h-[42vh] max-[1025px]:min-h-0 max-[1025px]:w-full\"\r\n >\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 (isContextLoading()) {\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 if (scopeOptions().length === 0) {\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 } @else {\r\n <!-- Scope Tabs using PrimeNG -->\r\n <p-tabs\r\n [value]=\"activeScope()\"\r\n (valueChange)=\"onScopeChange($event)\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex min-h-0 flex-1 flex-col\"\r\n >\r\n <p-tablist class=\"shrink-0 overflow-x-auto\">\r\n @for (scope of scopeOptions(); track scope.key) {\r\n <p-tab [value]=\"scope.key\">{{ scope.label }}</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 (scope of scopeOptions(); track scope.key) {\r\n <p-tabpanel [value]=\"scope.key\" class=\"h-full flex flex-col\">\r\n @if (scope.key !== \"Current\") {\r\n <div class=\"px-4 pt-3 pb-2\">\r\n <div\r\n class=\"flex flex-col gap-3 rounded-lg bg-slate-50 px-3 py-2 dark:bg-slate-800/50\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n <span\r\n class=\"shrink-0 text-xs font-semibold uppercase tracking-wider text-slate-400\"\r\n >\r\n {{ t(\"path\") }}\r\n </span>\r\n <div\r\n class=\"h-4 w-px shrink-0 bg-slate-200 dark:bg-slate-700\"\r\n ></div>\r\n <span class=\"text-xs font-semibold text-slate-600\">\r\n {{ scope.label }}\r\n </span>\r\n </div>\r\n @if (getScopeBaseContexts(scope.key).length === 0) {\r\n <span class=\"text-xs italic text-slate-400\">\r\n {{ t(\"no-context\") }}\r\n </span>\r\n } @else {\r\n <div class=\"flex flex-col gap-1.5\">\r\n @for (\r\n segment of getScopePath(scope.key);\r\n track $index;\r\n let segmentIndex = $index;\r\n let isLast = $last\r\n ) {\r\n <div\r\n class=\"flex items-center gap-1 py-0.5 px-2 border border-gray-200 rounded bg-white dark:bg-slate-800 dark:border-slate-600\"\r\n >\r\n <div\r\n class=\"flex-1 min-w-0 text-xs font-medium text-slate-600 dark:text-slate-300 truncate cursor-pointer\"\r\n (click)=\"segmentPopover.toggle($event)\"\r\n >\r\n {{\r\n getScopeSegmentLabel(\r\n scope.key,\r\n segmentIndex\r\n )\r\n }}\r\n </div>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"arrow.chevron-down\"\r\n [outlined]=\"true\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n styleClass=\"!p-0.5 !min-w-0\"\r\n (onClick)=\"segmentPopover.toggle($event)\"\r\n ></mt-button>\r\n @if (\r\n isLast && canRemoveScopePath(scope.key)\r\n ) {\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.trash-01\"\r\n [outlined]=\"true\"\r\n size=\"small\"\r\n severity=\"danger\"\r\n styleClass=\"!p-0.5 !min-w-0\"\r\n (onClick)=\"removeScopePath(scope.key)\"\r\n ></mt-button>\r\n }\r\n </div>\r\n <p-popover\r\n #segmentPopover\r\n [style]=\"{ width: 'max-content' }\"\r\n [dismissable]=\"true\"\r\n >\r\n <div class=\"p-2\">\r\n <div\r\n class=\"mb-2 text-xs font-semibold uppercase text-slate-400\"\r\n >\r\n {{ t(\"select\") }}\r\n {{ getTokenLabel(segment.token) }}\r\n </div>\r\n @if (\r\n getScopeSegmentOptions(\r\n scope.key,\r\n segmentIndex\r\n ).length === 0\r\n ) {\r\n <div\r\n class=\"text-xs font-medium text-slate-400\"\r\n >\r\n {{ t(\"no-options\") }}\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-col gap-1\">\r\n @for (\r\n option of getScopeSegmentOptions(\r\n scope.key,\r\n segmentIndex\r\n );\r\n track option.contextKey\r\n ) {\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"option.label\"\r\n [icon]=\"\r\n option.contextKey ===\r\n segment.value\r\n ? 'general.check'\r\n : 'general.minus'\r\n \"\r\n [iconPos]=\"'end'\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n styleClass=\"w-full justify-start rounded-md px-2.5 py-1.5 text-left text-xs font-medium transition-colors text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-700\"\r\n (onClick)=\"\r\n onSetScopeSegmentValue(\r\n scope.key,\r\n segmentIndex,\r\n option.contextKey,\r\n segmentPopover\r\n )\r\n \"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </p-popover>\r\n }\r\n @if (canAddNextScopeSegment(scope.key)) {\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n size=\"small\"\r\n severity=\"primary\"\r\n styleClass=\"flex size-7 shrink-0 items-center justify-center rounded-md bg-primary text-xs font-bold text-white hover:opacity-90\"\r\n (onClick)=\"\r\n nextContextPopover.toggle($event)\r\n \"\r\n ></mt-button>\r\n <!-- <span class=\"text-xs text-slate-400\">\r\n {{ t(\"add-segment\") }}\r\n </span> -->\r\n </div>\r\n }\r\n <!-- Popover OUTSIDE the @if block like formula-builder -->\r\n <p-popover\r\n #nextContextPopover\r\n [style]=\"{ width: 'max-content' }\"\r\n [dismissable]=\"true\"\r\n appendTo=\"body\"\r\n >\r\n <div class=\"p-2\">\r\n <div\r\n class=\"mb-2 text-xs font-semibold uppercase text-slate-400\"\r\n >\r\n {{ t(\"add-segment\") }}\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n @for (\r\n token of getScopeNextTokens(scope.key);\r\n track token\r\n ) {\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"getTokenLabel(token)\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n styleClass=\"w-full justify-start rounded-md px-2.5 py-1.5 text-left text-xs font-medium transition-colors text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-700\"\r\n (onClick)=\"\r\n onAddScopeSegment(\r\n scope.key,\r\n token,\r\n nextContextPopover\r\n )\r\n \"\r\n ></mt-button>\r\n }\r\n </div>\r\n </div>\r\n </p-popover>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Node List -->\r\n <div\r\n class=\"flex-1 min-h-0 overflow-y-auto space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden\"\r\n [id]=\"'toolbox-' + scope.key\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"getFilteredProperties(scope.key)\"\r\n [cdkDropListConnectedTo]=\"fieldDropListIds()\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div\r\n class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\"\r\n >\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\r\n @if (isScopePropertiesLoading(scope.key)) {\r\n <div class=\"space-y-4\">\r\n @for (i of [1, 2, 3, 4]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n @for (\r\n node of getFilteredProperties(scope.key);\r\n track node.key\r\n ) {\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-lg bg-black/10 z-1\"\r\n ></div>\r\n <span\r\n class=\"flex-1 text-start text-base font-medium\"\r\n >{{ getPropertyLabel(node) }}</span\r\n >\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 (getFilteredProperties(scope.key).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 if (\r\n getScopeProperties(scope.key).length === 0\r\n ) {\r\n {{ t(\"no-properties-available\") }}\r\n } @else {\r\n {{ t(\"all-items-in-use\") }}\r\n }\r\n </p>\r\n </div>\r\n }\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\r\n <!-- Main Canvas Area -->\r\n <div\r\n cdkScrollable\r\n class=\"flex h-full min-w-0 flex-1 gap-4 overflow-y-auto max-[1025px]:h-auto max-[1025px]:min-h-0 max-[1025px]:overflow-visible\"\r\n >\r\n <div\r\n class=\"flex h-full min-w-0 w-full flex-1 flex-col gap-4 max-[1025px]:h-auto\"\r\n [ngClass]=\"canvasStyleClass()\"\r\n >\r\n @if (mode() !== \"manageProperties\") {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div\r\n class=\"flex flex-col gap-3 p-4 sm:flex-row sm:flex-wrap sm:items-center\"\r\n >\r\n <div class=\"w-full sm:w-44\">\r\n <mt-select-field\r\n [label]=\"''\"\r\n [placeholder]=\"''\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n [ngModel]=\"selectedRenderMode()\"\r\n (ngModelChange)=\"onRenderModeChange($event)\"\r\n [options]=\"renderModeOptions()\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n optionIcon=\"icon\"\r\n optionIconColor=\"color\"\r\n [optionAvatarShape]=\"'square'\"\r\n [size]=\"'small'\"\r\n [loading]=\"isUpdatingFormSettings()\"\r\n [disabled]=\"\r\n isLoading() ||\r\n isUpdatingFormSettings() ||\r\n !formConfiguration()\r\n \"\r\n />\r\n </div>\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 styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading() || isUpdatingFormSettings()\"\r\n ></mt-button>\r\n <mt-button\r\n [label]=\"t('validation-rules')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\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\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\r\n class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\"\r\n >\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-12 sm:col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12 sm: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 <div\r\n cdkDropList\r\n id=\"sections-list\"\r\n [cdkDropListData]=\"enrichedSections()\"\r\n [cdkDropListDisabled]=\"mode() === 'manageProperties'\"\r\n [cdkDropListEnterPredicate]=\"sectionsDropPredicate\"\r\n [cdkDropListAutoScrollStep]=\"16\"\r\n (cdkDropListDropped)=\"dropSection($event)\"\r\n class=\"flex flex-col gap-4\"\r\n >\r\n @for (section of enrichedSections(); track section.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"section\"\r\n [cdkDragDisabled]=\"mode() === 'manageProperties'\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"min-h-16 rounded-xl border-2 border-dashed border-primary bg-primary-50/40\"\r\n ></div>\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n [mode]=\"mode()\"\r\n [connectedDropLists]=\"fieldDropListConnections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n </div>\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 </div>\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":["i1","i2"],"mappings":"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"}
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/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/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/services/form-builder-context.service.ts","../../../../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 PreviewInfo,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ReorderSectionPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateFormSettingsPayload,\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\nexport class SetPreviewInfo {\r\n static readonly type = '[FormBuilder] Set Preview Info';\r\n constructor(public payload: PreviewInfo) {}\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\nexport class ResetFormFromAppForm {\r\n static readonly type = '[FormBuilder] Reset Form From App Form';\r\n}\r\n\r\nexport class UpdateFormSettings {\r\n static readonly type = '[FormBuilder] Update Form Settings';\r\n constructor(public payload: UpdateFormSettingsPayload) {}\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\nexport class ReorderSections {\r\n static readonly type = '[FormBuilder] Reorder Sections';\r\n constructor(public payload: ReorderSectionPayload[]) {}\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 ResetFormFromAppForm = 'resetFormFromAppForm',\r\n UpdateFormSettings = 'updateFormSettings',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n ReorderSections = 'reorderSections',\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\nexport type FormRenderMode =\r\n | 'sections'\r\n | 'steps'\r\n | 'tabs'\r\n | 'wizard'\r\n | undefined;\r\n\r\nexport interface LocalizedText {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyKey: string;\r\n property?: PropertyItem;\r\n propertyMetadata?: PropertyItem;\r\n width: FieldWidth;\r\n order: number;\r\n /** Optional custom label override (per-locale) stored on the field. */\r\n label?: LocalizedText;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 type FormBuilderMode = 'builder' | 'manageProperties';\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 renderMode?: FormRenderMode;\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 propertyKey: string;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 /**\r\n * Custom label override (per-locale). Omit the key entirely to keep the\r\n * existing override unchanged. To reset back to the inherited label, send\r\n * `useInheritedLabel: true` instead of clearing this with empty strings.\r\n */\r\n label?: LocalizedText;\r\n /** Reset the field back to its inherited (property) label, dropping any override. */\r\n useInheritedLabel?: boolean;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: 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 ReorderSectionPayload {\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 key: string;\r\n propertyId?: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n isTranslatable?: boolean;\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// Preview Info\r\n// ============================================================================\r\nexport interface PreviewInfo {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number;\r\n levelId?: number;\r\n levelDataId?: number;\r\n moduleDataId?: number;\r\n requestSchemaId?: number;\r\n}\r\n\r\nexport interface UpdateFormSettingsPayload {\r\n renderMode?: FormRenderMode;\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 // Preview form context\r\n previewInfo: PreviewInfo | null;\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 ReorderSections,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n ResetFormFromAppForm,\r\n SetModuleInfo,\r\n SetPreviewInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateFormSettings,\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 // Preview form context\r\n previewInfo: null,\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 private normalizeFormConfiguration(\r\n config: FormConfiguration | null | undefined,\r\n ): FormConfiguration | null {\r\n if (!config) return null;\r\n\r\n return {\r\n ...config,\r\n renderMode: config.renderMode ?? 'sections',\r\n validations: config.validations ?? [],\r\n };\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 getParentModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.parentModuleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getParentModuleId(\r\n state: FormBuilderStateModel,\r\n ): string | number | null {\r\n return state?.parentModuleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getParentPath(state: FormBuilderStateModel): string {\r\n return state?.parentPath ?? '';\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 @Selector()\r\n static getPreviewInfo(state: FormBuilderStateModel) {\r\n return state?.previewInfo ?? null;\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 @Action(SetPreviewInfo)\r\n setPreviewInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetPreviewInfo,\r\n ) {\r\n ctx.patchState({\r\n previewInfo: action.payload,\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: this.normalizeFormConfiguration(data),\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: this.normalizeFormConfiguration(res.data),\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormFromAppForm)\r\n resetFormFromAppForm(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset-from-app-form`;\r\n const req$ = this.http.post<Response<FormConfiguration>>(apiPath, {});\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormFromAppForm,\r\n request$: req$,\r\n onSuccess: (res) => ({\r\n formConfiguration: this.normalizeFormConfiguration(res.data),\r\n }),\r\n });\r\n }\r\n\r\n @Action(UpdateFormSettings)\r\n updateFormSettings(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateFormSettings,\r\n ) {\r\n const state = ctx.getState();\r\n const currentConfig = state.formConfiguration;\r\n if (!currentConfig) return;\r\n\r\n const optimisticConfig = this.normalizeFormConfiguration({\r\n ...currentConfig,\r\n ...action.payload,\r\n });\r\n const apiPath = `${this.getApiPath(state)}/settings`;\r\n const req$ = this.http.put<Response<FormConfiguration>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: optimisticConfig,\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateFormSettings,\r\n request$: req$,\r\n onSuccess: (res) => ({\r\n formConfiguration:\r\n this.normalizeFormConfiguration(res.data) ?? optimisticConfig,\r\n }),\r\n onError: () => ({\r\n formConfiguration: currentConfig,\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(ReorderSections)\r\n reorderSections(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderSections,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/reorder`;\r\n const req$ = this.http.put<Response<{ sections: FormSection[] }>>(\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 ?? [])\r\n .map((section) => ({\r\n ...section,\r\n order: orderMap.get(section.id) ?? section.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\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.ReorderSections,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedSections = res.data.sections;\r\n const sectionMap = new Map(updatedSections.map((s) => [s.id, s]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? [])\r\n .map((s) => {\r\n const updated = sectionMap.get(s.id);\r\n return updated ? { ...updated, fields: s.fields } : s;\r\n })\r\n .sort((a, b) => a.order - b.order);\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(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 propertyKey: action.payload.propertyKey,\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 PreviewInfo,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n ReorderSectionPayload,\r\n ToggleValidationPayload,\r\n UpdateFieldPayload,\r\n UpdateFormSettingsPayload,\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 ReorderSections,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n ResetFormFromAppForm,\r\n SetModuleInfo,\r\n SetPreviewInfo,\r\n SetProperties,\r\n ToggleValidationActive,\r\n UpdateField,\r\n UpdateFormSettings,\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 readonly parentModuleType = select(FormBuilderState.getParentModuleType);\r\n readonly parentModuleId = select(FormBuilderState.getParentModuleId);\r\n readonly parentPath = select(FormBuilderState.getParentPath);\r\n readonly previewInfo = select(FormBuilderState.getPreviewInfo);\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 isResettingFormFromAppForm = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormFromAppForm,\r\n ),\r\n );\r\n\r\n readonly resetFormFromAppFormError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.ResetFormFromAppForm] ??\r\n null,\r\n );\r\n\r\n readonly isUpdatingFormSettings = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateFormSettings,\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 isReorderingSections = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ReorderSections,\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 setPreviewInfo(payload: PreviewInfo) {\r\n return this.store.dispatch(new SetPreviewInfo(payload));\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 resetFormFromAppForm() {\r\n return this.store.dispatch(new ResetFormFromAppForm());\r\n }\r\n\r\n updateFormSettings(payload: UpdateFormSettingsPayload) {\r\n return this.store.dispatch(new UpdateFormSettings(payload));\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 reorderSections(payload: ReorderSectionPayload[]) {\r\n return this.store.dispatch(new ReorderSections(payload));\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","import {\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Button } from '@masterteam/components/button';\nimport { ModalService } from '@masterteam/components/modal';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport {\n FormulaEditor,\n FormulaToolbar,\n type SmartBlock,\n type FormulaToken,\n} from '@masterteam/components/formula';\nimport {\n CONDITION_FUNCTION_CATEGORIES,\n CONDITION_OPERATORS,\n} from './condition-constants';\n\n/**\n * Field property for condition formula\n */\nexport interface ConditionFieldProperty {\n /** Unique key (used in formula as @key) */\n key: string;\n /** Display name */\n name: string;\n /** Field type for hint */\n type?: string;\n}\n\ninterface ConditionToolbarPropertyItem {\n key: string;\n name: string;\n description: string;\n}\n\n/**\n * Field Conditions Dialog\n *\n * Allows users to define conditional display formulas for form fields.\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\n */\n@Component({\n selector: 'mt-fb-field-conditions',\n standalone: true,\n imports: [\n TranslocoDirective,\n ReactiveFormsModule,\n Button,\n FormulaToolbar,\n FormulaEditor,\n ],\n templateUrl: './fb-field-conditions.html',\n})\nexport class FBFieldConditions implements OnInit {\n protected readonly modalService = inject(ModalService);\n private readonly ref = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n private readonly destroyRef = inject(DestroyRef);\n\n // Inputs\n /** Initial formula (JSON string from backend) */\n readonly initialFormula = input<string>('');\n\n /** Available fields from the form builder (other fields that can be referenced) */\n readonly availableFields = input<ConditionFieldProperty[]>([]);\n\n // UI State\n readonly submitting = signal(false);\n readonly activeLang = signal<'en' | 'ar'>(\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\n );\n\n // Form control for the formula editor (tokens array)\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\n\n // View child for the editor\n private readonly editorRef = viewChild<FormulaEditor>('editor');\n\n // Condition-specific functions and operators\n readonly functionCategories = CONDITION_FUNCTION_CATEGORIES;\n readonly operators = CONDITION_OPERATORS;\n\n /** Property display items for toolbar; keys remain the persisted formula value. */\n readonly propertyItems = computed<ConditionToolbarPropertyItem[]>(() =>\n this.availableFields().map((field) => ({\n key: field.key,\n name: field.name,\n description: field.type ? `${field.name} (${field.type})` : field.name,\n })),\n );\n\n /** Toolbar labels */\n readonly toolbarLabels = computed(() => {\n const _lang = this.activeLang();\n return {\n functions: this.transloco.translate('formBuilder.toolbar-functions'),\n properties: this.transloco.translate('formBuilder.toolbar-fields'),\n operators: this.transloco.translate('formBuilder.toolbar-operators'),\n noPropertiesAvailable: this.transloco.translate(\n 'formBuilder.toolbar-no-fields',\n ),\n };\n });\n\n constructor() {\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((lang) => {\n this.activeLang.set((lang as 'en' | 'ar') ?? 'en');\n });\n }\n\n ngOnInit(): void {\n // Parse JSON string to tokens\n const formula = this.initialFormula();\n if (formula) {\n try {\n const tokens = JSON.parse(formula) as FormulaToken[];\n this.formulaControl.patchValue(this.withPropertyDisplayNames(tokens));\n } catch {\n // Invalid JSON, start with empty\n }\n }\n }\n\n /** Handle block insert from toolbar */\n onBlockInsert(block: SmartBlock): void {\n const editor = this.editorRef();\n if (editor) {\n editor.addBlock(block);\n }\n }\n\n onSave(): void {\n const tokens = this.formulaControl.value ?? [];\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\n }\n\n onCancel(): void {\n this.ref.close({ saved: false });\n }\n\n private withPropertyDisplayNames(tokens: FormulaToken[]): FormulaToken[] {\n const namesByKey = new Map(\n this.availableFields().map((field) => [field.key, field.name]),\n );\n\n if (namesByKey.size === 0) {\n return tokens;\n }\n\n return tokens.map((token) => {\n if (token.type !== 'property') {\n return token;\n }\n\n const key = this.extractPropertyKey(token.value);\n const display = key ? namesByKey.get(key) : undefined;\n\n return display ? { ...token, display } : token;\n });\n }\n\n private extractPropertyKey(value: string): string {\n const pathSeparatorIndex = value.lastIndexOf('::');\n const raw =\n pathSeparatorIndex >= 0\n ? value.slice(pathSeparatorIndex + 2)\n : value.replace(/^[@*$]+\\./, '').replace(/^@/, '');\n\n return raw.trim();\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\n <div\n [class]=\"[\n modalService.contentClass,\n 'min-w-0',\n 'p-4',\n 'overflow-y-hidden!',\n 'max-[640px]:p-3',\n ]\"\n >\n <div class=\"mt-4 flex h-full min-h-0 flex-col gap-3 overflow-y-auto pb-10\">\n <!-- Formula Toolbar -->\n <mt-formula-toolbar\n [knownProperties]=\"propertyItems()\"\n [functionCategories]=\"functionCategories\"\n [operators]=\"operators\"\n [labels]=\"toolbarLabels()\"\n (onBlockInsert)=\"onBlockInsert($event)\"\n />\n <!-- Formula Editor -->\n <mt-formula-editor\n #editor\n [placeholder]=\"t('build-condition-formula')\"\n [formControl]=\"formulaControl\"\n />\n </div>\n </div>\n\n <div\n [class]=\"[\n modalService.footerClass,\n '!h-auto',\n 'min-h-0',\n 'flex-col',\n 'gap-2',\n 'sm:flex-row',\n 'sm:items-center',\n 'sm:justify-end',\n ]\"\n >\n <mt-button\n [label]=\"t('cancel')\"\n variant=\"outlined\"\n [disabled]=\"submitting()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"onCancel()\"\n />\n <mt-button\n [label]=\"t('save')\"\n severity=\"primary\"\n [loading]=\"submitting()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"onSave()\"\n />\n </div>\n</ng-container>\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 { TextField } from '@masterteam/components/text-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 FormBuilderMode,\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 TextField,\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 readonly mode = input<FormBuilderMode>('builder');\r\n\r\n readonly isManageProperties = computed(\r\n () => this.mode() === 'manageProperties',\r\n );\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.propertyKey,\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 isReadControl = new FormControl(true);\r\n readonly isWriteControl = new FormControl(true);\r\n\r\n // Custom label override\r\n readonly editLabelControl = new FormControl(false);\r\n readonly labelEnControl = new FormControl('', { nonNullable: true });\r\n readonly labelArControl = new FormControl('', { nonNullable: true });\r\n /** Whether the field already had a custom label when the dialog opened. */\r\n private readonly hadInitialLabel = signal(false);\r\n\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 /** Simplified form config for manageProperties mode: only size */\r\n readonly managePropertiesFormConfig: 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 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: 1,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n readonly activeFormConfig = computed(() =>\r\n this.isManageProperties()\r\n ? this.managePropertiesFormConfig\r\n : this.formConfig,\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 // isRead/isWrite controls\r\n this.isReadControl.patchValue(data.isRead !== false);\r\n this.isWriteControl.patchValue(data.isWrite !== false);\r\n // Custom label override\r\n const label = data.label;\r\n const hasLabel =\r\n !!label &&\r\n ((label.en ?? '').trim() !== '' || (label.ar ?? '').trim() !== '');\r\n this.hadInitialLabel.set(hasLabel);\r\n this.editLabelControl.patchValue(hasLabel);\r\n this.labelEnControl.patchValue(label?.en ?? '');\r\n this.labelArControl.patchValue(label?.ar ?? '');\r\n }\r\n });\r\n\r\n // Cascade: isWrite=true forces isRead=true\r\n this.isWriteControl.valueChanges.subscribe((isWrite) => {\r\n if (isWrite && !this.isReadControl.value) {\r\n this.isReadControl.patchValue(true, { emitEvent: false });\r\n }\r\n });\r\n\r\n // Cascade: isRead=false forces isWrite=false\r\n this.isReadControl.valueChanges.subscribe((isRead) => {\r\n if (!isRead && this.isWriteControl.value) {\r\n this.isWriteControl.patchValue(false, { emitEvent: false });\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: Record<string, any> = {\r\n width: widthMap[formValue.size] ?? '100',\r\n };\r\n\r\n payload['isRead'] = this.isReadControl.value ?? true;\r\n payload['isWrite'] = this.isWriteControl.value ?? true;\r\n\r\n if (!this.isManageProperties()) {\r\n payload['hiddenInCreation'] = formValue.hiddenInCreation ?? false;\r\n payload['hiddenInEditForm'] = formValue.hiddenInEditForm ?? false;\r\n payload['isRequired'] = formValue.isRequired ?? false;\r\n payload['showConditionalDisplayFormula'] =\r\n this.showHideControl.value ?? false;\r\n payload['conditionalDisplayFormula'] = this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null;\r\n\r\n // Custom label override:\r\n // - toggle on → send the entered ar/en values\r\n // - toggle off but a label existed → reset to the inherited label\r\n // - toggle off and no label existed → omit (backend keeps as-is)\r\n if (this.editLabelControl.value) {\r\n payload['label'] = {\r\n ar: this.labelArControl.value.trim(),\r\n en: this.labelEnControl.value.trim(),\r\n };\r\n } else if (this.hadInitialLabel()) {\r\n payload['useInheritedLabel'] = true;\r\n }\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[73%]',\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-2 flex h-full min-h-0 flex-col gap-4 overflow-y-auto pb-10\">\r\n <mt-dynamic-form\r\n [formConfig]=\"activeFormConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n\r\n <!-- isRead Toggle -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('is-read')\"\r\n [descriptionCard]=\"t('is-read-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"isReadControl\"\r\n ></mt-toggle-field>\r\n\r\n <!-- isWrite Toggle -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('is-write')\"\r\n [descriptionCard]=\"t('is-write-description')\"\r\n icon=\"general.edit-02\"\r\n [formControl]=\"isWriteControl\"\r\n ></mt-toggle-field>\r\n\r\n @if (!isManageProperties()) {\r\n <!-- Edit Label Toggle with localized label inputs -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('edit-label')\"\r\n [descriptionCard]=\"t('edit-label-description')\"\r\n icon=\"general.translate-01\"\r\n [formControl]=\"editLabelControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (editLabelControl.value) {\r\n <div class=\"mt-3 grid gap-3\">\r\n <mt-text-field\r\n [label]=\"t('label-en')\"\r\n [formControl]=\"labelEnControl\"\r\n ></mt-text-field>\r\n <mt-text-field\r\n [label]=\"t('label-ar')\"\r\n [formControl]=\"labelArControl\"\r\n ></mt-text-field>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\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 styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\r\n @if (initialData() && !isManageProperties()) {\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=\"self-start sm:me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting() || deleting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 styleClass=\"w-full sm:w-auto\"\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, ValidatorConfig } 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\nconst hasNonWhitespaceValue = (value: unknown): boolean => {\r\n if (value === null || value === undefined || value === '') return true;\r\n return typeof value !== 'string' || value.trim().length > 0;\r\n};\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 validators: [\r\n ValidatorConfig.required(\r\n this.transloco.translate('formBuilder.required'),\r\n ),\r\n ValidatorConfig.custom(\r\n hasNonWhitespaceValue,\r\n this.transloco.translate('formBuilder.whitespace-invalid'),\r\n ),\r\n ],\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 validators: [\r\n ValidatorConfig.required(\r\n this.transloco.translate('formBuilder.required'),\r\n ),\r\n ValidatorConfig.custom(\r\n hasNonWhitespaceValue,\r\n this.transloco.translate('formBuilder.whitespace-invalid'),\r\n ),\r\n ],\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 nameAr = String(formValue['name-ar'] ?? '').trim();\r\n const nameEn = String(formValue['name-en'] ?? '').trim();\r\n\r\n if (!nameAr || !nameEn) return;\r\n\r\n const payload = {\r\n name: {\r\n ar: nameAr,\r\n en: nameEn,\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'\">\n <div\n [class]=\"[\n modalService.contentClass,\n 'min-w-0',\n 'p-4',\n 'overflow-y-hidden!',\n 'max-[640px]:p-3',\n ]\"\n >\n <div class=\"mt-4 h-full min-h-0 overflow-y-auto pb-10\">\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\n </mt-dynamic-form>\n </div>\n </div>\n\n <div\n [class]=\"[\n modalService.footerClass,\n '!h-auto',\n 'min-h-0',\n 'flex-col',\n 'gap-2',\n 'sm:flex-row',\n 'sm:items-center',\n 'sm:justify-end',\n ]\"\n >\n @if (sectionId()) {\n <mt-button\n [tooltip]=\"t('delete')\"\n severity=\"danger\"\n outlined\n icon=\"general.trash-01\"\n [loading]=\"deleting()\"\n [disabled]=\"submitting()\"\n (onClick)=\"onDelete($event)\"\n class=\"self-start sm:me-auto\"\n ></mt-button>\n }\n <mt-button\n [label]=\"t('cancel')\"\n variant=\"outlined\"\n [disabled]=\"submitting() || deleting()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!formControl.valid || deleting()\"\n [label]=\"t('save')\"\n severity=\"primary\"\n [loading]=\"submitting()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n </div>\n</ng-container>\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 { toSignal } from '@angular/core/rxjs-interop';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n FormBuilderMode,\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 CdkDragHandle,\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 CdkDragHandle,\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 activeLang = toSignal(this.translocoService.langChanges$, {\r\n initialValue: this.translocoService.getActiveLang(),\r\n });\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 /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write only). */\r\n readonly mode = input<FormBuilderMode>('builder');\r\n readonly connectedDropLists = input<readonly string[]>([]);\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 = this.activeLang() 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 /** In manageProperties mode, isRead=false fields go to the end */\r\n readonly displayFields = computed(() => {\r\n const raw = this.fields();\r\n if (this.mode() !== 'manageProperties') return raw;\r\n const readable = raw.filter((f) => f.isRead !== false);\r\n const unreadable = raw.filter((f) => f.isRead === false);\r\n return [...readable, ...unreadable];\r\n });\r\n\r\n readonly isManageProperties = computed(\r\n () => this.mode() === 'manageProperties',\r\n );\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 private readonly translatableViewTypes = new Set(['Text', 'LongText']);\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 const controlNames = this.getFieldControlNames(field);\r\n\r\n if (fg) {\r\n const existingKeys = Object.keys(fg.controls);\r\n const hasSameControls =\r\n existingKeys.length === controlNames.length &&\r\n controlNames.every((key) => fg?.contains(key));\r\n\r\n if (!hasSameControls) {\r\n fg = this.createFieldFormGroup(field, controlNames);\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = this.createFieldFormGroup(field, controlNames);\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n getTranslatableFieldControls(\r\n field: EnrichedFormField,\r\n ): Array<{ key: string; config: Record<string, any> }> {\r\n return [\r\n {\r\n key: this.getTranslatableControlName(field, 'en'),\r\n config: this.getFieldConfig(field, 'English'),\r\n },\r\n {\r\n key: this.getTranslatableControlName(field, 'ar'),\r\n config: this.getFieldConfig(field, 'Arabic'),\r\n },\r\n ];\r\n }\r\n\r\n isTranslatableTextField(field: EnrichedFormField): boolean {\r\n const prop = field.property ?? field.data;\r\n return (\r\n prop?.isTranslatable === true &&\r\n this.translatableViewTypes.has(prop?.viewType ?? field.type)\r\n );\r\n }\r\n\r\n private createFieldFormGroup(\r\n field: EnrichedFormField,\r\n controlNames: string[],\r\n ): FormGroup {\r\n const initialValue = field.data?.data;\r\n const value =\r\n initialValue && typeof initialValue === 'object' ? initialValue : {};\r\n const controls = controlNames.reduce<Record<string, FormControl>>(\r\n (acc, key) => {\r\n const language = key.endsWith('-en')\r\n ? 'en'\r\n : key.endsWith('-ar')\r\n ? 'ar'\r\n : null;\r\n acc[key] = new FormControl(language ? value?.[language] : initialValue);\r\n return acc;\r\n },\r\n {},\r\n );\r\n\r\n return new FormGroup(controls);\r\n }\r\n\r\n private getFieldControlNames(field: EnrichedFormField): string[] {\r\n if (this.isTranslatableTextField(field)) {\r\n return [\r\n this.getTranslatableControlName(field, 'en'),\r\n this.getTranslatableControlName(field, 'ar'),\r\n ];\r\n }\r\n\r\n return [field.name];\r\n }\r\n\r\n private getTranslatableControlName(\r\n field: EnrichedFormField,\r\n lang: 'en' | 'ar',\r\n ): string {\r\n return `${field.id}-${lang}`;\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 /** Reject section drags — only fields/properties can be dropped into a field list. */\r\n fieldsDropPredicate = (drag: CdkDrag): boolean => {\r\n return drag.dropContainer.id !== 'sections-list';\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 styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\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 styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\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 mode: this.mode(),\r\n },\r\n });\r\n }\r\n\r\n getFieldColSpan(field: EnrichedFormField): string {\r\n if (this.isTranslatableTextField(field)) {\r\n return this.getTranslatableFieldGroupColSpan(field);\r\n }\r\n\r\n switch (field.width) {\r\n case '100':\r\n return 'col-span-12';\r\n case '50':\r\n return 'col-span-12 sm:col-span-6';\r\n case '25':\r\n return 'col-span-12 sm:col-span-6 xl:col-span-3';\r\n default:\r\n return 'col-span-12';\r\n }\r\n }\r\n\r\n getTranslatableFieldControlColSpan(field: EnrichedFormField): string {\r\n if (field.width === '100') {\r\n return 'col-span-12';\r\n }\r\n\r\n return 'col-span-12 md:col-span-6';\r\n }\r\n\r\n private getTranslatableFieldGroupColSpan(field: EnrichedFormField): string {\r\n if (field.width === '25') {\r\n return 'col-span-12 sm:col-span-6';\r\n }\r\n\r\n return 'col-span-12';\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 LookupModuleCheckList: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n Connection: 'schema-connection',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n\r\n getFieldConfig(\r\n field: EnrichedFormField,\r\n languageLabel?: string,\r\n ): Record<string, any> {\r\n const type = this.getFieldType(field);\r\n const base: Record<string, any> = {\r\n readonly: true,\r\n type,\r\n label: languageLabel ? `${field.name} (${languageLabel})` : undefined,\r\n };\r\n\r\n if (type === 'schema-connection') {\r\n const prop = field.property;\r\n base['configuration'] = prop ? (prop['configuration'] ?? {}) : {};\r\n }\r\n\r\n return base;\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\n <div class=\"flex flex-col\">\n <div\n cdkDragHandle\n [class]=\"\n 'flex items-center justify-between gap-3 rounded-xl bg-primary px-3 py-3 text-primary-contrast' +\n (isManageProperties() ? '' : ' cursor-grab active:cursor-grabbing')\n \"\n >\n <div class=\"flex min-w-0 items-center gap-3\">\n <mt-icon\n class=\"shrink-0 cursor-pointer text-2xl transition-[rotate]\"\n [class.rotate-180]=\"expanded()\"\n icon=\"arrow.chevron-down\"\n (click)=\"toggleExpanded()\"\n ></mt-icon>\n\n <span class=\"truncate font-semibold\">\n {{ sectionName() }}\n </span>\n @if (!isManageProperties()) {\n <mt-icon\n class=\"text-lg cursor-pointer\"\n icon=\"general.edit-02\"\n (click)=\"editSection($event)\"\n [mtTooltip]=\"t('edit-section')\"\n ></mt-icon>\n }\n </div>\n <span></span>\n </div>\n @if (expanded()) {\n <div\n cdkDropList\n [id]=\"section().id\"\n cdkDropListOrientation=\"mixed\"\n [cdkDropListData]=\"displayFields()\"\n [cdkDropListConnectedTo]=\"connectedDropLists()\"\n [cdkDropListDisabled]=\"isManageProperties()\"\n [cdkDropListEnterPredicate]=\"fieldsDropPredicate\"\n (cdkDropListDropped)=\"onDrop($event)\"\n class=\"grid grid-cols-12 gap-4 relative py-2\"\n [class.min-h-27]=\"displayFields().length === 0\"\n >\n @for (field of displayFields(); track field.id) {\n <div\n cdkDrag\n [cdkDragData]=\"field\"\n [cdkDragDisabled]=\"\n isManageProperties() || field._pending || field._deleting\n \"\n [class]=\"\n getFieldColSpan(field) +\n (isManageProperties()\n ? ''\n : ' cursor-grab active:cursor-grabbing')\n \"\n >\n <div\n *cdkDragPlaceholder\n [class]=\"\n 'h-full min-h-27 bg-black/10 rounded-lg ' +\n getFieldColSpan(field)\n \"\n ></div>\n @if (field._pending) {\n <!-- Skeleton for pending field -->\n <mt-card class=\"h-full animate-pulse\">\n <div class=\"flex flex-col gap-3 sm:flex-row\">\n <div class=\"flex-1 space-y-3\">\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\n <div class=\"h-10 bg-surface-200 rounded\"></div>\n </div>\n <div class=\"flex shrink-0 flex-row gap-1 sm:flex-col\">\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\n </div>\n </div>\n </mt-card>\n } @else {\n <mt-card\n class=\"h-full relative transition-all duration-200\"\n [class.opacity-50]=\"field._deleting\"\n >\n @if (field._deleting) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\n >\n <div\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\n ></div>\n </div>\n }\n <div class=\"flex flex-col gap-3 sm:flex-row\">\n <div class=\"min-w-0 flex-1\">\n <form [formGroup]=\"getFormGroup(field)\">\n <div\n class=\"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-4\"\n >\n <div class=\"min-w-0 break-words font-semibold\">\n {{ field.name }}\n </div>\n @if (isManageProperties()) {\n <div\n class=\"flex flex-wrap items-center gap-1.5 sm:ms-auto\"\n >\n @if (field.isRead === false) {\n <span\n class=\"text-xs font-medium text-red-500 bg-red-50 px-1.5 py-0.5 rounded\"\n >\n {{ t(\"hidden\") }}\n </span>\n } @else if (field.isWrite === false) {\n <span\n class=\"text-xs font-medium text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded\"\n >\n {{ t(\"read-only\") }}\n </span>\n }\n </div>\n }\n </div>\n\n <div\n class=\"transition-all duration-200\"\n [class.opacity-40]=\"\n isManageProperties() && field.isRead === false\n \"\n [class.blur-[1px]]=\"\n isManageProperties() && field.isRead === false\n \"\n >\n @if (isTranslatableTextField(field)) {\n <div class=\"grid grid-cols-12 gap-3\">\n @for (\n control of getTranslatableFieldControls(field);\n track control.key\n ) {\n <div\n [class]=\"\n getTranslatableFieldControlColSpan(field)\n \"\n >\n <mt-dynamic-field\n [fieldName]=\"control.key\"\n [fieldConfig]=\"control.config\"\n />\n </div>\n }\n </div>\n } @else {\n <mt-dynamic-field\n [fieldName]=\"field.name\"\n [fieldConfig]=\"getFieldConfig(field)\"\n />\n }\n </div>\n </form>\n </div>\n <div\n class=\"flex shrink-0 flex-row gap-1 self-end sm:flex-col sm:self-start\"\n >\n <mt-button\n size=\"small\"\n icon=\"general.settings-01\"\n [tooltip]=\"t('edit-field')\"\n [variant]=\"'outlined'\"\n [disabled]=\"field._deleting\"\n (onClick)=\"editField(field)\"\n ></mt-button>\n @if (!isManageProperties()) {\n <mt-button\n size=\"small\"\n icon=\"general.trash-01\"\n severity=\"danger\"\n [variant]=\"'outlined'\"\n [tooltip]=\"t('remove-field')\"\n [disabled]=\"field._deleting\"\n (onClick)=\"removeField($event, field)\"\n ></mt-button>\n }\n </div>\n </div>\n </mt-card>\n }\n </div>\n } @empty {\n <mt-card class=\"absolute inset-0 top-4\" paddingless>\n <div class=\"size-full p-4\">\n <div\n class=\"flex h-full items-center justify-center gap-4 rounded-xl border-1 border-primary bg-primary-50 px-4 text-center text-primary\"\n >\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\n <span>{{ t(\"drag-from-the-side\") }}</span>\n </div>\n </div>\n </mt-card>\n }\n </div>\n }\n </div>\n</ng-container>\n","import { Component, computed, inject } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ClientForm } from '@masterteam/forms/client-form';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { FormBuilderFacade } from '../../store/form-builder/form-builder.facade';\r\nimport type { FormRenderMode } from '../../store/form-builder/form-builder.model';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ClientForm],\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 protected readonly facade = inject(FormBuilderFacade);\r\n\r\n readonly previewInfo = this.facade.previewInfo;\r\n readonly moduleType = this.facade.moduleType;\r\n readonly builderModuleId = this.facade.moduleId;\r\n readonly parentModuleType = this.facade.parentModuleType;\r\n readonly builderParentModuleId = this.facade.parentModuleId;\r\n readonly formConfiguration = this.facade.formConfiguration;\r\n readonly moduleKey = computed(() => {\r\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\r\n const moduleType = this.moduleType();\r\n\r\n if (moduleType === 'module') {\r\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\r\n return 'ModuleData';\r\n }\r\n }\r\n\r\n if (moduleType === 'level') {\r\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\r\n return 'LevelData';\r\n }\r\n }\r\n\r\n return previewModuleKey ?? '';\r\n });\r\n readonly operationKey = computed(\r\n () => this.previewInfo()?.operationKey ?? '',\r\n );\r\n readonly previewModuleId = computed(() => {\r\n const previewModuleId = this.previewInfo()?.moduleId;\r\n if (previewModuleId != null) {\r\n return previewModuleId;\r\n }\r\n\r\n if (this.moduleType() === 'module') {\r\n return this.builderModuleId() ?? undefined;\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly previewLevelId = computed(() => {\r\n const previewLevelId = this.previewInfo()?.levelId;\r\n if (previewLevelId != null) {\r\n return previewLevelId;\r\n }\r\n\r\n // A level scope's own builder module id IS the level id; a module scope's\r\n // level id is its parent level (parentModuleId). `process-form-load` needs\r\n // the owning level id in both cases, so derive it rather than dropping it.\r\n if (this.moduleType() === 'level') {\r\n return this.builderModuleId() ?? undefined;\r\n }\r\n\r\n if (this.moduleType() === 'module' && this.parentModuleType() === 'level') {\r\n return this.builderParentModuleId() ?? undefined;\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly renderMode = computed<FormRenderMode | 'form'>(() => {\r\n const renderMode = this.formConfiguration()?.renderMode;\r\n if (\r\n renderMode === 'steps' ||\r\n renderMode === 'tabs' ||\r\n renderMode === 'wizard'\r\n )\r\n return this.formConfiguration()?.renderMode;\r\n if (renderMode === 'sections') return 'form';\r\n return undefined;\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\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"h-full min-h-0 overflow-y-auto px-3 pb-10\">\r\n @if (moduleKey() && operationKey()) {\r\n <mt-client-form\r\n [moduleKey]=\"moduleKey()\"\r\n [operationKey]=\"operationKey()\"\r\n [moduleId]=\"previewModuleId()\"\r\n [levelId]=\"previewLevelId()\"\r\n [levelDataId]=\"previewInfo()?.levelDataId\"\r\n [moduleDataId]=\"previewInfo()?.moduleDataId\"\r\n [requestSchemaId]=\"previewInfo()?.requestSchemaId\"\r\n [autoLoad]=\"true\"\r\n [renderMode]=\"renderMode()\"\r\n [forceOriginalForm]=\"true\"\r\n />\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 {\r\n Component,\r\n DestroyRef,\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, Validators } from '@angular/forms';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { startWith } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { RadioItem } from '@masterteam/components/radio-cards';\r\nimport { RadioCardsField } from '@masterteam/components/radio-cards-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n serializeTokens,\r\n tokenizeFormulaTemplate,\r\n type FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n type ValidationResult,\r\n} from '@masterteam/formula-builder';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\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\nconst EMPTY_FORMULA_VALIDATION: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n dependencies: [],\r\n complexity: 0,\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 RadioCardsField,\r\n FormulaBuilder,\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 readonly moduleType = this.facade.moduleType;\r\n readonly moduleId = this.facade.moduleId;\r\n readonly parentModuleId = this.facade.parentModuleId;\r\n readonly previewInfo = this.facade.previewInfo;\r\n\r\n readonly submitting = signal(false);\r\n readonly saveError = signal<string | null>(null);\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 nonNullable: true,\r\n validators: Validators.required,\r\n });\r\n readonly messageArControl = new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: Validators.required,\r\n });\r\n readonly severityControl = new FormControl<ValidationSeverity>('error', {\r\n nonNullable: true,\r\n });\r\n readonly formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n private readonly formulaValue = toSignal(\r\n this.formulaControl.valueChanges.pipe(startWith(this.formulaControl.value)),\r\n { initialValue: this.formulaControl.value },\r\n );\r\n private readonly messageEnStatus = toSignal(\r\n this.messageEnControl.statusChanges.pipe(\r\n startWith(this.messageEnControl.status),\r\n ),\r\n { initialValue: this.messageEnControl.status },\r\n );\r\n private readonly messageArStatus = toSignal(\r\n this.messageArControl.statusChanges.pipe(\r\n startWith(this.messageArControl.status),\r\n ),\r\n { initialValue: this.messageArControl.status },\r\n );\r\n readonly formulaValidation = signal<ValidationResult>(\r\n EMPTY_FORMULA_VALIDATION,\r\n );\r\n readonly builderSchemaId = computed(() => {\r\n const parentModuleId = this.toNumericId(this.parentModuleId());\r\n return parentModuleId ?? this.toNumericId(this.moduleId());\r\n });\r\n readonly builderModuleId = computed(() => {\r\n const parentModuleId = this.toNumericId(this.parentModuleId());\r\n if (parentModuleId === undefined) {\r\n return undefined;\r\n }\r\n\r\n return this.toNumericId(this.moduleId());\r\n });\r\n readonly builderContextEntityTypeKey = computed(() => {\r\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\r\n const moduleType = this.moduleType();\r\n\r\n if (moduleType === 'module') {\r\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\r\n return 'ModuleData';\r\n }\r\n }\r\n\r\n if (moduleType === 'level') {\r\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\r\n return 'LevelData';\r\n }\r\n }\r\n\r\n if (previewModuleKey) {\r\n return previewModuleKey;\r\n }\r\n\r\n if (moduleType === 'level') {\r\n return 'LevelData';\r\n }\r\n\r\n if (moduleType === 'module') {\r\n return 'ModuleData';\r\n }\r\n\r\n return undefined;\r\n });\r\n readonly formulaPropertiesByPath = computed(() => {\r\n const fields = this.availableFields();\r\n if (fields.length === 0) {\r\n return {};\r\n }\r\n\r\n return {\r\n Current: fields.map((field) => ({\r\n key: field.key,\r\n name: field.name,\r\n })),\r\n };\r\n });\r\n readonly hasFormula = computed(() => {\r\n const value = this.formulaValue();\r\n const expression = value?.expression?.trim() ?? '';\r\n return expression.length > 0 || (value?.builder?.length ?? 0) > 0;\r\n });\r\n readonly canSave = computed(() => {\r\n return (\r\n this.hasFormula() &&\r\n this.formulaValidation().isValid &&\r\n !this.submitting() &&\r\n this.messageEnStatus() === 'VALID' &&\r\n this.messageArStatus() === 'VALID'\r\n );\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(null);\r\n this.formulaValidation.set(EMPTY_FORMULA_VALIDATION);\r\n this.saveError.set(null);\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 const builder = this.parseStoredFormulaTokens(data.formulaTokens);\r\n const expression =\r\n data.formulaText?.trim() || serializeTokens(builder) || '';\r\n this.formulaControl.setValue({\r\n expression,\r\n builder,\r\n });\r\n this.formulaValidation.set(EMPTY_FORMULA_VALIDATION);\r\n this.saveError.set(null);\r\n });\r\n }\r\n\r\n onFormulaValidationChange(result: ValidationResult): void {\r\n this.formulaValidation.set(result);\r\n }\r\n\r\n onSave(): void {\r\n const formulaValue = this.formulaValue();\r\n const formulaPayload = this.buildFormulaPayload(formulaValue);\r\n\r\n if (!formulaPayload || !this.formulaValidation().isValid) {\r\n return;\r\n }\r\n\r\n const payload = {\r\n formulaTokens: formulaPayload.formulaTokens,\r\n formulaText: formulaPayload.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 this.saveError.set(null);\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: (error) => this.handleSaveError(error),\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: (error) => this.handleSaveError(error),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n private toNumericId(\r\n value: string | number | null | undefined,\r\n ): number | undefined {\r\n if (value === null || value === undefined) {\r\n return undefined;\r\n }\r\n\r\n const numericValue = Number(value);\r\n return Number.isFinite(numericValue) ? numericValue : undefined;\r\n }\r\n\r\n private parseStoredFormulaTokens(\r\n value: string | null | undefined,\r\n ): FormulaToken[] {\r\n const normalized = value?.trim();\r\n if (!normalized) {\r\n return [];\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(normalized);\r\n return Array.isArray(parsed) ? (parsed as FormulaToken[]) : [];\r\n } catch {\r\n // Support legacy rows that stored raw expression text instead of token JSON.\r\n return tokenizeFormulaTemplate(normalized);\r\n }\r\n }\r\n\r\n private buildFormulaPayload(\r\n value: FormulaBuilderValue | null,\r\n ): { formulaTokens: string; formulaText: string } | null {\r\n const expression = value?.expression?.trim() ?? '';\r\n let builder = Array.isArray(value?.builder) ? value.builder : [];\r\n\r\n if (builder.length === 0 && expression) {\r\n builder = tokenizeFormulaTemplate(expression);\r\n }\r\n\r\n const formulaText = expression || serializeTokens(builder);\r\n if (!formulaText || builder.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n formulaTokens: JSON.stringify(builder),\r\n formulaText,\r\n };\r\n }\r\n\r\n private handleSaveError(error: any): void {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to save validation rule';\r\n\r\n this.submitting.set(false);\r\n this.saveError.set(message);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\r\n [class]=\"[\r\n modalService.contentClass,\r\n 'min-w-0',\r\n 'p-4',\r\n 'overflow-y-hidden!',\r\n 'max-[640px]:p-3',\r\n ]\"\r\n >\r\n <div class=\"mt-4 flex h-full min-h-0 flex-col gap-4 overflow-y-auto pb-10\">\r\n <mt-formula-builder\r\n [placeholder]=\"t('validation-formula-placeholder')\"\r\n [formControl]=\"formulaControl\"\r\n [levelSchemaId]=\"builderSchemaId()\"\r\n [moduleId]=\"builderModuleId()\"\r\n [contextEntityTypeKey]=\"builderContextEntityTypeKey()\"\r\n [propertiesByPath]=\"formulaPropertiesByPath()\"\r\n (validationChange)=\"onFormulaValidationChange($event)\"\r\n />\r\n <div class=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\r\n <mt-text-field\r\n [label]=\"t('message-en')\"\r\n [placeholder]=\"t('message-en')\"\r\n [formControl]=\"messageEnControl\"\r\n [required]=\"true\"\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 [required]=\"true\"\r\n />\r\n </div>\r\n <mt-radio-cards-field\r\n [label]=\"t('severity')\"\r\n [hint]=\"t('severity-hint')\"\r\n [options]=\"severityOptions()\"\r\n [formControl]=\"severityControl\"\r\n />\r\n @if (saveError(); as error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700\"\r\n >\r\n {{ error }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"[\r\n modalService.footerClass,\r\n '!h-auto',\r\n 'min-h-0',\r\n 'flex-col',\r\n 'gap-2',\r\n 'sm:flex-row',\r\n 'sm:items-center',\r\n 'sm:justify-end',\r\n ]\"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"submitting()\"\r\n styleClass=\"w-full sm:w-auto\"\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 [disabled]=\"!canSave()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { Component, DestroyRef, computed, inject, signal } from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Button } from '@masterteam/components/button';\nimport {\n Table,\n ColumnDef,\n TableAction,\n CellChangeEvent,\n} from '@masterteam/components/table';\nimport { ModalService } from '@masterteam/components/modal';\nimport { FormBuilderFacade } from '../../store/form-builder';\nimport {\n FBValidationRuleForm,\n ValidationFieldProperty,\n} from '../fb-validation-rule-form/fb-validation-rule-form';\nimport type { ValidationRule } from '../../store/form-builder/form-builder.model';\n\n@Component({\n selector: 'mt-fb-validation-rules',\n standalone: true,\n imports: [TranslocoDirective, Table, Button],\n templateUrl: './fb-validation-rules.html',\n})\nexport class FBValidationRules {\n protected readonly modalService = inject(ModalService);\n private readonly facade = inject(FormBuilderFacade);\n private readonly transloco = inject(TranslocoService);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly validations = this.facade.validations;\n readonly sections = this.facade.sections;\n readonly properties = this.facade.properties;\n\n readonly activeLang = signal<'en' | 'ar'>(\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\n );\n\n private readonly propertiesMap = computed(() => {\n const map = new Map<string, any>();\n for (const prop of this.properties()) {\n map.set(prop.key, prop);\n }\n return map;\n });\n\n readonly availableFields = computed<ValidationFieldProperty[]>(() => {\n const sections = this.sections();\n const propsMap = this.propertiesMap();\n const lang = this.activeLang();\n const fields: ValidationFieldProperty[] = [];\n\n for (const section of sections) {\n for (const field of section.fields) {\n const prop = field.property ?? propsMap.get(field.propertyKey);\n const name = this.resolvePropertyName(prop, field.propertyKey, lang);\n\n fields.push({\n key: field.propertyKey,\n name,\n type: prop?.viewType || 'text',\n });\n }\n }\n\n return fields;\n });\n\n readonly tableRows = computed(() => {\n const lang = this.activeLang();\n return this.validations().map((rule) => ({\n ...rule,\n messageText: rule.message?.[lang] ?? rule.message?.en ?? '',\n }));\n });\n\n readonly tableColumns = computed<ColumnDef[]>(() => {\n const _lang = this.activeLang();\n return [\n {\n key: 'messageText',\n label: this.transloco.translate('formBuilder.validation-message'),\n },\n {\n key: 'enabled',\n label: this.transloco.translate('formBuilder.validation-active'),\n type: 'boolean',\n },\n ];\n });\n\n readonly rowActions = computed<TableAction[]>(() => {\n const _lang = this.activeLang();\n return [\n {\n icon: 'custom.pencil',\n tooltip: this.transloco.translate('formBuilder.edit-validation-rule'),\n action: (row: ValidationRule) => this.openEdit(row),\n },\n {\n icon: 'general.trash-01',\n tooltip: this.transloco.translate('formBuilder.delete'),\n action: (row: ValidationRule) => this.deleteRule(row),\n confirmation: {\n type: 'popup',\n confirmationType: 'delete',\n },\n },\n ];\n });\n\n constructor() {\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((lang) => {\n this.activeLang.set((lang as 'en' | 'ar') ?? 'en');\n });\n }\n\n private resolvePropertyName(\n property: any,\n fallbackKey: string,\n lang: 'en' | 'ar',\n ): string {\n if (!property) {\n return `Property ${fallbackKey}`;\n }\n\n const name = property?.name as string | Record<string, string> | undefined;\n if (typeof name === 'string') {\n return name;\n }\n\n const display = name?.['display'];\n if (typeof display === 'string' && display.trim().length > 0) {\n return display;\n }\n\n const localized = name?.[lang] ?? name?.['en'] ?? name?.['ar'];\n if (typeof localized === 'string' && localized.trim().length > 0) {\n return localized;\n }\n\n return property?.key ?? `Property ${fallbackKey}`;\n }\n\n openCreate(): void {\n this.modalService.openModal(FBValidationRuleForm, 'drawer', {\n header: this.transloco.translate('formBuilder.add-validation-rule'),\n styleClass: '!absolute !shadow-none !w-full !max-w-full lg:!w-[65%]',\n position: 'start',\n modal: true,\n dismissible: true,\n appendTo: '#page-content',\n inputValues: {\n availableFields: this.availableFields(),\n },\n });\n }\n\n openEdit(row: ValidationRule): void {\n this.modalService.openModal(FBValidationRuleForm, 'drawer', {\n header: this.transloco.translate('formBuilder.edit-validation-rule'),\n styleClass: '!absolute !shadow-none !w-full !max-w-full lg:!w-[65%]',\n position: 'start',\n modal: true,\n dismissible: true,\n appendTo: '#page-content',\n inputValues: {\n initialData: row,\n availableFields: this.availableFields(),\n },\n });\n }\n\n deleteRule(row: ValidationRule): void {\n this.facade.deleteValidation(row.id).subscribe();\n }\n\n onCellChange(event: CellChangeEvent): void {\n if (event.column !== 'enabled') return;\n\n this.facade\n .toggleValidationActive(event.row.id, { enabled: event.value })\n .subscribe();\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\n <div\n [class]=\"[\n modalService.contentClass,\n 'min-w-0',\n 'p-4',\n 'overflow-y-auto',\n 'max-[640px]:p-3',\n ]\"\n >\n <div class=\"flex justify-end pb-4 max-[640px]:justify-stretch\">\n <mt-button\n [label]=\"t('add-validation-rule')\"\n severity=\"primary\"\n variant=\"outlined\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"openCreate()\"\n ></mt-button>\n </div>\n <mt-table\n noCard\n [data]=\"tableRows()\"\n [columns]=\"tableColumns()\"\n [rowActions]=\"rowActions()\"\n storageKey=\"fb-validation-rules-table\"\n (cellChange)=\"onCellChange($event)\"\n ></mt-table>\n </div>\n</ng-container>\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, catchError, map, of } from 'rxjs';\nimport type { PropertyItem } from '../../store/form-builder/form-builder.model';\n\nexport interface ContextNavigationPath {\n contextKey: string;\n contextType?: string;\n contextId?: string | number;\n key?: string;\n name?: string;\n distance?: number;\n}\n\nexport interface ContextNavigationPaths {\n parent?: ContextNavigationPath[];\n children?: ContextNavigationPath[];\n ancestors?: ContextNavigationPath[];\n descendants?: ContextNavigationPath[];\n related?: ContextNavigationPath[];\n hostContext?: ContextNavigationPath | null;\n siblingContexts?: ContextNavigationPath[];\n}\n\nexport interface ContextResolveResponse {\n currentState?: {\n contextType?: string;\n contextId?: string | number;\n contextPath?: string;\n instanceId?: string | number | null;\n };\n navigationPaths?: ContextNavigationPaths;\n properties?: PropertyItem[];\n propertyValuesBatch?: unknown;\n connectionMetadata?: unknown;\n relatedContextValues?: Record<string, unknown>;\n}\n\nexport interface ContextResolveOptions {\n displayTags?: string[];\n propertyFlags?: number | string;\n matchAllTags?: boolean;\n includeVirtual?: boolean;\n includeNavigationPaths?: boolean;\n includeConnectionMetadata?: boolean;\n includeRelatedContextValues?: boolean;\n relatedContextsToInclude?: string[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class FormBuilderContextService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = 'context';\n\n /**\n * Resolves context data including navigation paths and properties.\n * No caching - always fetches fresh data.\n */\n resolveContext(\n contextKey: string,\n options: ContextResolveOptions = {},\n ): Observable<ContextResolveResponse | null> {\n if (!contextKey) return of(null);\n\n return this.http\n .post<any>(`${this.baseUrl}/resolve`, {\n contextKey,\n displayTags: options.displayTags,\n propertyFlags: options.propertyFlags,\n matchAllTags: options.matchAllTags,\n includeVirtual: options.includeVirtual,\n includeNavigationPaths: options.includeNavigationPaths,\n includeConnectionMetadata: options.includeConnectionMetadata,\n includeRelatedContextValues: options.includeRelatedContextValues,\n relatedContextsToInclude: options.relatedContextsToInclude,\n })\n .pipe(\n map((response) => this.normalizeResponse(response)),\n catchError((error) => {\n console.warn('Failed to resolve context:', error);\n return of(null);\n }),\n );\n }\n\n /**\n * Gets properties for a context.\n * No caching - always fetches fresh data.\n */\n getProperties(\n contextKey: string,\n options: ContextResolveOptions = {},\n ): Observable<PropertyItem[]> {\n if (!contextKey) return of([]);\n\n return this.resolveContext(contextKey, options).pipe(\n map((resolved) => resolved?.properties ?? []),\n );\n }\n\n private normalizeResponse(response: any): ContextResolveResponse | null {\n const payload = response?.data ?? response;\n if (!payload) return null;\n\n const properties = this.normalizeProperties(payload.properties ?? []);\n\n return {\n ...payload,\n properties,\n };\n }\n\n private normalizeProperties(raw: any[]): PropertyItem[] {\n return (raw ?? [])\n .map((prop) => {\n const key = prop?.key ?? prop?.propertyKey;\n if (!key) return null;\n const name = prop?.name ?? prop?.displayName ?? key;\n return {\n ...prop,\n key,\n name,\n } as PropertyItem;\n })\n .filter((prop): prop is PropertyItem => Boolean(prop));\n }\n}\n","import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n effect,\r\n viewChildren,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\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 { Popover, PopoverModule } from 'primeng/popover';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { SelectField } from '@masterteam/components/select-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 FormBuilderMode,\r\n FormRenderMode,\r\n ReorderSectionPayload,\r\n} from '../store/form-builder/form-builder.model';\r\n\r\nconst SECTIONS_DROP_LIST_ID = 'sections-list';\r\nimport {\r\n CdkDragDrop,\r\n DragDropModule,\r\n type CdkDrag,\r\n} 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\nimport {\r\n FormBuilderContextService,\r\n type ContextNavigationPath,\r\n type ContextResolveResponse,\r\n} from './services/form-builder-context.service';\r\n\r\n// ============================================================================\r\n// Types & Constants\r\n// ============================================================================\r\n\r\ntype ScopeKey =\r\n | 'Current'\r\n | 'Host'\r\n | 'Parent'\r\n | 'Ancestors'\r\n | 'Children'\r\n | 'Descendants'\r\n | 'Related'\r\n | 'Siblings';\r\ntype PathToken = Exclude<ScopeKey, 'Current'>;\r\n\r\ninterface ContextOption {\r\n contextKey: string;\r\n label: string;\r\n}\r\n\r\ninterface PathSegment {\r\n token: PathToken;\r\n value: string;\r\n label: string;\r\n}\r\n\r\nconst SCOPE_ORDER: ScopeKey[] = [\r\n 'Current',\r\n 'Host',\r\n 'Parent',\r\n // 'Ancestors',\r\n // 'Children',\r\n // 'Descendants',\r\n // 'Related',\r\n // 'Siblings',\r\n];\r\nconst PATH_TOKENS: PathToken[] = [\r\n 'Parent',\r\n 'Ancestors',\r\n 'Children',\r\n 'Descendants',\r\n 'Related',\r\n 'Siblings',\r\n 'Host',\r\n];\r\n// ============================================================================\r\n// Component\r\n// ============================================================================\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 PopoverModule,\r\n Button,\r\n Card,\r\n TextField,\r\n SelectField,\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 implements OnInit {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly activeLang = toSignal(this.translocoService.langChanges$, {\r\n initialValue: this.translocoService.getActiveLang(),\r\n });\r\n protected readonly facade = inject(FormBuilderFacade);\r\n private readonly contextService = inject(FormBuilderContextService);\r\n private readonly popovers = viewChildren(Popover);\r\n\r\n /** Extra CSS class(es) applied to the main canvas wrapper div. */\r\n readonly canvasStyleClass = input<string>('');\r\n\r\n /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write permissions only). */\r\n readonly mode = input<FormBuilderMode>('builder');\r\n\r\n /** Controls the draggable properties sidebar independently from the main builder canvas. */\r\n readonly showPropertiesSection = input(true, { transform: booleanAttribute });\r\n\r\n private dialogRef: any;\r\n\r\n // ============================================================================\r\n // Facade State\r\n // ============================================================================\r\n\r\n readonly sections = this.facade.sections;\r\n readonly formConfiguration = this.facade.formConfiguration;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly isUpdatingFormSettings = this.facade.isUpdatingFormSettings;\r\n readonly error = this.facade.formConfigurationError;\r\n readonly moduleType = this.facade.moduleType;\r\n readonly moduleId = this.facade.moduleId;\r\n readonly parentPath = this.facade.parentPath;\r\n\r\n // ============================================================================\r\n // UI State (Simple Signals)\r\n // ============================================================================\r\n\r\n readonly activeScope = signal<ScopeKey>('Current');\r\n readonly searchQuery = signal('');\r\n readonly isContextLoading = signal(false);\r\n\r\n // Initial context data (from first load)\r\n private readonly initialContext = signal<ContextResolveResponse | null>(null);\r\n private readonly currentProperties = signal<PropertyItem[]>([]);\r\n\r\n // Non-current scope state (reset on tab change)\r\n readonly scopeLoading = signal(false);\r\n readonly scopeProperties = signal<PropertyItem[]>([]);\r\n readonly scopePath = signal<PathSegment[]>([]);\r\n private scopeNavigation = signal<ContextResolveResponse | null>(null);\r\n\r\n // Request tracking\r\n private initialRequestId = 0;\r\n private scopeRequestId = 0;\r\n private lastFormConfigurationContextKey = '';\r\n private lastResolvedContextKey = '';\r\n private hasResolvedContextState = false;\r\n private initialContextStateCleared = false;\r\n\r\n // ============================================================================\r\n // Computed Values\r\n // ============================================================================\r\n\r\n private readonly contextKey = computed(() => {\r\n const type = this.moduleType();\r\n const id = this.moduleId();\r\n const parent = this.parentPath();\r\n if (!type || id === null || id === undefined) return '';\r\n\r\n const segments: string[] = [];\r\n const raw = parent.split('/').filter(Boolean);\r\n for (let i = 0; i < raw.length; i += 2) {\r\n if (raw[i] && raw[i + 1] !== undefined) {\r\n segments.push(`${raw[i]}:${raw[i + 1]}`);\r\n }\r\n }\r\n segments.push(`${type}:${id}`);\r\n return segments.join('/');\r\n });\r\n\r\n readonly propertiesSectionVisible = computed(() => {\r\n const mode = this.mode();\r\n return mode !== 'manageProperties';\r\n });\r\n\r\n private readonly usedPropertyKeys = computed(() => {\r\n return new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyKey)),\r\n );\r\n });\r\n\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<string, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.key, prop);\r\n }\r\n return map;\r\n });\r\n\r\n /** Navigation options from initial context */\r\n readonly baseScopeContexts = computed<Record<ScopeKey, ContextOption[]>>(\r\n () => {\r\n const ctx = this.initialContext();\r\n const nav = ctx?.navigationPaths;\r\n const currentKey = ctx?.currentState?.contextPath ?? this.contextKey();\r\n\r\n return {\r\n Current: currentKey\r\n ? [this.createContextOption(currentKey, ctx?.currentState)]\r\n : [],\r\n Host: nav?.hostContext\r\n ? [this.createContextOption(nav.hostContext)]\r\n : [],\r\n Parent: this.mergeContextOptions(nav?.parent),\r\n Ancestors: this.mergeContextOptions(nav?.ancestors),\r\n Children: this.mergeContextOptions(nav?.children),\r\n Descendants: this.mergeContextOptions(nav?.descendants),\r\n Related: this.mergeContextOptions(nav?.related),\r\n Siblings: this.mergeContextOptions(nav?.siblingContexts),\r\n };\r\n },\r\n );\r\n\r\n /** Available scope tabs */\r\n readonly scopeOptions = computed(() => {\r\n if (!this.propertiesSectionVisible()) return [];\r\n\r\n const contexts = this.baseScopeContexts();\r\n return SCOPE_ORDER.filter((s) => (contexts[s] ?? []).length > 0).map(\r\n (s) => ({\r\n key: s,\r\n label: this.getScopeLabel(s),\r\n }),\r\n );\r\n });\r\n\r\n readonly fieldDropListIds = computed(() =>\r\n this.sections().map((section) => section.id),\r\n );\r\n\r\n private readonly toolboxDropListIds = computed(() =>\r\n this.propertiesSectionVisible()\r\n ? this.scopeOptions().map((scope) => `toolbox-${scope.key}`)\r\n : [],\r\n );\r\n\r\n readonly fieldDropListConnections = computed(() => [\r\n ...this.fieldDropListIds(),\r\n ...this.toolboxDropListIds(),\r\n ]);\r\n\r\n /** Enriched sections for display */\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = this.activeLang() 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 =\r\n propsMap.get(field.propertyKey) ??\r\n field.property ??\r\n field.propertyMetadata;\r\n return {\r\n ...field,\r\n name: this.resolvePropertyName(prop, field.propertyKey, lang),\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n readonly selectedRenderMode = computed<FormRenderMode>(() => {\r\n return this.formConfiguration()?.renderMode ?? 'sections';\r\n });\r\n\r\n readonly renderModeOptions = computed(() => [\r\n {\r\n label: this.translocoService.translate('formBuilder.sections'),\r\n value: 'sections' as const,\r\n icon: 'layout.layers-three-01',\r\n color: '#0284c7',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.steps'),\r\n value: 'steps' as const,\r\n icon: 'layout.list',\r\n color: '#0f766e',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.tabs'),\r\n value: 'tabs' as const,\r\n icon: 'layout.layout-top',\r\n color: '#d97706',\r\n },\r\n {\r\n label: this.translocoService.translate('formBuilder.wizard'),\r\n value: 'wizard' as const,\r\n icon: 'general.check-square-broken',\r\n color: '#7c3aed',\r\n },\r\n ]);\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n constructor() {\r\n // Effect: watch context/sidebar visibility changes and load only data the UI uses.\r\n effect(() => {\r\n this.syncContextData();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.syncContextData();\r\n }\r\n\r\n private syncContextData(): void {\r\n const key = this.contextKey();\r\n if (!key) {\r\n this.lastFormConfigurationContextKey = '';\r\n this.clearInitialContextState();\r\n return;\r\n }\r\n\r\n if (\r\n this.mode() === 'manageProperties' &&\r\n key !== this.lastFormConfigurationContextKey\r\n ) {\r\n this.lastFormConfigurationContextKey = key;\r\n this.facade.getFormConfiguration();\r\n }\r\n\r\n if (!this.propertiesSectionVisible()) {\r\n this.clearInitialContextState();\r\n return;\r\n }\r\n\r\n if (key === this.lastResolvedContextKey) return;\r\n\r\n this.lastResolvedContextKey = key;\r\n this.loadInitialContext(key);\r\n }\r\n\r\n // ============================================================================\r\n // Initial Context Loading\r\n // ============================================================================\r\n\r\n private loadInitialContext(contextKey: string): void {\r\n const requestId = ++this.initialRequestId;\r\n\r\n this.hasResolvedContextState = true;\r\n this.initialContextStateCleared = false;\r\n this.isContextLoading.set(true);\r\n this.initialContext.set(null);\r\n this.currentProperties.set([]);\r\n this.resetScopeState();\r\n this.activeScope.set('Current');\r\n\r\n this.contextService\r\n .resolveContext(contextKey, {\r\n propertyFlags: 'None',\r\n includeVirtual: true,\r\n includeNavigationPaths: true,\r\n includeConnectionMetadata: true,\r\n matchAllTags: true,\r\n includeRelatedContextValues: true,\r\n })\r\n .subscribe((response) => {\r\n if (requestId !== this.initialRequestId) return;\r\n\r\n this.isContextLoading.set(false);\r\n this.initialContext.set(response);\r\n this.currentProperties.set(response?.properties ?? []);\r\n this.facade.setProperties(response?.properties ?? []);\r\n });\r\n }\r\n\r\n private clearInitialContextState(): void {\r\n if (\r\n this.initialContextStateCleared &&\r\n !this.hasResolvedContextState &&\r\n !this.lastResolvedContextKey\r\n ) {\r\n return;\r\n }\r\n\r\n if (this.hasResolvedContextState || this.lastResolvedContextKey) {\r\n ++this.initialRequestId;\r\n }\r\n ++this.scopeRequestId;\r\n this.lastResolvedContextKey = '';\r\n this.hasResolvedContextState = false;\r\n this.initialContextStateCleared = true;\r\n this.isContextLoading.set(false);\r\n this.initialContext.set(null);\r\n this.currentProperties.set([]);\r\n this.facade.setProperties([]);\r\n this.resetScopeState();\r\n this.activeScope.set('Current');\r\n }\r\n\r\n // ============================================================================\r\n // Tab Change Handler (Called from template)\r\n // ============================================================================\r\n\r\n onScopeChange(scope: ScopeKey): void {\r\n if (scope === this.activeScope()) return;\r\n\r\n this.activeScope.set(scope);\r\n this.resetScopeState();\r\n\r\n if (scope === 'Current') {\r\n return;\r\n }\r\n\r\n // Get first context option for this scope\r\n const options = this.baseScopeContexts()[scope] ?? [];\r\n if (options.length === 0) return;\r\n\r\n const firstOption = options[0];\r\n this.scopePath.set([\r\n {\r\n token: scope as PathToken,\r\n value: firstOption.contextKey,\r\n label: firstOption.label,\r\n },\r\n ]);\r\n this.loadScopeContext(firstOption.contextKey);\r\n }\r\n\r\n // ============================================================================\r\n // Scope Context Loading\r\n // ============================================================================\r\n\r\n private loadScopeContext(contextKey: string): void {\r\n const requestId = ++this.scopeRequestId;\r\n this.scopeLoading.set(true);\r\n\r\n this.contextService\r\n .resolveContext(contextKey, {\r\n propertyFlags: 'None',\r\n includeVirtual: true,\r\n includeNavigationPaths: true,\r\n includeConnectionMetadata: true,\r\n matchAllTags: true,\r\n includeRelatedContextValues: true,\r\n })\r\n .subscribe((response) => {\r\n if (requestId !== this.scopeRequestId) return;\r\n\r\n this.scopeLoading.set(false);\r\n this.scopeNavigation.set(response);\r\n this.scopeProperties.set(response?.properties ?? []);\r\n });\r\n }\r\n\r\n private resetScopeState(): void {\r\n this.scopeLoading.set(false);\r\n this.scopeProperties.set([]);\r\n this.scopePath.set([]);\r\n this.scopeNavigation.set(null);\r\n this.hideAllPopovers();\r\n }\r\n\r\n // ============================================================================\r\n // Path Segment Methods (accept scope parameter for template compatibility)\r\n // ============================================================================\r\n\r\n getScopeBaseContexts(scope: ScopeKey): ContextOption[] {\r\n return this.baseScopeContexts()[scope] ?? [];\r\n }\r\n\r\n /** Template calls this with scope.key */\r\n getScopePath(_scope?: ScopeKey): PathSegment[] {\r\n return this.scopePath();\r\n }\r\n\r\n getTokenLabel(token: PathToken): string {\r\n return this.getScopeLabel(token);\r\n }\r\n\r\n getScopeSegmentLabel(_scope: ScopeKey, index: number): string {\r\n const path = this.scopePath();\r\n const segment = path[index];\r\n if (!segment?.value) return `Select ${this.getTokenLabel(segment?.token)}`;\r\n\r\n // Use stored label - don't look up from options (which change on resolve)\r\n return segment.label || this.formatContextKey(segment.value);\r\n }\r\n\r\n getScopeSegmentOptions(_scope: ScopeKey, index: number): ContextOption[] {\r\n const path = this.scopePath();\r\n const segment = path[index];\r\n if (!segment) return [];\r\n\r\n if (index === 0) {\r\n return this.getScopeBaseContexts(this.activeScope());\r\n }\r\n\r\n const nav = this.scopeNavigation();\r\n return this.getNavigationOptionsByToken(nav, segment.token);\r\n }\r\n\r\n setScopeSegmentValue(\r\n _scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n label?: string,\r\n ): void {\r\n const path = this.scopePath();\r\n const newPath = path.slice(0, index + 1);\r\n if (newPath[index]) {\r\n // Store label at selection time so it doesn't change on resolve\r\n const segmentLabel =\r\n label || this.findOptionLabel(_scope, index, contextKey);\r\n newPath[index] = {\r\n ...newPath[index],\r\n value: contextKey,\r\n label: segmentLabel,\r\n };\r\n }\r\n this.scopePath.set(newPath);\r\n this.loadScopeContext(contextKey);\r\n }\r\n\r\n private findOptionLabel(\r\n _scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n ): string {\r\n const options = this.getScopeSegmentOptions(_scope, index);\r\n const option = options.find((o) => o.contextKey === contextKey);\r\n return option?.label ?? this.formatContextKey(contextKey);\r\n }\r\n\r\n /** Template handler: hide popover first, then set value (like formula-builder) */\r\n onSetScopeSegmentValue(\r\n scope: ScopeKey,\r\n index: number,\r\n contextKey: string,\r\n popover: { hide: () => void },\r\n ): void {\r\n popover.hide();\r\n this.setScopeSegmentValue(scope, index, contextKey);\r\n }\r\n\r\n addScopeSegment(_scope: ScopeKey, token: PathToken): void {\r\n const path = this.scopePath();\r\n this.scopePath.set([...path, { token, value: '', label: '' }]);\r\n }\r\n\r\n /** Template handler: hide popover first, then add segment (like formula-builder) */\r\n onAddScopeSegment(\r\n scope: ScopeKey,\r\n token: PathToken,\r\n popover: { hide: () => void },\r\n ): void {\r\n popover.hide();\r\n this.addScopeSegment(scope, token);\r\n }\r\n\r\n getScopeNextTokens(_scope?: ScopeKey): PathToken[] {\r\n const path = this.scopePath();\r\n const last = path[path.length - 1];\r\n if (!last?.value) return [];\r\n\r\n const nav = this.scopeNavigation();\r\n if (!nav) return [];\r\n\r\n return PATH_TOKENS.filter(\r\n (t) => this.getNavigationOptionsByToken(nav, t).length > 0,\r\n );\r\n }\r\n\r\n canAddNextScopeSegment(_scope?: ScopeKey): boolean {\r\n const path = this.scopePath();\r\n if (path.length === 0) return false;\r\n if (!path.every((s) => Boolean(s.value))) return false;\r\n return this.getScopeNextTokens().length > 0;\r\n }\r\n\r\n canRemoveScopePath(_scope?: ScopeKey): boolean {\r\n return this.scopePath().length > 1;\r\n }\r\n\r\n removeScopePath(_scope?: ScopeKey): void {\r\n const path = this.scopePath();\r\n if (path.length <= 1) return;\r\n\r\n const newPath = path.slice(0, -1);\r\n this.scopePath.set(newPath);\r\n\r\n const last = newPath[newPath.length - 1];\r\n if (last?.value) {\r\n this.loadScopeContext(last.value);\r\n }\r\n }\r\n\r\n /** Template-compatible version (returns properties array for the scope) */\r\n getScopeProperties(_scope?: ScopeKey): PropertyItem[] {\r\n const scope = _scope ?? this.activeScope();\r\n return scope === 'Current'\r\n ? this.currentProperties()\r\n : this.scopeProperties();\r\n }\r\n\r\n // ============================================================================\r\n // Property Methods (accept scope parameter for template compatibility)\r\n // ============================================================================\r\n\r\n getFilteredProperties(_scope?: ScopeKey): PropertyItem[] {\r\n const scope = _scope ?? this.activeScope();\r\n const used = this.usedPropertyKeys();\r\n const query = this.searchQuery().toLowerCase().trim();\r\n const properties =\r\n scope === 'Current' ? this.currentProperties() : this.scopeProperties();\r\n\r\n let available = properties.filter((p) => !used.has(p.key));\r\n if (query) {\r\n available = available.filter((p) =>\r\n this.getPropertyLabel(p).toLowerCase().includes(query),\r\n );\r\n }\r\n return available;\r\n }\r\n\r\n isScopePropertiesLoading(_scope?: ScopeKey): boolean {\r\n const scope = _scope ?? this.activeScope();\r\n return scope !== 'Current' && this.scopeLoading();\r\n }\r\n\r\n getPropertyLabel(property: PropertyItem): string {\r\n const lang = this.activeLang() as 'en' | 'ar';\r\n return this.resolvePropertyName(property, property.key, lang);\r\n }\r\n\r\n // ============================================================================\r\n // Helper Methods\r\n // ============================================================================\r\n\r\n private hideAllPopovers(): void {\r\n for (const popover of this.popovers()) {\r\n popover.hide();\r\n }\r\n }\r\n\r\n private getScopeLabel(scope: ScopeKey | PathToken): string {\r\n const translationKey =\r\n scope === 'Host' && this.moduleType()?.toLowerCase() === 'module'\r\n ? 'formBuilder.scope-level'\r\n : 'formBuilder.scope-' + scope.toLowerCase();\r\n\r\n return this.translocoService.translate(translationKey);\r\n }\r\n\r\n private getNavigationOptionsByToken(\r\n response: ContextResolveResponse | null,\r\n token: PathToken,\r\n ): ContextOption[] {\r\n const nav = response?.navigationPaths;\r\n if (!nav) return [];\r\n\r\n switch (token) {\r\n case 'Parent':\r\n return this.mergeContextOptions(nav.parent);\r\n case 'Ancestors':\r\n return this.mergeContextOptions(nav.ancestors);\r\n case 'Children':\r\n return this.mergeContextOptions(nav.children);\r\n case 'Descendants':\r\n return this.mergeContextOptions(nav.descendants);\r\n case 'Related':\r\n return this.mergeContextOptions(nav.related);\r\n case 'Siblings':\r\n return this.mergeContextOptions(nav.siblingContexts);\r\n case 'Host':\r\n return nav.hostContext\r\n ? [this.createContextOption(nav.hostContext)]\r\n : [];\r\n default:\r\n return [];\r\n }\r\n }\r\n\r\n private resolvePropertyName(\r\n property: PropertyItem | undefined,\r\n fallbackKey: string,\r\n lang: 'en' | 'ar',\r\n ): string {\r\n if (!property) return `Property ${fallbackKey}`;\r\n\r\n const name = property.name as string | Record<string, string> | undefined;\r\n if (typeof name === 'string') return name;\r\n\r\n const display = name?.['display'];\r\n if (typeof display === 'string' && display.trim()) return display;\r\n\r\n const localized = name?.[lang] ?? name?.['en'] ?? name?.['ar'];\r\n if (typeof localized === 'string' && localized.trim()) return localized;\r\n\r\n return property.key ?? `Property ${fallbackKey}`;\r\n }\r\n\r\n private createContextOption(\r\n pathOrKey: ContextNavigationPath | string,\r\n currentState?: ContextResolveResponse['currentState'],\r\n ): ContextOption {\r\n if (typeof pathOrKey === 'string') {\r\n return {\r\n contextKey: pathOrKey,\r\n label: this.formatContextLabel({\r\n contextKey: pathOrKey,\r\n contextType: currentState?.contextType,\r\n contextId: currentState?.contextId,\r\n }),\r\n };\r\n }\r\n return {\r\n contextKey: pathOrKey.contextKey,\r\n label: this.formatContextLabel(pathOrKey),\r\n };\r\n }\r\n\r\n private formatContextLabel(path: Partial<ContextNavigationPath>): string {\r\n // Just return the name - no path formatting needed\r\n if (path.name) return path.name;\r\n if (path.key) return path.key;\r\n if (path.contextType && path.contextId !== undefined)\r\n return `${path.contextType} ${path.contextId}`;\r\n return path.contextKey || 'Context';\r\n }\r\n\r\n private formatContextKey(contextKey: string): string {\r\n return contextKey\r\n .split('/')\r\n .filter(Boolean)\r\n .map((seg) => {\r\n const [type, id] = seg.split(':');\r\n return id !== undefined ? `${type} ${id}` : type;\r\n })\r\n .join(' / ');\r\n }\r\n\r\n private mergeContextOptions(\r\n items?: ContextNavigationPath[],\r\n ): ContextOption[] {\r\n if (!items?.length) return [];\r\n const seen = new Set<string>();\r\n return items\r\n .slice()\r\n .sort((a, b) => (a.distance ?? 0) - (b.distance ?? 0))\r\n .filter((item) => {\r\n if (!item?.contextKey || seen.has(item.contextKey)) return false;\r\n seen.add(item.contextKey);\r\n return true;\r\n })\r\n .map((item) => this.createContextOption(item));\r\n }\r\n\r\n // ============================================================================\r\n // Drag & Drop\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 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 this.facade.reorderFields(\r\n targetSectionId,\r\n fields.map((f, i) => ({ id: f.id, order: i })),\r\n );\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n const prop = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyKey: prop.key,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(event.previousContainer.id, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n dropSection(event: CdkDragDrop<EnrichedFormSection[]>): void {\r\n if (event.previousIndex === event.currentIndex) return;\r\n\r\n const sections = [...event.container.data];\r\n const [movedSection] = sections.splice(event.previousIndex, 1);\r\n sections.splice(event.currentIndex, 0, movedSection);\r\n\r\n const payload: ReorderSectionPayload[] = sections.map((s, i) => ({\r\n id: s.id,\r\n order: i,\r\n }));\r\n this.facade.reorderSections(payload);\r\n }\r\n\r\n /** Sections list only accepts other sections — block fields/properties from dropping in. */\r\n sectionsDropPredicate = (drag: CdkDrag): boolean => {\r\n return drag.dropContainer.id === SECTIONS_DROP_LIST_ID;\r\n };\r\n\r\n // ============================================================================\r\n // Modal Actions\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 styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[30rem] xl:!w-[27%]',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: { sectionsCount: this.sections().length },\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: '!absolute !shadow-none !w-full !max-w-full lg:!w-[79%]',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n });\r\n }\r\n\r\n onRenderModeChange(renderMode: FormRenderMode): void {\r\n if (renderMode === this.selectedRenderMode()) return;\r\n this.facade.updateFormSettings({ renderMode });\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:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[32rem] xl:!w-[35%]',\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: () => this.facade.resetFormConfiguration(),\r\n });\r\n }\r\n\r\n noReturnPredicate = (): boolean => false;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\n <div\n cdkScrollable\n class=\"flex h-full w-full gap-7 overflow-hidden max-[1025px]:min-h-0 max-[1025px]:min-w-0 max-[1025px]:flex-col max-[1025px]:gap-4 max-[1025px]:overflow-x-hidden max-[1025px]:overflow-y-auto\"\n >\n <!-- Properties Sidebar -->\n @if (propertiesSectionVisible()) {\n <mt-card\n class=\"h-full w-1/5 flex flex-col overflow-hidden max-[1025px]:h-auto max-[1025px]:max-h-[42vh] max-[1025px]:min-h-0 max-[1025px]:w-full\"\n >\n <ng-template #headless>\n <!-- Header -->\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\n {{ t(\"form-elements\") }}\n </h3>\n\n @if (isContextLoading()) {\n <!-- Properties Loading Skeleton -->\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\n </div>\n <div class=\"py-4 px-5 space-y-5\">\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\n }\n </div>\n } @else if (scopeOptions().length === 0) {\n <!-- No Properties State -->\n <div class=\"flex-1 flex items-center justify-center p-4\">\n <p class=\"text-sm font-semibold text-gray-500\">\n {{ t(\"no-data-found\") }}\n </p>\n </div>\n } @else {\n <!-- Scope Tabs using PrimeNG -->\n <p-tabs\n [value]=\"activeScope()\"\n (valueChange)=\"onScopeChange($event)\"\n styleClass=\"structure-tabs\"\n class=\"flex min-h-0 flex-1 flex-col\"\n >\n <p-tablist class=\"shrink-0 overflow-x-auto\">\n @for (scope of scopeOptions(); track scope.key) {\n <p-tab [value]=\"scope.key\">{{ scope.label }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\n >\n @for (scope of scopeOptions(); track scope.key) {\n <p-tabpanel [value]=\"scope.key\" class=\"h-full flex flex-col\">\n @if (scope.key !== \"Current\") {\n <div class=\"px-4 pt-3 pb-2\">\n <div\n class=\"flex flex-col gap-3 rounded-lg bg-slate-50 px-3 py-2 dark:bg-slate-800/50\"\n >\n <div class=\"flex items-center gap-2\">\n <span\n class=\"shrink-0 text-xs font-semibold uppercase tracking-wider text-slate-400\"\n >\n {{ t(\"path\") }}\n </span>\n <div\n class=\"h-4 w-px shrink-0 bg-slate-200 dark:bg-slate-700\"\n ></div>\n <span class=\"text-xs font-semibold text-slate-600\">\n {{ scope.label }}\n </span>\n </div>\n @if (getScopeBaseContexts(scope.key).length === 0) {\n <span class=\"text-xs italic text-slate-400\">\n {{ t(\"no-context\") }}\n </span>\n } @else {\n <div class=\"flex flex-col gap-1.5\">\n @for (\n segment of getScopePath(scope.key);\n track $index;\n let segmentIndex = $index;\n let isLast = $last\n ) {\n <div\n class=\"flex items-center gap-1 py-0.5 px-2 border border-gray-200 rounded bg-white dark:bg-slate-800 dark:border-slate-600\"\n >\n <div\n class=\"flex-1 min-w-0 text-xs font-medium text-slate-600 dark:text-slate-300 truncate cursor-pointer\"\n (click)=\"segmentPopover.toggle($event)\"\n >\n {{\n getScopeSegmentLabel(\n scope.key,\n segmentIndex\n )\n }}\n </div>\n <mt-button\n type=\"button\"\n icon=\"arrow.chevron-down\"\n [outlined]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n styleClass=\"!p-0.5 !min-w-0\"\n (onClick)=\"segmentPopover.toggle($event)\"\n ></mt-button>\n @if (\n isLast && canRemoveScopePath(scope.key)\n ) {\n <mt-button\n type=\"button\"\n icon=\"general.trash-01\"\n [outlined]=\"true\"\n size=\"small\"\n severity=\"danger\"\n styleClass=\"!p-0.5 !min-w-0\"\n (onClick)=\"removeScopePath(scope.key)\"\n ></mt-button>\n }\n </div>\n <p-popover\n #segmentPopover\n [style]=\"{ width: 'max-content' }\"\n [dismissable]=\"true\"\n >\n <div class=\"p-2\">\n <div\n class=\"mb-2 text-xs font-semibold uppercase text-slate-400\"\n >\n {{ t(\"select\") }}\n {{ getTokenLabel(segment.token) }}\n </div>\n @if (\n getScopeSegmentOptions(\n scope.key,\n segmentIndex\n ).length === 0\n ) {\n <div\n class=\"text-xs font-medium text-slate-400\"\n >\n {{ t(\"no-options\") }}\n </div>\n } @else {\n <div class=\"flex flex-col gap-1\">\n @for (\n option of getScopeSegmentOptions(\n scope.key,\n segmentIndex\n );\n track option.contextKey\n ) {\n <mt-button\n type=\"button\"\n [label]=\"option.label\"\n [icon]=\"\n option.contextKey ===\n segment.value\n ? 'general.check'\n : 'general.minus'\n \"\n [iconPos]=\"'end'\"\n size=\"small\"\n severity=\"secondary\"\n styleClass=\"w-full justify-start rounded-md px-2.5 py-1.5 text-left text-xs font-medium transition-colors text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-700\"\n (onClick)=\"\n onSetScopeSegmentValue(\n scope.key,\n segmentIndex,\n option.contextKey,\n segmentPopover\n )\n \"\n ></mt-button>\n }\n </div>\n }\n </div>\n </p-popover>\n }\n @if (canAddNextScopeSegment(scope.key)) {\n <div class=\"flex items-center gap-2\">\n <mt-button\n type=\"button\"\n icon=\"general.plus\"\n size=\"small\"\n severity=\"primary\"\n styleClass=\"flex size-7 shrink-0 items-center justify-center rounded-md bg-primary text-xs font-bold text-white hover:opacity-90\"\n (onClick)=\"\n nextContextPopover.toggle($event)\n \"\n ></mt-button>\n <!-- <span class=\"text-xs text-slate-400\">\n {{ t(\"add-segment\") }}\n </span> -->\n </div>\n }\n <!-- Popover OUTSIDE the @if block like formula-builder -->\n <p-popover\n #nextContextPopover\n [style]=\"{ width: 'max-content' }\"\n [dismissable]=\"true\"\n appendTo=\"body\"\n >\n <div class=\"p-2\">\n <div\n class=\"mb-2 text-xs font-semibold uppercase text-slate-400\"\n >\n {{ t(\"add-segment\") }}\n </div>\n <div class=\"flex flex-col gap-1\">\n @for (\n token of getScopeNextTokens(scope.key);\n track token\n ) {\n <mt-button\n type=\"button\"\n [label]=\"getTokenLabel(token)\"\n size=\"small\"\n severity=\"secondary\"\n styleClass=\"w-full justify-start rounded-md px-2.5 py-1.5 text-left text-xs font-medium transition-colors text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-700\"\n (onClick)=\"\n onAddScopeSegment(\n scope.key,\n token,\n nextContextPopover\n )\n \"\n ></mt-button>\n }\n </div>\n </div>\n </p-popover>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Node List -->\n <div\n class=\"flex-1 min-h-0 overflow-y-auto space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden\"\n [id]=\"'toolbox-' + scope.key\"\n cdkDropList\n cdkDropListSortingDisabled\n [cdkDropListData]=\"getFilteredProperties(scope.key)\"\n [cdkDropListConnectedTo]=\"fieldDropListIds()\"\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\n >\n <!-- Search Field (Sticky) -->\n <div\n class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\"\n >\n <mt-text-field\n [placeholder]=\"t('search-properties')\"\n [(ngModel)]=\"searchQuery\"\n icon=\"general.search-lg\"\n />\n </div>\n\n @if (isScopePropertiesLoading(scope.key)) {\n <div class=\"space-y-4\">\n @for (i of [1, 2, 3, 4]; track i) {\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\n }\n </div>\n } @else {\n @for (\n node of getFilteredProperties(scope.key);\n track node.key\n ) {\n <div\n cdkDrag\n [cdkDragData]=\"node\"\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\"\n >\n <div\n *cdkDragPlaceholder\n class=\"col-span-12 min-h-27 w-full rounded-lg bg-black/10 z-1\"\n ></div>\n <span\n class=\"flex-1 text-start text-base font-medium\"\n >{{ getPropertyLabel(node) }}</span\n >\n\n <mt-icon\n class=\"text-lg\"\n icon=\"general.menu-05\"\n ></mt-icon>\n </div>\n }\n\n @if (getFilteredProperties(scope.key).length === 0) {\n <div class=\"py-8 text-center text-muted-color\">\n <p class=\"text-sm\">\n @if (searchQuery()) {\n {{ t(\"no-data-found\") }}\n } @else if (\n getScopeProperties(scope.key).length === 0\n ) {\n {{ t(\"no-properties-available\") }}\n } @else {\n {{ t(\"all-items-in-use\") }}\n }\n </p>\n </div>\n }\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n }\n </ng-template>\n </mt-card>\n }\n\n <!-- Main Canvas Area -->\n <div\n cdkScrollable\n class=\"flex h-full min-w-0 flex-1 gap-4 overflow-y-auto max-[1025px]:h-auto max-[1025px]:min-h-0 max-[1025px]:overflow-visible\"\n >\n <div\n class=\"flex h-full min-w-0 w-full flex-1 flex-col gap-4 max-[1025px]:h-auto\"\n [ngClass]=\"canvasStyleClass()\"\n >\n @if (mode() !== \"manageProperties\") {\n <mt-card>\n <ng-template #headless>\n <div\n class=\"flex flex-col gap-3 p-4 sm:flex-row sm:flex-wrap sm:items-center\"\n >\n <div class=\"w-full sm:w-44\">\n <mt-select-field\n [label]=\"''\"\n [placeholder]=\"''\"\n [hasPlaceholderPrefix]=\"false\"\n [ngModel]=\"selectedRenderMode()\"\n (ngModelChange)=\"onRenderModeChange($event)\"\n [options]=\"renderModeOptions()\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionIcon=\"icon\"\n optionIconColor=\"color\"\n [optionAvatarShape]=\"'square'\"\n [size]=\"'small'\"\n [loading]=\"isUpdatingFormSettings()\"\n [disabled]=\"\n isLoading() ||\n isUpdatingFormSettings() ||\n !formConfiguration()\n \"\n />\n </div>\n <mt-button\n icon=\"layout.layout-top\"\n [label]=\"t('add-section')\"\n variant=\"outlined\"\n severity=\"primary\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"addSection()\"\n [disabled]=\"isLoading()\"\n ></mt-button>\n <mt-button\n icon=\"general.eye\"\n [label]=\"t('preview')\"\n variant=\"outlined\"\n severity=\"primary\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"openPreview()\"\n [disabled]=\"isLoading() || isUpdatingFormSettings()\"\n ></mt-button>\n <mt-button\n [label]=\"t('validation-rules')\"\n variant=\"outlined\"\n severity=\"primary\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"openValidationRules()\"\n [disabled]=\"isLoading()\"\n ></mt-button>\n <mt-button\n icon=\"finance.credit-card-plus\"\n [label]=\"t('reset')\"\n variant=\"outlined\"\n severity=\"primary\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"resetFormConfiguration()\"\n [disabled]=\"isLoading()\"\n ></mt-button>\n </div>\n </ng-template>\n </mt-card>\n }\n\n @if (isLoading()) {\n <!-- Form Loading Skeleton -->\n @for (i of [1, 2]; track i) {\n <mt-card>\n <ng-template #headless>\n <div class=\"p-4 space-y-4\">\n <!-- Section header skeleton -->\n <div\n class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\n <div class=\"flex gap-2\">\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\n </div>\n </div>\n <!-- Fields skeleton -->\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-12 sm:col-span-6\">\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\n </div>\n <div class=\"col-span-12 sm:col-span-6\">\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\n </div>\n <div class=\"col-span-12\">\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\n </div>\n </div>\n </div>\n </ng-template>\n </mt-card>\n }\n } @else {\n <div\n cdkDropList\n id=\"sections-list\"\n [cdkDropListData]=\"enrichedSections()\"\n [cdkDropListDisabled]=\"mode() === 'manageProperties'\"\n [cdkDropListEnterPredicate]=\"sectionsDropPredicate\"\n [cdkDropListAutoScrollStep]=\"16\"\n (cdkDropListDropped)=\"dropSection($event)\"\n class=\"flex flex-col gap-4\"\n >\n @for (section of enrichedSections(); track section.id) {\n <div\n cdkDrag\n [cdkDragData]=\"section\"\n [cdkDragDisabled]=\"mode() === 'manageProperties'\"\n >\n <div\n *cdkDragPlaceholder\n class=\"min-h-16 rounded-xl border-2 border-dashed border-primary bg-primary-50/40\"\n ></div>\n <mt-fb-section\n [section]=\"section\"\n [sectionsCount]=\"enrichedSections().length\"\n [allSections]=\"enrichedSections()\"\n [mode]=\"mode()\"\n [connectedDropLists]=\"fieldDropListConnections()\"\n (onFieldDrop)=\"drop($event)\"\n >\n </mt-fb-section>\n </div>\n } @empty {\n <mt-card>\n <div class=\"h-27 p-4\">\n <div\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\n >\n <span>{{ t(\"no-section\") }}</span>\n </div>\n </div>\n </mt-card>\n }\n </div>\n }\n </div>\n </div>\n </div>\n</ng-container>\n","/*\n * Public API Surface of form-builder\n */\n\nexport * from './lib/form-builder';\nexport * from './store/form-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA;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;;MAGrC,cAAc,CAAA;AAEN,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,gCAAgC;AACvD,IAAA,WAAA,CAAmB,OAAoB,EAAA;QAApB,IAAA,CAAA,OAAO,GAAP,OAAO;IAAgB;;AAG5C;AACA;AACA;MAEa,oBAAoB,CAAA;AAC/B,IAAA,OAAgB,IAAI,GAAG,sCAAsC;;MAGlD,sBAAsB,CAAA;AACjC,IAAA,OAAgB,IAAI,GAAG,wCAAwC;;MAGpD,oBAAoB,CAAA;AAC/B,IAAA,OAAgB,IAAI,GAAG,wCAAwC;;MAGpD,kBAAkB,CAAA;AAEV,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,oCAAoC;AAC3D,IAAA,WAAA,CAAmB,OAAkC,EAAA;QAAlC,IAAA,CAAA,OAAO,GAAP,OAAO;IAA8B;;AAG1D;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;;MAG5B,eAAe,CAAA;AAEP,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,gCAAgC;AACvD,IAAA,WAAA,CAAmB,OAAgC,EAAA;QAAhC,IAAA,CAAA,OAAO,GAAP,OAAO;IAA4B;;AAGxD;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;;AAGL;AACA;AACA;MAEa,aAAa,CAAA;AAEL,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,8BAA8B;AACrD,IAAA,WAAA,CAAmB,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;IAAyB;;MAGxC,gBAAgB,CAAA;AAGlB,IAAA,YAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,iCAAiC;IACxD,WAAA,CACS,YAA6B,EAC7B,OAAgC,EAAA;QADhC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,gBAAgB,CAAA;AAER,IAAA,YAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,iCAAiC;AACxD,IAAA,WAAA,CAAmB,YAA6B,EAAA;QAA7B,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAoB;;MAGxC,sBAAsB,CAAA;AAGxB,IAAA,YAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,wCAAwC;IAC/D,WAAA,CACS,YAA6B,EAC7B,OAAgC,EAAA;QADhC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;;ACpKL;AACA;AACA;IACY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;;AAE9B,IAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,oBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,oBAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;;AAGzC,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;AAC/B,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;;AAGnC,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;;AAG/B,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACnD,CAAC,EAzBW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;ACoChC;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,WAAW,EAAE,IAAI;;AAGjB,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;AAEQ,IAAA,0BAA0B,CAChC,MAA4C,EAAA;AAE5C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAExB,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;AAC3C,YAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;SACtC;IACH;;;;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,mBAAmB,CAAC,KAA4B,EAAA;AACrD,QAAA,OAAO,KAAK,EAAE,gBAAgB,IAAI,IAAI;IACxC;AAGO,IAAP,OAAO,iBAAiB,CACtB,KAA4B,EAAA;AAE5B,QAAA,OAAO,KAAK,EAAE,cAAc,IAAI,IAAI;IACtC;AAGO,IAAP,OAAO,aAAa,CAAC,KAA4B,EAAA;AAC/C,QAAA,OAAO,KAAK,EAAE,UAAU,IAAI,EAAE;IAChC;AAGO,IAAP,OAAO,aAAa,CAAC,KAA4B,EAAA;AAC/C,QAAA,OAAO,KAAK,EAAE,UAAU,IAAI,EAAE;IAChC;AAGO,IAAP,OAAO,cAAc,CAAC,KAA4B,EAAA;AAChD,QAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,IAAI,EAAE;IACpD;AAGO,IAAP,OAAO,cAAc,CAAC,KAA4B,EAAA;AAChD,QAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI;IACnC;;;;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;IAGA,cAAc,CACZ,GAAwC,EACxC,MAAsB,EAAA;QAEtB,GAAG,CAAC,UAAU,CAAC;YACb,WAAW,EAAE,MAAM,CAAC,OAAO;AAC5B,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;AAC9B,gBAAA,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;aACzD,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;gBAClC,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;aAC7D,CAAC;AACH,SAAA,CAAC;IACJ;AAGA,IAAA,oBAAoB,CAAC,GAAwC,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,oBAAA,CAAsB;AAC/D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAA8B,OAAO,EAAE,EAAE,CAAC;AAErE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,oBAAoB;AAC9C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,MAAM;gBACnB,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;aAC7D,CAAC;AACH,SAAA,CAAC;IACJ;IAGA,kBAAkB,CAChB,GAAwC,EACxC,MAA0B,EAAA;AAE1B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB;AAC7C,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC;AACvD,YAAA,GAAG,aAAa;YAChB,GAAG,MAAM,CAAC,OAAO;AAClB,SAAA,CAAC;QACF,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,SAAA,CAAW;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,OAAO,EACP,MAAM,CAAC,OAAO,CACf;QAED,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,iBAAiB,EAAE,gBAAgB;AACpC,SAAA,CAAC;AAEF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,kBAAkB;AAC5C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,MAAM;gBACnB,iBAAiB,EACf,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB;aAChE,CAAC;AACF,YAAA,OAAO,EAAE,OAAO;AACd,gBAAA,iBAAiB,EAAE,aAAa;aACjC,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,eAAe,CACb,GAAwC,EACxC,MAAuB,EAAA;AAEvB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,iBAAA,CAAmB;AAC5D,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;;QAGpE,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE;AAChE,aAAA,GAAG,CAAC,CAAC,OAAO,MAAM;AACjB,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK;AACjD,SAAA,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAEpC,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,eAAe;AACzC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ;gBACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEjE,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,IAAI,EAAE;AAC7D,qBAAA,GAAG,CAAC,CAAC,CAAC,KAAI;oBACT,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,oBAAA,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;AACvD,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBACpC,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,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,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AACvC,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;;;;IAOA,aAAa,CACX,GAAwC,EACxC,MAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,YAAA,CAAc;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,OAAO,EACP,MAAM,CAAC,OAAO,CACf;AAED,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,WAAW,GAAG;oBAClB,IAAI,YAAY,CAAC,iBAAiB,EAAE,WAAW,IAAI,EAAE,CAAC;AACtD,oBAAA,GAAG,CAAC,IAAI;iBACT;gBACD,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,WAAW;AACZ,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,gBAAgB,CACd,GAAwC,EACxC,MAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,YAAY,EAAE;AAC9E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,OAAO,EACP,MAAM,CAAC,OAAO,CACf;AAED,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,gBAAgB;AAC1C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,WAAW,GAAG,CAClB,YAAY,CAAC,iBAAiB,EAAE,WAAW,IAAI,EAAE,EACjD,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC5D,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,WAAW;AACZ,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,gBAAgB,CACd,GAAwC,EACxC,MAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,YAAY,EAAE;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAoC,OAAO,CAAC;AAEzE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,gBAAgB;AAC1C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,WAAW,GAAG,CAClB,YAAY,CAAC,iBAAiB,EAAE,WAAW,IAAI,EAAE,EACjD,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,WAAW;AACZ,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;IAGA,sBAAsB,CACpB,GAAwC,EACxC,MAA8B,EAAA;AAE9B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,YAAY,SAAS;AACrF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAC1B,OAAO,EACP,MAAM,CAAC,OAAO,CACf;AAED,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,sBAAsB;AAChD,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAI;AAC/B,gBAAA,MAAM,WAAW,GAAG,CAClB,YAAY,CAAC,iBAAiB,EAAE,WAAW,IAAI,EAAE,EACjD,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC5D,OAAO;AACL,oBAAA,iBAAiB,EAAE;wBACjB,GAAG,YAAY,CAAC,iBAAkB;wBAClC,WAAW;AACZ,qBAAA;iBACF;YACH,CAAC;AACF,SAAA,CAAC;IACJ;uGAh4BW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;AAiG3B,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;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,cAAc;AAQrB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,gBAAA,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;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,oBAAoB;AAc3B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,kBAAkB;AAmCzB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,oBAAA,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,eAAe;AA0DtB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,iBAAA,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;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AA6BpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AA4BvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAyBvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AA4B7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,IAAA,CAAA;AA91BM,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,qBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,mBAAA,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,eAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,IAAA,CAAA;AA1FU,gBAAgB,GAAA,UAAA,CAAA;AAL5B,IAAA,KAAK,CAAwB;AAC5B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE,aAAa;KACxB;AAEY,CAAA,EAAA,gBAAgB,CAi4B5B;2FAj4BY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCvBY,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,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACrD,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACnD,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC/C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;AAC3D,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACnD,IAAA,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;;;;IAMrD,0BAA0B,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,oBAAoB,CAC1C,iGACF;IAEQ,4BAA4B,GAAG,QAAQ,CAAC,MAC/C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,sBAAsB,CAC5C,mGACF;IAEQ,0BAA0B,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,oBAAoB,CAC1C,iGACF;AAEQ,IAAA,yBAAyB,GAAG,QAAQ,CAC3C,MACE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;AACpE,QAAA,IAAI,gGACP;IAEQ,sBAAsB,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,kBAAkB,CACxC,6FACF;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,sFAC3E;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,wFACF;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,wFACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,eAAe,CACrC,2FACF;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,oFACzE;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,sFAC5E;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,sFAC5E;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,oFAC1E;IAEQ,kBAAkB,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,yFACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,gBAAgB,CACtC,2FACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,gBAAgB,CACtC,2FACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,sBAAsB,CAC5C,2FACF;;;;AAMQ,IAAA,sBAAsB,GAAG,QAAQ,CACxC,MACE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;AACpE,QAAA,IAAI,6FACP;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,mFAAC;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,iFAAC;AAEO,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,QAAA,QACE,MAAM,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC1C,YAAA,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;AAC7C,YAAA,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;AAC7C,YAAA,MAAM,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;AACnD,YAAA,IAAI;AAER,IAAA,CAAC,sFAAC;;;;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;AAEA,IAAA,cAAc,CAAC,OAAoB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD;;;;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;IAEA,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC;IACxD;AAEA,IAAA,kBAAkB,CAAC,OAAkC,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;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;AAEA,IAAA,eAAe,CAAC,OAAgC,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,OAAO,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;;;;AAMA,IAAA,aAAa,CAAC,OAA6B,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACxD;IAEA,gBAAgB,CACd,YAA6B,EAC7B,OAAgC,EAAA;AAEhC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzE;AAEA,IAAA,gBAAgB,CAAC,YAA6B,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChE;IAEA,sBAAsB,CACpB,YAA6B,EAC7B,OAAgC,EAAA;AAEhC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,IAAI,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAClD;IACH;uGA1RW,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;;;ACClC;;;;;AAKG;MAaU,iBAAiB,CAAA;AACT,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;AAIvC,IAAA,cAAc,GAAG,KAAK,CAAS,EAAE,qFAAC;;AAGlC,IAAA,eAAe,GAAG,KAAK,CAA2B,EAAE,sFAAC;;AAGrD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CACzB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAkB,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACxD;;AAGQ,IAAA,cAAc,GAAG,IAAI,WAAW,CAAiB,EAAE,CAAC;;AAG5C,IAAA,SAAS,GAAG,SAAS,CAAgB,QAAQ,gFAAC;;IAGtD,kBAAkB,GAAG,6BAA6B;IAClD,SAAS,GAAG,mBAAmB;;AAG/B,IAAA,aAAa,GAAG,QAAQ,CAAiC,MAChE,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;QACrC,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAA,CAAA,CAAG,GAAG,KAAK,CAAC,IAAI;KACvE,CAAC,CAAC,oFACJ;;AAGQ,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;YACpE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;YAClE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;YACpE,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7C,+BAA+B,CAChC;SACF;AACH,IAAA,CAAC,oFAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,IAAoB,IAAI,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;IACN;IAEA,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,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACvE;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;AAEQ,IAAA,wBAAwB,CAAC,MAAsB,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAC/D;AAED,QAAA,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC1B,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,gBAAA,OAAO,KAAK;YACd;YAEA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;AAChD,YAAA,MAAM,OAAO,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;AAErD,YAAA,OAAO,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK;AAChD,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACtC,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AAClD,QAAA,MAAM,GAAG,GACP,kBAAkB,IAAI;cAClB,KAAK,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC;AACpC,cAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAEtD,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE;IACnB;uGAvHW,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,EC/D9B,44CAwDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDI,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,oBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,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,EAAA,YAAA,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,44CAAA,EAAA;2TA0BqD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExCnD,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,gFAAC;AAC7B,IAAA,WAAW,GAAG,KAAK,CAA2B,IAAI,kFAAC;;AAEnD,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,kFAAC;AAC9C,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,2EAAC;AAExC,IAAA,kBAAkB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,yFACzC;;AAGQ,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,yBAAyB,GAAG,MAAM,CAAS,EAAE,gGAAC;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,WAAW;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,sFAAC;;AAGO,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAC/B,IAAA,eAAe,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AACxC,IAAA,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;AACrC,IAAA,cAAc,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;;AAGtC,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AACzC,IAAA,cAAc,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,cAAc,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;AAEnD,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,sFAAC;AAEvC,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;;AAGQ,IAAA,0BAA0B,GAAsB;AACvD,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,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;IAEQ,gBAAgB,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,kBAAkB;UACnB,IAAI,CAAC;AACP,UAAE,IAAI,CAAC,UAAU,uFACpB;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;;gBAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;gBACpD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;;AAEtD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,gBAAA,MAAM,QAAQ,GACZ,CAAC,CAAC,KAAK;qBACN,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACpE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;YACjD;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YACrD,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC3D;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACnD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACxC,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC7D;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,GAAwB;YACnC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK;SACzC;QAED,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI;QACpD,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,IAAI;AAEtD,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC9B,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,gBAAgB,IAAI,KAAK;YACjE,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,gBAAgB,IAAI,KAAK;YACjE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,UAAU,IAAI,KAAK;YACrD,OAAO,CAAC,+BAA+B,CAAC;AACtC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,KAAK;YACrC,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAC1D,kBAAE,IAAI,CAAC,yBAAyB;kBAC9B,IAAI;;;;;AAMR,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;gBAC/B,OAAO,CAAC,OAAO,CAAC,GAAG;oBACjB,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE;oBACpC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE;iBACrC;YACH;AAAO,iBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,gBAAA,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;YACrC;QACF;AAEA,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,wDAAwD;AACpE,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;uGA1SW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CxB,+/HAiIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5FI,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,EAAA,uBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,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,sOACX,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,WAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIA,WAAW,EAAA,UAAA,EAAA,CAAA;kBAbvB,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,MAAM;wBACN,WAAW;wBACX,SAAS;AACV,qBAAA,EAAA,QAAA,EAAA,+/HAAA,EAAA;;;AEhCH,MAAM,qBAAqB,GAAG,CAAC,KAAc,KAAa;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;AACtE,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC7D,CAAC;MAQY,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,gFAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAoC,IAAI,kFAAC;AAC5D,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,oFAAC;;AAGhC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;;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,UAAU,EAAE;4BACV,eAAe,CAAC,QAAQ,CACtB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,CACjD;AACD,4BAAA,eAAe,CAAC,MAAM,CACpB,qBAAqB,EACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAC3D;AACF,yBAAA;AACD,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,UAAU,EAAE;4BACV,eAAe,CAAC,QAAQ,CACtB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,CACjD;AACD,4BAAA,eAAe,CAAC,MAAM,CACpB,qBAAqB,EACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAC3D;AACF,yBAAA;AACD,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;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;AAC9C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACxD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAExD,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE;AAExB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,EAAE,EAAE,MAAM;AACX,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;uGApIW,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,ECtB1B,q8CA2DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxCY,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,EAAA,uBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,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,q8CAAA,EAAA;;;MEmC5D,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;IAC3C,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACzE,QAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;AACpD,KAAA,CAAC;AACe,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAuB;AAC/C,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,oFAAC;;AAEhC,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,kFAAC;;AAE9C,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,2EAAC;AACxC,IAAA,kBAAkB,GAAG,KAAK,CAAoB,EAAE,yFAAC;;IAGjD,WAAW,GAAG,MAAM,EAAoC;;AAGxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAiB;AAC7C,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,kFAAC;AAEO,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,6EAAC;;AAG9C,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB;AAAE,YAAA,OAAO,GAAG;AAClD,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;AACtD,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;AACxD,QAAA,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC;AACrC,IAAA,CAAC,oFAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,yFACzC;;AAGQ,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,+EAAC;;AAGf,IAAA,eAAe,GAAG,IAAI,GAAG,EAAqB;IAC9C,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtE,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;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAErD,IAAI,EAAE,EAAE;YACN,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YAC7C,MAAM,eAAe,GACnB,YAAY,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;AAC3C,gBAAA,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,CAAC,eAAe,EAAE;gBACpB,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC;gBACnD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;YACxC;QACF;aAAO;YACL,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACxC;AAEA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,4BAA4B,CAC1B,KAAwB,EAAA;QAExB,OAAO;AACL,YAAA;gBACE,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjD,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC;AAC9C,aAAA;AACD,YAAA;gBACE,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjD,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC7C,aAAA;SACF;IACH;AAEA,IAAA,uBAAuB,CAAC,KAAwB,EAAA;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI;AACzC,QAAA,QACE,IAAI,EAAE,cAAc,KAAK,IAAI;AAC7B,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;IAEhE;IAEQ,oBAAoB,CAC1B,KAAwB,EACxB,YAAsB,EAAA;AAEtB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI;AACrC,QAAA,MAAM,KAAK,GACT,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,GAAG,KAAI;AACX,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK;AACjC,kBAAE;AACF,kBAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;AAClB,sBAAE;sBACA,IAAI;YACV,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,GAAG,YAAY,CAAC;AACvE,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAAE,CACH;AAED,QAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;IAChC;AAEQ,IAAA,oBAAoB,CAAC,KAAwB,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO;AACL,gBAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5C,gBAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC;aAC7C;QACH;AAEA,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IACrB;IAEQ,0BAA0B,CAChC,KAAwB,EACxB,IAAiB,EAAA;AAEjB,QAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;IAC9B;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;;AAGA,IAAA,mBAAmB,GAAG,CAAC,IAAa,KAAa;AAC/C,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,eAAe;AAClD,IAAA,CAAC;AAED,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,UAAU,EACR,sEAAsE;AACxE,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,UAAU,EACR,sEAAsE;AACxE,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;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAwB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC;QACrD;AAEA,QAAA,QAAQ,KAAK,CAAC,KAAK;AACjB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,2BAA2B;AACpC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,yCAAyC;AAClD,YAAA;AACE,gBAAA,OAAO,aAAa;;IAE1B;AAEA,IAAA,kCAAkC,CAAC,KAAwB,EAAA;AACzD,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;AACzB,YAAA,OAAO,aAAa;QACtB;AAEA,QAAA,OAAO,2BAA2B;IACpC;AAEQ,IAAA,gCAAgC,CAAC,KAAwB,EAAA;AAC/D,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AACxB,YAAA,OAAO,2BAA2B;QACpC;AAEA,QAAA,OAAO,aAAa;IACtB;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,qBAAqB,EAAE,iBAAiB;AACxC,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,mBAAmB;SAChC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM;IACtC;IAEA,cAAc,CACZ,KAAwB,EACxB,aAAsB,EAAA;QAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,MAAM,IAAI,GAAwB;AAChC,YAAA,QAAQ,EAAE,IAAI;YACd,IAAI;AACJ,YAAA,KAAK,EAAE,aAAa,GAAG,CAAA,EAAG,KAAK,CAAC,IAAI,KAAK,aAAa,CAAA,CAAA,CAAG,GAAG,SAAS;SACtE;AAED,QAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ;YAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE;QACnE;AAEA,QAAA,OAAO,IAAI;IACb;uGAlSW,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,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,ECtDtB,wtQA0MA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlKI,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,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,EACP,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,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;kBAlBrB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,MAAM;wBACN,IAAI;wBACJ,IAAI;wBACJ,OAAO;wBACP,aAAa;wBACb,WAAW;wBACX,kBAAkB;wBAClB,kBAAkB;wBAClB,YAAY;wBACZ,mBAAmB;wBACnB,OAAO;AACR,qBAAA,EAAA,QAAA,EAAA,wtQAAA,EAAA;;;MErCU,aAAa,CAAA;AACL,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE5C,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACrC,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AACtC,IAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB;AAC/C,IAAA,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;AAClD,IAAA,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;AACjD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,EAAE;AACzD,gBAAA,OAAO,YAAY;YACrB;QACF;AAEA,QAAA,IAAI,UAAU,KAAK,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,YAAY,EAAE;AAC1D,gBAAA,OAAO,WAAW;YACpB;QACF;QAEA,OAAO,gBAAgB,IAAI,EAAE;AAC/B,IAAA,CAAC,gFAAC;AACO,IAAA,YAAY,GAAG,QAAQ,CAC9B,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,IAAI,EAAE,mFAC7C;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ;AACpD,QAAA,IAAI,eAAe,IAAI,IAAI,EAAE;AAC3B,YAAA,OAAO,eAAe;QACxB;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,SAAS;QAC5C;AAEA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,sFAAC;AACO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;AAClD,QAAA,IAAI,cAAc,IAAI,IAAI,EAAE;AAC1B,YAAA,OAAO,cAAc;QACvB;;;;AAKA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,SAAS;QAC5C;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,OAAO,EAAE;AACzE,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,IAAI,SAAS;QAClD;AAEA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,qFAAC;AACO,IAAA,UAAU,GAAG,QAAQ,CAA0B,MAAK;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU;QACvD,IACE,UAAU,KAAK,OAAO;AACtB,YAAA,UAAU,KAAK,MAAM;AACrB,YAAA,UAAU,KAAK,QAAQ;AAEvB,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU;QAC7C,IAAI,UAAU,KAAK,UAAU;AAAE,YAAA,OAAO,MAAM;AAC5C,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,iFAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;uGA7EW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd1B,umCAkCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvBY,kBAAkB,gMAAE,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAG7B,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,OAAA,EACP,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,umCAAA,EAAA;;;AE8B3C,MAAM,wBAAwB,GAAqB;AACjD,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,UAAU,EAAE,CAAC;CACd;MAeY,oBAAoB,CAAA;AACZ,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,IAAA,WAAW,GAAG,KAAK,CAAwB,IAAI,kFAAC;AAChD,IAAA,eAAe,GAAG,KAAK,CAA4B,EAAE,sFAAC;AACtD,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;AAC3C,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAErC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,gFAAC;AACvC,IAAA,UAAU,GAAG,MAAM,CACzB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAkB,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACxD;AAEQ,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE;AACtD,QAAA,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,UAAU,CAAC,QAAQ;AAChC,KAAA,CAAC;AACO,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE;AACtD,QAAA,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,UAAU,CAAC,QAAQ;AAChC,KAAA,CAAC;AACO,IAAA,eAAe,GAAG,IAAI,WAAW,CAAqB,OAAO,EAAE;AACtE,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA,CAAC;AACO,IAAA,cAAc,GAAG,IAAI,WAAW,CAA6B,IAAI,CAAC;AAC1D,IAAA,YAAY,GAAG,QAAQ,CACtC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAC3E,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAC5C;AACgB,IAAA,eAAe,GAAG,QAAQ,CACzC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CACtC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACxC,EACD,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAC/C;AACgB,IAAA,eAAe,GAAG,QAAQ,CACzC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CACtC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACxC,EACD,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAC/C;AACQ,IAAA,iBAAiB,GAAG,MAAM,CACjC,wBAAwB,wFACzB;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9D,OAAO,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5D,IAAA,CAAC,sFAAC;AACO,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC9D,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,YAAA,OAAO,SAAS;QAClB;QAEA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC1C,IAAA,CAAC,sFAAC;AACO,IAAA,2BAA2B,GAAG,QAAQ,CAAC,MAAK;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,EAAE;AACzD,gBAAA,OAAO,YAAY;YACrB;QACF;AAEA,QAAA,IAAI,UAAU,KAAK,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,YAAY,EAAE;AAC1D,gBAAA,OAAO,WAAW;YACpB;QACF;QAEA,IAAI,gBAAgB,EAAE;AACpB,YAAA,OAAO,gBAAgB;QACzB;AAEA,QAAA,IAAI,UAAU,KAAK,OAAO,EAAE;AAC1B,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,kGAAC;AACO,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE;QACX;QAEA,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;gBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,aAAA,CAAC,CAAC;SACJ;AACH,IAAA,CAAC,8FAAC;AACO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;QACjC,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;AAClD,QAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACnE,IAAA,CAAC,iFAAC;AACO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,QACE,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO;YAChC,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,OAAO;AAClC,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,OAAO;AAEtC,IAAA,CAAC,8EAAC;AAEO,IAAA,eAAe,GAAG,QAAQ,CAAc,MAAK;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC7D,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AAC/D,aAAA;SACF;AACH,IAAA,CAAC,sFAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,IAAoB,IAAI,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;QAEJ,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtC,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACpD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBACxB;YACF;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC;AACjE,YAAA,MAAM,UAAU,GACd,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE;AAC5D,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC3B,UAAU;gBACV,OAAO;AACR,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,yBAAyB,CAAC,MAAwB,EAAA;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;IACpC;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;QAE7D,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE;YACxD;QACF;AAEA,QAAA,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,WAAW,EAAE,cAAc,CAAC,WAAW;AACvC,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;AACrC,gBAAA,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;AACtC,aAAA;AACD,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,OAAO;SAChD;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI,IAAI,EAAE,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;gBACvD,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,aAAA,CAAC;YACF;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YAC3C,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;AAEQ,IAAA,WAAW,CACjB,KAAyC,EAAA;QAEzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,SAAS;IACjE;AAEQ,IAAA,wBAAwB,CAC9B,KAAgC,EAAA;AAEhC,QAAA,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE;QAChC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACrC,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAI,MAAyB,GAAG,EAAE;QAChE;AAAE,QAAA,MAAM;;AAEN,YAAA,OAAO,uBAAuB,CAAC,UAAU,CAAC;QAC5C;IACF;AAEQ,IAAA,mBAAmB,CACzB,KAAiC,EAAA;QAEjC,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;QAClD,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE;QAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,EAAE;AACtC,YAAA,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC;QAC/C;QAEA,MAAM,WAAW,GAAG,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;QAC1D,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;AACL,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACtC,WAAW;SACZ;IACH;AAEQ,IAAA,eAAe,CAAC,KAAU,EAAA;AAChC,QAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,gCAAgC;AAElC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;uGA9QW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9DjC,43EA+EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BI,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,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,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,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,WAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,eAAe,wLACf,cAAc,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIL,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,MAAM;wBACN,SAAS;wBACT,eAAe;wBACf,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,43EAAA,EAAA;;;MEnCU,iBAAiB,CAAA;AACT,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACrC,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AAEnC,IAAA,UAAU,GAAG,MAAM,CACzB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAkB,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACxD;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACpC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACzB;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,oFAAC;AAEO,IAAA,eAAe,GAAG,QAAQ,CAA4B,MAAK;AAClE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,MAAM,MAAM,GAA8B,EAAE;AAE5C,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;AAClC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AAC9D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;gBAEpE,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,KAAK,CAAC,WAAW;oBACtB,IAAI;AACJ,oBAAA,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,MAAM;AAC/B,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,sFAAC;AAEO,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACvC,YAAA,GAAG,IAAI;AACP,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;AAC5D,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,gFAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAc,MAAK;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AAClE,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;AAChE,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA;SACF;AACH,IAAA,CAAC,mFAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAgB,MAAK;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;gBACrE,MAAM,EAAE,CAAC,GAAmB,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACpD,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBACvD,MAAM,EAAE,CAAC,GAAmB,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACrD,gBAAA,YAAY,EAAE;AACZ,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,gBAAgB,EAAE,QAAQ;AAC3B,iBAAA;AACF,aAAA;SACF;AACH,IAAA,CAAC,iFAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;YAClB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,IAAoB,IAAI,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,mBAAmB,CACzB,QAAa,EACb,WAAmB,EACnB,IAAiB,EAAA;QAEjB,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE;QAClC;AAEA,QAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAmD;AAC1E,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AACjC,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;AAC9D,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,OAAO,QAAQ,EAAE,GAAG,IAAI,CAAA,SAAA,EAAY,WAAW,EAAE;IACnD;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,QAAQ,EAAE;YAC1D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC;AACnE,YAAA,UAAU,EAAE,wDAAwD;AACpE,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,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACxC,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,GAAmB,EAAA;QAC1B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,QAAQ,EAAE;YAC1D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;AACpE,YAAA,UAAU,EAAE,wDAAwD;AACpE,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,WAAW,EAAE,GAAG;AAChB,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACxC,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,GAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE;IAClD;AAEA,IAAA,YAAY,CAAC,KAAsB,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE;AAEhC,QAAA,IAAI,CAAC;AACF,aAAA,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE;AAC7D,aAAA,SAAS,EAAE;IAChB;uGAjKW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,kFCxB9B,0xBA6BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRY,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,WAAA,EAAA,IAAA,EAAE,KAAK,+kCAAE,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;;2FAGhC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,CAAC,EAAA,QAAA,EAAA,0xBAAA,EAAA;;;ME6BjC,yBAAyB,CAAA;AACnB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,OAAO,GAAG,SAAS;AAEpC;;;AAGG;AACH,IAAA,cAAc,CACZ,UAAkB,EAClB,OAAA,GAAiC,EAAE,EAAA;AAEnC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QAEhC,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,OAAO,UAAU,EAAE;YACpC,UAAU;YACV,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;YAC5D,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;YAChE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;SAC3D;aACA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,EACnD,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB,CAAC,CAAC,CACH;IACL;AAEA;;;AAGG;AACH,IAAA,aAAa,CACX,UAAkB,EAClB,OAAA,GAAiC,EAAE,EAAA;AAEnC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAC9C;IACH;AAEQ,IAAA,iBAAiB,CAAC,QAAa,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,IAAI,QAAQ;AAC1C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAEzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAErE,OAAO;AACL,YAAA,GAAG,OAAO;YACV,UAAU;SACX;IACH;AAEQ,IAAA,mBAAmB,CAAC,GAAU,EAAA;AACpC,QAAA,OAAO,CAAC,GAAG,IAAI,EAAE;AACd,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;YACZ,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,WAAW;AAC1C,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI;YACrB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,WAAW,IAAI,GAAG;YACnD,OAAO;AACL,gBAAA,GAAG,IAAI;gBACP,GAAG;gBACH,IAAI;aACW;AACnB,QAAA,CAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAA2B,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;uGA3EW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACdlC,MAAM,qBAAqB,GAAG,eAAe;AA2C7C,MAAM,WAAW,GAAe;IAC9B,SAAS;IACT,MAAM;IACN,QAAQ;;;;;;CAMT;AACD,MAAM,WAAW,GAAgB;IAC/B,QAAQ;IACR,WAAW;IACX,UAAU;IACV,aAAa;IACb,SAAS;IACT,UAAU;IACV,MAAM;CACP;AACD;AACA;AACA;MAuBa,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;IAC3C,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACzE,QAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;AACpD,KAAA,CAAC;AACiB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpC,IAAA,cAAc,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAClD,IAAA,QAAQ,GAAG,YAAY,CAAC,OAAO,+EAAC;;AAGxC,IAAA,gBAAgB,GAAG,KAAK,CAAS,EAAE,uFAAC;;AAGpC,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,2EAAC;;IAGxC,qBAAqB,GAAG,KAAK,CAAC,IAAI,6FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAErE,IAAA,SAAS;;;;AAMR,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;AACjD,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B;AAClD,IAAA,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB;AAC3D,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB;AAC1C,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;;;;AAMnC,IAAA,WAAW,GAAG,MAAM,CAAW,SAAS,kFAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,kFAAC;AACxB,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;;AAGxB,IAAA,cAAc,GAAG,MAAM,CAAgC,IAAI,qFAAC;AAC5D,IAAA,iBAAiB,GAAG,MAAM,CAAiB,EAAE,wFAAC;;AAGtD,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC5B,IAAA,eAAe,GAAG,MAAM,CAAiB,EAAE,sFAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAgB,EAAE,gFAAC;AACtC,IAAA,eAAe,GAAG,MAAM,CAAgC,IAAI,sFAAC;;IAG7D,gBAAgB,GAAG,CAAC;IACpB,cAAc,GAAG,CAAC;IAClB,+BAA+B,GAAG,EAAE;IACpC,sBAAsB,GAAG,EAAE;IAC3B,uBAAuB,GAAG,KAAK;IAC/B,0BAA0B,GAAG,KAAK;;;;AAMzB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;QAEvD,MAAM,QAAQ,GAAa,EAAE;AAC7B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;AACtC,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAC;YAC1C;QACF;QACA,QAAQ,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;AAC9B,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B,IAAA,CAAC,iFAAC;AAEO,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,OAAO,IAAI,KAAK,kBAAkB;AACpC,IAAA,CAAC,+FAAC;AAEe,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,OAAO,IAAI,GAAG,CACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CACnE;AACH,IAAA,CAAC,uFAAC;AAEe,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,GAAG,EAAE,IAAI,CAAC;QACzB;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,oFAAC;;AAGO,IAAA,iBAAiB,GAAG,QAAQ,CACnC,MAAK;AACH,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,GAAG,EAAE,eAAe;AAChC,QAAA,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;QAEtE,OAAO;AACL,YAAA,OAAO,EAAE;AACP,kBAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC;AAC1D,kBAAE,EAAE;YACN,IAAI,EAAE,GAAG,EAAE;kBACP,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,kBAAE,EAAE;YACN,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC;YAC7C,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC;YACnD,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC;YACjD,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC;YACvD,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC;YAC/C,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,eAAe,CAAC;SACzD;AACH,IAAA,CAAC,wFACF;;AAGQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAAE,YAAA,OAAO,EAAE;AAE/C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAClE,CAAC,CAAC,MAAM;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7B,SAAA,CAAC,CACH;AACH,IAAA,CAAC,mFAAC;IAEO,gBAAgB,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC7C;IAEgB,kBAAkB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,wBAAwB;AAC3B,UAAE,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAA,QAAA,EAAW,KAAK,CAAC,GAAG,EAAE;UACzD,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACP;AAEQ,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAM;QACjD,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC1B,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7B,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;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,IAAI,CAAC,UAAU,EAAiB;QAE7C,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,GACR,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/B,oBAAA,KAAK,CAAC,QAAQ;oBACd,KAAK,CAAC,gBAAgB;gBACxB,OAAO;AACL,oBAAA,GAAG,KAAK;AACR,oBAAA,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;AAC7D,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,uFAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAiB,MAAK;QAC1D,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,IAAI,UAAU;AAC3D,IAAA,CAAC,yFAAC;AAEO,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM;AAC1C,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,sBAAsB,CAAC;AAC9D,YAAA,KAAK,EAAE,UAAmB;AAC1B,YAAA,IAAI,EAAE,wBAAwB;AAC9B,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC3D,YAAA,KAAK,EAAE,OAAgB;AACvB,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,CAAC;AAC1D,YAAA,KAAK,EAAE,MAAe;AACtB,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,oBAAoB,CAAC;AAC5D,YAAA,KAAK,EAAE,QAAiB;AACxB,YAAA,IAAI,EAAE,6BAA6B;AACnC,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;;;AAMF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,EAAE;IACxB;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;QAC7B,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE;YACzC,IAAI,CAAC,wBAAwB,EAAE;YAC/B;QACF;AAEA,QAAA,IACE,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB;AAClC,YAAA,GAAG,KAAK,IAAI,CAAC,+BAA+B,EAC5C;AACA,YAAA,IAAI,CAAC,+BAA+B,GAAG,GAAG;AAC1C,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QACpC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;YACpC,IAAI,CAAC,wBAAwB,EAAE;YAC/B;QACF;AAEA,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,sBAAsB;YAAE;AAEzC,QAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;IAC9B;;;;AAMQ,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,gBAAgB;AAEzC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI,CAAC;aACF,cAAc,CAAC,UAAU,EAAE;AAC1B,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,yBAAyB,EAAE,IAAI;AAC/B,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,2BAA2B,EAAE,IAAI;SAClC;AACA,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB;gBAAE;AAEzC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;AACvD,QAAA,CAAC,CAAC;IACN;IAEQ,wBAAwB,GAAA;QAC9B,IACE,IAAI,CAAC,0BAA0B;YAC/B,CAAC,IAAI,CAAC,uBAAuB;AAC7B,YAAA,CAAC,IAAI,CAAC,sBAAsB,EAC5B;YACA;QACF;QAEA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/D,EAAE,IAAI,CAAC,gBAAgB;QACzB;QACA,EAAE,IAAI,CAAC,cAAc;AACrB,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC;;;;AAMA,IAAA,aAAa,CAAC,KAAe,EAAA;AAC3B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE;AAElC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB;QACF;;QAGA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;AACrD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAE1B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,YAAA;AACE,gBAAA,KAAK,EAAE,KAAkB;gBACzB,KAAK,EAAE,WAAW,CAAC,UAAU;gBAC7B,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC;IAC/C;;;;AAMQ,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACzC,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,cAAc;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,CAAC;aACF,cAAc,CAAC,UAAU,EAAE;AAC1B,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,yBAAyB,EAAE,IAAI;AAC/B,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,2BAA2B,EAAE,IAAI;SAClC;AACA,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc;gBAAE;AAEvC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;AACtD,QAAA,CAAC,CAAC;IACN;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE;IACxB;;;;AAMA,IAAA,oBAAoB,CAAC,KAAe,EAAA;QAClC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;IAC9C;;AAGA,IAAA,YAAY,CAAC,MAAiB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC;IAEA,oBAAoB,CAAC,MAAgB,EAAE,KAAa,EAAA;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,KAAK;YAAE,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA,CAAE;;AAG1E,QAAA,OAAO,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9D;IAEA,sBAAsB,CAAC,MAAgB,EAAE,KAAa,EAAA;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AAEvB,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtD;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;QAClC,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IAC7D;AAEA,IAAA,oBAAoB,CAClB,MAAgB,EAChB,KAAa,EACb,UAAkB,EAClB,KAAc,EAAA;AAEd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACxC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;;AAElB,YAAA,MAAM,YAAY,GAChB,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,GAAG;gBACf,GAAG,OAAO,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,YAAY;aACpB;QACH;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;IACnC;AAEQ,IAAA,eAAe,CACrB,MAAgB,EAChB,KAAa,EACb,UAAkB,EAAA;QAElB,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC;AAC1D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;QAC/D,OAAO,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAC3D;;AAGA,IAAA,sBAAsB,CACpB,KAAe,EACf,KAAa,EACb,UAAkB,EAClB,OAA6B,EAAA;QAE7B,OAAO,CAAC,IAAI,EAAE;QACd,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;IACrD;IAEA,eAAe,CAAC,MAAgB,EAAE,KAAgB,EAAA;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE;;AAGA,IAAA,iBAAiB,CACf,KAAe,EACf,KAAgB,EAChB,OAA6B,EAAA;QAE7B,OAAO,CAAC,IAAI,EAAE;AACd,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;IACpC;AAEA,IAAA,kBAAkB,CAAC,MAAiB,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,KAAK;AAAE,YAAA,OAAO,EAAE;AAE3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;AAClC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QAEnB,OAAO,WAAW,CAAC,MAAM,CACvB,CAAC,CAAC,KAAK,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAC3D;IACH;AAEA,IAAA,sBAAsB,CAAC,MAAiB,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;QACtD,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,GAAG,CAAC;IAC7C;AAEA,IAAA,kBAAkB,CAAC,MAAiB,EAAA;QAClC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;IACpC;AAEA,IAAA,eAAe,CAAC,MAAiB,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;IACF;;AAGA,IAAA,kBAAkB,CAAC,MAAiB,EAAA;QAClC,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;QAC1C,OAAO,KAAK,KAAK;AACf,cAAE,IAAI,CAAC,iBAAiB;AACxB,cAAE,IAAI,CAAC,eAAe,EAAE;IAC5B;;;;AAMA,IAAA,qBAAqB,CAAC,MAAiB,EAAA;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACrD,QAAA,MAAM,UAAU,GACd,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;QAEzE,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE;YACT,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAC7B,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvD;QACH;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,wBAAwB,CAAC,MAAiB,EAAA;QACxC,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;QAC1C,OAAO,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE;IACnD;AAEA,IAAA,gBAAgB,CAAC,QAAsB,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAiB;AAC7C,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IAC/D;;;;IAMQ,eAAe,GAAA;QACrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC,OAAO,CAAC,IAAI,EAAE;QAChB;IACF;AAEQ,IAAA,aAAa,CAAC,KAA2B,EAAA;AAC/C,QAAA,MAAM,cAAc,GAClB,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK;AACvD,cAAE;AACF,cAAE,oBAAoB,GAAG,KAAK,CAAC,WAAW,EAAE;QAEhD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC;IACxD;IAEQ,2BAA2B,CACjC,QAAuC,EACvC,KAAgB,EAAA;AAEhB,QAAA,MAAM,GAAG,GAAG,QAAQ,EAAE,eAAe;AACrC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QAEnB,QAAQ,KAAK;AACX,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7C,YAAA,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AAChD,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;AAClD,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9C,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC;AACtD,YAAA,KAAK,MAAM;gBACT,OAAO,GAAG,CAAC;sBACP,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;sBAC1C,EAAE;AACR,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEQ,IAAA,mBAAmB,CACzB,QAAkC,EAClC,WAAmB,EACnB,IAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE;AAE/C,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAmD;QACzE,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAEzC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;QACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,OAAO;AAEjE,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;QAC9D,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,SAAS;AAEvE,QAAA,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAA,SAAA,EAAY,WAAW,EAAE;IAClD;IAEQ,mBAAmB,CACzB,SAAyC,EACzC,YAAqD,EAAA;AAErD,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACjC,OAAO;AACL,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,YAAY,EAAE,WAAW;oBACtC,SAAS,EAAE,YAAY,EAAE,SAAS;iBACnC,CAAC;aACH;QACH;QACA,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;SAC1C;IACH;AAEQ,IAAA,kBAAkB,CAAC,IAAoC,EAAA;;QAE7D,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI;QAC/B,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG;QAC7B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAClD,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAA,CAAE;AAChD,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS;IACrC;AAEQ,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACzC,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,OAAO;AACd,aAAA,GAAG,CAAC,CAAC,GAAG,KAAI;AACX,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,YAAA,OAAO,EAAE,KAAK,SAAS,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,GAAG,IAAI;AAClD,QAAA,CAAC;aACA,IAAI,CAAC,KAAK,CAAC;IAChB;AAEQ,IAAA,mBAAmB,CACzB,KAA+B,EAAA;QAE/B,IAAI,CAAC,KAAK,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,OAAO;AACJ,aAAA,KAAK;aACL,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AACpD,aAAA,MAAM,CAAC,CAAC,IAAI,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,gBAAA,OAAO,KAAK;AAChE,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACzB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAClD;;;;AAMA,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;YAC/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;AAChD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACvB,eAAe,EACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAC/C;QACH;aAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAC5D,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAoB;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;gBACpC,WAAW,EAAE,IAAI,CAAC,GAAG;AACrB,gBAAA,KAAK,EAAE,KAAmB;gBAC1B,KAAK,EAAE,KAAK,CAAC,YAAY;AACzB,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAyB;AAClD,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC1D,eAAe;gBACf,KAAK,EAAE,KAAK,CAAC,YAAY;AAC1B,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,WAAW,CAAC,KAAyC,EAAA;AACnD,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY;YAAE;QAEhD,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1C,QAAA,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9D,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,CAAC;AAEpD,QAAA,MAAM,OAAO,GAA4B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;YAC/D,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,YAAA,KAAK,EAAE,CAAC;AACT,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;IACtC;;AAGA,IAAA,qBAAqB,GAAG,CAAC,IAAa,KAAa;AACjD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,qBAAqB;AACxD,IAAA,CAAC;;;;IAMD,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,UAAU,EACR,sEAAsE;AACxE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;AACvD,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,wDAAwD;AACpE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,UAA0B,EAAA;AAC3C,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,kBAAkB,EAAE;YAAE;QAC9C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;IAChD;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,iBAAiB,EAAE,QAAQ,EAAE;YACxE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACvE,YAAA,UAAU,EACR,sEAAsE;AACxE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE,IAAI;AAClB,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,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;AACnD,SAAA,CAAC;IACJ;AAEA,IAAA,iBAAiB,GAAG,MAAe,KAAK;uGA/vB7B,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EASmB,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnIlD,yktBA0dA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjXI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,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,WAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,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,WAAA,EAAA,IAAA,EAClB,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,aAAA,EAAA,MAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,cAAc,wuCACd,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKK,WAAW,EAAA,UAAA,EAAA,CAAA;kBArBvB,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,UAAU;wBACV,cAAc;wBACd,aAAa;wBACb,MAAM;wBACN,IAAI;wBACJ,SAAS;wBACT,WAAW;wBACX,kBAAkB;wBAClB,SAAS;wBACT,cAAc;wBACd,IAAI;AACL,qBAAA,EAAA,QAAA,EAAA,yktBAAA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA;uHAawC,OAAO,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEnIlD;;AAEG;;ACFH;;AAEG;;;;"}