@masterteam/form-builder 0.0.17 → 0.0.19
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 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 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\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 UpdateFormSettings = 'updateFormSettings',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n\r\n // Validation Rules\r\n AddValidation = 'addValidation',\r\n UpdateValidation = 'updateValidation',\r\n DeleteValidation = 'deleteValidation',\r\n ToggleValidationActive = 'toggleValidationActive',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\nexport type FormRenderMode =\r\n | 'sections'\r\n | 'steps'\r\n | 'tabs'\r\n | 'wizard'\r\n | undefined;\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyKey: string;\r\n property?: PropertyItem;\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 _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 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 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 [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 ResetFormBuilderState,\r\n ResetFormConfiguration,\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(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(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 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 ResetFormBuilderState,\r\n ResetFormConfiguration,\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 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 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 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 // ============================================================================\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 SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n 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 /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = 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(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\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]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels()\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\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 severity=\"secondary\"\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 { 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 ],\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 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 }\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 if (this.isManageProperties()) {\r\n payload['isRead'] = this.isReadControl.value ?? true;\r\n payload['isWrite'] = this.isWriteControl.value ?? true;\r\n } else {\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\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 @if (isManageProperties()) {\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 } @else {\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 severity=\"secondary\"\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 } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\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 severity=\"secondary\"\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 {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n 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 CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write only). */\r\n readonly mode = input<FormBuilderMode>('builder');\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n /** 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\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n 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 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 getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n Connection: 'schema-connection',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n\r\n getFieldConfig(field: EnrichedFormField): Record<string, any> {\r\n const type = this.getFieldType(field);\r\n const base: Record<string, any> = { readonly: true, type };\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'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex items-center justify-between gap-3 rounded-xl bg-primary px-3 py-3 text-primary-contrast\"\r\n >\r\n <mt-icon\r\n class=\"shrink-0 cursor-pointer text-2xl transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex min-w-0 items-center gap-3\">\r\n <span class=\"truncate font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n @if (!isManageProperties()) {\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"displayFields()\"\r\n [cdkDropListDisabled]=\"isManageProperties()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"displayFields().length === 0\"\r\n >\r\n @for (field of displayFields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"\r\n isManageProperties() || field._pending || field._deleting\r\n \"\r\n [class]=\"\r\n getFieldColSpan(field) +\r\n (isManageProperties()\r\n ? ''\r\n : ' cursor-grab active:cursor-grabbing')\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex flex-col gap-3 sm:flex-row\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex shrink-0 flex-row gap-1 sm:flex-col\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative transition-all duration-200\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex flex-col gap-3 sm:flex-row\">\r\n <div class=\"min-w-0 flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div\r\n class=\"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-4\"\r\n >\r\n <div class=\"min-w-0 break-words font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n @if (isManageProperties()) {\r\n <div\r\n class=\"flex flex-wrap items-center gap-1.5 sm:ms-auto\"\r\n >\r\n @if (field.isRead === false) {\r\n <span\r\n class=\"text-xs font-medium text-red-500 bg-red-50 px-1.5 py-0.5 rounded\"\r\n >\r\n {{ t(\"hidden\") }}\r\n </span>\r\n } @else if (field.isWrite === false) {\r\n <span\r\n class=\"text-xs font-medium text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded\"\r\n >\r\n {{ t(\"read-only\") }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"transition-all duration-200\"\r\n [class.opacity-40]=\"\r\n isManageProperties() && field.isRead === false\r\n \"\r\n [class.blur-[1px]]=\"\r\n isManageProperties() && field.isRead === false\r\n \"\r\n >\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"getFieldConfig(field)\"\r\n />\r\n </div>\r\n </form>\r\n </div>\r\n <div\r\n class=\"flex shrink-0 flex-row gap-1 self-end sm:flex-col sm:self-start\"\r\n >\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n @if (!isManageProperties()) {\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n }\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex h-full items-center justify-center gap-4 rounded-xl border-1 border-primary bg-primary-50 px-4 text-center text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import { 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';\nimport type { FormRenderMode } from '../../store/form-builder/form-builder.model';\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 formConfiguration = this.facade.formConfiguration;\r\n readonly moduleKey = computed(() => this.previewInfo()?.moduleKey ?? '');\r\n readonly operationKey = computed(\r\n () => this.previewInfo()?.operationKey ?? '',\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]=\"previewInfo()?.moduleId\"\r\n [levelId]=\"previewInfo()?.levelId\"\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 viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { RadioCards, type RadioItem } from '@masterteam/components/radio-cards';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n serializeTokens,\r\n} from '@masterteam/components/formula';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n VALIDATION_FUNCTION_CATEGORIES,\r\n VALIDATION_OPERATORS,\r\n} from './validation-constants';\r\nimport type {\r\n ValidationRule,\r\n ValidationSeverity,\r\n} from '../../store/form-builder/form-builder.model';\r\n\r\nexport interface ValidationFieldProperty {\r\n key: string;\r\n name: string;\r\n type?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-fb-validation-rule-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n TextField,\r\n RadioCards,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-validation-rule-form.html',\r\n})\r\nexport class FBValidationRuleForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly facade = inject(FormBuilderFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n readonly initialData = input<ValidationRule | null>(null);\r\n readonly availableFields = input<ValidationFieldProperty[]>([]);\r\n\r\n readonly submitting = signal(false);\r\n readonly activeLang = signal<'en' | 'ar'>(\r\n (this.transloco.getActiveLang() as 'en' | 'ar') ?? 'en',\r\n );\r\n\r\n readonly messageEnControl = new FormControl<string>('');\r\n readonly messageArControl = new FormControl<string>('');\r\n readonly severityControl = new FormControl<ValidationSeverity>('error', {\r\n nonNullable: true,\r\n });\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n readonly functionCategories = VALIDATION_FUNCTION_CATEGORIES;\r\n readonly operators = VALIDATION_OPERATORS;\r\n\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((field) => field.key),\r\n );\r\n\r\n readonly toolbarLabels = 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 readonly severityOptions = computed<RadioItem[]>(() => {\r\n const _lang = this.activeLang();\r\n return [\r\n {\r\n id: 'error',\r\n name: this.transloco.translate('formBuilder.severity-error'),\r\n },\r\n {\r\n id: 'warning',\r\n name: this.transloco.translate('formBuilder.severity-warning'),\r\n },\r\n ];\r\n });\r\n\r\n constructor() {\r\n this.transloco.langChanges$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((lang) => {\r\n this.activeLang.set((lang as 'en' | 'ar') ?? 'en');\r\n });\r\n\r\n effect(() => {\r\n const data = this.initialData();\r\n if (!data) {\r\n this.messageEnControl.reset('');\r\n this.messageArControl.reset('');\r\n this.severityControl.setValue('error');\r\n this.formulaControl.reset([]);\r\n return;\r\n }\r\n\r\n this.messageEnControl.setValue(data.message?.en ?? '');\r\n this.messageArControl.setValue(data.message?.ar ?? '');\r\n this.severityControl.setValue(data.severity ?? 'error');\r\n\r\n if (data.formulaTokens) {\r\n try {\r\n const tokens = JSON.parse(data.formulaTokens) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n this.formulaControl.reset([]);\r\n }\r\n } else {\r\n this.formulaControl.reset([]);\r\n }\r\n });\r\n }\r\n\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSeverityChange(item: RadioItem): void {\r\n this.severityControl.setValue(item.id as ValidationSeverity);\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formulaTokens = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n const formulaText = tokens.length > 0 ? serializeTokens(tokens) : '';\r\n\r\n const payload = {\r\n formulaTokens,\r\n formulaText,\r\n message: {\r\n en: this.messageEnControl.value ?? '',\r\n ar: this.messageArControl.value ?? '',\r\n },\r\n severity: this.severityControl.value ?? 'error',\r\n };\r\n\r\n const data = this.initialData();\r\n this.submitting.set(true);\r\n\r\n if (data?.id !== undefined && data?.id !== null) {\r\n this.facade.updateValidation(data.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n return;\r\n }\r\n\r\n this.facade.addValidation(payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\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-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels()\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('validation-formula-placeholder')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n <div class=\"grid grid-cols-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 />\r\n <mt-text-field\r\n [label]=\"t('message-ar')\"\r\n [placeholder]=\"t('message-ar')\"\r\n [formControl]=\"messageArControl\"\r\n />\r\n </div>\r\n <div class=\"grid gap-2\">\r\n <label class=\"text-sm font-medium text-gray-700 dark:text-gray-100\">\r\n {{ t(\"severity\") }}\r\n </label>\r\n <mt-radio-cards\r\n [options]=\"severityOptions()\"\r\n [activeId]=\"severityControl.value\"\r\n (selectionChange)=\"onSeverityChange($event)\"\r\n ></mt-radio-cards>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\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 severity=\"secondary\"\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 { 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 [data]=\"tableRows()\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n (cellChange)=\"onCellChange($event)\"\r\n ></mt-table>\r\n </div>\r\n</ng-container>\r\n","import { 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 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 { 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} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FBValidationRules } from './fb-validation-rules/fb-validation-rules';\r\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 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 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 readonly scopeSelectedKey = signal('');\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 lastContextKey = '';\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 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 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.translocoService.translate(\r\n 'formBuilder.scope-' + s.toLowerCase(),\r\n ),\r\n }),\r\n );\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 = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = field.property ?? propsMap.get(field.propertyKey);\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 for context key changes and load initial data\r\n effect(\r\n () => {\r\n const key = this.contextKey();\r\n if (key && key !== this.lastContextKey) {\r\n this.lastContextKey = key;\r\n // In manageProperties mode, skip context resolve — just load form config\r\n if (this.mode() === 'manageProperties') {\r\n this.facade.getFormConfiguration();\r\n return;\r\n }\r\n this.loadInitialContext(key);\r\n }\r\n },\r\n { allowSignalWrites: true },\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n // Trigger initial load if context key is already available\r\n const key = this.contextKey();\r\n if (key && key !== this.lastContextKey) {\r\n this.lastContextKey = key;\r\n if (this.mode() === 'manageProperties') {\r\n this.facade.getFormConfiguration();\r\n return;\r\n }\r\n this.loadInitialContext(key);\r\n }\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.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 // ============================================================================\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 // Auto-select first available property\r\n const used = this.usedPropertyKeys();\r\n const available = (response?.properties ?? []).filter(\r\n (p) => !used.has(p.key),\r\n );\r\n if (available.length > 0) {\r\n this.scopeSelectedKey.set(available[0].key);\r\n }\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.scopeSelectedKey.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.translocoService.translate(\r\n 'formBuilder.scope-' + token.toLowerCase(),\r\n );\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 getScopePropertyOptions(\r\n _scope?: ScopeKey,\r\n ): Array<{ key: string; name: string }> {\r\n const scope = _scope ?? this.activeScope();\r\n const props =\r\n scope === 'Current' ? this.currentProperties() : this.scopeProperties();\r\n const used = this.usedPropertyKeys();\r\n\r\n return props\r\n .filter((p) => !used.has(p.key))\r\n .map((p) => ({ key: p.key, name: this.getPropertyLabel(p) }));\r\n }\r\n\r\n getScopeSelectedPropertyKey(_scope?: ScopeKey): string {\r\n return this.scopeSelectedKey();\r\n }\r\n\r\n setScopeSelectedProperty(_scope: ScopeKey, key: string): void {\r\n this.scopeSelectedKey.set(key);\r\n }\r\n\r\n getScopeSelectedProperty(_scope?: ScopeKey): PropertyItem | null {\r\n const key = this.scopeSelectedKey();\r\n if (!key) return null;\r\n return this.scopeProperties().find((p) => p.key === key) ?? null;\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\r\n if (scope !== 'Current') {\r\n const selected = this.getScopeSelectedProperty();\r\n if (!selected || used.has(selected.key)) return [];\r\n return [selected];\r\n }\r\n\r\n let available = this.currentProperties().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 = document.documentElement.lang 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 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 // ============================================================================\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 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 cdkDropListGroup\r\n >\r\n <!-- Properties Sidebar (hidden in manageProperties mode) -->\r\n @if (mode() !== \"manageProperties\") {\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 [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n @if (scope.key === \"Current\") {\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 } @else {\r\n <div class=\"sticky top-0 bg-surface-0 py-3\">\r\n @if (isScopePropertiesLoading(scope.key)) {\r\n <p-skeleton\r\n height=\"2.5rem\"\r\n styleClass=\"rounded-lg\"\r\n />\r\n } @else {\r\n <mt-select-field\r\n class=\"w-full\"\r\n [label]=\"''\"\r\n [filter]=\"true\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"t('scope-select-placeholder')\"\r\n [ngModel]=\"getScopeSelectedPropertyKey(scope.key)\"\r\n (ngModelChange)=\"\r\n setScopeSelectedProperty(scope.key, $event)\r\n \"\r\n [options]=\"getScopePropertyOptions(scope.key)\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [size]=\"'small'\"\r\n />\r\n }\r\n </div>\r\n }\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-2xl 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 (scope.key === \"Current\" && searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else if (scope.key !== \"Current\") {\r\n {{ t(\"select-property\") }}\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 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 @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n [mode]=\"mode()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["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 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 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\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 UpdateFormSettings = 'updateFormSettings',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n\r\n // Validation Rules\r\n AddValidation = 'addValidation',\r\n UpdateValidation = 'updateValidation',\r\n DeleteValidation = 'deleteValidation',\r\n ToggleValidationActive = 'toggleValidationActive',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\nexport type FormRenderMode =\r\n | 'sections'\r\n | 'steps'\r\n | 'tabs'\r\n | 'wizard'\r\n | undefined;\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyKey: string;\r\n property?: PropertyItem;\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 _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 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 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 [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 ResetFormBuilderState,\r\n ResetFormConfiguration,\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(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(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 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 ResetFormBuilderState,\r\n ResetFormConfiguration,\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 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 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 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 // ============================================================================\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 SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n 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 /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = 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(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\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]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels()\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\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 severity=\"secondary\"\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 { 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 ],\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 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 }\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 if (this.isManageProperties()) {\r\n payload['isRead'] = this.isReadControl.value ?? true;\r\n payload['isWrite'] = this.isWriteControl.value ?? true;\r\n } else {\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\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 @if (isManageProperties()) {\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 } @else {\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 severity=\"secondary\"\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 } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div\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 severity=\"secondary\"\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 {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n 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 CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n /** Operating mode: 'builder' (full editor) or 'manageProperties' (read/write only). */\r\n readonly mode = input<FormBuilderMode>('builder');\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n /** 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\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n 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 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 getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n Connection: 'schema-connection',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n\r\n getFieldConfig(field: EnrichedFormField): Record<string, any> {\r\n const type = this.getFieldType(field);\r\n const base: Record<string, any> = { readonly: true, type };\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'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex items-center justify-between gap-3 rounded-xl bg-primary px-3 py-3 text-primary-contrast\"\r\n >\r\n <mt-icon\r\n class=\"shrink-0 cursor-pointer text-2xl transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex min-w-0 items-center gap-3\">\r\n <span class=\"truncate font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n @if (!isManageProperties()) {\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"displayFields()\"\r\n [cdkDropListDisabled]=\"isManageProperties()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"displayFields().length === 0\"\r\n >\r\n @for (field of displayFields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"\r\n isManageProperties() || field._pending || field._deleting\r\n \"\r\n [class]=\"\r\n getFieldColSpan(field) +\r\n (isManageProperties()\r\n ? ''\r\n : ' cursor-grab active:cursor-grabbing')\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex flex-col gap-3 sm:flex-row\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex shrink-0 flex-row gap-1 sm:flex-col\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative transition-all duration-200\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex flex-col gap-3 sm:flex-row\">\r\n <div class=\"min-w-0 flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div\r\n class=\"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-4\"\r\n >\r\n <div class=\"min-w-0 break-words font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n @if (isManageProperties()) {\r\n <div\r\n class=\"flex flex-wrap items-center gap-1.5 sm:ms-auto\"\r\n >\r\n @if (field.isRead === false) {\r\n <span\r\n class=\"text-xs font-medium text-red-500 bg-red-50 px-1.5 py-0.5 rounded\"\r\n >\r\n {{ t(\"hidden\") }}\r\n </span>\r\n } @else if (field.isWrite === false) {\r\n <span\r\n class=\"text-xs font-medium text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded\"\r\n >\r\n {{ t(\"read-only\") }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"transition-all duration-200\"\r\n [class.opacity-40]=\"\r\n isManageProperties() && field.isRead === false\r\n \"\r\n [class.blur-[1px]]=\"\r\n isManageProperties() && field.isRead === false\r\n \"\r\n >\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"getFieldConfig(field)\"\r\n />\r\n </div>\r\n </form>\r\n </div>\r\n <div\r\n class=\"flex shrink-0 flex-row gap-1 self-end sm:flex-col sm:self-start\"\r\n >\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n @if (!isManageProperties()) {\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n }\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex h-full items-center justify-center gap-4 rounded-xl border-1 border-primary bg-primary-50 px-4 text-center text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import { 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 {\n protected readonly modalService = inject(ModalService);\n private readonly ref = inject(ModalRef);\n protected readonly facade = inject(FormBuilderFacade);\n\n readonly previewInfo = this.facade.previewInfo;\n readonly moduleType = this.facade.moduleType;\n readonly builderModuleId = this.facade.moduleId;\n readonly formConfiguration = this.facade.formConfiguration;\n readonly moduleKey = computed(() => {\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\n const moduleType = this.moduleType();\n\n if (moduleType === 'module') {\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\n return 'ModuleData';\n }\n }\n\n if (moduleType === 'level') {\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\n return 'LevelData';\n }\n }\n\n return previewModuleKey ?? '';\n });\n readonly operationKey = computed(\n () => this.previewInfo()?.operationKey ?? '',\n );\n readonly previewModuleId = computed(() => {\n const previewModuleId = this.previewInfo()?.moduleId;\n if (previewModuleId != null) {\n return previewModuleId;\n }\n\n if (this.moduleType() === 'module') {\n return this.builderModuleId() ?? undefined;\n }\n\n return undefined;\n });\n readonly previewLevelId = computed(() => {\n if (this.moduleType() === 'module') {\n return undefined;\n }\n\n const previewLevelId = this.previewInfo()?.levelId;\n if (previewLevelId != null) {\n return previewLevelId;\n }\n\n if (this.moduleType() === 'level') {\n return this.builderModuleId() ?? undefined;\n }\n\n return undefined;\n });\n readonly renderMode = computed<FormRenderMode | 'form'>(() => {\n const renderMode = this.formConfiguration()?.renderMode;\n if (\n renderMode === 'steps' ||\n renderMode === 'tabs' ||\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\n onClose(): void {\n this.ref.close();\n }\n}\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\n [moduleKey]=\"moduleKey()\"\n [operationKey]=\"operationKey()\"\n [moduleId]=\"previewModuleId()\"\n [levelId]=\"previewLevelId()\"\n [levelDataId]=\"previewInfo()?.levelDataId\"\n [moduleDataId]=\"previewInfo()?.moduleDataId\"\n [requestSchemaId]=\"previewInfo()?.requestSchemaId\"\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 } from '@angular/forms';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { RadioCards, type RadioItem } from '@masterteam/components/radio-cards';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n 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 RadioCards,\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 readonly messageArControl = new FormControl<string>('');\r\n readonly severityControl = new FormControl<ValidationSeverity>('error', {\r\n nonNullable: true,\r\n });\r\n readonly formulaControl = new FormControl<FormulaBuilderValue | null>(null);\n readonly formulaValidation = signal<ValidationResult>(\n EMPTY_FORMULA_VALIDATION,\n );\n readonly builderSchemaId = computed(() => {\n const moduleType = this.moduleType();\n\n if (moduleType === 'module') {\n return this.toNumericId(this.moduleId());\n }\n\n if (moduleType === 'level') {\n return this.toNumericId(this.moduleId());\n }\n\n return (\n this.toNumericId(this.parentModuleId()) ??\n this.toNumericId(this.moduleId())\n );\n });\n readonly builderContextEntityTypeKey = computed(() => {\n const previewModuleKey = this.previewInfo()?.moduleKey?.trim();\n const moduleType = this.moduleType();\n\n if (moduleType === 'module') {\n if (!previewModuleKey || previewModuleKey === 'LevelData') {\n return 'ModuleData';\n }\n }\n\n if (moduleType === 'level') {\n if (!previewModuleKey || previewModuleKey === 'ModuleData') {\n return 'LevelData';\n }\n }\n\n if (previewModuleKey) {\n return previewModuleKey;\n }\n\n if (moduleType === 'level') {\n return 'LevelData';\n }\n\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 canSave = computed(() => {\r\n const expression = this.formulaControl.value?.expression?.trim() ?? '';\r\n return (\r\n expression.length > 0 &&\r\n this.formulaValidation().isValid &&\r\n !this.submitting()\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 this.formulaControl.setValue({\r\n expression: data.formulaTokens ?? '',\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 onSeverityChange(item: RadioItem): void {\r\n this.severityControl.setValue(item.id as ValidationSeverity);\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 formulaTokens = this.formulaControl.value?.expression?.trim() ?? '';\r\n if (!formulaTokens || !this.formulaValidation().isValid) {\r\n return;\r\n }\r\n\r\n const payload = {\r\n formulaTokens,\r\n formulaText: formulaTokens,\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 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 [contextEntityTypeKey]=\"builderContextEntityTypeKey()\"\r\n [propertiesByPath]=\"formulaPropertiesByPath()\"\r\n [codeOnly]=\"true\"\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 />\r\n <mt-text-field\r\n [label]=\"t('message-ar')\"\r\n [placeholder]=\"t('message-ar')\"\r\n [formControl]=\"messageArControl\"\r\n />\r\n </div>\r\n <div class=\"grid gap-2\">\r\n <label class=\"text-sm font-medium text-gray-700 dark:text-gray-100\">\r\n {{ t(\"severity\") }}\r\n </label>\r\n <mt-radio-cards\r\n [options]=\"severityOptions()\"\r\n [activeId]=\"severityControl.value\"\r\n (selectionChange)=\"onSeverityChange($event)\"\r\n ></mt-radio-cards>\r\n </div>\r\n @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 severity=\"secondary\"\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 [data]=\"tableRows()\"\r\n [columns]=\"tableColumns()\"\r\n [rowActions]=\"rowActions()\"\r\n (cellChange)=\"onCellChange($event)\"\r\n ></mt-table>\r\n </div>\r\n</ng-container>\r\n","import { 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 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 { 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} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FBValidationRules } from './fb-validation-rules/fb-validation-rules';\r\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 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 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 readonly scopeSelectedKey = signal('');\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 lastContextKey = '';\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 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 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.translocoService.translate(\r\n 'formBuilder.scope-' + s.toLowerCase(),\r\n ),\r\n }),\r\n );\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 = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = field.property ?? propsMap.get(field.propertyKey);\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 for context key changes and load initial data\r\n effect(\r\n () => {\r\n const key = this.contextKey();\r\n if (key && key !== this.lastContextKey) {\r\n this.lastContextKey = key;\r\n // In manageProperties mode, skip context resolve — just load form config\r\n if (this.mode() === 'manageProperties') {\r\n this.facade.getFormConfiguration();\r\n return;\r\n }\r\n this.loadInitialContext(key);\r\n }\r\n },\r\n { allowSignalWrites: true },\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n // Trigger initial load if context key is already available\r\n const key = this.contextKey();\r\n if (key && key !== this.lastContextKey) {\r\n this.lastContextKey = key;\r\n if (this.mode() === 'manageProperties') {\r\n this.facade.getFormConfiguration();\r\n return;\r\n }\r\n this.loadInitialContext(key);\r\n }\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.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 // ============================================================================\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 // Auto-select first available property\r\n const used = this.usedPropertyKeys();\r\n const available = (response?.properties ?? []).filter(\r\n (p) => !used.has(p.key),\r\n );\r\n if (available.length > 0) {\r\n this.scopeSelectedKey.set(available[0].key);\r\n }\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.scopeSelectedKey.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.translocoService.translate(\r\n 'formBuilder.scope-' + token.toLowerCase(),\r\n );\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 getScopePropertyOptions(\r\n _scope?: ScopeKey,\r\n ): Array<{ key: string; name: string }> {\r\n const scope = _scope ?? this.activeScope();\r\n const props =\r\n scope === 'Current' ? this.currentProperties() : this.scopeProperties();\r\n const used = this.usedPropertyKeys();\r\n\r\n return props\r\n .filter((p) => !used.has(p.key))\r\n .map((p) => ({ key: p.key, name: this.getPropertyLabel(p) }));\r\n }\r\n\r\n getScopeSelectedPropertyKey(_scope?: ScopeKey): string {\r\n return this.scopeSelectedKey();\r\n }\r\n\r\n setScopeSelectedProperty(_scope: ScopeKey, key: string): void {\r\n this.scopeSelectedKey.set(key);\r\n }\r\n\r\n getScopeSelectedProperty(_scope?: ScopeKey): PropertyItem | null {\r\n const key = this.scopeSelectedKey();\r\n if (!key) return null;\r\n return this.scopeProperties().find((p) => p.key === key) ?? null;\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\r\n if (scope !== 'Current') {\r\n const selected = this.getScopeSelectedProperty();\r\n if (!selected || used.has(selected.key)) return [];\r\n return [selected];\r\n }\r\n\r\n let available = this.currentProperties().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 = document.documentElement.lang 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 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 // ============================================================================\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 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 cdkDropListGroup\r\n >\r\n <!-- Properties Sidebar (hidden in manageProperties mode) -->\r\n @if (mode() !== \"manageProperties\") {\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 [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n @if (scope.key === \"Current\") {\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 } @else {\r\n <div class=\"sticky top-0 bg-surface-0 py-3\">\r\n @if (isScopePropertiesLoading(scope.key)) {\r\n <p-skeleton\r\n height=\"2.5rem\"\r\n styleClass=\"rounded-lg\"\r\n />\r\n } @else {\r\n <mt-select-field\r\n class=\"w-full\"\r\n [label]=\"''\"\r\n [filter]=\"true\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"t('scope-select-placeholder')\"\r\n [ngModel]=\"getScopeSelectedPropertyKey(scope.key)\"\r\n (ngModelChange)=\"\r\n setScopeSelectedProperty(scope.key, $event)\r\n \"\r\n [options]=\"getScopePropertyOptions(scope.key)\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [size]=\"'small'\"\r\n />\r\n }\r\n </div>\r\n }\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-2xl 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 (scope.key === \"Current\" && searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else if (scope.key !== \"Current\") {\r\n {{ t(\"select-property\") }}\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 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 @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n [mode]=\"mode()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA;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,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;;AAGzC;AACA;AACA;MAEa,QAAQ,CAAA;AAGV,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,yBAAyB;IAChD,WAAA,CACS,SAAiB,EACjB,OAAwB,EAAA;QADxB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,WAAW,CAAA;AAGb,IAAA,SAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,4BAA4B;AACnD,IAAA,WAAA,CACS,SAAiB,EACjB,OAAe,EACf,OAA2B,EAAA;QAF3B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,WAAW,CAAA;AAGb,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,4BAA4B;IACnD,WAAA,CACS,SAAiB,EACjB,OAAe,EAAA;QADf,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,aAAa,CAAA;AAGf,IAAA,SAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,8BAA8B;IACrD,WAAA,CACS,SAAiB,EACjB,OAA8B,EAAA;QAD9B,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,SAAS,CAAA;AAGX,IAAA,SAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,0BAA0B;AACjD,IAAA,WAAA,CACS,SAAiB,EACjB,OAAe,EACf,OAAyB,EAAA;QAFzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;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;;;AC1JL;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,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;;AAG/B,IAAA,oBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;;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,EAvBW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;ACkChC;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;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,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;uGApzBW,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,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,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;AAlxBM,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,CAqzB5B;2FArzBY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCxBY,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,sEACF;IAEQ,4BAA4B,GAAG,QAAQ,CAAC,MAC/C,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,sBAAsB,CAC5C,wEACF;IAEQ,sBAAsB,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,kBAAkB,CACxC,kEACF;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,2DAC3E;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,6DACF;IAEQ,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,6DACF;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,yDACzE;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,2DAC5E;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,2DAC5E;IAEQ,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,yDAC1E;IAEQ,kBAAkB,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,aAAa,CACnC,8DACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,gBAAgB,CACtC,gEACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,gBAAgB,CACtC,gEACF;IAEQ,oBAAoB,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,CACvC,oBAAoB,CAAC,sBAAsB,CAC5C,gEACF;;;;AAMQ,IAAA,sBAAsB,GAAG,QAAQ,CACxC,MACE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;AACpE,QAAA,IAAI,kEACP;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,QAAA,QACE,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACvC,YAAA,MAAM,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC1C,YAAA,MAAM,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC1C,YAAA,IAAI;AAER,IAAA,CAAC,wDAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;AACxC,QAAA,QACE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACrC,YAAA,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI;AAER,IAAA,CAAC,sDAAC;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,2DAAC;;;;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;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;;;;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;uGAhQW,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;;;ACFlC;;;;;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,0DAAC;;AAGlC,IAAA,eAAe,GAAG,KAAK,CAA2B,EAAE,2DAAC;;AAGrD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;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,GAAA,EAAA,CAAA,CACxD;;AAGQ,IAAA,cAAc,GAAG,IAAI,WAAW,CAAiB,EAAE,CAAC;;AAG5C,IAAA,SAAS,GAAG,SAAS,CAAgB,QAAQ,qDAAC;;IAGtD,kBAAkB,GAAG,6BAA6B;IAClD,SAAS,GAAG,mBAAmB;;IAG/B,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACzC;;AAGQ,IAAA,aAAa,GAAG,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,yDAAC;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,MAAM,CAAC;YACxC;AAAE,YAAA,MAAM;;YAER;QACF;IACF;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAC/B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,MAAM,GAAA;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/D,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAClC;uGApFW,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,ECzD9B,6/CAwDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPI,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,6/CAAA,EAAA;2TA0BqD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEpCnD,WAAW,CAAA;AACL,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,WAAW,GAAG,KAAK,CAA2B,IAAI,uDAAC;;AAEnD,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,uDAAC;AAC9C,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,gDAAC;AAExC,IAAA,kBAAkB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,8DACzC;;AAGQ,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,IAAA,yBAAyB,GAAG,MAAM,CAAS,EAAE,qEAAC;AAC/C,IAAA,mBAAmB;AAE3B;;;AAGG;AACM,IAAA,eAAe,GAAG,QAAQ,CAA2B,MAAK;AACjE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,MAAM,MAAM,GAA6B,EAAE;AAE3C,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;;gBAElC,IAAI,YAAY,IAAI,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE;oBAAE;gBAElD,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,KAAK,CAAC,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,2DAAC;;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;AAEtC,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,4DACpB;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;YACxD;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;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI;YACpD,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,IAAI;QACxD;aAAO;YACL,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;QACV;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;uGA7QW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,EC5CxB,opGAyGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrEI,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,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,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIF,WAAW,EAAA,UAAA,EAAA,CAAA;kBAZvB,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,MAAM;wBACN,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,opGAAA,EAAA;;;MExBU,aAAa,CAAA;AACP,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAoC,IAAI,uDAAC;AAC5D,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,yDAAC;;AAGhC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;;AAGxB,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAC/B,IAAA,UAAU,GAAsB;AACvC,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AACtD,wBAAA,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC5D,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AACtD,wBAAA,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC5D,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;oBAC1B,SAAS,EAAE,IAAI,CAAC,EAAE;oBAClB,SAAS,EAAE,IAAI,CAAC,EAAE;AACnB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;AAE9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACxC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC;AACxB,gBAAA,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC;AACzB,aAAA;SACF;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,SAAS,EAAE;;YAEb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;gBACtD,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,aAAA,CAAC;QACJ;aAAO;;AAEL,YAAA,IAAI,CAAC;AACF,iBAAA,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE;AACtD,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,aAAA,CAAC;QACN;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrC,KAAK;AACL,YAAA,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;oBAC7C,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAChC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;uGA7GW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB1B,6jDA2DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7CY,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,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,6jDAAA,EAAA;;;MEqC5D,SAAS,CAAA;AACH,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAuB;AAC/C,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,yDAAC;;AAEhC,IAAA,WAAW,GAAG,KAAK,CAAwB,EAAE,uDAAC;;AAE9C,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,gDAAC;;IAGxC,WAAW,GAAG,MAAM,EAAoC;;AAGxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAmB;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,IAAA,CAAC,uDAAC;AAEO,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,kDAAC;;AAG9C,IAAA,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,yDAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,8DACzC;;AAGQ,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,oDAAC;;AAGf,IAAA,eAAe,GAAG,IAAI,GAAG,EAAqB;AAE/D,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;gBAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAE3C,IAAI,EAAE,EAAE;;YAEN,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC5B,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI;gBAE/D,EAAE,GAAG,IAAI,SAAS,CAAC;oBACjB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AACrC,iBAAA,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;YACxC;QACF;aAAO;YACL,EAAE,GAAG,IAAI,SAAS,CAAC;AACjB,gBAAA,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAChD,aAAA,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACxC;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,KAAuC,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAE9B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE;YACnD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,0BAA0B,CAAC;AACnE,YAAA,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,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,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,iBAAiB,EAAE,QAAQ;AAC3B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,gBAAgB,EAAE,iBAAiB;AACnC,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,mBAAmB;SAChC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM;IACtC;AAEA,IAAA,cAAc,CAAC,KAAwB,EAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,MAAM,IAAI,GAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AAE1D,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;uGA9LW,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,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnDtB,i5OAgLA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1II,MAAM,4VACN,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,OAAO,wcACP,WAAW,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,gMAClB,YAAY,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,OAAO,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA;;2FAIE,SAAS,EAAA,UAAA,EAAA,CAAA;kBAjBrB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,MAAM;wBACN,IAAI;wBACJ,IAAI;wBACJ,OAAO;wBACP,WAAW;wBACX,kBAAkB;wBAClB,kBAAkB;wBAClB,YAAY;wBACZ,mBAAmB;wBACnB,OAAO;AACR,qBAAA,EAAA,QAAA,EAAA,i5OAAA,EAAA;;;MElCU,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,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,qDAAC;AACO,IAAA,YAAY,GAAG,QAAQ,CAC9B,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,IAAI,EAAE,wDAC7C;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,2DAAC;AACO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AAClC,YAAA,OAAO,SAAS;QAClB;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;AAClD,QAAA,IAAI,cAAc,IAAI,IAAI,EAAE;AAC1B,YAAA,OAAO,cAAc;QACvB;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,SAAS;QAC5C;AAEA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,0DAAC;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,sDAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;uGAxEW,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,6iCAiCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBY,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,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,SAAA,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,6iCAAA,EAAA;;;AEuB3C,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,uDAAC;AAChD,IAAA,eAAe,GAAG,KAAK,CAA4B,EAAE,2DAAC;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,sDAAC;AAC1B,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,qDAAC;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,GAAA,EAAA,CAAA,CACxD;AAEQ,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AAC9C,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AAC9C,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;AAClE,IAAA,iBAAiB,GAAG,MAAM,CACjC,wBAAwB,6DACzB;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C;AAEA,QAAA,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C;QAEA,QACE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAErC,IAAA,CAAC,2DAAC;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,uEAAC;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,mEAAC;AACO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;AACtE,QAAA,QACE,UAAU,CAAC,MAAM,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO;AAChC,YAAA,CAAC,IAAI,CAAC,UAAU,EAAE;AAEtB,IAAA,CAAC,mDAAC;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,2DAAC;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;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3B,gBAAA,UAAU,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;AACpC,gBAAA,OAAO,EAAE,EAAE;AACZ,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,gBAAgB,CAAC,IAAe,EAAA;QAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAwB,CAAC;IAC9D;AAEA,IAAA,yBAAyB,CAAC,MAAwB,EAAA;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;IACpC;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;QACzE,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE;YACvD;QACF;AAEA,QAAA,MAAM,OAAO,GAAG;YACd,aAAa;AACb,YAAA,WAAW,EAAE,aAAa;AAC1B,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,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;uGA/MW,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,ECvDjC,++EAiFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnCI,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,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,UAAU,mNACV,cAAc,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,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,UAAU;wBACV,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,++EAAA,EAAA;;;ME5BU,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,GAAA,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,yDAAC;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,2DAAC;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,qDAAC;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,wDAAC;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,sDAAC;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,kxBA2BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNY,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,6vBAAE,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,kxBAAA,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;;;ACoBlC,MAAM,WAAW,GAAe;IAC9B,SAAS;IACT,MAAM;IACN,QAAQ;IACR,WAAW;IACX,UAAU;IACV,aAAa;IACb,SAAS;IACT,UAAU;CACX;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;AACzC,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpC,IAAA,cAAc,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAClD,IAAA,QAAQ,GAAG,YAAY,CAAC,OAAO,oDAAC;;AAGxC,IAAA,gBAAgB,GAAG,KAAK,CAAS,EAAE,4DAAC;;AAGpC,IAAA,IAAI,GAAG,KAAK,CAAkB,SAAS,gDAAC;AAEzC,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,uDAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;AACxB,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,4DAAC;;AAGxB,IAAA,cAAc,GAAG,MAAM,CAAgC,IAAI,0DAAC;AAC5D,IAAA,iBAAiB,GAAG,MAAM,CAAiB,EAAE,6DAAC;;AAGtD,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,eAAe,GAAG,MAAM,CAAiB,EAAE,2DAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAgB,EAAE,qDAAC;AACrC,IAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,4DAAC;AAC9B,IAAA,eAAe,GAAG,MAAM,CAAgC,IAAI,2DAAC;;IAG7D,gBAAgB,GAAG,CAAC;IACpB,cAAc,GAAG,CAAC;IAClB,cAAc,GAAG,EAAE;;;;AAMV,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,sDAAC;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,4DAAC;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,yDAAC;;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,6DACF;;AAGQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,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,gBAAgB,CAAC,SAAS,CACpC,oBAAoB,GAAG,CAAC,CAAC,WAAW,EAAE,CACvC;AACF,SAAA,CAAC,CACH;AACH,IAAA,CAAC,wDAAC;;AAGO,IAAA,gBAAgB,GAAG,QAAQ,CAAwB,MAAK;AAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAmB;QAEzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AAChC,YAAA,GAAG,OAAO;YACV,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAuB;AACtD,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC9D,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,4DAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAiB,MAAK;QAC1D,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,IAAI,UAAU;AAC3D,IAAA,CAAC,8DAAC;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,GAAA,EAAA,CAAA,CAAC;;;;AAMF,IAAA,WAAA,GAAA;;QAEE,MAAM,CACJ,MAAK;AACH,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE;AACtC,gBAAA,IAAI,CAAC,cAAc,GAAG,GAAG;;AAEzB,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,EAAE;AACtC,oBAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;oBAClC;gBACF;AACA,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAC9B;AACF,QAAA,CAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B;IACH;IAEA,QAAQ,GAAA;;AAEN,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;QAC7B,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AACzB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,EAAE;AACtC,gBAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;gBAClC;YACF;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAC9B;IACF;;;;AAMQ,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,gBAAgB;AAEzC,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;;;;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;;AAGpD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACpC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,CACnD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CACxB;AACD,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7C;AACF,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,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,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,gBAAgB,CAAC,SAAS,CACpC,oBAAoB,GAAG,KAAK,CAAC,WAAW,EAAE,CAC3C;IACH;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,uBAAuB,CACrB,MAAiB,EAAA;QAEjB,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,MAAM,KAAK,GACT,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AACzE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEpC,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE;AAEA,IAAA,2BAA2B,CAAC,MAAiB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;IAChC;IAEA,wBAAwB,CAAC,MAAgB,EAAE,GAAW,EAAA;AACpD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,wBAAwB,CAAC,MAAiB,EAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QACrB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI;IAClE;AAEA,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;AAErD,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE;YAChD,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,EAAE;YAClD,OAAO,CAAC,QAAQ,CAAC;QACnB;QAEA,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxE,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,QAAQ,CAAC,eAAe,CAAC,IAAmB;AACzD,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;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;;;;IAMA,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/sB7B,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,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAMmB,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvHlD,uiwBA+dA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/XI,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,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,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,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,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,cAAc,gyCACd,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,uiwBAAA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA;uHAUwC,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,EAAA,CAAA;;AEvHlD;;AAEG;;ACFH;;AAEG;;;;"}
|