{"version":3,"file":"sdcorejs-angular-components-form-generic.mjs","sources":["../../../projects/sdcorejs-angular/components/form-generic/src/configurations/form-generic.configuration.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-component.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-expression.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-generic.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-render.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/component-viewed.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/when-expression.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-query.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-view.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-feel.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/html.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/hyperlink.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/services/builder.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/form-expression-query-adapter.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-validation.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder-layout.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/sdcorejs-angular-components-form-generic.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IWorkflowConfigurationForm } from './form.configuration';\n\nexport interface ISdFormGenericConfiguration {\n  form?: IWorkflowConfigurationForm;\n}\n\nexport const SD_FORM_GENERIC_CONFIGURATION = new InjectionToken<ISdFormGenericConfiguration>('sd.form-generic.configuration');\n","// Định nghĩa các Components của Form Render\nimport { SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { Color, ValidationPatternType } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericSelectionStaticItem } from './form-generic-definition-selection.model';\nimport { SdFormGenericExpression } from './form-generic-expression.model';\nimport { SdFormGeneric } from './form-generic.model';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n\nexport interface SdFormRenderConfiguration {\n  onLoaded?: () => void;\n  components: SdFormGeneric['components'];\n  validations?: SdFormGeneric['validations'];\n  variables?: SdFormGenericVariable[];\n  beforeSubmit?: (entity: Record<string, any>) => Promise<Record<string, any>>;\n}\n\nexport interface SdFormGenericLayout {\n  row?: string;\n  columns: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n  mobileColumns?:\n    | '1'\n    | '2'\n    | '3'\n    | '4'\n    | '5'\n    | '6'\n    | '7'\n    | '8'\n    | '9'\n    | '10'\n    | '11'\n    | '12'\n    | 1\n    | 2\n    | 3\n    | 4\n    | 5\n    | 6\n    | 7\n    | 8\n    | 9\n    | 10\n    | 11\n    | 12;\n}\n\nexport const GenerateId = () => {\n  return Utilities.randomId('id');\n};\n\nexport const GenerateKey = () => {\n  return Utilities.randomId('key');\n};\n\nexport const SdFormatComponent = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n  if (component) {\n    if (!component.id) {\n      component.id = GenerateId();\n    }\n    // Html và Group không có key và validate\n    if (component.type !== 'group') {\n      if (!component.key) {\n        component.key = GenerateKey();\n      }\n      if (!component.validate) {\n        component.validate = {};\n      }\n    }\n    if (!component.layout) {\n      component.layout = {\n        columns: '12',\n      };\n    }\n\n    if (!component.properties) {\n      component.properties = {};\n    }\n\n    if (component.type === 'datetime') {\n      // Nếu là datetime thì gán mặc định subtype là date\n      component.subtype = component.subtype || 'date';\n    } else if (component.type === 'table') {\n      // Nếu là table thì lấy columns mẫu\n      if (!component.columns?.length) {\n        component.columns = [\n          {\n            key: 'key_1',\n            label: 'Cột 1',\n            type: 'string',\n          },\n          {\n            key: 'key_2',\n            label: 'Cột 2',\n            type: 'string',\n          },\n          {\n            key: 'key_3',\n            label: 'Cột 3',\n            type: 'string',\n          },\n        ];\n      }\n    } else if (component.type === 'radio') {\n      // Nếu là radio thì lấy values mẫu\n      if (!component.values?.length) {\n        component.values = [\n          {\n            value: 'value_1',\n            label: 'Label 1',\n          },\n          {\n            value: 'value_2',\n            label: 'Label 2',\n          },\n        ];\n      }\n      // Mặc định trải ngang các lựa chọn\n      component.properties.direction = component.properties.direction || 'row';\n    } else if (component.type === 'upload') {\n      component.properties!.type = component.properties!.type || 'file';\n      component.properties!.source = component.properties!.source || 'ALL';\n    }\n  }\n};\n\nexport interface SdFormGenericVariable {\n  id: string;\n  key: string;\n  label: string;\n}\n\nexport type SdFormGenericComponent =\n  | SdFormGenericTextfield\n  | SdFormGenericChipString\n  | SdFormGenericChipCalendar\n  | SdFormGenericTextarea\n  | SdFormGenericNumber\n  | SdFormGenericCheckbox\n  | SdFormGenericDatetime\n  | SdFormGenericValues\n  | SdFormGenericUpload\n  | SdFormGenericTable\n  | SdFormGenericHtml\n  | SdFormGenericBreak;\n\nexport type SdFormGenericValues = SdFormGenericRadio | SdFormGenericSelect | SdFormGenericChecklist;\nexport interface SdFormGenericComponentBase {\n  template?: string;\n  id: string;\n  key: string;\n  label: string;\n  helperText?: string;\n  layout?: SdFormGenericLayout;\n  validate?: {\n    required?: boolean;\n  };\n  disabled?: boolean;\n  properties?: {\n    viewed?: boolean; // true nếu muốn hiển thị dạng view (view khác với disable)\n    hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n    hidden?: boolean;\n    hiddenWhenExpression?: SdFormGenericExpression;\n    visibleWhenExpression?: SdFormGenericExpression;\n    disabledWhenExpression?: SdFormGenericExpression;\n    requiredWhenExpression?: SdFormGenericExpression;\n    onChange?: {\n      // Thực tế khi sử dụng sẽ có mong muốn trigger sự kiện change sẽ làm gì đó\n      // Nếu muốn setValues thì cú pháp sẽ là \"key\": \"${otherKey}\" hoặc \"key\": true, \"key\": \"value\"\n      setValues?: Record<string, any>;\n    };\n  } & Record<string, any>;\n}\nexport interface SdFormGenericTextfield extends SdFormGenericComponentBase {\n  type: 'textfield';\n  defaultValue?: string;\n  validate?: {\n    maxlength?: number;\n    minlength?: number;\n    pattern?: ValidationPatternType | string; // Regex\n    patternErrorMessage?: string; // Message lỗi khi invalid pattern\n  } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericChipString extends SdFormGenericComponentBase {\n  type: 'chip-string';\n  defaultValue?: string[];\n  validate?: {\n    maxlength?: number;\n    minlength?: number;\n    pattern?: ValidationPatternType | string; // Regex\n    patternErrorMessage?: string; // Message lỗi khi invalid pattern\n    maxOfItems?: number; // Số lượng item tối đa\n  } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericChipCalendar extends SdFormGenericComponentBase {\n  type: 'chip-calendar';\n  defaultValue?: string[];\n  validate?: {\n    maxlength?: number;\n    minlength?: number;\n    pattern?: ValidationPatternType | string; // Regex\n    patternErrorMessage?: string; // Message lỗi khi invalid pattern\n    maxOfItems?: number; // Số lượng item tối đa\n  } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericTextarea extends SdFormGenericComponentBase {\n  type: 'textarea';\n  defaultValue?: string;\n  validate?: {\n    maxlength?: number;\n    minlength?: number;\n  } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericNumber extends SdFormGenericComponentBase {\n  type: 'number';\n  defaultValue?: number;\n  validate?: {\n    min?: number;\n    max?: number;\n  } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericCheckbox extends SdFormGenericComponentBase {\n  type: 'checkbox';\n  defaultValue?: boolean;\n}\n\nexport interface SdFormGenericDatetime extends SdFormGenericComponentBase {\n  type: 'datetime';\n  subtype: 'date' | 'datetime';\n  defaultValue?: string;\n  validate?: {\n    min?: 'TODAY' | string;\n    max?: 'TODAY' | string;\n  } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericRadio extends SdFormGenericComponentBase {\n  type: 'radio';\n  values?: SdFormGenericSelectionStaticItem[];\n  valuesKey?: string; // Mapping từ form-render-values\n  defaultValue?: string;\n  properties?: {\n    direction?: 'row' | 'column';\n  } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericSelect extends SdFormGenericComponentBase {\n  type: 'select';\n  values?: SdFormGenericSelectionStaticItem[];\n  valuesKey?: string; // Mapping từ form-render-values\n  defaultValue?: string | string[];\n  properties?: {\n    query?: Record<string, any>;\n    multiple?: boolean;\n    setVariables?: Record<string, string>; // Chỉ đối với dữ liệu từ API\n  } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericChecklist extends SdFormGenericComponentBase {\n  type: 'checklist';\n  values?: SdFormGenericSelectionStaticItem[];\n  valuesKey?: string; // Mapping từ form-render-values\n  defaultValue?: string[];\n  properties?: {\n    query?: Record<string, any>;\n  } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericGroup {\n  id: string;\n  type: 'group';\n  label: string;\n  layout: SdFormGenericLayout;\n  components: SdFormGenericComponent[];\n  properties: {\n    icon: string;\n    color: Color;\n    hidden?: boolean;\n    hiddenWhenExpression?: SdFormGenericExpression;\n    visibleWhenExpression?: SdFormGenericExpression;\n  };\n}\n\n// CUSTOM\nexport interface SdFormGenericUpload extends SdFormGenericComponentBase {\n  type: 'upload';\n  properties?: {\n    type?: SdUnwrapSignal<SdUploadFile['type']>;\n    maxSize?: SdUnwrapSignal<SdUploadFile['maxSize']>; // Dung lượng tối đa\n    max?: SdUnwrapSignal<SdUploadFile['max']>; // Số lượng file tối đa\n    extensions?: SdUnwrapSignal<SdUploadFile['extensions']>;\n    args?: Record<string, any>; //.tham số\n    // Dành cho mobile\n    source?: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE'; // Mặc định là ALL\n  } & SdFormGenericComponentBase['properties'];\n}\n\nexport interface FormRenderComponentTableColumnValues {\n  valuesKey: string;\n  query?: Record<string, any>;\n}\n\nexport type SdFormGenericTableColumn<T = any> =\n  | TableColumnString<T>\n  | TableColumnNumber<T>\n  | TableColumnBool<T>\n  | TableColumnDate<T>\n  | TableColumnDatetime<T>\n  | TableColumnRadio<T>\n  | TableColumnValues<T>\n  | TableColumnImage<T>\n  | TableColumnFile<T>;\n\nexport const TableColumnTypes = [\n  {\n    value: 'string',\n    display: 'Chuỗi',\n  },\n  {\n    value: 'number',\n    display: 'Số',\n  },\n  {\n    value: 'date',\n    display: 'Ngày',\n  },\n  {\n    value: 'datetime',\n    display: 'Ngày giờ',\n  },\n  {\n    value: 'values',\n    display: 'Chọn giá trị',\n  },\n  {\n    value: 'boolean',\n    display: 'True/False',\n  },\n  {\n    value: 'file',\n    display: 'Tệp',\n  },\n  {\n    value: 'image',\n    display: 'Ảnh',\n  },\n];\n\ninterface TableColumnBase<T = any> {\n  key: Extract<keyof T, string>;\n  label: string;\n  width?: SdTableColumn['width'];\n  validate?: {\n    required?: boolean;\n  };\n}\n\ninterface TableColumnString<T = any> extends TableColumnBase<T> {\n  type: 'string';\n  validate?: { minlength?: number; maxlength?: number; pattern?: string; patternErrorMessage?: string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnNumber<T = any> extends TableColumnBase<T> {\n  type: 'number';\n  validate?: { min?: number; max?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDate<T = any> extends TableColumnBase<T> {\n  type: 'date';\n  validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDatetime<T = any> extends TableColumnBase<T> {\n  type: 'datetime';\n  validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnBool<T = any> extends TableColumnBase<T> {\n  type: 'boolean';\n  displayOnTrue?: string;\n  displayOnFalse?: string;\n}\n\ninterface TableColumnRadio<T = any> extends TableColumnBase<T> {\n  type: 'radio';\n  values?: SdFormGenericSelectionStaticItem[];\n}\n\ninterface TableColumnValues<T = any> extends TableColumnBase<T> {\n  type: 'values';\n  valuesKey: string;\n  query?: Record<string, any>;\n  values?: SdFormGenericSelectionStaticItem[];\n}\ninterface TableColumnImage<T = any> extends TableColumnBase<T> {\n  type: 'image';\n  args?: Record<string, any>;\n  validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnFile<T = any> extends TableColumnBase<T> {\n  type: 'file';\n  args?: Record<string, any>;\n  validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\nexport interface SdFormGenericTable extends SdFormGenericComponentBase {\n  type: 'table';\n  columnsKey?: string;\n  columns?: SdFormGenericTableColumn[];\n  properties?: {\n    type?: SdTableOption['type'];\n    titleButtonCreate?: string; // Tiêu đề nút tạo mới\n  } & SdFormGenericComponentBase['properties'];\n}\n\n/**\n * Break component — invisible runtime element ép xuống dòng mới. Dùng khi layout có\n * vùng cố định và việc ẩn/hiện trường khác không nên xáo trộn vị trí các trường còn lại.\n * Ở canvas (design) render thanh ngang mảnh; ở runtime render empty 12-col cell.\n *\n * Extend SdFormGenericComponentBase để tương thích với union narrowing trong các pipe/render\n * (key, validate, disabled, properties full) — runtime sẽ ignore mọi field ngoài id/type/layout.\n */\nexport interface SdFormGenericBreak extends SdFormGenericComponentBase {\n  type: 'break';\n}\n\nexport interface SdFormGenericHtml {\n  template?: string;\n  id: string;\n  key?: string;\n  type: 'html';\n  content: string;\n  validate?: {\n    required?: boolean;\n  };\n  layout?: SdFormGenericLayout;\n  properties?: {\n    viewed?: boolean;\n    hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n    hidden?: boolean;\n    hiddenWhenExpression?: SdFormGenericExpression;\n    visibleWhenExpression?: SdFormGenericExpression;\n    variables?: { key: string; label: string; value?: string }[];\n    queries?: { key: string; label: string }[];\n    query?: Record<string, any>;\n  };\n}\n\nexport type FormBuilderComponentGroup = 'basic' | 'choice' | 'advanced' | 'layout';\n\nexport interface FormBuilderComponent {\n  type: string;\n  /** Material Icons Outlined icon name. Rendered via the builder icon alias. */\n  symbol: string;\n  /** Category group for the left palette grouping. */\n  group: FormBuilderComponentGroup;\n  name: string;\n}\n\nexport const FormBuilderComponents: FormBuilderComponent[] = [\n  // ── Basic ───────────────────────────────────────────────────\n  { type: 'textfield', symbol: 'text_fields', group: 'basic', name: 'Text field' },\n  { type: 'textarea', symbol: 'notes', group: 'basic', name: 'Text area' },\n  { type: 'number', symbol: '123', group: 'basic', name: 'Number' },\n  { type: 'datetime', symbol: 'calendar_month', group: 'basic', name: 'Date' },\n  // ── Choice ──────────────────────────────────────────────────\n  { type: 'select', symbol: 'arrow_drop_down_circle', group: 'choice', name: 'Select' },\n  { type: 'radio', symbol: 'radio_button_checked', group: 'choice', name: 'Radio' },\n  { type: 'checkbox', symbol: 'check_box', group: 'choice', name: 'Check box' },\n  // ── Advanced ────────────────────────────────────────────────\n  { type: 'chip-string', symbol: 'label', group: 'advanced', name: 'Chip string' },\n  { type: 'chip-calendar', symbol: 'event_note', group: 'advanced', name: 'Chip calendar' },\n  { type: 'upload', symbol: 'upload_file', group: 'advanced', name: 'Upload' },\n  { type: 'table', symbol: 'table_rows', group: 'advanced', name: 'Table' },\n  // ── Layout ──────────────────────────────────────────────────\n  // Break KHÔNG có trong palette — thêm qua per-row \"+ Break\" quick-add button.\n  { type: 'group', symbol: 'category', group: 'layout', name: 'Group' },\n  { type: 'html', symbol: 'code', group: 'layout', name: 'HTML' },\n];\n\n/** Lookup: component type → Material icon + label, used by attribute panel header. */\nexport const COMPONENT_ICONS: Record<string, { symbol: string; label: string }> = FormBuilderComponents.reduce(\n  (acc, c) => ({ ...acc, [c.type]: { symbol: c.symbol, label: c.name } }),\n  {} as Record<string, { symbol: string; label: string }>\n);\n\nexport const GetComponentAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {\n  const attributes: { value: string; display: string }[] = [];\n  if (components.length) {\n    for (const component of components) {\n      if (component.type === 'group') {\n        attributes.push(...GetComponentAttributes(component.components));\n      } else if (component.type !== 'html') {\n        attributes.push({\n          value: component.key,\n          display: component.label,\n        });\n      }\n    }\n  }\n  return attributes;\n};\n\nexport const GetVariableAttributes = (variables: SdFormGenericVariable[]) => {\n  const attributes: { value: string; display: string }[] = [];\n  if (variables.length) {\n    for (const variable of variables) {\n      attributes.push({\n        value: variable.key,\n        display: `[VARIABLE] ${variable.label}`,\n      });\n    }\n  }\n  return attributes;\n};\n","import { Operator as SdOperator } from '@sdcorejs/utils/models';\nimport { SdFormGenericComponent, SdFormGenericGroup } from './form-generic-component.model';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\n\nexport interface SdFormGenericExpression {\n  key: string; // Random, phục vụ cho @for ở attribute-expression\n  type: 'combinator';\n  combinator: '&&' | '||';\n  conditions: (SdFormGenericExpression | SdFormGenericExpressionCondition)[];\n}\n\nexport interface SdFormGenericExpressionCondition {\n  key: string; // Random, phục vụ cho @for ở attribute-expression\n  type: 'condition';\n  field?: string;\n  operator: SdOperator;\n  value: any;\n  dayInfo: DayInfo;\n}\n\nexport type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';\nexport const Operators: {\n  value: Operator;\n  symbol?: string;\n  display: string;\n}[] = [\n  {\n    value: 'EQUAL',\n    symbol: '=',\n    display: 'Bằng',\n  },\n  {\n    value: 'NOT_EQUAL',\n    symbol: '≠',\n    display: 'Không bằng',\n  },\n  {\n    value: 'GREATER_THAN',\n    symbol: '>',\n    display: 'Lớn hơn',\n  },\n  {\n    value: 'LESS_THAN',\n    symbol: '<',\n    display: 'Nhỏ hơn',\n  },\n  {\n    value: 'GREATER_OR_EQUAL',\n    symbol: '≥',\n    display: 'Lớn hơn, hoặc bằng',\n  },\n  {\n    value: 'LESS_OR_EQUAL',\n    symbol: '≤',\n    display: 'Nhỏ hơn, hoặc bằng',\n  },\n  {\n    value: 'NULL',\n    symbol: 'motion_photos_off',\n    display: 'Là rỗng',\n  },\n  {\n    value: 'NOT_NULL',\n    symbol: 'adjust',\n    display: 'Không rỗng',\n  },\n];\n\nexport type Attribute = AttributeBase | AttributeBoolean | AttributeDate | AttributeValues;\n\ninterface AttributeBase {\n  value: string;\n  display: string;\n  type: 'string' | 'number';\n}\n\ninterface AttributeBoolean {\n  value: string;\n  display: string;\n  type: 'boolean';\n  displayOnTrue: string;\n  displayOnFalse: string;\n}\n\ninterface AttributeDate {\n  value: string;\n  display: string;\n  type: 'datetime';\n}\n\nexport interface DayInfo {\n  type?: 'RELATED' | 'NOW' | 'DATETIME' | 'ATTRIBUTE';\n  related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';\n  relatedValue?: number;\n}\n\nexport const DayInfoTypes = [\n  { value: 'RELATED', display: 'Ngày liên quan' },\n  { value: 'NOW', display: 'Ngày hiện tại' },\n  { value: 'DATETIME', display: 'Ngày cụ thể' },\n  { value: 'ATTRIBUTE', display: 'Trường dữ liệu' },\n];\n\nexport const DayInfoPreviouses = [\n  { value: 'LASTDAY', display: 'Ngày trước', format: (n: number) => `${n || 1}LastDay` },\n  { value: 'NEXTDAY', display: 'Ngày tới', format: (n: number) => `${n || 1}NextDay` },\n  // { value: 'LASTWEEK', display: 'Tuần trước', format: (n: number) => `${n || 1}LastWeek` },\n  // { value: 'NEXTWEEK', display: 'Tuần tới', format: (n: number) => `${n || 1}NextWeek` },\n  // { value: 'LASTMONTH', display: 'Tháng trước', format: (n: number) => `${n || 1}LastMonth` },\n  // { value: 'NEXTMONTH', display: 'Tháng tới', format: (n: number) => `${n || 1}NextMonth` },\n];\n\nexport const GetDatetimeValue = (value: string) => {\n  if (!value || typeof value !== 'string') {\n    return undefined;\n  }\n  if (value === 'now') {\n    return DateUtilities.toFormat(new Date(), 'yyyy/MM/dd HH:mm:ss');\n  }\n  if (value?.endsWith('LastDay')) {\n    const relatedValue = +value.replace('LastDay', '');\n    if (relatedValue) {\n      return DateUtilities.toFormat(DateUtilities.addDays(new Date(), -relatedValue), 'yyyy/MM/dd HH:mm:ss');\n    }\n  }\n  if (value?.endsWith('NextDay')) {\n    const relatedValue = +value.replace('NextDay', '');\n    if (relatedValue) {\n      return DateUtilities.toFormat(DateUtilities.addDays(new Date(), relatedValue), 'yyyy/MM/dd HH:mm:ss');\n    }\n  }\n  return undefined;\n};\n\ninterface AttributeValues {\n  value: string;\n  display: string;\n  type: 'values';\n  values: { value: string; display: string }[];\n}\n\nexport const AttributeOperators: Record<\n  Attribute['type'],\n  {\n    value: Operator;\n    symbol?: string;\n    display: string;\n  }[]\n> = {\n  string: [\n    {\n      value: 'EQUAL',\n      symbol: '=',\n      display: 'Bằng',\n    },\n    {\n      value: 'NOT_EQUAL',\n      symbol: '≠',\n      display: 'Không bằng',\n    },\n    {\n      value: 'NULL',\n      symbol: 'motion_photos_off',\n      display: 'Là rỗng',\n    },\n    {\n      value: 'NOT_NULL',\n      symbol: 'adjust',\n      display: 'Không rỗng',\n    },\n  ],\n  number: Operators,\n  datetime: Operators,\n  boolean: [\n    {\n      value: 'EQUAL',\n      symbol: '=',\n      display: 'Bằng',\n    },\n    {\n      value: 'NOT_EQUAL',\n      symbol: '≠',\n      display: 'Không bằng',\n    },\n  ],\n  values: [\n    {\n      value: 'EQUAL',\n      symbol: '=',\n      display: 'Bằng',\n    },\n    {\n      value: 'NOT_EQUAL',\n      symbol: '≠',\n      display: 'Không bằng',\n    },\n    {\n      value: 'NULL',\n      symbol: 'motion_photos_off',\n      display: 'Là rỗng',\n    },\n    {\n      value: 'NOT_NULL',\n      symbol: 'adjust',\n      display: 'Không rỗng',\n    },\n  ],\n};\n\n// Từ components map thành các attributes\nexport const GetAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Attribute[] => {\n  const attributes: Attribute[] = [];\n  if (components.length) {\n    for (const component of components) {\n      if (component.type === 'group') {\n        attributes.push(...GetAttributes(component.components));\n      } else if (component.type === 'textfield' || component.type === 'textarea') {\n        attributes.push({\n          value: component.key,\n          display: component.label,\n          type: 'string',\n        });\n      } else if (component.type === 'number') {\n        attributes.push({\n          value: component.key,\n          display: component.label,\n          type: 'number',\n        });\n      } else if (component.type === 'datetime') {\n        attributes.push({\n          value: component.key,\n          display: component.label,\n          type: 'datetime',\n        });\n      } else if (component.type === 'checkbox') {\n        attributes.push({\n          value: component.key,\n          display: component.label,\n          type: 'boolean',\n          displayOnTrue: 'YES',\n          displayOnFalse: 'NO',\n        });\n      } else if (component.type === 'radio' || component.type === 'select') {\n        if (component.values?.length) {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'values',\n            values: component.values.map(e => ({\n              value: e.value,\n              display: e.label,\n            })),\n          });\n        } else {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'string',\n          });\n        }\n      }\n    }\n  }\n  return attributes;\n};\n\nexport const TemplateToCondition = (template: string | undefined | null, entity: Record<string, any>) => {\n  if (!template) {\n    return undefined;\n  }\n  const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\n  const matches = template.match(regex) || [];\n  for (const match of matches) {\n    const key = match.slice(2, match.length - 1);\n    if (key) {\n      // Xử lý trong trường hợp key có định dạng a.b.c ...\n      let val: any = entity;\n      const strs = key.split('.');\n      for (const str of strs) {\n        val = val?.[str];\n      }\n      if (typeof val === 'string') {\n        // Xử lý đối với trường hợp string là 'datetime' thì cần format thành string đồng nhất để compare chính xác\n        if (DateUtilities.isDate(val)) {\n          template = template.replace(match, `'${DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm:ss')}'`);\n        } else {\n          // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'\n          // Nếu là số hay boolean thì không cần, ví dụ 121 === 121\n          template = template.replace(match, `'${val}'`);\n        }\n      } else {\n        template = template.replace(match, val ?? `undefined`);\n      }\n    }\n  }\n  return template;\n};\n\nconst GetEntityValue = (entity: Record<string, any>, key: string | undefined) => {\n  if (!key) {\n    return undefined;\n  }\n\n  let value: any = entity;\n  for (const part of key.split('.')) {\n    value = value?.[part];\n  }\n  return value;\n};\n\nconst NormalizeExpressionValue = (value: any) => {\n  if (typeof value === 'string' && DateUtilities.isDate(value)) {\n    return DateUtilities.toFormat(value, 'yyyy/MM/dd HH:mm:ss');\n  }\n  return value;\n};\n\nconst EvaluateExpressionCondition = (condition: SdFormGenericExpressionCondition, entity: Record<string, any>) => {\n  const actualValue = NormalizeExpressionValue(GetEntityValue(entity, condition.field));\n  const { operator } = condition;\n  if (!operator) {\n    return undefined;\n  }\n  if (operator === 'NULL') {\n    return !actualValue;\n  }\n  if (operator === 'NOT_NULL') {\n    return !!actualValue;\n  }\n\n  const expectedValue = typeof condition.value === 'string' ? GetDatetimeValue(condition.value) || condition.value : condition.value;\n  if (expectedValue === undefined || expectedValue === null || expectedValue === '') {\n    return undefined;\n  }\n\n  const normalizedExpectedValue = NormalizeExpressionValue(expectedValue);\n  if (operator === 'EQUAL') {\n    return actualValue === normalizedExpectedValue;\n  }\n  if (operator === 'GREATER_THAN') {\n    return actualValue > normalizedExpectedValue;\n  }\n  if (operator === 'LESS_THAN') {\n    return actualValue < normalizedExpectedValue;\n  }\n  if (operator === 'NOT_EQUAL') {\n    return actualValue !== normalizedExpectedValue;\n  }\n  if (operator === 'GREATER_OR_EQUAL') {\n    return actualValue >= normalizedExpectedValue;\n  }\n  if (operator === 'LESS_OR_EQUAL') {\n    return actualValue <= normalizedExpectedValue;\n  }\n  return undefined;\n};\n\nexport const EvaluateExpression = (\n  condition: SdFormGenericExpression | SdFormGenericExpressionCondition,\n  entity: Record<string, any>\n): boolean | undefined => {\n  if (condition.type === 'combinator') {\n    if (!condition.conditions?.length) {\n      return undefined;\n    }\n\n    const results = condition.conditions.map(child => EvaluateExpression(child, entity));\n    if (results.some(result => typeof result !== 'boolean')) {\n      return undefined;\n    }\n\n    if (condition.combinator === '&&') {\n      return results.every(result => result === true);\n    }\n    return results.some(result => result === true);\n  }\n\n  return EvaluateExpressionCondition(condition, entity);\n};\n\nexport const ExpressionToJavascriptExpression = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n  const queries: string[] = [];\n  if (condition.type === 'combinator') {\n    if (condition.conditions?.length) {\n      for (const child of condition.conditions) {\n        queries.push(`(${ExpressionToJavascriptExpression(child)})`);\n      }\n    }\n    // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n    const query = queries.join(` ${condition.combinator} `);\n    if (queries.length > 1) {\n      return `(${query})`;\n    } else {\n      return query;\n    }\n  } else {\n    return ConvertToJavascriptExpression(condition);\n  }\n};\nconst ConvertToJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n  const { value } = condition;\n  // Convert thành syntax ${field}\n  const field = '${' + condition.field + '}';\n  const { operator } = condition;\n  if (!operator) {\n    return undefined;\n  }\n  if (operator === 'NULL') {\n    return `!${field}`;\n  }\n  if (operator === 'NOT_NULL') {\n    return `!!${field}`;\n  }\n  if (value === undefined || value === null || value === '') {\n    return undefined;\n  }\n  // Xử lý đối với trường hợp string là 'datetime' thì value sẽ có thể là 'now', '1LastDay' ....\n  const datetimeValue = GetDatetimeValue(value);\n  if (operator === 'EQUAL') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} === '${datetimeValue || value}'`;\n    }\n    return `${field} === ${value}`;\n  }\n  if (operator === 'GREATER_THAN') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} > '${datetimeValue || value}'`;\n    }\n    return `${field} > ${value}`;\n  }\n  if (operator === 'LESS_THAN') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} < '${datetimeValue || value}'`;\n    }\n    return `${field} < ${value}`;\n  }\n  if (operator === 'NOT_EQUAL') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} !== '${datetimeValue || value}'`;\n    }\n    return `${field} !== ${value}`;\n  }\n  if (operator === 'GREATER_OR_EQUAL') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} >= '${datetimeValue || value}'`;\n    }\n    return `${field} >= ${value}`;\n  }\n  if (operator === 'LESS_OR_EQUAL') {\n    // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n    if (typeof value === 'string') {\n      return `${field} <= '${datetimeValue || value}'`;\n    }\n    return `${field} <= ${value}`;\n  }\n  return undefined;\n};\n","import { inject, Injectable } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../configurations';\nimport { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FormGenericService {\n  #selections?: SdFormGenericDefinitionSelection[];\n  #definitionHtmls?: SdFormGenericDefinitionHtml[];\n  private readonly configuration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n  get selections() {\n    return this.configuration?.form?.selections || [];\n  }\n\n  get tables() {\n    return this.configuration?.form?.tables || [];\n  }\n\n  getSelection = async (valuesKey: string | undefined | null) => {\n    if (!valuesKey) {\n      return undefined;\n    }\n    const selections = await this.selection.definitions();\n    return selections.find(e => e.value === valuesKey);\n  };\n\n  selection = {\n    definitions: async (): Promise<SdFormGenericDefinitionSelection[]> => {\n      // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho selections\n      if (!this.#selections) {\n        const selections = this.configuration?.form?.selections;\n        if (!selections) {\n          this.#selections = [];\n        } else if (Array.isArray(selections)) {\n          this.#selections = selections;\n        } else {\n          const results = selections();\n          if (results instanceof Promise) {\n            this.#selections = (await results) || [];\n          } else {\n            this.#selections = results || [];\n          }\n        }\n      }\n      return this.#selections || [];\n    },\n    getDefinition: async (valuesKey: string | undefined | null) => {\n      if (!valuesKey) {\n        return undefined;\n      }\n      const selections = await this.selection.definitions();\n      return selections.find(e => e.value === valuesKey);\n    },\n    // Lấy dữ liệu items cho dropdown, radio, checklist\n    // Dữ liệu có thể là 1 mảng hoặc hàm\n    items: async (\n      valuesKey: string | undefined | null,\n      args: SdFormGenericArgs\n    ): Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>> => {\n      try {\n        const { component, column } = args;\n        // Nếu có values thì xử lý trả về mảng tĩnh\n        if (component && 'values' in component && Array.isArray(component.values) && component.values.length) {\n          return component.values.map(e => ({\n            value: e.value,\n            display: e.label,\n            data: e,\n          }));\n        }\n        // Nếu component là table và có thông tin column\n        if (component?.type === 'table' && column && 'values' in column && Array.isArray(column.values) && column.values.length) {\n          return column.values.map(e => ({\n            value: e.value,\n            display: e.label,\n            data: e,\n          }));\n        }\n        // Ngoài ra nếu không có valuesKey thì trả về mảng rỗng\n        if (!valuesKey) {\n          return [];\n        }\n        // Tìm cấu hình dựa vào valuesKey\n        const selection = await this.selection.getDefinition(valuesKey);\n        if (!selection) {\n          return [];\n        }\n        if ('values' in selection) {\n          return await selection.values(args);\n        } else if ('valuesKey' in selection && selection?.valuesKey && !!this.configuration?.form?.getValues) {\n          return (await this.configuration?.form?.getValues?.(selection.valuesKey, selection.args)) || [];\n        } else if ('lazyValues' in selection) {\n          return searchArgs => {\n            return selection.lazyValues(searchArgs, args);\n          };\n        } else if ('lazyValuesKey' in selection && selection?.lazyValuesKey && !!this.configuration?.form?.getLazyValues) {\n          const getLazyValues = this.configuration?.form?.getLazyValues?.(selection.lazyValuesKey, selection.args);\n          return searchArgs => {\n            return getLazyValues(searchArgs, args);\n          };\n        }\n        return [];\n      } catch (err) {\n        console.error(err);\n        return [];\n      }\n    },\n    variables: {\n      detail: async (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => {\n        const selection = await this.selection.getDefinition(valuesKey);\n        return selection?.variables?.detail?.(values, args);\n      },\n    },\n  };\n\n  html = {\n    definitions: async (): Promise<SdFormGenericDefinitionHtml[]> => {\n      // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho htmls\n      if (!this.#definitionHtmls) {\n        const htmls = this.configuration?.form?.htmls;\n        if (!htmls) {\n          this.#definitionHtmls = [];\n        } else if (Array.isArray(htmls)) {\n          this.#definitionHtmls = htmls;\n        } else {\n          const results = htmls();\n          if (results instanceof Promise) {\n            this.#definitionHtmls = (await results) || [];\n          } else {\n            this.#definitionHtmls = results || [];\n          }\n        }\n      }\n      return this.#definitionHtmls || [];\n    },\n    getContent: async (template: string, query?: Record<string, any>): Promise<string> => {\n      const definitions = await this.html.definitions();\n      const html = definitions.find(e => e.value === template);\n      if (html) {\n        if (typeof html.content === 'string') {\n          return html.content;\n        }\n        if (typeof html.content === 'function') {\n          return await html.content(query).catch(err => {\n            console.error(err);\n            return '';\n          });\n        }\n        return '';\n      }\n      return '';\n    },\n  };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { SdFormGeneric } from '../models/form-generic.model';\nimport { ComponentViewedPipe } from '../pipes';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SdFormRenderService {\n  private readonly componentViewedPipe = inject(ComponentViewedPipe);\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  viewEntities = async (form: SdFormGeneric, entities: Record<string, any>[]): Promise<Record<string, any>[]> => {\n    const reuslts: Record<string, any>[] = [];\n    for (const entity of entities || []) {\n      const result: Record<string, any> = {};\n      for (const component of form?.components || []) {\n        // Group và upload thì k cần lấy view\n        if (\n          component.type !== 'table' &&\n          component.type !== 'group' &&\n          component.type !== 'upload' &&\n          component.type !== 'html' &&\n          component.key\n        ) {\n          result[component.key] = await this.componentViewedPipe.transform(entity?.[component.key], entity, component);\n        }\n      }\n      reuslts.push(result);\n    }\n    return reuslts;\n  };\n}\n","import { Injectable, Pipe, PipeTransform, inject } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\nimport { SdFormGenericComponent, SdFormGenericHtml } from '../models';\nimport { FormGenericService } from '../services';\nimport { SdFormatNumberPipe } from '@sdcorejs/angular/pipes';\n\n@Pipe({\n  name: 'componentViewed',\n  standalone: true,\n})\n@Injectable({\n  providedIn: 'root',\n})\n// Pipe xử lý hiển thị detail cho component\nexport class ComponentViewedPipe implements PipeTransform {\n  private readonly formatNumberPipe = inject(SdFormatNumberPipe);\n  private readonly formGenericService = inject(FormGenericService);\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n  transform = async (\n    value: any,\n    entity: Record<string, any>,\n    component: Exclude<SdFormGenericComponent, SdFormGenericHtml>\n  ): Promise<string> => {\n    if (!component?.key) {\n      return '';\n    }\n    const val = entity?.[component.key];\n    if (val === undefined || val === null) {\n      return EMPTY_STR;\n    }\n    if (component.type === 'textfield' || component.type === 'textarea') {\n      return val || EMPTY_STR;\n    }\n    if (component.type === 'number') {\n      return this.formatNumberPipe.transform(value)?.toString() ?? EMPTY_STR;\n    }\n    if (component.type === 'datetime') {\n      if (component.subtype === 'datetime') {\n        return DateUtilities.toFormat(val, 'dd/MM/yyyy HH:mm') || EMPTY_STR;\n      } else {\n        return DateUtilities.toFormat(val, 'dd/MM/yyyy') || EMPTY_STR;\n      }\n    }\n    if (component.type === 'select' || component.type === 'radio' || component.type === 'checklist') {\n      const values = (Array.isArray(val) ? val : [val]).filter(value => value !== undefined && value !== null && value !== '');\n      if (!values.length) {\n        return EMPTY_STR;\n      }\n      const selection = await this.formGenericService.selection.getDefinition(component?.valuesKey);\n      // Nếu có cấu hình view tương ứng với selection thì sử dụng viewed\n      if (selection?.viewed) {\n        return (\n          (await selection.viewed(values, {\n            entity,\n            component,\n          })) || EMPTY_STR\n        );\n      }\n      // Ngoài ra xử lý lấy thông tin items\n      const items = await this.formGenericService.selection.items(component?.valuesKey, {\n        entity,\n        component,\n      });\n      if (!items) {\n        return EMPTY_STR;\n      }\n      // Nếu items là Array thì kiểm tra value và hiển thị display\n      if (Array.isArray(items)) {\n        return (\n          items\n            .filter(e => values.includes(e.value))\n            .map(e => e.display)\n            .join(', ') || EMPTY_STR\n        );\n      }\n      // items là Function (lazyValues) thì thực hiện gọi API\n      return await items({\n        type: 'VALUE',\n        value: values,\n      }).then(results => {\n        return (\n          results\n            .filter(e => values.includes(e.value))\n            .map(e => e.display)\n            .join(', ') || EMPTY_STR\n        );\n      });\n    }\n    return '';\n  };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { EvaluateExpression, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericHtml } from '../models';\n\n@Pipe({\n  name: 'whenExpression',\n  standalone: true,\n})\n// Xử lý thông tin required, disabled, hidden của component\nexport class WhenExpressionPipe implements PipeTransform {\n  #hidden = (component: SdFormGenericComponent | SdFormGenericGroup, variables: Record<string, any>) => {\n    if (component.properties?.hidden) {\n      return true;\n    }\n    const hiddenWhenExpression = component.properties?.hiddenWhenExpression;\n    if (hiddenWhenExpression) {\n      const result = EvaluateExpression(hiddenWhenExpression, variables);\n      if (typeof result === 'boolean') {\n        return result;\n      }\n      return true;\n    }\n    const visibleWhenExpression = component.properties?.visibleWhenExpression;\n    if (visibleWhenExpression) {\n      const result = EvaluateExpression(visibleWhenExpression, variables);\n      if (typeof result === 'boolean') {\n        return !result;\n      }\n      return true;\n    }\n    return false;\n  };\n  #disabled = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n    const disabledWhenExpression = component.properties?.disabledWhenExpression;\n    if (disabledWhenExpression) {\n      const result = EvaluateExpression(disabledWhenExpression, variables);\n      if (typeof result === 'boolean') {\n        return result;\n      }\n      return true;\n    }\n    return false;\n  };\n  #required = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n    const requiredWhenExpression = component.properties?.requiredWhenExpression;\n    if (requiredWhenExpression) {\n      const result = EvaluateExpression(requiredWhenExpression, variables);\n      if (typeof result === 'boolean') {\n        return result;\n      }\n      return false;\n    }\n    return false;\n  };\n  transform(\n    hashed: string | undefined,\n    component: SdFormGenericComponent | SdFormGenericGroup,\n    entity: Record<string, any>\n  ): {\n    hidden: boolean;\n    disabled: boolean;\n    required: boolean;\n  } {\n    // Group và html chỉ xử lý ẩn/hiện\n    if (component.type === 'group' || component.type === 'html' || component.type === 'break') {\n      // Break/html/group: chỉ tính hidden (validate/disabled không áp dụng).\n      return {\n        hidden: this.#hidden(component, entity),\n        disabled: false,\n        required: false,\n      };\n    }\n    return {\n      hidden: this.#hidden(component, entity),\n      disabled: component?.disabled || this.#disabled(component, entity),\n      required: component?.validate?.required || this.#required(component, entity),\n    };\n  }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String\n@Pipe({\n  name: 'expressionQuery',\n})\n@Injectable({\n  providedIn: 'root',\n})\nexport class ExpressionQueryPipe implements PipeTransform {\n  #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n    const queries: string[] = [];\n    if (condition.type === 'combinator') {\n      if (condition.conditions?.length) {\n        for (const child of condition.conditions) {\n          queries.push(`(${this.#generateQuery(child)})`);\n        }\n      }\n      // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n      const query = queries.join(` ${condition.combinator} `);\n      if (queries.length > 1) {\n        return `(${query})`;\n      } else {\n        return query;\n      }\n    } else {\n      return this.#generateJavascriptExpression(condition);\n    }\n  };\n  #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n    const { value } = condition;\n    // Convert thành syntax ${field}\n    const field = '${' + condition.field + '}';\n    const { operator } = condition;\n    if (!operator) {\n      return undefined;\n    }\n    if (operator === 'NULL') {\n      return `!${field}`;\n    }\n    if (operator === 'NOT_NULL') {\n      return `!!${field}`;\n    }\n    if (value === undefined || value === null || value === '') {\n      return undefined;\n    }\n    if (operator === 'EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} === '${value}'`;\n      }\n      return `${field} === ${value}`;\n    }\n    if (operator === 'GREATER_THAN') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} > '${value}'`;\n      }\n      return `${field} > ${value}`;\n    }\n    if (operator === 'LESS_THAN') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} < '${value}'`;\n      }\n      return `${field} < ${value}`;\n    }\n    if (operator === 'NOT_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} !== '${value}'`;\n      }\n      return `${field} !== ${value}`;\n    }\n    if (operator === 'GREATER_OR_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} >= '${value}'`;\n      }\n      return `${field} >= ${value}`;\n    }\n    if (operator === 'LESS_OR_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} <= '${value}'`;\n      }\n      return `${field} <= ${value}`;\n    }\n    return undefined;\n  };\n  transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition | undefined): string | undefined {\n    if (!condition) {\n      return undefined;\n    }\n    return this.#generateQuery(condition);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Attribute, Operators, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n@Pipe({\n  name: 'expressionView',\n})\nexport class ExpressionViewPipe implements PipeTransform {\n  transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition, attributes: Attribute[]): string {\n    if (condition.type === 'combinator') {\n      return '';\n    }\n    const { field, operator, value } = condition;\n    const containerStyle = `style=\"border: 1px solid #e6e6e6; border-radius: 4px; background-color: #e6e6e6; padding: 4px 8px;\"`;\n    const results: string[] = [];\n    // Wording field\n    results.push(`<div ${containerStyle}>${attributes.find(e => e.value === field)?.display || field}</div>`);\n    // Wording operator\n    if (operator) {\n      results.push(`<div>${Operators.find(e => e.value === operator)?.display || operator}</div>`);\n    }\n    // Wording value\n    if (operator && value !== undefined) {\n      results.push(`<div ${containerStyle}>${value}</div>`);\n    }\n    return `<div class=\"d-flex flex-row align-items-center\" style=\"gap:8px ;flex-wrap: wrap ;word-wrap: break-word\">${results.join(\n      ''\n    )}</div>`;\n  }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String theo cú pháp của FEEL mà Camunda sử dụng\n@Pipe({\n  name: 'expressionFeel',\n})\n@Injectable({\n  providedIn: 'root',\n})\nexport class ExpressionFeelPipe implements PipeTransform {\n  #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n    const queries: string[] = [];\n    if (condition.type === 'combinator') {\n      if (condition.conditions?.length) {\n        for (const child of condition.conditions) {\n          queries.push(`${this.#generateQuery(child)}`);\n        }\n      }\n      // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n      const query = queries.join(` ${condition.combinator === '||' ? 'or' : 'and'} `);\n      if (queries.length > 1) {\n        return `(${query})`;\n      } else {\n        return query;\n      }\n    } else {\n      return this.#generateJavascriptExpression(condition);\n    }\n  };\n  #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n    const { field, value } = condition;\n    // Convert thành syntax ${field}\n    const { operator } = condition;\n    if (!operator) {\n      return undefined;\n    }\n    if (operator === 'NULL') {\n      return `${field} == null`;\n    }\n    if (operator === 'NOT_NULL') {\n      return `${field} != null`;\n    }\n    if (value === undefined || value === null || value === '') {\n      return undefined;\n    }\n    if (operator === 'EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} == '${value}'`;\n      }\n      return `${field} == ${value}`;\n    }\n    if (operator === 'GREATER_THAN') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} > '${value}'`;\n      }\n      return `${field} > ${value}`;\n    }\n    if (operator === 'LESS_THAN') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} < '${value}'`;\n      }\n      return `${field} < ${value}`;\n    }\n    if (operator === 'NOT_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} != '${value}'`;\n      }\n      return `${field} != ${value}`;\n    }\n    if (operator === 'GREATER_OR_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} >= '${value}'`;\n      }\n      return `${field} >= ${value}`;\n    }\n    if (operator === 'LESS_OR_EQUAL') {\n      // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n      if (typeof value === 'string') {\n        return `${field} <= '${value}'`;\n      }\n      return `${field} <= ${value}`;\n    }\n    return undefined;\n  };\n  transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition): string | undefined {\n    const result = this.#generateQuery(condition);\n    if (result) {\n      return '${' + result + '}';\n    }\n    return result;\n  }\n}\n","import { Pipe, PipeTransform, SecurityContext, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { SdFormGenericHtml } from '../models';\n\n@Pipe({\n  name: 'htmlPipe',\n  standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HtmlPipe implements PipeTransform {\n  private readonly sanitizer = inject(DomSanitizer);\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n  // Hash component để pipe nhận biết được content hay variables có thay đổi render lại\n  transform = (hashed: string | undefined | null, content: string, component: SdFormGenericHtml) => {\n    if (!content) {\n      return '';\n    }\n    const variables: Record<string, any> = {};\n    if (component.properties?.variables?.length) {\n      component.properties.variables.forEach(variable => (variables[variable.key] = variable.value));\n    }\n    const renderedHtml = StringUtilities.templateToDisplay(content, variables);\n    return this.sanitizer.sanitize(SecurityContext.HTML, renderedHtml) || '';\n  };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Pipe({\n  name: 'hyperlink',\n  standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HyperlinkPipe implements PipeTransform {\n  constructor() {}\n  transform = (hyperlink: string | undefined | null, entity: Record<string, any>): string => {\n    if (!hyperlink) {\n      return '';\n    }\n    return StringUtilities.templateToDisplay(hyperlink, entity);\n  };\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTextfield } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n  selector: 'lib-textfield',\n  templateUrl: './textfield.component.html',\n  styleUrl: './textfield.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdInput,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n  ],\n})\nexport class TextfieldComponent implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n      this.#applyDefaultValue(); // Áp dụng defaultValue khi entity thay đổi\n    }\n  }\n\n  component?: SdFormGenericTextfield;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericTextfield) {\n    this.component = val;\n    this.#applyDefaultValue(); // Áp dụng defaultValue khi component thay đổi\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n    this.#disabledChanges.next(this.disabled);\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  validator?: SdCustomValidator;\n  @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n    if (validator && this.validator !== validator) {\n      this.validator = validator;\n    }\n  }\n\n  #subscription = new Subscription();\n  #disabledChanges = new Subject<boolean>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.#applyDefaultValue(); // Áp dụng defaultValue khi component khởi tạo\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n\n  /**\n   * Áp dụng defaultValue nếu:\n   * - Không ở trạng thái viewed\n   * - Không bị disabled\n   * - entity[key] chưa có giá trị (null, undefined, hoặc empty string)\n   * - component có defaultValue\n   */\n  #applyDefaultValue = () => {\n    if (!this.component?.key || !this.entity) {\n      return;\n    }\n    const isViewed = this.viewed || this.component.properties?.viewed;\n    // Chỉ gán default value nếu undefined\n    const isUndefined = this.entity[this.component.key] === undefined;\n    const hasDefaultValue = this.component.defaultValue !== undefined && this.component.defaultValue !== null;\n    // Chỉ gán defaultValue khi:\n    // 1. Không ở trạng thái viewed\n    // 2. Không bị disabled\n    // 3. Giá trị hiện tại chưa được  set (null, undefined hoặc empty string)\n    // 4. Component có defaultValue\n    if (!isViewed && hasDefaultValue && isUndefined) {\n      this.entity[this.component.key] = this.component.defaultValue;\n      this.ref.markForCheck();\n    }\n  };\n}\n","@if (component && entity) {\n  <sd-input\n    [form]=\"form()\"\n    [label]=\"component.label || component.key\"\n    [helperText]=\"component.helperText\"\n    [name]=\"component.key\"\n    [autoId]=\"component.key\"\n    [(model)]=\"entity[component.key!]\"\n    [required]=\"required\"\n    [validator]=\"validator\"\n    [maxlength]=\"component.validate?.maxlength\"\n    [pattern]=\"component.validate?.pattern\"\n    [patternErrorMessage]=\"component.validate?.patternErrorMessage\"\n    [disabled]=\"disabled\"\n    [viewed]=\"viewed || component.properties?.viewed\"></sd-input>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdFormGenericTextarea } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'lib-textarea',\n  templateUrl: './textarea.component.html',\n  styleUrl: './textarea.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdTextarea,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n  ],\n})\nexport class TextareaComponent implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  component?: SdFormGenericTextarea;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericTextarea) {\n    this.component = val;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component && entity) {\n  <sd-textarea\n    [form]=\"form()\"\n    [label]=\"component.label || component.key\"\n    [helperText]=\"component.helperText\"\n    [name]=\"component.key\"\n    [autoId]=\"component.key\"\n    [(model)]=\"entity[component.key!]\"\n    [required]=\"required\"\n    [maxlength]=\"component.validate?.maxlength\"\n    [disabled]=\"disabled\"\n    [viewed]=\"viewed || component.properties?.viewed\"></sd-textarea>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChip } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipString } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n  selector: 'lib-chip-string',\n  templateUrl: './chip-string.component.html',\n  styleUrl: './chip-string.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdChip,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n  ],\n})\nexport class ChipStringComponent implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  component?: SdFormGenericChipString;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericChipString) {\n    this.component = val;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component && entity) {\n  @if (viewed || component.properties?.viewed) {\n    <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n    <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n  } @else {\n    <sd-chip\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [name]=\"component.key\"\n      [autoId]=\"component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [required]=\"required\"\n      [disabled]=\"disabled\"></sd-chip>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChipCalendar } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipCalendar } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n  selector: 'lib-chip-calendar',\n  templateUrl: './chip-calendar.component.html',\n  styleUrl: './chip-calendar.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdChipCalendar,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n  ],\n})\nexport class ChipCalendarComponent implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  component?: SdFormGenericChipCalendar;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericChipCalendar) {\n    this.component = val;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component && entity) {\n  @if (viewed || component.properties?.viewed) {\n    <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n    <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n  } @else {\n    <sd-chip-calendar\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [name]=\"component.key\"\n      [autoId]=\"component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [required]=\"required\"\n      [disabled]=\"disabled\"></sd-chip-calendar>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdFormGenericNumber } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'lib-number',\n  templateUrl: './number.component.html',\n  styleUrl: './number.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdInputNumber,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n  ],\n})\nexport class NumberComponent implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  component?: SdFormGenericNumber;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericNumber) {\n    this.component = val;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component && entity) {\n  @if (viewed || component.properties?.viewed) {\n    <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n    <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n  } @else {\n    <sd-input-number\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [helperText]=\"component.helperText\"\n      [name]=\"component.key\"\n      [autoId]=\"component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [required]=\"required\"\n      [disabled]=\"disabled\"\n      [max]=\"component.validate?.max\"\n      [min]=\"component.validate?.min\"\n      [viewed]=\"viewed || component.properties?.viewed\"></sd-input-number>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdFormGenericDatetime } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n  selector: 'lib-datetime',\n  templateUrl: './datetime.component.html',\n  styleUrl: './datetime.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdDate,\n    SdDatetime,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n    HyperlinkPipe,\n  ],\n})\nexport class DatetimeComponent implements OnInit, OnDestroy {\n  private router = inject(Router);\n  private ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  // Mặc định là date\n  subtype?: SdFormGenericDatetime['subtype'] = 'date';\n  component?: SdFormGenericDatetime;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericDatetime) {\n    this.component = val;\n    this.subtype = this.component?.subtype || 'date';\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n  onNavigate = (url: string) => {\n    if (!url) {\n      return;\n    }\n    if (url.startsWith('http')) {\n      window.open(url);\n    } else {\n      const [path, queryString] = url.split('?');\n      const queryParams = Utilities.parseQueryParams(queryString);\n      this.router.navigate([path], { queryParams });\n    }\n  };\n}\n","@if (component && entity) {\n  @if (subtype === 'date') {\n    <sd-date\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [helperText]=\"component.helperText\"\n      [name]=\"component.key\"\n      [autoId]=\"component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [required]=\"required\"\n      [min]=\"component.validate?.min\"\n      [max]=\"component.validate?.max\"\n      [disabled]=\"disabled\"\n      [viewed]=\"viewed || component.properties?.viewed\"></sd-date>\n  } @else {\n    <sd-datetime\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [helperText]=\"component.helperText\"\n      [name]=\"component.key\"\n      [autoId]=\"component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [required]=\"required\"\n      [min]=\"component.validate?.min\"\n      [max]=\"component.validate?.max\"\n      [disabled]=\"disabled\"\n      [viewed]=\"viewed || component.properties?.viewed\"></sd-datetime>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdAutocomplete, SdSearch, SdSelect } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericSelect, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\n\n@Component({\n  selector: 'lib-select',\n  templateUrl: './select.component.html',\n  styleUrl: './select.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdSelect,\n    SdAutocomplete,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n    HyperlinkPipe,\n  ],\n})\nexport class SelectComponent implements AfterViewInit, OnDestroy, OnInit {\n  private router = inject(Router);\n  private ref = inject(ChangeDetectorRef);\n  private readonly formRenderService = inject(FormGenericService);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  form = new FormGroup({});\n  @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n    if (this.form !== form) {\n      this.form = form;\n      this.#inputChanges.next();\n    }\n  }\n  entity: Record<string, any> = {};\n  @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n      this.#inputChanges.next();\n    }\n  }\n\n  component!: SdFormGenericSelect;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericSelect) {\n    this.component = val;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  validator?: SdCustomValidator;\n  @Input('validator') set _validator(validator: SdCustomValidator | undefined) {\n    if (validator && this.validator !== validator) {\n      this.validator = validator;\n    }\n  }\n\n  items: SdFormGenericSelectionItem[] | SdSearch = [];\n\n  #subscription = new Subscription();\n  #inputChanges = new Subject<void>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  #hashedQuery?: string;\n  hashedValues?: string;\n  #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n    let result: Record<string, any> = {};\n    // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n    if (typeof query === 'string') {\n      try {\n        result = JSON.parse(query);\n      } catch (err) {\n        console.error(err);\n        return result;\n      }\n    } else if (Array.isArray(query)) {\n      return result;\n    } else {\n      result = { ...query };\n    }\n    // Xử lý query,\n    // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n    for (const key of Object.keys({ ...result })) {\n      // Xử ly\n      result[key] = StringUtilities.templateToDisplay(result[key], data);\n      if (result[key] === 'true') {\n        result[key] = true;\n      }\n      if (result[key] === 'false') {\n        result[key] = false;\n      }\n      if (result[key] === '') {\n        delete result[key];\n      }\n    }\n    return result;\n  };\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n\n  ngAfterViewInit() {\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n        const hashedValues = Utilities.hash(values);\n        if (this.hashedValues !== hashedValues) {\n          this.hashedValues = hashedValues;\n          this.#inputChanges.next();\n        }\n      })\n    );\n    this.#subscription.add(\n      this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n        // Trạng thái viewed thì không cần check\n        if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n          const values = { ...this.entity, ...this.form.value };\n          const query = this.#generateQuery(this.component?.properties?.query, values);\n          const hashedQuery = Utilities.hash(query);\n          // Nếu query có thay đổi thì thực hiện gán lại items\n          if (hashedQuery !== this.#hashedQuery) {\n            this.#hashedQuery = hashedQuery;\n            this.items = await this.formRenderService.selection.items(this.component?.valuesKey, {\n              entity: values,\n              component: this.component,\n              query,\n            });\n            this.ref.markForCheck();\n          }\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChanges = async () => {\n    const setVariables = this.component.properties?.setVariables;\n    // Nếu có cấu hình gán giá trị khi trường dữ liệu thay đổi thì thực hiện gán giá trị\n    if (this.component.valuesKey && setVariables) {\n      // Lấy thông tin detail\n      const values = { ...this.entity, ...this.form.value };\n      const query = this.#generateQuery(this.component?.properties?.query, values);\n      const detail = await this.formRenderService.selection.variables.detail(this.component.valuesKey, this.entity[this.component.key], {\n        entity: this.entity,\n        component: this.component,\n        query,\n      });\n      // Nếu có detail thì thực hiện setVariables\n      if (detail) {\n        // Đi qua từng key của component sẽ gán giá trị\n        for (const key of Object.keys(setVariables)) {\n          try {\n            const value = StringUtilities.parseExpression(setVariables[key], detail);\n            // Thực hiện gán giá trị\n            this.entity[key] = value;\n            // Thông báo setVariables để component (nếu đang hiển thị) biết và thực hiện re-render hay markForCheck()\n            this.setVariables().next({ key, value });\n          } catch (err) {\n            console.error(err);\n          }\n        }\n      }\n    }\n  };\n\n  onNavigate = (url: string) => {\n    if (!url) {\n      return;\n    }\n    if (url.startsWith('http')) {\n      window.open(url);\n    } else {\n      const [path, queryString] = url.split('?');\n      const queryParams = Utilities.parseQueryParams(queryString);\n      this.router.navigate([path], { queryParams });\n    }\n  };\n}\n","@if (entity && component) {\n  <sd-select\n    [form]=\"form\"\n    [label]=\"component.label || component.key\"\n    [name]=\"component.key\"\n    [autoId]=\"component.key\"\n    [(model)]=\"entity[component.key]\"\n    [required]=\"required\"\n    [validator]=\"validator\"\n    [disabled]=\"disabled\"\n    [items]=\"items\"\n    valueField=\"value\"\n    displayField=\"display\"\n    disabledField=\"disabled\"\n    (sdChange)=\"onChanges()\"\n    [multiple]=\"component.properties?.multiple\"\n    [viewed]=\"viewed || component.properties?.viewed\"\n    [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-select>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdRadio } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericRadio, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n  selector: 'lib-radio',\n  templateUrl: './radio.component.html',\n  styleUrl: './radio.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdRadio,\n    // Pipe cho phần viewed\n    ComponentViewedPipe,\n    HyperlinkPipe,\n  ],\n})\nexport class RadioComponent implements AfterViewInit, OnDestroy, OnInit {\n  private router = inject(Router);\n  private ref = inject(ChangeDetectorRef);\n  private readonly formGenericService = inject(FormGenericService);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  form = new FormGroup({});\n  @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n    if (this.form !== form) {\n      this.form = form;\n      this.#changes.next();\n    }\n  }\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n      this.#changes.next();\n    }\n  }\n\n  component!: SdFormGenericRadio;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericRadio) {\n    if (this.component !== val) {\n      this.component = val;\n      this.#changes.next();\n    }\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    const viewed = val === '' || !!val;\n    if (this.viewed !== viewed) {\n      this.viewed = viewed;\n      this.#changes.next();\n    }\n  }\n\n  items: SdFormGenericSelectionItem[] = [];\n\n  #subscription = new Subscription();\n  #changes = new Subject<void>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(startWith('')).subscribe(async () => {\n        // Trạng thái viewed thì không cần check\n        if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n          const values = { ...this.entity, ...this.form.value };\n          const items = await this.formGenericService.selection.items(this.component.valuesKey, {\n            entity: values,\n            component: this.component,\n          });\n          // Với radio thì selection buộc phải là values, không phải là lazyValues\n          if (Array.isArray(items)) {\n            this.items = items;\n          } else {\n            this.items = [];\n          }\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onNavigate = (url: string) => {\n    if (!url) {\n      return;\n    }\n    if (url.startsWith('http')) {\n      window.open(url);\n    } else {\n      const [path, queryString] = url.split('?');\n      const queryParams = Utilities.parseQueryParams(queryString);\n      this.router.navigate([path], { queryParams });\n    }\n  };\n}\n","@if (entity && component) {\n  <sd-radio\n    [form]=\"form\"\n    [label]=\"component.label || component.key\"\n    [name]=\"component.key\"\n    [autoId]=\"component.key\"\n    [(model)]=\"entity[component.key!]\"\n    [required]=\"required\"\n    [disabled]=\"disabled\"\n    [items]=\"items\"\n    valueField=\"value\"\n    displayField=\"display\"\n    [display]=\"component.properties?.direction\"\n    [viewed]=\"viewed || component.properties?.viewed\"\n    [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-radio>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, ViewChild, OnInit, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericUpload } from '../../../../../../models';\n\n@Component({\n  selector: 'lib-upload',\n  templateUrl: './upload.component.html',\n  styleUrl: './upload.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, SdUploadFile],\n})\nexport class UploadComponent implements OnDestroy, OnInit {\n  private readonly ref = inject(ChangeDetectorRef);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  @ViewChild(SdUploadFile) sdUploadFile?: SdUploadFile;\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n      this.#changes.next();\n    }\n  }\n\n  component?: SdFormGenericUpload;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericUpload) {\n    this.component = val;\n    this.#changes.next();\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined | null) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  validator?: SdCustomValidator;\n  @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n    if (validator && this.validator !== validator) {\n      this.validator = validator;\n    }\n  }\n\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n  }\n\n  upload = async () => {\n    return await this.sdUploadFile?.upload();\n  };\n}\n","@if (component && entity) {\n  @if (viewed || component.properties?.viewed) {\n    <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n    <sd-upload-file\n      [type]=\"component.properties?.type\"\n      [form]=\"form()\"\n      [model]=\"entity[component.key!]\"\n      align=\"left\"\n      [args]=\"component.properties?.args\"\n      disabled\n      previewWidth=\"50px\"\n      previewHeight=\"50px\"></sd-upload-file>\n  } @else {\n    <sd-upload-file\n      [type]=\"component.properties?.type\"\n      [form]=\"form()\"\n      [label]=\"component.label || component.key\"\n      [(model)]=\"entity[component.key!]\"\n      [max]=\"component.properties?.max\"\n      [maxSize]=\"component.properties?.maxSize\"\n      [extensions]=\"component.properties?.extensions\"\n      [args]=\"component.properties?.args\"\n      align=\"left\"\n      [required]=\"component.validate?.required || required\"\n      [disabled]=\"disabled\"\n      previewWidth=\"50px\"\n      previewHeight=\"50px\"></sd-upload-file>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  OnInit,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSideDrawer } from '@sdcorejs/angular/components/side-drawer';\nimport { SdTableCellDefDirective, SdTable, SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdAutocomplete, SdInput, SdInputNumber, SdRadio, SdSearch } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTableColumn, SdFormGenericSelectionItem, SdFormGenericTable } from '../../../../../../models';\nimport { FormGenericService } from '../../../../../../services';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'lib-table',\n  templateUrl: './table.component.html',\n  styleUrl: './table.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    SdInput,\n    SdInputNumber,\n    SdAutocomplete,\n    SdUploadFile,\n    SdTable,\n    SdTableCellDefDirective,\n    SdSideDrawer,\n    SdButton,\n    SdUploadFile,\n    SdRadio,\n    SdDate,\n    SdDatetime,\n    // Pipe cho phần viewed\n    TranslatePipe,\n  ],\n})\nexport class TableComponent implements AfterViewInit, OnDestroy, OnInit {\n  private ref = inject(ChangeDetectorRef);\n  private readonly formGenericService = inject(FormGenericService);\n\n  @ViewChildren(SdUploadFile) uploadFiles?: QueryList<SdUploadFile>;\n  @ViewChild(SdTable) table?: SdTable;\n  @ViewChild(SdSideDrawer) sideDrawer?: SdSideDrawer;\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  component?: SdFormGenericTable;\n  col = 'col-6 px-8';\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericTable) {\n    this.component = val;\n    this.col = `col-${this.component?.layout?.columns || '6'} px-8`;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '') {\n    this.required = val === '' || val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n    this.#tableChanges.next();\n  }\n\n  model: any[] = [];\n  @Input('model') set _model(val: any[] | undefined | null) {\n    val = val || [];\n    if (this.model !== val) {\n      this.model = val;\n      this.#modelChanges.next(val);\n    }\n  }\n  readonly modelChange = output<any[]>();\n\n  #tableChanges = new Subject<void>();\n  #modelChanges = new Subject<string[]>();\n  #subscription = new Subscription();\n  tableOption?: SdTableOption;\n  row: any = {};\n  columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch> = {};\n  formRenderColumn: Record<string, SdFormGenericTableColumn> = {};\n  // Lấy những fileColumns để định nghĩa cellDef tương ứng\n  fileKeys: string[] = [];\n  imageKeys: string[] = [];\n\n  #selectedIndex = -1;\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.model = variable.value;\n          this.#modelChanges.next(this.model);\n          this.ref.markForCheck();\n        })\n    );\n  }\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#tableChanges.pipe(startWith('')).subscribe(async () => {\n        await this.#initTable();\n        this.ref.markForCheck();\n      })\n    );\n    // Khi giá trị thay đổi thì reload lại\n    this.#subscription.add(\n      this.#modelChanges.pipe(startWith(this.model)).subscribe(async () => {\n        await this.#reload();\n        this.ref.markForCheck();\n      })\n    );\n  }\n\n  #initTable = async () => {\n    // Xử lý columns\n    const columns: SdTableColumn[] = [];\n    for (const column of this.component?.columns || []) {\n      // Ghi nhận lại vào object formRenderColumn để có thể xử lý customType hoặc một vài thuộc tính khác khi render UI\n      this.formRenderColumn[column.key] = column;\n      const { type, key, label, width } = column;\n      if (type === 'string') {\n        columns.push({\n          type: 'string',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'number') {\n        columns.push({\n          type: 'number',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'boolean') {\n        columns.push({\n          type: 'boolean',\n          field: key,\n          title: label,\n          width,\n          option: {\n            displayOnTrue: column.displayOnTrue,\n            displayOnFalse: column.displayOnFalse,\n          },\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'date') {\n        columns.push({\n          type: 'date',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'datetime') {\n        columns.push({\n          type: 'datetime',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'radio') {\n        const { values } = column;\n        columns.push({\n          type: 'values',\n          field: key,\n          title: label,\n          width: width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n          option: {\n            items: values || [],\n            valueField: 'value',\n            displayField: 'display',\n          },\n        });\n      } else if (type === 'values') {\n        const { valuesKey } = column;\n        this.columnValues[key] = await this.formGenericService.selection.items(valuesKey, {\n          component: this.component,\n          column,\n          entity: this.form().value,\n        });\n        if (this.columnValues[key]) {\n          if (Array.isArray(this.columnValues[key])) {\n            const items = this.columnValues[key];\n            columns.push({\n              type: 'values',\n              field: key,\n              title: label,\n              width: width,\n              filter: {\n                disabled: true, // Không cần filter\n              },\n              option: {\n                items: this.columnValues[key],\n                valueField: 'value',\n                displayField: 'display',\n              },\n              transform: value => {\n                return items.find(t => t.value === value)?.display || '--';\n              },\n            });\n          } else {\n            columns.push({\n              type: 'lazy-values',\n              field: key,\n              title: label,\n              width: width,\n              filter: {\n                disabled: true, // Không cần filter\n              },\n              option: {\n                items: this.columnValues[key],\n                valueField: 'value',\n                displayField: 'display',\n              },\n            });\n          }\n        }\n      } else if (type === 'image') {\n        // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n        this.imageKeys.push(key); // Ghi nhận lại cột nào là image để can thiệp cellDef\n        columns.push({\n          type: 'string',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      } else if (type === 'file') {\n        // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n        this.fileKeys.push(key); // Ghi nhận lại cột nào là file để can thiệp cellDef\n        columns.push({\n          type: 'string',\n          field: key,\n          title: label,\n          width,\n          filter: {\n            disabled: true, // Không cần filter\n          },\n        });\n      }\n    }\n    // await this.#onLoaded();\n    this.tableOption = {\n      type: 'local',\n      key: this.component?.key,\n      reload: { visible: false },\n      config: { visible: false },\n      paginate: {\n        hidden: true,\n        pageSize: 100,\n      },\n      style: {\n        maxHeight: '400px',\n      },\n      filter: {\n        disabled: true,\n      },\n      items: () => {\n        return this.model || [];\n      },\n      commands: [\n        {\n          icon: 'edit',\n          click: rowData => {\n            this.onDetail(rowData);\n          },\n          hidden: !!this.viewed || !!this.component?.properties?.viewed,\n        },\n        {\n          icon: 'delete',\n          click: rowData => {\n            const idx = this.model?.indexOf(rowData);\n            this.model?.splice(idx, 1);\n            this.table?.reload().then(() => this.ref.markForCheck());\n          },\n          hidden: !!this.viewed || !!this.component?.properties?.viewed,\n        },\n      ],\n      columns,\n    };\n  };\n\n  #reload = () => {\n    return this.table?.reload?.();\n  };\n\n  // #onLoaded = async () => {\n  //   for (const item of this.model || []) {\n  //     for (const column of this.fileColumns) {\n  //       const values = item?.[column.key];\n  //       if (Array.isArray(values) && values.length) {\n  //         const res = await this.documentService.downloadUrls(values);\n  //         item[column.key] = res.map((e) => e.pre_signed_url);\n  //       }\n  //     }\n  //   }\n  // };\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onDetail = (row?: any) => {\n    if (row) {\n      this.#selectedIndex = this.model.indexOf(row);\n      this.row = row;\n    } else {\n      this.#selectedIndex = -1;\n      this.row = {};\n    }\n    this.form().markAsUntouched();\n    this.form().markAsPristine();\n    this.sideDrawer?.open();\n  };\n\n  onCancel = () => {\n    this.sideDrawer?.close();\n  };\n\n  onAccept = (addable?: boolean) => {\n    const form = this.form();\n    if (form.invalid) {\n      form.markAllAsTouched();\n      return;\n    }\n    // Nếu là cập nhật thì cập nhật vào trường tương ứng\n    if (this.#selectedIndex >= 0) {\n      this.model[this.#selectedIndex] = this.row;\n    } else {\n      this.model = [...(this.model || []), this.row];\n    }\n\n    this.modelChange.emit(this.model);\n    this.table?.reload();\n    this.ref.markForCheck();\n    if (!addable) {\n      // Nếu không thêm dòng nữa thì đóng luôn\n      this.sideDrawer?.close();\n    } else {\n      // Thêm dòng nữa nhanh\n      this.onDetail();\n    }\n  };\n\n  onFileUploadChange(item: any, key: string, newValue: any) {\n    item[key] = newValue;\n    this.modelChange.emit(this.model);\n  }\n\n  getArgs(key: string): Record<string, any> | undefined {\n    const col = this.formRenderColumn[key];\n    if (col?.type === 'file' || col?.type === 'image') {\n      return col.args;\n    }\n    return undefined;\n  }\n\n  upload = async () => {\n    if (this.uploadFiles?.length) {\n      // Thực hiện upload tất cả các file đã chọn\n      await Promise.all(this.uploadFiles.map(uploadFile => uploadFile.upload()));\n    }\n  };\n}\n","@if(component && tableOption) {\n  <div style=\"width: 100%\">\n    <sd-table [option]=\"tableOption\">\n      @for(key of imageKeys; track key) {\n        <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n          <sd-upload-file\n            type=\"image\"\n           [model]=\"item[key]\"\n           [args]=\"getArgs(key)\"\n           (modelChange)=\"onFileUploadChange(item, key, $event)\"\n            align=\"left\"\n            disabled\n            previewWidth=\"50px\"\n            previewHeight=\"50px\"></sd-upload-file>\n        </ng-template>\n      }\n      @for(key of fileKeys; track key) {\n        <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n          <sd-upload-file\n           [model]=\"item[key]\"\n           [args]=\"getArgs(key)\"\n           (modelChange)=\"onFileUploadChange(item, key, $event)\"\n            align=\"left\"\n            disabled\n            previewWidth=\"50px\"\n            previewHeight=\"50px\"></sd-upload-file>\n        </ng-template>\n      }\n    </sd-table>\n    @if(!viewed && !component.properties?.viewed) {\n      <sd-button\n      prefixIcon=\"add\"\n      color=\"primary\"\n      (click)=\"onDetail()\"\n      [title]=\"component.properties?.titleButtonCreate || ('core.component.form-builder.add-new' | translate)\"></sd-button>\n    }\n    @if(!viewed && !component.properties?.viewed) {\n      <sd-side-drawer [title]=\"'core.component.form-builder.detail' | translate\" width=\"500px\">\n        <div sdTitle>\n          <span>{{ 'core.component.form-builder.create-update' | translate }}</span>\n        </div>\n        <div sdBody class=\"c-table-create-update\">\n          @if(!!component.columns?.length) {\n            <div class=\"row mx-0\">\n              @for(column of component.columns;track column.key) {\n                @let validate = formRenderColumn[column.key].validate;\n                <div class=\"col-12 px-0 mt-16\">\n                  @if(column.type === 'string') {\n                    <sd-input\n                    [form]=\"form()\"\n                    [label]=\"column.label\"\n                    [(model)]=\"row[column.key]\"\n                    [required]=\"validate?.required\"\n                    [pattern]=\"column.validate?.pattern\"\n                    [patternErrorMessage]=\"column.validate?.patternErrorMessage\"></sd-input>\n                  }@else if(column.type === 'number') {\n                    <sd-input-number\n                    [form]=\"form()\"\n                    [label]=\"column.label\"\n                    [(model)]=\"row[column.key]\"\n                    [required]=\"validate?.required\"\n                    [min]=\"column.validate?.min\"></sd-input-number>\n                  }@else if(column.type === 'radio') {\n                    <sd-radio\n                    [form]=\"form()\"\n                    [label]=\"column.label\"\n                    [name]=\"column.key\"\n                    [items]=\"column.values\"\n                    valueField=\"value\"\n                    displayField=\"display\"\n                    [required]=\"validate?.required\"></sd-radio>\n                  }@else if(column.type === 'values') {\n                    <sd-autocomplete\n                      [form]=\"form()\"\n                      [label]=\"column.label\"\n                      [(model)]=\"row[column.key]\"\n                      [items]=\"columnValues[column.key]\"\n                      valueField=\"value\"\n                      displayField=\"display\"\n                      [required]=\"validate?.required\"></sd-autocomplete>\n                  }@else if(column.type === 'date') {\n                    <sd-date\n                    [form]=\"form()\"\n                    [label]=\"column.label\"\n                    [(model)]=\"row[column.key]\"\n                    [required]=\"validate?.required\"></sd-date>\n                  }@else if(column.type === 'datetime') {\n                    <sd-datetime\n                    [form]=\"form()\"\n                    [label]=\"column.label\"\n                    [(model)]=\"row[column.key]\"\n                    [required]=\"validate?.required\"></sd-datetime>\n                  }@else if(column.type === 'image') {\n                    <sd-upload-file\n                    [label]=\"column.label\"\n                    type=\"image\"\n                    [(model)]=\"row[column.key]\"\n                    [args]=\"column.args\"\n                    previewWidth=\"50px\"\n                    previewHeight=\"50px\"\n                    align=\"left\"></sd-upload-file>\n                  }@else if (column.type === 'file') {\n                    <sd-upload-file\n                    [label]=\"column.label\"\n                    type=\"file\"\n                    [(model)]=\"row[column.key]\"\n                    [args]=\"column.args\"\n                    previewWidth=\"50px\"\n                    previewHeight=\"50px\"\n                    align=\"left\"></sd-upload-file>\n                  }\n                </div>\n              }\n            </div>\n          }\n          \n        </div>\n        <div sdFooterRight class=\"text-right pr-16\">\n          <sd-button [title]=\"'core.component.form-builder.save' | translate\" prefixIcon=\"save\" color=\"primary\" type=\"fill\" (click)=\"onAccept()\"></sd-button>\n        </div>\n      </sd-side-drawer>\n    }\n  </div>\n}\n\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericHtml } from '../../../../../../models';\nimport { HtmlPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\n\n@Component({\n  selector: 'lib-html',\n  templateUrl: './html.component.html',\n  styleUrl: './html.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [HtmlPipe],\n})\nexport class HtmlComponent implements AfterViewInit, OnDestroy, OnInit {\n  private ref = inject(ChangeDetectorRef);\n  private readonly formRenderService = inject(FormGenericService);\n\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n\n  form = new FormGroup({});\n  @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n    if (this.form !== form) {\n      this.form = form;\n      this.#inputChanges.next();\n    }\n  }\n\n  entity: Record<string, any> = {};\n  @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n      this.#inputChanges.next();\n    }\n  }\n\n  // Khi 1 giá trị trong entity thay đổi thì hashedValues sẽ thay đổi\n  // Mong muốn khi hashedValues thay đổi thì trigger changes để trigger lại hàm lấy thông tin items\n  @Input('hashedValues') set _hashedValues(val: string | undefined) {\n    this.#inputChanges.next();\n  }\n  component!: SdFormGenericHtml;\n  key!: string;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n    this.component = component;\n    this.key = component.key || component.id;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n    this.viewed = val === '' || !!val;\n  }\n\n  #subscription = new Subscription();\n  #inputChanges = new Subject<void>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  #hashedQuery?: string;\n  hashedValues?: string;\n  #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n    let result: Record<string, any> = {};\n    // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n    if (typeof query === 'string') {\n      try {\n        result = JSON.parse(query);\n      } catch (err) {\n        console.error(err);\n        return result;\n      }\n    } else if (Array.isArray(query)) {\n      return result;\n    } else {\n      result = { ...query };\n    }\n    // Xử lý query,\n    // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n    for (const key of Object.keys({ ...result })) {\n      // Xử ly\n      result[key] = StringUtilities.templateToDisplay(result[key], data);\n      if (result[key] === 'true') {\n        result[key] = true;\n      }\n      if (result[key] === 'false') {\n        result[key] = false;\n      }\n      if (result[key] === '') {\n        delete result[key];\n      }\n    }\n    return result;\n  };\n\n  async ngOnInit() {\n    this.#subscription.add(\n      this.setVariables()\n        .pipe(filter(variable => variable.key === this.component?.key))\n        .subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          this.ref.markForCheck();\n        })\n    );\n    if (!this.component.template) {\n      // Nếu HTML không phải từ template thì giá trị = content\n      this.entity[this.key] = this.component.content;\n    } else if (!this.component.properties?.queries?.length) {\n      // Nếu HTML từ static template (không có queries)\n      this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template);\n      this.ref.markForCheck();\n    } else if (this.viewed || this.component?.properties?.viewed) {\n      // Đây là trạng thái view của HTML từ template có query\n      // Nếu ở trạng thái viewed thì lấy entity hiển thị, nếu không có thì dùng content của component\n      this.entity[this.key] = this.entity[this.key] || this.component.content;\n      /* const values = { ...this.entity, ...this.form.value };\n      const query = this.#generateQuery(this.component?.properties?.query, values);\n      this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template, query);\n      this.ref.markForCheck(); */\n    } else {\n      // Nếu có queries thì lắng nghe thay đổi của form\n      this.#subscription.add(\n        this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n          const hashedValues = Utilities.hash(values);\n          if (this.hashedValues !== hashedValues) {\n            this.hashedValues = hashedValues;\n            this.#inputChanges.next();\n          }\n        })\n      );\n      this.#subscription.add(\n        this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n          const values = { ...this.entity, ...this.form.value };\n          const query = this.#generateQuery(this.component?.properties?.query, values);\n          const hashedQuery = Utilities.hash(query);\n          // Nếu query có thay đổi thì thực hiện gán lại items\n          if (hashedQuery !== this.#hashedQuery) {\n            this.#hashedQuery = hashedQuery;\n            this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template!, query);\n            this.ref.markForCheck();\n          }\n        })\n      );\n    }\n  }\n\n  ngAfterViewInit() {}\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component && entity) {\n  <div [innerHTML]=\"entity[key] | htmlPipe: entity[key] : component\"></div>\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewChild, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { SdFormGenericComponent } from '../../../../models';\nimport {\n  ChipCalendarComponent,\n  ChipStringComponent,\n  DatetimeComponent,\n  NumberComponent,\n  RadioComponent,\n  SelectComponent,\n  TableComponent,\n  TextareaComponent,\n  TextfieldComponent,\n  UploadComponent,\n} from './components';\nimport { Subject } from 'rxjs';\nimport { HtmlComponent } from './components/html/html.component';\n\n@Component({\n  selector: 'lib-item',\n  templateUrl: './item.component.html',\n  styleUrl: './item.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    TextfieldComponent,\n    TextareaComponent,\n    ChipStringComponent,\n    ChipCalendarComponent,\n    NumberComponent,\n    DatetimeComponent,\n    SelectComponent,\n    RadioComponent,\n    TableComponent,\n    UploadComponent,\n    HtmlComponent,\n  ],\n})\nexport class LibItemComponent {\n  @ViewChild(UploadComponent) itemUpload?: UploadComponent;\n  @ViewChild(TableComponent) itemTable?: TableComponent;\n  readonly setVariables = input.required<\n    Subject<{\n      key: string;\n      value: any;\n    }>\n  >();\n  readonly form = input(new FormGroup({}));\n  value: any;\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  col = 'col-6 px-8 py-8';\n  component?: SdFormGenericComponent;\n  @Input({\n    alias: 'component',\n    required: true,\n  })\n  set _component(val: SdFormGenericComponent) {\n    this.component = val;\n    this.col = `col-${this.component?.layout?.columns || '6'} px-8 py-8`;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: boolean | '' | undefined) {\n    this.disabled = val === '' || !!val;\n  }\n\n  required = false;\n  @Input('required') set _required(val: boolean | '' | undefined) {\n    this.required = val === '' || !!val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '' | undefined) {\n    this.viewed = val === '' || !!val;\n  }\n\n  validator?: SdCustomValidator;\n  @Input('validator') set _validator(validator: SdCustomValidator) {\n    if (validator && this.validator !== validator) {\n      this.validator = validator;\n    }\n  }\n\n  // Thực hiện upload nếu có component upload\n  // TODO: Bổ sung logic upload cho table\n  upload = async () => {\n    await this.itemUpload?.upload?.();\n    await this.itemTable?.upload?.();\n  };\n\n  // items: SdSearch = (args)=> {\n  //   const {  } = args;\n  // }\n\n  // onSelect = (data: BaseEntity | BaseEntity[]) => {\n  //   if (Array.isArray(data)) {\n  //     this.entity[this.component.key] = data.map(selected => selected?.id).filter(val => !!val);\n  //   } else {\n  //     this.entity[this.component.key] = data?.id;\n  //   }\n  // };\n}\n","@if (entity && component) {\n  @if (component.type === 'textfield') {\n    <div [class]=\"col\">\n      <lib-textfield\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [validator]=\"validator\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-textfield>\n    </div>\n  } @else if (component.type === 'textarea') {\n    <div [class]=\"col\">\n      <lib-textarea\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-textarea>\n    </div>\n  } @else if (component.type === 'chip-string') {\n    <div [class]=\"col\">\n      <lib-chip-string\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-chip-string>\n    </div>\n  } @else if (component.type === 'chip-calendar') {\n    <div [class]=\"col\">\n      <lib-chip-calendar\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-chip-calendar>\n    </div>\n  } @else if (component.type === 'number') {\n    <div [class]=\"col\">\n      <lib-number\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-number>\n    </div>\n  }\n  @if (component.type === 'select') {\n    <div [class]=\"col\">\n      <lib-select\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [component]=\"component\"\n        [entity]=\"entity\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [validator]=\"validator\"\n        [viewed]=\"viewed\"></lib-select>\n    </div>\n  } @else if (component.type === 'radio') {\n    <div [class]=\"col\">\n      <lib-radio\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [component]=\"component\"\n        [entity]=\"entity\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-radio>\n    </div>\n  } @else if (component.type === 'datetime') {\n    <div [class]=\"col\">\n      <lib-datetime\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [entity]=\"entity\"\n        [component]=\"component\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [viewed]=\"viewed\"></lib-datetime>\n    </div>\n  } @else if (component.type === 'upload') {\n    <div [class]=\"col\">\n      <lib-upload\n        [setVariables]=\"setVariables()\"\n        [form]=\"form()\"\n        [component]=\"component\"\n        [entity]=\"entity\"\n        [required]=\"required\"\n        [disabled]=\"disabled\"\n        [validator]=\"validator\"\n        [viewed]=\"viewed\">\n      </lib-upload>\n    </div>\n  } @else if (component.type === 'table') {\n    <div [class]=\"col\">\n      <lib-table [setVariables]=\"setVariables()\" [component]=\"component\" [(model)]=\"entity[component.key!]\" [viewed]=\"viewed\"></lib-table>\n    </div>\n  } @else if (component.type === 'html') {\n    <div [class]=\"col\">\n      <lib-html [setVariables]=\"setVariables()\" [form]=\"form()\" [entity]=\"entity\" [component]=\"component\" [viewed]=\"viewed\"> </lib-html>\n    </div>\n  } @else if (component.type === 'break') {\n    <!-- Break: empty 12-col placeholder ép xuống dòng. Không render gì runtime. -->\n    <div class=\"col-12\" style=\"height: 0;\"></div>\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericVariable } from '../../../../models';\n\n@Component({\n  selector: 'variable',\n  templateUrl: './variable.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VariableComponent implements OnInit, OnDestroy {\n  @Input({ required: true }) variables?: SdFormGenericVariable[];\n  @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n  @Input() form = new FormGroup<any>({});\n  entity: Record<string, any> = {};\n  @Input({\n    alias: 'entity',\n    required: true,\n  })\n  set _entity(val: Record<string, any>) {\n    if (this.entity !== val) {\n      this.entity = val;\n    }\n  }\n\n  #subscription = new Subscription();\n\n  // why: this component is also instantiated directly outside Angular's injection context.\n  constructor(private ref: ChangeDetectorRef) {}\n  ngOnInit() {\n    if (this.variables) {\n      // Kiểm tra xem variable có trong form chưa, nếu có thì push vào form\n      // Mục đích là khi variable bị thay đổi thì trigger được valueChanges và nơi khác lấy được variables\n      for (const variable of this.variables) {\n        if (!this.form.controls[variable.key]) {\n          this.form.addControl(variable.key, new FormControl(this.entity?.[variable.key]));\n        }\n      }\n      // Khi nhận được tín hiệu setVariables từ nơi khác, nếu variable này thuộc ds variables thì thực hiện gán variable\n      this.#subscription.add(\n        this.setVariables.pipe(filter(variable => !!this.variables?.some(e => e.key === variable.key))).subscribe(variable => {\n          this.entity[variable.key] = variable.value;\n          if (this.form.controls[variable.key]) {\n            this.form.patchValue({ [variable.key]: variable.value });\n          }\n          this.form.controls['sdRaw']?.setValue({ ...this.entity });\n          this.ref.markForCheck();\n        })\n      );\n    }\n  }\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n}\n","","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  inject,\n  Input,\n  OnDestroy,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SdSection } from '@sdcorejs/angular/components/section';\n// import { sha1 } from 'object-hash';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { debounceTime, startWith } from 'rxjs/operators';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../configurations';\nimport { EvaluateExpression, SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormRenderConfiguration } from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { WhenExpressionPipe } from '../../pipes';\nimport { LibItemComponent, VariableComponent } from './components';\n\n@Component({\n  selector: 'sd-form-render',\n  templateUrl: './form-render.component.html',\n  styleUrl: './form-render.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent],\n})\nexport class SdFormRender implements OnDestroy, AfterViewInit {\n  @ViewChildren(LibItemComponent) formRenderItems: QueryList<LibItemComponent> = new QueryList<LibItemComponent>();\n  @Input() form: FormGroup = new FormGroup({});\n  configuration!: SdFormRenderConfiguration;\n  @Input({ alias: 'configuration', required: true }) set _configuration(val: SdFormRenderConfiguration) {\n    this.configuration = this.#cloneAndFormatConfiguration(val);\n    // Luôn format lại component trước khi render\n    this.#configurationChanges.next(this.configuration);\n  }\n\n  // Dựa vào giá trị default sẽ gán cho entity\n  #defaultEntity: Record<string, any> = {};\n  @Input('defaultEntity') set _default(defaultEntity: Record<string, any>) {\n    this.#defaultEntity = defaultEntity;\n    this.#defaultEntityChanges.next(defaultEntity);\n  }\n\n  entity: Record<string, any> = {};\n  @Input('entity') set _entity(val: Record<string, any>) {\n    this.entity = val;\n    this.#entityChanges.next(this.entity);\n  }\n\n  properties: string[] = [];\n  @Input('properties') set _properties(val: string[]) {\n    this.properties = val;\n  }\n\n  viewed = false;\n  @Input('viewed') set _viewed(val: boolean | '') {\n    this.viewed = val === '' || val;\n  }\n  #subscription = new Subscription();\n  #configurationChanges = new Subject<SdFormRenderConfiguration>();\n  #defaultEntityChanges = new Subject<Record<string, any>>();\n  #entityChanges = new Subject<Record<string, any>>();\n  #renderScheduled = false;\n  #destroyed = false;\n  loadCompleted = false;\n  hashedValues?: string;\n  formValue: Record<string, any> = {};\n\n  // Các component item của form-render sẽ lắng nghe thay đổi\n  setVariables = new Subject<{ key: string; value: any }>();\n  private readonly ref = inject(ChangeDetectorRef);\n  private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      combineLatest([this.#configurationChanges, this.#entityChanges])\n        .pipe(startWith([]))\n        .subscribe(async () => {\n          if (this.entity && this.configuration?.components?.length) {\n            this.loadCompleted = true;\n            this.#scheduleRender();\n            if (this.configuration?.onLoaded) {\n              try {\n                this.configuration.onLoaded();\n              } catch (err) {\n                console.error(err);\n              }\n            }\n          }\n        })\n    );\n    this.#subscription.add(\n      this.#defaultEntityChanges.pipe(startWith(this.#defaultEntity)).subscribe(defaultEntity => {\n        for (const key of Object.keys({ ...defaultEntity })) {\n          this.entity[key] = this.entity[key] ?? defaultEntity[key];\n        }\n        this.#patchRegisteredControls(this.entity);\n        this.#syncRawControl(this.entity);\n      })\n    );\n    this.#subscription.add(\n      this.#entityChanges.pipe(startWith(this.entity)).subscribe(entity => {\n        this.#syncRawControl(entity);\n      })\n    );\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n        const hashedValues = Utilities.hash(values);\n        if (this.hashedValues !== hashedValues) {\n          this.hashedValues = hashedValues;\n          // Ở trạng thái view thì không có FormControl nên phải binding entity mới có dữ liệu cho formValue\n          this.formValue = { ...this.entity, ...values };\n          this.#scheduleRender();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#destroyed = true;\n    this.#subscription.unsubscribe();\n  }\n\n  // Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file\n  // Trước khi thực hiện lưu thì cần gọi hàm này trước để mapping giá trị đúng\n  upload = async () => {\n    for (const formRenderItem of this.formRenderItems || []) {\n      await formRenderItem.upload();\n    }\n  };\n\n  // Nên gọi hàm này trước khi save/submit\n  // Hàm này trả về mảng string error\n  // Nếu không có error nào thì trả về mảng rỗng\n  getValidationMessages = async (alert: SdFormGenericValidation['alert']) => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const messages: string[] = [];\n    for (const validation of this.configuration?.validations?.filter(e => e.alert === alert) || []) {\n      if (validation.type === 'expression') {\n        const result = EvaluateExpression(validation.expression, this.entity);\n        if (result) {\n          messages.push(validation.message);\n        }\n      } else if (validation.type === 'function') {\n        const func = this.formGenericConfiguration?.form?.validation?.functions?.find(e => e.value === validation.code);\n        if (func?.validate) {\n          const message = await func.validate({\n            entity: this.entity,\n          });\n          if (message) {\n            messages.push(message);\n          }\n        }\n      }\n    }\n    return messages;\n  };\n\n  #cloneAndFormatConfiguration(configuration: SdFormRenderConfiguration): SdFormRenderConfiguration {\n    return {\n      ...configuration,\n      components: (configuration?.components || []).map(component => this.#cloneAndFormatComponent(component)),\n    };\n  }\n\n  #patchRegisteredControls(entity: Record<string, any>): void {\n    const registeredValue: Record<string, any> = {};\n    for (const key of Object.keys(entity)) {\n      if (key !== 'sdRaw' && this.form.controls[key]) {\n        registeredValue[key] = entity[key];\n      }\n    }\n\n    if (Object.keys(registeredValue).length) {\n      this.form.patchValue(registeredValue);\n    }\n  }\n\n  #syncRawControl(entity: Record<string, any>): void {\n    if (!this.form.controls['sdRaw']) {\n      this.form.addControl('sdRaw', new FormControl({ ...entity }));\n    } else {\n      this.form.controls['sdRaw'].setValue({ ...entity });\n    }\n  }\n\n  #cloneAndFormatComponent(component: SdFormGenericComponent | SdFormGenericGroup): SdFormGenericComponent | SdFormGenericGroup {\n    const clonedComponent = JSON.parse(JSON.stringify(component)) as SdFormGenericComponent | SdFormGenericGroup;\n    SdFormatComponent(clonedComponent);\n\n    if (clonedComponent.type === 'group') {\n      clonedComponent.components = clonedComponent.components.map(child => this.#cloneAndFormatComponent(child) as SdFormGenericComponent);\n    }\n\n    return clonedComponent;\n  }\n\n  #scheduleRender(): void {\n    if (this.#renderScheduled || this.#destroyed) {\n      return;\n    }\n\n    this.#renderScheduled = true;\n    queueMicrotask(() => {\n      this.#renderScheduled = false;\n      if (!this.#destroyed) {\n        this.ref.detectChanges();\n      }\n    });\n  }\n}\n","@if (form && loadCompleted && hashedValues) {\n  <div class=\"row mx-0\">\n    @for (component of configuration.components; track component.id) {\n      @let expression = hashedValues | whenExpression: component : formValue;\n      @if (!expression.hidden) {\n        @if (component.type === 'group') {\n          @if (!!component.components.length) {\n            <div class=\"col-12 mt-16\">\n              <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\n                <div class=\"row mx-0\">\n                  @for (childComponent of component.components; track childComponent.id) {\n                    @let childExpression = hashedValues | whenExpression: childComponent : formValue;\n                    @if (!childExpression.hidden) {\n                      <lib-item\n                        [setVariables]=\"setVariables\"\n                        [form]=\"form\"\n                        [entity]=\"entity\"\n                        [component]=\"childComponent\"\n                        [required]=\"childExpression.required\"\n                        [disabled]=\"childExpression.disabled\"\n                        [viewed]=\"viewed\"></lib-item>\n                    }\n                  }\n                </div>\n              </sd-section>\n            </div>\n          }\n        } @else {\n          <lib-item\n            [setVariables]=\"setVariables\"\n            [form]=\"form\"\n            [entity]=\"entity\"\n            [component]=\"component\"\n            [required]=\"expression.required\"\n            [disabled]=\"expression.disabled\"\n            [viewed]=\"viewed\"></lib-item>\n        }\n      }\n    }\n    <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\n  </div>\n}\n","import { Injectable } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../models';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BuilderService {\n  constructor() {}\n\n  // Khi component change attribute, mong muốn re-render control để người dùng nhìn trực quan\n  // Ví dụ:\n  // Khi content html thay đổi (attribute), mong muốn bố cục (control) cũng sẽ hiển thị\n  // Khi columns của table thay đổi, cập nhật bố cục\n  #componentChanges = new Subject<SdFormGenericComponent | SdFormGenericGroup>();\n  get componentEmitters() {\n    return this.#componentChanges;\n  }\n\n  get componentListeners() {\n    // Debound 0.2s để tránh trigger liên tục\n    return this.#componentChanges.pipe(debounceTime(200));\n  }\n}\n","import { SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\nimport { Attribute, AttributeOperators, DayInfo, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../../../../models';\n\nlet expressionId = 0;\n\nexport function formAttributesToQueryFields(attributes: Attribute[]): SdQueryBuilderField[] {\n  return attributes.map(attribute => ({\n    key: attribute.value,\n    label: attribute.display,\n    type: attribute.type === 'datetime' ? 'datetime' : attribute.type,\n    operators: AttributeOperators[attribute.type].map(operator => operator.value as Operator),\n    values: attribute.type === 'values' ? attribute.values : undefined,\n    trueLabel: attribute.type === 'boolean' ? attribute.displayOnTrue : undefined,\n    falseLabel: attribute.type === 'boolean' ? attribute.displayOnFalse : undefined,\n  }));\n}\n\nexport function formExpressionToFilter(expression: SdFormGenericExpression | undefined | null): Filter | null {\n  if (!expression?.conditions?.length) return null;\n\n  const data = expression.conditions\n    .map(condition => (condition.type === 'combinator' ? formExpressionToFilter(condition) : conditionToFilter(condition)))\n    .filter((filter): filter is Filter => !!filter);\n\n  if (!data.length) return null;\n\n  return {\n    operator: expression.combinator === '||' ? 'OR' : 'AND',\n    data,\n  } as Filter;\n}\n\nexport function filterToFormExpression(filter: Filter | null | undefined): SdFormGenericExpression {\n  const root = newExpression(filter && isAndOrFilter(filter) && filter.operator === 'OR' ? '||' : '&&');\n  if (!filter) return root;\n\n  if (isAndOrFilter(filter)) {\n    root.conditions = filter.data.map(filterToExpressionNode);\n    return root;\n  }\n\n  root.conditions = [filterToCondition(filter)];\n  return root;\n}\n\nfunction conditionToFilter(condition: SdFormGenericExpressionCondition): Filter | null {\n  if (!condition.field || !condition.operator) return null;\n\n  if (condition.operator === 'NULL' || condition.operator === 'NOT_NULL') {\n    return {\n      field: condition.field as never,\n      operator: condition.operator,\n    } as Filter;\n  }\n\n  if (condition.value === undefined || condition.value === null || condition.value === '') return null;\n\n  return {\n    field: condition.field as never,\n    operator: condition.operator,\n    data: condition.value,\n  } as Filter;\n}\n\nfunction filterToExpressionNode(filter: Filter): SdFormGenericExpression | SdFormGenericExpressionCondition {\n  return isAndOrFilter(filter) ? filterToGroupExpression(filter) : filterToCondition(filter);\n}\n\nfunction filterToGroupExpression(filter: { operator: 'AND' | 'OR'; data: Filter[] }): SdFormGenericExpression {\n  return {\n    ...newExpression(filter.operator === 'OR' ? '||' : '&&'),\n    conditions: filter.data.map(filterToExpressionNode),\n  };\n}\n\nfunction filterToCondition(filter: Filter): SdFormGenericExpressionCondition {\n  const raw = filter as Record<string, any>;\n  const relative = readRelativeDate(raw);\n\n  return {\n    key: nextExpressionId('condition'),\n    type: 'condition',\n    field: raw['field'],\n    operator: raw['operator'],\n    value: relative.value,\n    dayInfo: relative.dayInfo,\n  };\n}\n\nfunction readRelativeDate(filter: Record<string, any>): { value: any; dayInfo: DayInfo } {\n  if (filter['dataType'] === 'date-today') {\n    return { value: 'now', dayInfo: { type: 'NOW' } };\n  }\n\n  if (filter['dataType'] === 'date-relative') {\n    const data = filter['data'];\n    if (data?.unit === 'day' && typeof data.amount === 'number') {\n      const related = data.direction === 'next' ? 'NEXTDAY' : 'LASTDAY';\n      const suffix = related === 'NEXTDAY' ? 'NextDay' : 'LastDay';\n\n      return {\n        value: `${data.amount}${suffix}`,\n        dayInfo: {\n          type: 'RELATED',\n          related,\n          relatedValue: data.amount,\n        },\n      };\n    }\n  }\n\n  return { value: filter['data'], dayInfo: {} };\n}\n\nfunction newExpression(combinator: '&&' | '||'): SdFormGenericExpression {\n  return {\n    key: nextExpressionId('group'),\n    type: 'combinator',\n    combinator,\n    conditions: [],\n  };\n}\n\nfunction nextExpressionId(prefix: string): string {\n  expressionId += 1;\n  return `${prefix}-${expressionId}`;\n}\n\nfunction isAndOrFilter(filter: any): filter is { operator: 'AND' | 'OR'; data: Filter[] } {\n  return !!filter && (filter.operator === 'AND' || filter.operator === 'OR') && Array.isArray(filter.data);\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, viewChild, inject, input, output } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdQueryBuilder, SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Filter } from '@sdcorejs/utils/models';\nimport {\n  Attribute,\n  GetAttributes,\n  SdFormGenericComponent,\n  SdFormGenericExpression,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { FormGenericService } from '../../../../services';\nimport { filterToFormExpression, formAttributesToQueryFields, formExpressionToFilter } from './form-expression-query-adapter';\n\n@Component({\n  selector: 'attribute-expression',\n  templateUrl: './attribute-expression.component.html',\n  styleUrl: './attribute-expression.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdButton, SdModal, SdQueryBuilder, ExpressionQueryPipe, TranslatePipe],\n})\nexport class AttributeExpression {\n  private readonly ref = inject(ChangeDetectorRef);\n  private readonly formGenericService = inject(FormGenericService);\n\n  readonly modal = viewChild(SdModal);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  @Input() label?: string;\n\n  queryFields: SdQueryBuilderField[] = [];\n  draftFilter: Filter | null = null;\n  model?: SdFormGenericExpression;\n\n  @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n\n  readonly modelChange = output<SdFormGenericExpression>();\n  readonly sdChange = output<SdFormGenericExpression>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  onEdit = async () => {\n    const attributes = await this.#getAttributes(this.components(), this.variables());\n    this.queryFields = formAttributesToQueryFields(attributes);\n    this.draftFilter = formExpressionToFilter(this.model);\n    this.modal()?.open();\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    const nextModel = filterToFormExpression(this.draftFilter);\n    this.model = nextModel;\n    this.modelChange.emit(nextModel);\n    this.sdChange.emit(nextModel);\n    this.modal()?.close();\n    this.ref.markForCheck();\n  };\n\n  #getAttributes = async (\n    components: (SdFormGenericComponent | SdFormGenericGroup)[],\n    variables: SdFormGenericVariable[]\n  ): Promise<Attribute[]> => {\n    const attributes: Attribute[] = [];\n    if (components?.length) {\n      for (const component of components) {\n        if (component.type === 'group') {\n          attributes.push(...GetAttributes(component.components));\n        } else if (component.type === 'textfield' || component.type === 'textarea') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'string',\n          });\n        } else if (component.type === 'number') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'number',\n          });\n        } else if (component.type === 'datetime') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'datetime',\n          });\n        } else if (component.type === 'checkbox') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'boolean',\n            displayOnTrue: 'YES',\n            displayOnFalse: 'NO',\n          });\n        } else if (component.type === 'radio' || component.type === 'select') {\n          if (component.values?.length) {\n            attributes.push({\n              value: component.key,\n              display: component.label,\n              type: 'values',\n              values: component.values.map(e => ({\n                value: e.value,\n                display: e.label,\n              })),\n            });\n          } else {\n            const values = await this.formGenericService.selection.items(component.valuesKey, {\n              entity: {},\n              component,\n            });\n            if (Array.isArray(values)) {\n              attributes.push({\n                value: component.key,\n                display: component.label,\n                type: 'values',\n                values,\n              });\n            } else {\n              attributes.push({\n                value: component.key,\n                display: component.label,\n                type: 'string',\n              });\n            }\n          }\n        }\n      }\n    }\n\n    if (variables?.length) {\n      for (const variable of variables) {\n        attributes.push({\n          value: variable.key,\n          display: `[VARIABLE] ${variable.label}`,\n          type: 'string',\n        });\n      }\n    }\n    return attributes;\n  };\n}\n","<div class=\"fb-field\">\n  @if (label) {\n    <div class=\"fb-field__label\">{{ label }}</div>\n  }\n  @let exprText = model | expressionQuery;\n  <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\" (keydown.enter)=\"onEdit()\" (keydown.space)=\"onEdit()\">\n    <span class=\"fb-expr__badge\">QB</span>\n    @if (exprText) {\n      <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n    } @else {\n      <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n    }\n    <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n      <span class=\"msi\">account_tree</span>\n    </button>\n  </div>\n</div>\n\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\" width=\"920px\" modalClass=\"sd-form-builder-dialog\">\n  <div class=\"fb-expression-query\">\n    <sd-query-builder [fields]=\"queryFields\" [(value)]=\"draftFilter\"></sd-query-builder>\n  </div>\n  <sd-button\n    sdFooterRight\n    prefixIcon=\"check\"\n    [title]=\"'core.component.form-builder.confirm' | translate\"\n    (click)=\"onAccept()\"\n    color=\"primary\"\n    type=\"fill\"></sd-button>\n</sd-modal>\n","import { Component, Input, output } from '@angular/core';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\n\n@Component({\n  selector: 'attribute-input-number',\n  templateUrl: './attribute-input-number.component.html',\n  imports: [SdInputNumber],\n})\nexport class AttributeInputNumber {\n  label?: string | null;\n  @Input('label') set _label(label: string | undefined | null) {\n    this.label = label;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  model?: number | null;\n  @Input('model') set _model(model: number | undefined | null) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n  readonly modelChange = output<number>();\n\n  onChange = (value: any) => {\n    this.modelChange.emit(value);\n  };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n  @if (label) {\n    <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n  }\n  <sd-input-number\n    style=\"width: 200px\"\n    size=\"sm\"\n    [(model)]=\"model\"\n    [disabled]=\"disabled\"\n    (sdChange)=\"onChange($event)\"\n    hideInlineError></sd-input-number>\n</div> -->\n<sd-input-number\n    class=\"py-8\"\n    size=\"sm\"\n    [label]=\"label!\"\n    [(model)]=\"model\"\n    [disabled]=\"disabled\"\n    (sdChange)=\"onChange($event)\"\n    hideInlineError></sd-input-number>\n","import { Component, Input, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\n\n@Component({\n  selector: 'attribute-input',\n  templateUrl: './attribute-input.component.html',\n  imports: [SdInput],\n})\nexport class AttributeInput {\n  readonly form = input<FormGroup>();\n\n  label?: string | null;\n  @Input('label') set _label(label: string | undefined | null) {\n    this.label = label;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  model?: string | null;\n  @Input('model') set _model(model: string | undefined | null) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n  readonly modelChange = output<string>();\n  readonly sdChange = output<string>();\n\n  onChange = (value: any) => {\n    this.modelChange.emit(value);\n    this.sdChange.emit(value);\n  };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n  @if (label) {\n    <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n  }\n  <sd-input style=\"width: 200px\" size=\"sm\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n</div> -->\n<sd-input class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form()\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n","import { Component, Input, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'attribute-switch',\n  templateUrl: './attribute-switch.component.html',\n  imports: [SdSelect, TranslatePipe],\n})\nexport class AttributeSwitch {\n  readonly form = input<FormGroup>();\n\n  label?: string | null;\n  @Input('label') set _label(label: string | undefined | null) {\n    this.label = label;\n  }\n\n  model?: boolean;\n  @Input('model') set _model(val: boolean | undefined | null) {\n    if (this.model !== !!val) {\n      this.model = !!val;\n    }\n  }\n  readonly modelChange = output<boolean>();\n\n  onChange = (value: any) => {\n    this.modelChange.emit(!!value);\n  };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n  @if (label) {\n    <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n  }\n  <sd-switch size=\"sm\" [form]=\"form\" [(model)]=\"model\" (sdChange)=\"onChange($event)\" hideInlineError></sd-switch>\n</div> -->\n<sd-select\n  class=\"py-8\"\n  size=\"sm\"\n  [label]=\"label!\"\n  [form]=\"form()\"\n  [(model)]=\"model\"\n  valueField=\"value\"\n  displayField=\"display\"\n  [items]=\"[\n    { value: true, display: ('core.confirm.yes-short' | translate) },\n    { value: false, display: ('core.confirm.no-short' | translate) }\n  ]\"\n  (sdChange)=\"onChange($event)\"\n  hideInlineError></sd-select>\n","import { Component, inject, Input, output } from '@angular/core';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n  selector: 'attribute-template',\n  templateUrl: './attribute-template.component.html',\n  imports: [SdAutocomplete, TranslatePipe],\n})\nexport class AttributeTemplate {\n  templates: SdFormGenericTemplate[] = [];\n  component!: SdFormGenericComponent;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericComponent) {\n    this.component = component;\n    this.templates = this.formGenericConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];\n  }\n  readonly sdChange = output<SdFormGenericComponent>();\n  private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n  onChange = (value: string | number | null) => {\n    if (typeof value === 'string') {\n      const template = this.templates?.find(e => e.value === value);\n      if (template?.component) {\n        this.sdChange.emit(JSON.parse(JSON.stringify(template.component)));\n      }\n    }\n  };\n}\n","@if (templates.length) {\n  <!-- <div class=\"d-flex align-items-center py-4\">\n    <div class=\"T14M\" style=\"flex: 1\">Dữ liệu mẫu</div>\n    <sd-autocomplete\n      style=\"width: 200px\"\n      size=\"sm\"\n      [(model)]=\"component.template\"\n      [items]=\"templates\"\n      valueField=\"value\"\n      displayField=\"display\"\n      (sdChange)=\"onChange($event)\"\n      hideInlineError></sd-autocomplete>\n  </div> -->\n  <sd-autocomplete\n      class=\"py-8\"\n      size=\"sm\"\n      [label]=\"'core.component.form-builder.template-data' | translate\"\n      [(model)]=\"component.template\"\n      [items]=\"templates\"\n      valueField=\"value\"\n      displayField=\"display\"\n      (sdChange)=\"onChange($event)\"\n      hideInlineError></sd-autocomplete>\n}\n","import { Component, Input, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\n\n@Component({\n  selector: 'attribute-textarea',\n  templateUrl: './attribute-textarea.component.html',\n  imports: [SdTextarea],\n})\nexport class AttributeTextarea {\n  readonly form = input<FormGroup>();\n\n  label?: string | null;\n  @Input('label') set _label(label: string | undefined | null) {\n    this.label = label;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  model?: string | null;\n  @Input('model') set _model(model: string | undefined | null) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n  readonly modelChange = output<string>();\n  readonly sdChange = output<string>();\n\n  onChange = (value: any) => {\n    this.modelChange.emit(value);\n    this.sdChange.emit(value);\n  };\n}\n","<sd-textarea class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form()\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-textarea>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericTextfield,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'textfield-attribute',\n  templateUrl: './textfield-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AttributeTemplate,\n    AttributeExpression,\n    AttributeInput,\n    AttributeInputNumber,\n    AttributeSwitch,\n    AttributeTextarea,\n    TranslatePipe,\n  ],\n})\nexport class TextfieldAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  component!: SdFormGenericTextfield;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'textfield') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.default-value' | translate\" [(model)]=\"component.defaultValue\"></attribute-input>\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    <attribute-input label=\"Expression\" [(model)]=\"component.validate!.pattern\"></attribute-input>\n    <attribute-input label=\"Expression message\" [(model)]=\"component.validate!.patternErrorMessage\"></attribute-input>\n    </div>\n  </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextfield } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'textfield-control',\n  templateUrl: './textfield-control.component.html',\n  styleUrl: './textfield-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericTextfield;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">\n    Your input text\n  </div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input\">{{component.defaultValue}}</div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericTextarea,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'textarea-attribute',\n  templateUrl: './textarea-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AttributeTemplate,\n    AttributeInput,\n    AttributeInputNumber,\n    AttributeSwitch,\n    AttributeExpression,\n    AttributeTextarea,\n    TranslatePipe,\n  ],\n})\nexport class TextareaAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  component!: SdFormGenericTextarea;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'textarea') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextarea } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'textarea-control',\n  templateUrl: './textarea-control.component.html',\n  styleUrl: './textarea-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericTextarea;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">Your input text</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-textarea\"></div>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipString } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'chip-string-control',\n  templateUrl: './chip-string-control.component.html',\n  styleUrl: './chip-string-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n})\nexport class ChipStringControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericChipString;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          // Vì đã đúng theo id nên có thể ép kiểu any\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">One, Two, Three</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input\">\n      <span class=\"c-chip\">One</span>\n      <span class=\"c-chip\">Two</span>\n      <span class=\"c-chip\">Three</span>\n    </div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n  SdFormatComponent,\n  SdFormGenericChipString,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'chip-string-attribute',\n  templateUrl: './chip-string-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipStringAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericChipString;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'chip-string') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n\n  onChanges = () => {\n    this.#changes.next();\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  @if (component.properties!.viewed) {\n    <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n  }\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  @if (!component.properties!.viewed) {\n    <details class=\"fb-section\" open>\n      <summary class=\"fb-section__head\">\n        <span class=\"msi\">verified</span>\n        <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n        <span class=\"msi chev\">chevron_right</span>\n      </summary>\n      <div class=\"fb-section__body\">\n      <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n      @if (!component.validate!.required) {\n        <attribute-expression\n          [label]=\"'core.component.form-builder.required-when' | translate\"\n          [components]=\"components()\"\n          [variables]=\"variables()\"\n          [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n      }\n      </div>\n    </details>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipCalendar } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'chip-calendar-control',\n  templateUrl: './chip-calendar-control.component.html',\n  styleUrl: './chip-calendar-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n})\nexport class ChipCalendarControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericChipCalendar;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          // Vì đã đúng theo id nên có thể ép kiểu any\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">One, Two, Three</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input\">\n      <span class=\"c-chip\">One</span>\n      <span class=\"c-chip\">Two</span>\n      <span class=\"c-chip\">Three</span>\n    </div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n  SdFormatComponent,\n  SdFormGenericChipCalendar,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'chip-calendar-attribute',\n  templateUrl: './chip-calendar-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipCalendarAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericChipCalendar;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'chip-string') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n\n  onChanges = () => {\n    this.#changes.next();\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  @if (component.properties!.viewed) {\n    <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n  }\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  @if (!component.properties!.viewed) {\n    <details class=\"fb-section\" open>\n      <summary class=\"fb-section__head\">\n        <span class=\"msi\">verified</span>\n        <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n        <span class=\"msi chev\">chevron_right</span>\n      </summary>\n      <div class=\"fb-section__body\">\n      <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n      @if (!component.validate!.required) {\n        <attribute-expression\n          [label]=\"'core.component.form-builder.required-when' | translate\"\n          [components]=\"components()\"\n          [variables]=\"variables()\"\n          [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n      }\n      </div>\n    </details>\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericNumber,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'number-attribute',\n  templateUrl: './number-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AttributeTemplate,\n    AttributeInput,\n    AttributeInputNumber,\n    AttributeSwitch,\n    AttributeExpression,\n    AttributeTextarea,\n    TranslatePipe,\n  ],\n})\nexport class NumberAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericNumber;\n  isTemplate = false;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'number') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.isTemplate = true;\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n  </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    <attribute-input-number [label]=\"'core.component.form-builder.min' | translate\" [(model)]=\"component.validate!.min\"></attribute-input-number>\n    <attribute-input-number [label]=\"'core.component.form-builder.max' | translate\" [(model)]=\"component.validate!.max\"></attribute-input-number>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericNumber } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Component({\n  selector: 'number-control',\n  templateUrl: './number-control.component.html',\n  styleUrl: './number-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericNumber;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  number = NumberUtilities.toISO(new Date().getTime());\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          // Vì đã đúng theo id nên có thể ép kiểu any\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">{{number}}</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input\"></div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\nimport { filter, Subscription } from 'rxjs';\nimport { SdFormGenericDatetime } from '../../../../../models';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'datetime-control',\n  templateUrl: './datetime-control.component.html',\n  styleUrl: './datetime-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [],\n})\nexport class DatetimeControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericDatetime;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n    this.component = component;\n  }\n\n  date = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy');\n  datetime = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy HH:mm');\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">{{ component.subtype === 'datetime' ? datetime : date }}</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input\">\n      <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n        <path\n          d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"></path>\n      </svg>\n    </div>\n  </div>\n}\n","import { Component, Input, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\n\n@Component({\n  selector: 'attribute-select',\n  templateUrl: './attribute-select.component.html',\n  imports: [SdSelect],\n})\nexport class AttributeSelect {\n  readonly form = input<FormGroup>();\n\n  label?: string | null;\n  @Input('label') set _label(label: string | undefined | null) {\n    this.label = label;\n  }\n\n  disabled = false;\n  @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n    this.disabled = val === '' || !!val;\n  }\n\n  multiple = false;\n  @Input('multiple') set _multiple(val: '' | boolean | undefined | null) {\n    this.multiple = val === '' || !!val;\n  }\n\n  items: Item[] = [];\n  @Input({ alias: 'items', required: true }) set _items(items: Item[] | undefined | null) {\n    if (Array.isArray(items) && this.items !== items) {\n      this.items = items || [];\n    } else {\n      items = [];\n    }\n  }\n\n  model?: any | any[];\n  @Input('model') set _model(model: any | any[] | undefined | null) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n  readonly modelChange = output<string>();\n  readonly sdChange = output<string>();\n\n  onChange = (value: any) => {\n    this.modelChange.emit(value);\n    this.sdChange.emit(value);\n  };\n}\n\ninterface Item {\n  value: string;\n  display: string;\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n  @if (label) {\n    <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n  }\n  <sd-select\n    style=\"width: 200px\"\n    size=\"sm\"\n    [form]=\"form\"\n    [(model)]=\"model\"\n    [items]=\"items\"\n    valueField=\"value\"\n    displayField=\"display\"\n    [disabled]=\"disabled\"\n    (sdChange)=\"onChange($event)\"\n    hideInlineError></sd-select>\n</div> -->\n<sd-select\n    class=\"py-8\"\n    size=\"sm\"\n    [label]=\"label!\"\n    [form]=\"form()\"\n    [(model)]=\"model\"\n    [items]=\"items\"\n    valueField=\"value\"\n    displayField=\"display\"\n    [disabled]=\"disabled\"\n    (sdChange)=\"onChange($event)\"\n    hideInlineError></sd-select>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericDatetime,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'datetime-attribute',\n  templateUrl: './datetime-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, AttributeTextarea, TranslatePipe],\n})\nexport class DatetimeAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  component!: SdFormGenericDatetime;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'datetime') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-select\n    [label]=\"'core.component.form-builder.format' | translate\"\n    [(model)]=\"component.subtype\"\n    [items]=\"[\n      { value: 'date', display: 'dd/MM/yyyy' },\n      { value: 'datetime', display: 'dd/MM/yyyy HH:mm' }\n    ]\"></attribute-select>\n  <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n  </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  ViewChild,\n  OnInit,\n  OnDestroy,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n  GetComponentAttributes,\n  GetVariableAttributes,\n  SdFormGenericComponent,\n  SdFormGenericDefinitionSelection,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'build-queries',\n  templateUrl: './build-queries.component.html',\n  styleUrl: './build-queries.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  @Input() label?: string;\n  readonly selections = input.required<SdFormGenericDefinitionSelection[]>();\n  valuesKey?: string | null;\n  @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n    this.valuesKey = valuesKey;\n    this.#inputChanges.next();\n  }\n  selection?: SdFormGenericDefinitionSelection;\n\n  leftProperties?: Property[];\n  rightProperties?: Property[];\n\n  queryString?: string;\n  model?: Record<string, any>;\n  @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n    this.model = JSON.parse(JSON.stringify({ ...model }));\n    // Parse JSON -> STRING để hiển thị trên UI\n    this.queryString = JSON.stringify(this.model);\n  }\n  readonly modelChange = output<Record<string, string>>();\n\n  // Mỗi lần inputChanges thì tính lại selection\n  #inputChanges = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.#inputChanges.pipe(startWith('')).subscribe(() => {\n        this.selection = this.selections()?.find?.(e => e.value === this.valuesKey);\n      })\n    );\n  }\n\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n\n  edit = async () => {\n    this.leftProperties = this.selection?.queries?.items || [];\n    this.rightProperties = [...GetComponentAttributes(this.components()), ...GetVariableAttributes(this.variables())].map(e => ({\n      value: '${' + e.value + '}',\n      display: e.display,\n    }));\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const result: Record<string, string> = {};\n    for (const key of Object.keys(this.model!)) {\n      const value = this.model?.[key];\n      if (value !== undefined && value !== null && value !== '') {\n        result[key] = value;\n      }\n    }\n    this.modelChange.emit(result);\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n}\n\nexport interface Property {\n  value: string;\n  display: string;\n}\n","@if (!!selection?.queries?.items?.length) {\n  <div class=\"d-flex align-items-center py-4\">\n    @if (label) {\n      <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n    }\n    <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n      <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n    </div>\n  </div>\n  <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\" modalClass=\"sd-form-builder-dialog\">\n    <div class=\"c-builder\">\n      @for (property of leftProperties; track property.value) {\n        <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n          <div style=\"width: 150px\">\n            <div class=\"text-secondary\">{{ property.value }}</div>\n            <div class=\"T16M\">{{ property.display }}</div>\n          </div>\n          <sd-autocomplete\n            [label]=\"'core.component.form-builder.value-source-field' | translate\"\n            [form]=\"form\"\n            style=\"flex: 1\"\n            [(model)]=\"model![property.value]\"\n            [items]=\"rightProperties\"\n            valueField=\"value\"\n            displayField=\"display\"\n            hideInlineError></sd-autocomplete>\n        </div>\n      }\n    </div>\n    <ng-container sdFooterRight>\n      <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n    </ng-container>\n  </sd-modal>\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  ViewChild,\n  OnInit,\n  OnDestroy,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport {\n  GetComponentAttributes,\n  GetVariableAttributes,\n  SdFormGenericComponent,\n  SdFormGenericDefinitionSelection,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'build-variables',\n  templateUrl: './build-variables.component.html',\n  styleUrl: './build-variables.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildVariables implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  @Input() label?: string;\n  readonly selections = input.required<SdFormGenericDefinitionSelection[]>();\n  valuesKey?: string | null;\n  @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n    this.valuesKey = valuesKey;\n    this.#inputChanges.next();\n  }\n  selection?: SdFormGenericDefinitionSelection;\n\n  leftProperties?: Property[];\n  rightProperties?: Property[];\n\n  items: {\n    id: string;\n    key: string;\n    value: any;\n  }[] = [];\n  queryString?: string;\n  #model!: Record<string, any>;\n  @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n    this.#model = JSON.parse(JSON.stringify({ ...model }));\n    // Parse JSON -> STRING để hiển thị trên UI\n    this.queryString = JSON.stringify(this.#model);\n    this.items = Object.keys(this.#model).map(key => ({\n      id: Utilities.randomId(),\n      key,\n      value: this.#model?.[key],\n    }));\n  }\n  readonly modelChange = output<Record<string, string>>();\n\n  // Mỗi lần inputChanges thì tính lại selection\n  #inputChanges = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.#inputChanges.pipe(startWith('')).subscribe(() => {\n        this.selection = this.selections()?.find?.(e => e.value === this.valuesKey);\n      })\n    );\n  }\n\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n\n  edit = async () => {\n    this.leftProperties = [...GetComponentAttributes(this.components()), ...GetVariableAttributes(this.variables())];\n    this.rightProperties =\n      this.selection?.variables?.items?.map(e => ({\n        value: '${' + e.value + '}',\n        display: e.display,\n      })) || [];\n    this.modal?.open?.();\n    this.ref.markForCheck();\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  addField = () => {\n    this.items.push({\n      id: Utilities.randomId(),\n      key: '',\n      value: '',\n    });\n    this.ref.markForCheck();\n  };\n\n  remove = (idx: number) => {\n    this.items.splice(idx, 1);\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const result: Record<string, string> = {};\n    for (const { key, value } of this.items) {\n      if (value !== undefined && value !== null && value !== '') {\n        result[key] = value;\n      }\n    }\n    this.modelChange.emit(result);\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n}\n\nexport interface Property {\n  value: string;\n  display: string;\n}\n","@if (!!selection?.variables?.items?.length) {\n  <div class=\"d-flex align-items-center py-4\">\n    @if (label) {\n      <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n    }\n    <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n      <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n    </div>\n  </div>\n  <sd-modal [title]=\"'core.component.form-builder.set-on-change-assign' | translate\" width=\"500px\" modalClass=\"sd-form-builder-dialog\">\n    <div class=\"c-builder\">\n      <div class=\"d-flex justify-content-end\">\n        <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n      </div>\n      <!-- Cấp 1 -->\n      @for (item of items; track item.id; let idx = $index) {\n        <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n          <sd-autocomplete\n            [label]=\"'core.component.form-builder.target-field' | translate\"\n            [form]=\"form\"\n            style=\"flex: 1\"\n            [(model)]=\"item.key\"\n            [items]=\"leftProperties\"\n            valueField=\"value\"\n            displayField=\"display\"\n            required\n            hideInlineError></sd-autocomplete>\n          <sd-autocomplete\n             [label]=\"'core.component.form-builder.target-value' | translate\"\n            [form]=\"form\"\n            style=\"flex: 1\"\n            [(model)]=\"item.value\"\n            [items]=\"rightProperties\"\n            valueField=\"value\"\n            displayField=\"display\"\n            required\n            hideInlineError></sd-autocomplete>\n        </div>\n      }\n    </div>\n    <ng-container sdFooterRight>\n      <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n    </ng-container>\n  </sd-modal>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, inject, input, output } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSection } from '@sdcorejs/angular/components/section';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport {\n  SdFormGenericComponent,\n  SdFormGenericDefinitionSelection,\n  SdFormGenericGroup,\n  SdFormGenericSelectionStaticItem,\n  SdFormGenericTableColumn,\n  SdFormGenericValues,\n  SdFormGenericVariable,\n} from '../../../../models';\nimport { FormGenericService } from '../../../../services';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { BuildVariables } from './components/build-variables/build-variables.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n  selector: 'attribute-selection',\n  templateUrl: './attribute-selection.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdInput, SdAutocomplete, SdButton, SdSection, BuildQueries, BuildVariables, TranslatePipe],\n})\nexport class AttributeSelection implements OnInit {\n  private ref = inject(ChangeDetectorRef);\n  private formGenericService = inject(FormGenericService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  @Input({ required: true }) component!: SdFormGenericValues | SdFormGenericTableColumn;\n  // ValuesKey\n  valuesKey?: string;\n  @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n    if (this.valuesKey !== valuesKey) {\n      this.valuesKey = valuesKey?.toString();\n    }\n  }\n  readonly valuesKeyChange = output<string>();\n  selections: SdFormGenericDefinitionSelection[] = [];\n\n  // Values\n  values: SdFormGenericSelectionStaticItem[] = [];\n  @Input({ alias: 'values', required: true }) set _values(values: SdFormGenericSelectionStaticItem[] | undefined | null) {\n    if (this.values !== values) {\n      this.values = values || [];\n    }\n  }\n  readonly valuesChange = output<SdFormGenericSelectionStaticItem[]>();\n  readonly sdChange = output<SdFormGenericComponent>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit(): void {\n    this.formGenericService.selection.definitions().then(selections => {\n      // Nếu không phải là type select thì không hiển thị các lựa chọn lazyValues\n      // Vì radio, checklist không thể load lazy\n      if (this.component.type !== 'select') {\n        this.selections = selections.filter(selection => !('lazyValues' in selection) && !('lazyValuesKey' in selection));\n      } else {\n        this.selections = selections;\n      }\n      this.ref.markForCheck();\n    });\n  }\n\n  onChangeValuesKey = (value: any) => {\n    this.valuesKeyChange.emit(value);\n    // Gán values rỗng nếu đã sử dụng valuesKey\n    this.values = [];\n    this.valuesChange.emit(this.values);\n    this.ref.markForCheck();\n  };\n\n  onChangeValues = () => {\n    this.valuesChange.emit(this.values);\n  };\n\n  addItem = () => {\n    this.values.push({\n      value: `value_${new Date().getTime().toString(36)}`,\n      label: `Label ${new Date().getTime().toString(36)}`,\n    });\n    this.valuesChange.emit(this.values);\n    this.ref.markForCheck();\n  };\n\n  removeItem = (idx: number) => {\n    this.values.splice(idx, 1);\n    this.valuesChange.emit(this.values);\n    this.ref.markForCheck();\n  };\n}\n","<sd-section class=\"mt-8\" [title]=\"'core.component.form-builder.data' | translate\" icon=\"format_list_bulleted\">\n  @if (selections.length) {\n    <div class=\"d-flex align-items-center py-4\">\n      <div class=\"T14M\" style=\"flex: 1\">{{ 'core.component.form-builder.data-api' | translate }}</div>\n      <sd-autocomplete\n        style=\"width: 200px\"\n        size=\"sm\"\n        [(model)]=\"valuesKey\"\n        [items]=\"selections\"\n        valueField=\"value\"\n        displayField=\"display\"\n        (sdChange)=\"onChangeValuesKey($event)\"\n        hideInlineError></sd-autocomplete>\n    </div>\n    <!-- Nếu là select từ API thì cho phép truyền thêm Query -->\n\n    @if (component.type === 'select' && !!valuesKey) {\n      <build-queries\n        [label]=\"'core.component.form-builder.query-condition' | translate\"\n        [selections]=\"selections\"\n        [valuesKey]=\"valuesKey\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.query\"></build-queries>\n      <build-variables\n        [label]=\"'core.component.form-builder.assign-value' | translate\"\n        [selections]=\"selections\"\n        [valuesKey]=\"valuesKey\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.setVariables\"></build-variables>\n      <!-- <div class=\"d-flex align-items-center py-4\">\n        <div class=\"T14M\" style=\"flex: 1\">Điều kiện truy vấn</div>\n        <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"component.properties!.query\" hideInlineError></sd-input>\n      </div> -->\n    }\n  }\n  @if (!valuesKey) {\n    <div class=\"d-flex flex-column\" style=\"gap: 4px\">\n      <div class=\"T14M\">{{ 'core.component.form-builder.data-static' | translate }}</div>\n      @for (item of values; track item.value; let idx = $index) {\n        <div class=\"d-flex align-items-end py-4\" style=\"gap: 4px\">\n          <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.value\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n          <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.label\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n          <sd-button prefixIcon=\"delete\" (click)=\"removeItem(idx)\" color=\"error\"></sd-button>\n        </div>\n      }\n      <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-data' | translate\" (click)=\"addItem()\" color=\"primary\"></sd-button>\n    </div>\n  }\n</sd-section>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericSelect,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'select-attribute',\n  templateUrl: './select-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class SelectAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericSelect;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChanges = () => {\n    this.#changes.next();\n  };\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'select') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-switch [label]=\"'core.component.form-builder.multiple' | translate\" [(model)]=\"component.properties!.multiple\"></attribute-switch>\n  @if (component.properties!.viewed) {\n    <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n  }\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n      <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <attribute-selection\n    [components]=\"components()\"\n    [component]=\"component\"\n    [variables]=\"variables()\"\n    [(valuesKey)]=\"component.valuesKey\"\n    [(values)]=\"component.values\"\n    (valuesKeyChange)=\"onChanges()\"\n    (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericSelect } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'select-control',\n  templateUrl: './select-control.component.html',\n  styleUrl: './select-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n})\nexport class SelectControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericSelect;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">Your dropdown selection</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"d-flex align-items-center\">\n    <div class=\"c-input c-select\">\n      <svg width=\"8\" height=\"8\">\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          fill=\"currentColor\"\n          stroke=\"currentColor\"\n          stroke-width=\".5\"\n          d=\"M7.75 1.336L4 6.125.258 1.335 0 1.54l4 5.125L8 1.54zm0 0\"></path>\n      </svg>\n    </div>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericRadio } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n  selector: 'radio-control',\n  templateUrl: './radio-control.component.html',\n  styleUrl: './radio-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n})\nexport class RadioControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericRadio;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          // Vì đã đúng theo id nên có thể ép kiểu any\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">Your radio selection</div>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"c-radio-item d-flex flex-wrap align-items-center\">\n    @if (component.values?.length) {\n      <div class=\"d-flex\" [class.flex-column]=\"component.properties?.direction === 'column'\" style=\"gap: 8px\">\n        @for (item of component.values; track item.value) {\n          <div class=\"d-flex align-items-center my-4\">\n            <div class=\"c-rd-ip mr-4\"></div>\n            <div class=\"T12M\">{{ item.label }}</div>\n          </div>\n        }\n      </div>\n    } @else if (component.valuesKey) {\n      <div class=\"T12R text-secondary\">{{ component.valuesKey }}</div>\n    }\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericRadio,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'radio-attribute',\n  templateUrl: './radio-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, TranslatePipe],\n})\nexport class RadioAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericRadio;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'radio') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n\n  onChanges = () => {\n    this.#changes.next();\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  @if (component.properties!.viewed) {\n    <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n  }\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    <attribute-select\n      [form]=\"form\"\n      [label]=\"'core.component.form-builder.layout' | translate\"\n      [(model)]=\"component.properties!.direction\"\n      [items]=\"[\n        { value: 'row', display: 'Ngang' },\n        { value: 'column', display: ('core.component.form-builder.vertical' | translate) }\n      ]\"></attribute-select>\n    </div>\n  </details>\n  @if (!component.properties!.viewed) {\n    <details class=\"fb-section\" open>\n      <summary class=\"fb-section__head\">\n        <span class=\"msi\">verified</span>\n        <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n        <span class=\"msi chev\">chevron_right</span>\n      </summary>\n      <div class=\"fb-section__body\">\n      <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n      @if (!component.validate!.required) {\n        <attribute-expression\n          [label]=\"'core.component.form-builder.required-when' | translate\"\n          [components]=\"components()\"\n          [variables]=\"variables()\"\n          [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n      }\n      </div>\n    </details>\n  }\n  <attribute-selection\n    [components]=\"components()\"\n    [variables]=\"variables()\"\n    [component]=\"component\"\n    [(valuesKey)]=\"component.valuesKey\"\n    [(values)]=\"component.values\"\n    (valuesKeyChange)=\"onChanges()\"\n    (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { SdFormGenericCheckbox } from '../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'checkbox-control',\n  templateUrl: './checkbox-control.component.html',\n  styleUrl: './checkbox-control.component.scss',\n  imports: [CommonModule, TranslatePipe],\n})\nexport class CheckboxControl {\n  component!: SdFormGenericCheckbox;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n    this.component = component;\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <div class=\"T14M\">{{ 'core.component.form-builder.yes-no' | translate }}</div>\n} @else {\n  <div class=\"c-checkbox\">\n    <div class=\"d-flex align-items-center\">\n      <div class=\"c-box mr-4\"></div>\n      <div class=\"T14R\">{{ component.label }}</div>\n    </div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericCheckbox,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { FormGroup } from '@angular/forms';\nimport { BuilderService } from '../../../services';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'checkbox-attribute',\n  templateUrl: './checkbox-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class CheckboxAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  component!: SdFormGenericCheckbox;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'checkbox') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  ViewChild,\n  OnInit,\n  OnDestroy,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n  GetComponentAttributes,\n  GetVariableAttributes,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'build-queries',\n  templateUrl: './build-queries.component.html',\n  styleUrl: './build-queries.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  form = new FormGroup({});\n  @Input() label?: string;\n  leftProperties?: Property[];\n  @Input({ alias: 'queries', required: true }) set _queries(queries: { key: string; label: string }[] | undefined | null) {\n    this.leftProperties =\n      queries?.map(e => ({\n        value: e.key,\n        display: e.label,\n      })) || [];\n  }\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  rightProperties?: Property[];\n  queryString?: string;\n  model?: Record<string, any>;\n  @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n    this.model = JSON.parse(JSON.stringify({ ...model }));\n    // Parse JSON -> STRING để hiển thị trên UI\n    this.queryString = JSON.stringify(this.model);\n  }\n  readonly modelChange = output<Record<string, string>>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  ngOnDestroy() {}\n\n  edit = () => {\n    this.rightProperties =\n      [...GetComponentAttributes(this.components()), ...GetVariableAttributes(this.variables())].map(e => ({\n        value: '${' + e.value + '}',\n        display: e.display,\n      })) || [];\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const result: Record<string, string> = {};\n    for (const key of Object.keys(this.model!)) {\n      const value = this.model?.[key];\n      if (value !== undefined && value !== null && value !== '') {\n        result[key] = value;\n      }\n    }\n    this.modelChange.emit(result);\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n}\n\ninterface Property {\n  value: string;\n  display: string;\n}\n","@if (!!leftProperties?.length) {\n  <div class=\"d-flex align-items-center py-4\">\n    @if (label) {\n      <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n    }\n    <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n      <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n    </div>\n  </div>\n  <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\" modalClass=\"sd-form-builder-dialog\">\n    <div class=\"c-builder\">\n      @for (property of leftProperties; track property.value) {\n        <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n          <div class=\"T14M\" style=\"width: 150px\">{{ property.display }}</div>\n          <sd-autocomplete\n            [label]=\"'core.component.form-builder.value-source-field' | translate\"\n            [form]=\"form\"\n            style=\"flex: 1\"\n            [(model)]=\"model![property.value]\"\n            [items]=\"rightProperties\"\n            valueField=\"value\"\n            displayField=\"display\"\n            required\n            hideInlineError></sd-autocomplete>\n        </div>\n      }\n    </div>\n    <ng-container sdFooterRight>\n      <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n    </ng-container>\n  </sd-modal>\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n  GetComponentAttributes,\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericDefinitionHtml,\n  SdFormGenericGroup,\n  SdFormGenericHtml,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { FormGenericService } from '../../../../../services';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'html-attribute',\n  templateUrl: './html-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeInput, AttributeSelect, AttributeExpression, AttributeTextarea, BuildQueries, TranslatePipe],\n})\nexport class HtmlAttribute implements OnInit, AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private formGenericService = inject(FormGenericService);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n\n  component!: SdFormGenericHtml;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n  form = new FormGroup({});\n  definitionHtmls: SdFormGenericDefinitionHtml[] = [];\n  // Mong muốn là khi attribute changes thông báo cho control biết để control render content tương ứng\n  readonly attributeChanges = output();\n\n  #subscription = new Subscription();\n  rightProperties: { value: string; display: string }[] = [];\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit(): void {\n    this.formGenericService.html.definitions().then(htmls => {\n      this.definitionHtmls = htmls;\n      this.ref.markForCheck();\n    });\n    this.rightProperties =\n      GetComponentAttributes(this.components()).map(e => ({\n        value: '${' + e.value + '}',\n        display: e.display,\n      })) || [];\n  }\n\n  ngAfterViewInit(): void {\n    // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeDefinition = async (value: string) => {\n    const definition = this.definitionHtmls.find(e => e.value === value);\n    if (definition) {\n      this.component.content = await this.formGenericService.html.getContent(value);\n      this.component.properties!.variables = JSON.parse(JSON.stringify(definition.variables || []));\n      if (definition.type === 'query') {\n        this.component.properties!.queries = JSON.parse(JSON.stringify(definition.queries || []));\n      } else {\n        this.component.properties!.queries = [];\n      }\n      delete this.component.properties?.query;\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    } else {\n      this.component.properties!.variables = [];\n      this.component.properties!.queries = [];\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n}\n","@if (!component.properties!.hidden) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">info</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-select\n      [label]=\"'core.component.form-builder.template-data' | translate\"\n      [(model)]=\"component.template\"\n      [items]=\"definitionHtmls\"\n      (sdChange)=\"onChangeDefinition($event)\"></attribute-select>\n    <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\"></attribute-input>\n    <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.content' | translate\" [(model)]=\"component.content\"></attribute-textarea>\n    @if (component.properties?.queries?.length) {\n      <build-queries\n        [label]=\"'core.component.form-builder.query-condition' | translate\"\n        [queries]=\"component.properties?.queries\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.query\"></build-queries>\n    }\n    </div>\n  </details>\n  @if (component.properties?.variables?.length) {\n    <details class=\"fb-section\" open>\n      <summary class=\"fb-section__head\">\n        <span class=\"msi\">format_list_bulleted</span>\n        <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n        <span class=\"msi chev\">chevron_right</span>\n      </summary>\n      <div class=\"fb-section__body\">\n      @for (variable of component.properties?.variables; track variable.key) {\n        <attribute-input [form]=\"form\" [label]=\"variable.label\" [(model)]=\"variable.value\"></attribute-input>\n      }\n      </div>\n    </details>\n  }\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    </div>\n  </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericHtml } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\nimport { HtmlPipe } from '../../../../../pipes';\nimport { FormGenericService } from '../../../../../services';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n  selector: 'html-control',\n  templateUrl: './html-control.component.html',\n  styleUrl: './html-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [HtmlPipe],\n})\nexport class HtmlControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n  private formGenericService = inject(FormGenericService);\n\n  component!: SdFormGenericHtml;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n    this.component = component;\n    SdFormatComponent(this.component);\n    this.content = this.component.content;\n  }\n  content?: string;\n  hashed?: string; // Dùng để ép Angular nhận diện sự thay đổi của HTML khi content/variables\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(async () => {\n        if (this.component.template) {\n          this.content = await this.formGenericService.html.getContent(this.component.template);\n        } else {\n          this.content = this.component.content;\n        }\n        this.hashed = Utilities.hash({\n          content: this.content,\n          variables: this.component.properties?.variables?.reduce(\n            (current, next) => ({\n              ...current,\n              [next.key]: next.value,\n            }),\n            {}\n          ),\n        });\n        this.ref.markForCheck();\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (!content) {\n  <div class=\"c-html d-flex align-items-center justify-content-center\">\n    <span class=\"material-icons\"> html </span>\n  </div>\n} @else {\n  <div [innerHTML]=\"hashed | htmlPipe: content: component\"></div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, OnInit, inject, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../../models';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'attribute-parameter',\n  templateUrl: './attribute-parameter.component.html',\n  styleUrl: './attribute-parameter.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdButton, SdModal, SdInput, TranslatePipe],\n})\nexport class AttributeParameter implements OnInit {\n  private ref = inject(ChangeDetectorRef);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  form = new FormGroup({});\n  @Input() label?: string;\n\n  items: {\n    id: string;\n    key: string;\n    value: any;\n  }[] = [];\n  queryString?: string;\n  #model!: Record<string, any>;\n  @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n    this.#model = JSON.parse(JSON.stringify({ ...model }));\n    // Parse JSON -> STRING để hiển thị trên UI\n    this.queryString = JSON.stringify(this.#model);\n    this.items = Object.keys(this.#model).map(key => ({\n      id: Utilities.randomId(),\n      key,\n      value: this.#model?.[key],\n    }));\n  }\n  readonly modelChange = output<Record<string, string>>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  edit = async () => {\n    this.modal?.open?.();\n    this.ref.markForCheck();\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  addField = () => {\n    this.items.push({\n      id: Utilities.randomId(),\n      key: '',\n      value: '',\n    });\n    this.ref.markForCheck();\n  };\n\n  remove = (idx: number) => {\n    this.items.splice(idx, 1);\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const result: Record<string, string> = {};\n    for (const { key, value } of this.items) {\n      if (value !== undefined && value !== null && value !== '') {\n        result[key] = value;\n      }\n    }\n    this.modelChange.emit(result);\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n}\n\nexport interface Property {\n  value: string;\n  display: string;\n}\n","<div class=\"d-flex align-items-center py-4\">\n  @if (label) {\n    <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n  }\n  <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n    <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n  </div>\n</div>\n<sd-modal [title]=\"'core.component.form-builder.assign-parameter-value' | translate\" width=\"500px\" modalClass=\"sd-form-builder-dialog\">\n  <div class=\"c-builder\">\n    <div class=\"d-flex justify-content-end\">\n      <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n    </div>\n    <!-- Cấp 1 -->\n    @for (item of items; track item.id; let idx = $index) {\n      <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n        <sd-input [label]=\"'core.component.form-builder.parameter-name' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.key\" required hideInlineError></sd-input>\n        <sd-input [label]=\"'core.component.form-builder.parameter-value' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.value\" required hideInlineError></sd-input>\n        <div style=\"width: 32px; min-width: 32px\">\n            <sd-button\n              prefixIcon=\"delete\"\n              [tooltip]=\"'core.component.form-builder.delete' | translate\"\n              (click)=\"remove(idx)\"\n              size=\"sm\"\n              class=\"p-0\"\n            ></sd-button>\n          </div>\n      </div>\n    }\n  </div>\n  <ng-container sdFooterRight>\n    <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n  </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, AfterViewInit, OnDestroy, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericUpload,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeParameter } from '../../attribute-parameter/attribute-parameter.component';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'upload-attribute',\n  templateUrl: './upload-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AttributeTemplate,\n    AttributeInput,\n    AttributeInputNumber,\n    AttributeSwitch,\n    AttributeSelect,\n    AttributeExpression,\n    AttributeParameter,\n    TranslatePipe,\n  ],\n})\nexport class UploadAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  component!: SdFormGenericUpload;\n  extension?: string;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n    this.component = component;\n    SdFormatComponent(this.component);\n    this.extension = this.component.properties!.extensions?.join(',') || '';\n  }\n\n  #subscription = new Subscription();\n  readonly #i18n = inject(I18nService);\n  // Dropdown nguồn upload (mobile); display dịch qua i18n để hỗ trợ EN\n  sources: {\n    value: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE';\n    display: string;\n  }[] = [\n    {\n      value: 'ALL',\n      display: this.#i18n.t('core.component.form-builder.upload-source.all'),\n    },\n    {\n      value: 'PHOTO_LIBRARY',\n      display: this.#i18n.t('core.component.form-builder.upload-source.photo-library'),\n    },\n    {\n      value: 'CAPTURE',\n      display: this.#i18n.t('core.component.form-builder.upload-source.capture'),\n    },\n  ];\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'upload') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.component.properties!.type = this.component.properties!.type || 'file';\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n\n  onChangeExtension = (extension: string) => {\n    this.extension = extension;\n    this.component.properties!.extensions =\n      extension\n        ?.split(',')\n        ?.map(val => val?.trim())\n        ?.filter(val => !!val) || [];\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  <attribute-select\n    [label]=\"'core.component.form-builder.type' | translate\"\n    [(model)]=\"component.properties!.type\"\n    [items]=\"[\n      { value: 'file', display: ('core.component.form-builder.file' | translate) },\n      { value: 'image', display: ('core.component.form-builder.image' | translate) }\n    ]\"></attribute-select>\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    <attribute-input-number [label]=\"'core.component.form-builder.max-files' | translate\" [(model)]=\"component.properties!.max\"></attribute-input-number>\n    <attribute-input-number [label]=\"'core.component.form-builder.size-mb' | translate\" [(model)]=\"component.properties!.maxSize\"></attribute-input-number>\n    @if (component.properties!.type === 'file') {\n      <attribute-input [label]=\"'core.component.form-builder.format-example' | translate\" [model]=\"extension\" (modelChange)=\"onChangeExtension($event)\"></attribute-input>\n    }\n    @if (component.properties!.type === 'image') {\n      <attribute-select [label]=\"'core.component.form-builder.source-mobile' | translate\" [(model)]=\"component.properties!.source\" [items]=\"sources\"></attribute-select>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">settings</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components()\" [(model)]=\"component.properties!.args\"></attribute-parameter>\n    </div>\n  </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericUpload } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'upload-control',\n  templateUrl: './upload-control.component.html',\n  styleUrl: './upload-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UploadControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericUpload;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n}\n","@if (component.properties?.viewed) {\n  <div class=\"d-block T12R text-secondary\">\n    {{ component.label }}\n  </div>\n  <svg\n    width=\"64\"\n    height=\"64\"\n    viewBox=\"0 0 1280 1280\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    stroke-linejoin=\"round\"\n    stroke-miterlimit=\"2\"\n    alt=\"This is an image placeholder\">\n    <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n    <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n    <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n    <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n  </svg>\n} @else {\n  <div class=\"d-block mb-0 T14M\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span class=\"text-error mb-2\">*</span>\n    }\n  </div>\n  <div class=\"c-upload-file d-flex align-items-center justify-content-between\">\n    <svg\n      width=\"64\"\n      height=\"64\"\n      viewBox=\"0 0 1280 1280\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      stroke-linejoin=\"round\"\n      stroke-miterlimit=\"2\"\n      alt=\"This is an image placeholder\">\n      <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n      <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n      <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n      <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n    </svg>\n  </div>\n}\n","import { Component, inject, Input, ViewChild, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport {\n  SdFormGenericComponent,\n  SdFormGenericDefinitionTable,\n  SdFormGenericGroup,\n  SdFormGenericTableColumn,\n  SdFormGenericVariable,\n  TableColumnTypes,\n} from '../../../../models';\nimport { AttributeInput } from '../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../attribute-select/attribute-select.component';\nimport { AttributeSelection } from '../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../attribute-switch/attribute-switch.component';\nimport { AttributeParameter } from '../attribute-parameter/attribute-parameter.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n  selector: 'attribute-table',\n  templateUrl: './attribute-table.component.html',\n  imports: [\n    MatDividerModule,\n    SdLabel,\n    SdAutocomplete,\n    SdButton,\n    SdModal,\n    AttributeSelection,\n    AttributeInput,\n    AttributeSelect,\n    AttributeSwitch,\n    AttributeParameter,\n    TranslatePipe,\n  ],\n})\nexport class AttributeTable {\n  @ViewChild(SdModal) modal?: SdModal;\n  form = new FormGroup({});\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  // ColumnsKey\n  columnsKey?: string;\n  @Input({ alias: 'columnsKey', required: true }) set _columnsKey(columnsKey: string | undefined | null) {\n    if (this.columnsKey !== columnsKey) {\n      this.columnsKey = columnsKey?.toString();\n    }\n  }\n  readonly columnsKeyChange = output<string>();\n  private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n  tables: SdFormGenericDefinitionTable[] = this.formGenericConfiguration?.form?.tables || [];\n\n  // Columns\n  types = TableColumnTypes;\n  columns: SdFormGenericTableColumn[] = [];\n  @Input({ alias: 'columns', required: true }) set _columns(columns: SdFormGenericTableColumn[] | undefined | null) {\n    if (this.columns !== columns) {\n      this.columns = columns || [];\n    }\n  }\n  readonly columnsChange = output<SdFormGenericTableColumn[]>();\n  column?: SdFormGenericTableColumn;\n\n  onChangeColumnsKey = (value: any) => {\n    this.columnsKeyChange.emit(value);\n    const table = this.tables.find(e => e.value === value);\n    if (table) {\n      this.columns = table.columns();\n    } else {\n      this.columns = [];\n    }\n    this.columnsChange.emit(this.columns);\n  };\n\n  addColumn = () => {\n    this.selectedIdx = undefined;\n    this.column = {\n      key: Utilities.randomId('key'),\n      label: Utilities.randomId('label'),\n      type: 'string',\n      width: '100px',\n      validate: {},\n    };\n    this.modal?.open();\n  };\n\n  // Map column type → Material Symbol icon (per design handoff form-builder redesign).\n  readonly columnTypeIcons: Record<string, string> = {\n    string: 'text_fields',\n    number: '123',\n    boolean: 'check_box',\n    bool: 'check_box',\n    date: 'event',\n    datetime: 'calendar_month',\n    radio: 'radio_button_checked',\n    values: 'arrow_drop_down_circle',\n    image: 'image',\n    file: 'attach_file',\n  };\n  columnTypeSymbol = (type: string | undefined): string => this.columnTypeIcons[type || 'string'] ?? 'text_fields';\n\n  selectedIdx? = 0;\n  editColumn = (idx: number) => {\n    if (this.columns[idx]) {\n      this.selectedIdx = idx;\n      this.column = JSON.parse(JSON.stringify(this.columns[idx]));\n      this.column!.validate = this.column?.validate || {};\n      this.modal?.open();\n    }\n  };\n\n  removeColumn = (idx: number) => {\n    this.columns.splice(idx, 1);\n    this.columnsChange.emit(this.columns);\n  };\n\n  onConfirm = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    if (this.column) {\n      if (this.selectedIdx! >= 0) {\n        this.columns.splice(this.selectedIdx!, 1, this.column);\n      } else {\n        this.columns.push(this.column);\n      }\n      this.columnsChange.emit(this.columns);\n    }\n    this.modal?.close();\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">view_column</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.column-list' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n    @if (tables.length) {\n      <sd-autocomplete\n          class=\"py-8\"\n          [label]=\"'core.component.form-builder.column-data' | translate\"\n          [(model)]=\"columnsKey\"\n          [items]=\"tables\"\n          valueField=\"value\"\n          displayField=\"display\"\n          (sdChange)=\"onChangeColumnsKey($event)\"\n          hideInlineError></sd-autocomplete>\n    }\n    @if (!columnsKey) {\n      <div class=\"fb-columns-list\">\n        @for (item of columns; track item.key; let idx = $index) {\n          <div class=\"fb-column-row\" [class.is-active]=\"idx === selectedIdx\">\n            <span class=\"fb-column-row__type-icon\"><span class=\"msi\">{{ columnTypeSymbol(item.type) }}</span></span>\n            <div class=\"fb-column-row__meta\">\n              <div class=\"fb-column-row__label\">\n                {{ item.label }}\n                @if (item.validate?.required) {\n                  <span class=\"fb-column-row__req\">*</span>\n                }\n              </div>\n              <div class=\"fb-column-row__sub mono\">{{ item.key }} · {{ item.type }}</div>\n            </div>\n            <button type=\"button\" class=\"fb-icon-btn\" [attr.aria-label]=\"'core.component.form-builder.column-config' | translate\" (click)=\"editColumn(idx)\">\n              <span class=\"msi\">edit</span>\n            </button>\n            <button type=\"button\" class=\"fb-icon-btn danger\" [attr.aria-label]=\"'core.component.form-builder.delete' | translate\" (click)=\"removeColumn(idx)\">\n              <span class=\"msi\">delete</span>\n            </button>\n          </div>\n        }\n        <a class=\"fb-add-link\" (click)=\"addColumn()\">\n          <span class=\"msi\">add</span>\n          {{ 'core.component.form-builder.add-column' | translate }}\n        </a>\n      </div>\n    }\n  </div>\n</details>\n\n<sd-modal [title]=\"'core.component.form-builder.column-config' | translate\" width=\"600px\" modalClass=\"sd-form-builder-dialog\">\n  @if (column) {\n    <details class=\"fb-section\" open>\n      <summary class=\"fb-section__head\">\n        <span class=\"msi\">info</span>\n        <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n        <span class=\"msi chev\">chevron_right</span>\n      </summary>\n      <div class=\"fb-section__body\">\n        <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"column.key\"></attribute-input>\n        <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.column-name' | translate\" [(model)]=\"column.label\"></attribute-input>\n        <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.width' | translate\" [(model)]=\"column.width\"></attribute-input>\n        <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"column.validate!.required\"></attribute-switch>\n        <attribute-select [form]=\"form\" [label]=\"'core.component.form-builder.data-type' | translate\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\n      </div>\n    </details>\n    @if (column.type === 'boolean') {\n      <details class=\"fb-section\" open>\n        <summary class=\"fb-section__head\">\n          <span class=\"msi\">visibility</span>\n          <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n          <span class=\"msi chev\">chevron_right</span>\n        </summary>\n        <div class=\"fb-section__body\">\n          <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-true' | translate\" [(model)]=\"column.displayOnTrue\"></attribute-input>\n          <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-false' | translate\" [(model)]=\"column.displayOnFalse\"></attribute-input>\n        </div>\n      </details>\n    } @else if (column.type === 'values') {\n      <attribute-selection\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [component]=\"column\"\n        [(valuesKey)]=\"column.valuesKey\"\n        [(values)]=\"column.values\"></attribute-selection>\n    } @else if (column.type === 'file' || column.type === 'image') {\n      <details class=\"fb-section\" open>\n        <summary class=\"fb-section__head\">\n          <span class=\"msi\">settings</span>\n          <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n          <span class=\"msi chev\">chevron_right</span>\n        </summary>\n        <div class=\"fb-section__body\">\n          <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components()\" [(model)]=\"column!.args\"></attribute-parameter>\n        </div>\n      </details>\n    }\n  }\n  <ng-container sdFooterRight>\n    <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\n  </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject, input } from '@angular/core';\nimport {\n  SdFormatComponent,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericTable,\n  SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTable } from '../../attribute-table/attribute-table.component';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n  selector: 'table-attribute',\n  templateUrl: './table-attribute.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeTable, AttributeExpression, TranslatePipe],\n})\nexport class TableAttribute implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  readonly variables = input.required<SdFormGenericVariable[]>();\n  form = new FormGroup({});\n  component!: SdFormGenericTable;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n    this.component = component;\n    SdFormatComponent(this.component);\n  }\n\n  #changes = new Subject<void>();\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      this.#changes.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    // Khi thay đổi, debound 0.5s rồi mới emit output\n    this.#subscription.add(\n      this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n        this.builderService.componentEmitters.next(this.component);\n      })\n    );\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  onChangeTemplate = (template: SdFormGenericComponent) => {\n    if (template && template.type === 'table') {\n      // Dùng Object Assign để không bị tạo ra reference mới\n      Object.assign(this.component, {\n        ...template,\n        id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n      });\n      SdFormatComponent(this.component);\n      this.builderService.componentEmitters.next(this.component);\n      this.ref.markForCheck();\n    }\n  };\n\n  onChanges = () => {\n    this.#changes.next();\n  };\n}\n","<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n  <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n  <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n  <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n  </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">visibility</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.visible-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n    <attribute-expression\n      [label]=\"'core.component.form-builder.hidden-when' | translate\"\n      [components]=\"components()\"\n      [variables]=\"variables()\"\n      [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n    @if (!component.disabled) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.disabled-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <details class=\"fb-section\" open>\n    <summary class=\"fb-section__head\">\n      <span class=\"msi\">verified</span>\n      <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n      <span class=\"msi chev\">chevron_right</span>\n    </summary>\n    <div class=\"fb-section__body\">\n    <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n    @if (!component.validate!.required) {\n      <attribute-expression\n        [label]=\"'core.component.form-builder.required-when' | translate\"\n        [components]=\"components()\"\n        [variables]=\"variables()\"\n        [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n    }\n    </div>\n  </details>\n  <attribute-table\n    [components]=\"components()\"\n    [variables]=\"variables()\"\n    [(columnsKey)]=\"component.columnsKey\"\n    [(columns)]=\"component.columns\"\n    (columnsKeyChange)=\"onChanges()\"\n    (columnsChange)=\"onChanges()\"></attribute-table>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTable } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'table-control',\n  templateUrl: './table-control.component.html',\n  styleUrl: './table-control.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n})\nexport class TableControl implements AfterViewInit, OnDestroy {\n  private ref = inject(ChangeDetectorRef);\n  private builderService = inject(BuilderService);\n\n  component!: SdFormGenericTable;\n  @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n    if (this.component !== component) {\n      this.component = component;\n      SdFormatComponent(this.component);\n    }\n  }\n\n  #subscription = new Subscription();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    this.#subscription.add(\n      // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n      this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n        if (component) {\n          this.ref.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.#subscription.unsubscribe();\n  }\n\n  columnIcon = (type: string) => {\n    switch (type) {\n      case 'number':\n        return '123';\n      case 'date':\n      case 'datetime':\n        return 'calendar_month';\n      case 'boolean':\n        return 'check_box';\n      case 'file':\n        return 'attach_file';\n      case 'image':\n        return 'image';\n      case 'values':\n      case 'radio':\n        return 'radio_button_checked';\n      case 'string':\n      default:\n        return 'text_fields';\n    }\n  };\n\n  sampleRows = () => [0, 1, 2];\n\n  cellPreview = (column: any, rowIndex: number) => {\n    if (rowIndex === 0) return column.key || column.label || '-';\n    if (column.type === 'number') return rowIndex + 1;\n    if (column.type === 'boolean') return rowIndex === 1 ? '✓' : '—';\n    if (column.type === 'date' || column.type === 'datetime') return '12/06/2026';\n    if (column.type === 'file') return '—';\n    return rowIndex === 1 ? 'Sample value' : '—';\n  };\n}\n","<div class=\"fb-table-control\" [class.is-viewed]=\"component.properties?.viewed\">\n  <div class=\"fb-table-control__label\">\n    {{ component.label }}\n    @if (component.validate?.required) {\n      <span>*</span>\n    }\n  </div>\n\n  @if (component.columns?.length) {\n    <div class=\"fb-table-control__frame\">\n      <div class=\"fb-table-control__header\">\n        @for (column of component.columns; track column.key) {\n          <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n            <span class=\"fb-table-control__icon msi\">{{ columnIcon(column.type) }}</span>\n            <span>{{ column.label }}</span>\n            @if (column.validate?.required) {\n              <span class=\"fb-table-control__required\">*</span>\n            }\n          </div>\n        }\n      </div>\n\n      <div class=\"fb-table-control__body\">\n        @for (row of sampleRows(); track row) {\n          <div class=\"fb-table-control__row\">\n            @for (column of component.columns; track column.key) {\n              <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n                {{ cellPreview(column, row) }}\n              </div>\n            }\n          </div>\n        }\n      </div>\n    </div>\n\n    <button type=\"button\" class=\"fb-table-control__add\">\n      <span>+</span>\n      Add row\n    </button>\n  }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, inject, input, untracked } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { COMPONENT_ICONS, SdFormGenericComponent, SdFormGenericGroup } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\n\nconst ICON_PRESETS = ['category', 'folder', 'inventory_2', 'group_work', 'workspaces', 'view_quilt'] as const;\nconst COLOR_PRESETS = ['primary', 'secondary', 'success', 'warning', 'error'] as const;\n\n@Component({\n  selector: 'group-attribute',\n  templateUrl: './group-attribute.component.html',\n  styleUrl: './group-attribute.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AttributeInput, AttributeExpression, TranslatePipe],\n})\nexport class GroupAttribute {\n  // ── constants ────────────────────────────────────────────────────────\n  readonly iconPresets = ICON_PRESETS;\n  readonly colorPresets = COLOR_PRESETS;\n  readonly componentIcons = COMPONENT_ICONS;\n\n  form = new FormGroup({});\n\n  // ── signal input ─────────────────────────────────────────────────────\n  /** Required group reference. Mutated in place khi user pick icon/color/expression. */\n  readonly group = input.required<SdFormGenericGroup>();\n\n  // ── injected services ────────────────────────────────────────────────\n  readonly #builderService = inject(BuilderService);\n  readonly #ref = inject(ChangeDetectorRef);\n\n  constructor() {\n    // Bảo đảm group có properties + defaults khi input ref thay đổi.\n    // untracked() vì ta mutate group (không phải read signal) — tránh tạo cycle.\n    effect(() => {\n      const g = this.group();\n      untracked(() => {\n        if (!g.properties) {\n          g.properties = { icon: 'category', color: 'primary' };\n        } else {\n          g.properties.icon = g.properties.icon || 'category';\n          g.properties.color = g.properties.color || ('primary' as any);\n        }\n      });\n    });\n  }\n\n  pickIcon = (icon: string) => {\n    this.group().properties.icon = icon;\n    this.#builderService.componentEmitters.next(this.group());\n    this.#ref.markForCheck();\n  };\n\n  pickColor = (color: (typeof COLOR_PRESETS)[number]) => {\n    this.group().properties.color = color as any;\n    this.#builderService.componentEmitters.next(this.group());\n    this.#ref.markForCheck();\n  };\n\n  symbolForChild = (c: SdFormGenericComponent): string => {\n    return this.componentIcons[c.type]?.symbol ?? 'help';\n  };\n\n  labelForChild = (c: SdFormGenericComponent): string => {\n    return 'label' in c ? c.label : c.key || c.id;\n  };\n}\n","@let _group = group();\n\n<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">info</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n    <attribute-input [form]=\"form\" [(model)]=\"_group.label\" [label]=\"'core.component.form-builder.label' | translate\"></attribute-input>\n\n    <div class=\"fb-field\">\n      <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-icon' | translate }}</div>\n      <div class=\"fb-icon-picker\">\n        @for (icon of iconPresets; track icon) {\n          <button type=\"button\" class=\"fb-icon-picker__btn\"\n                  [class.is-active]=\"_group.properties.icon === icon\"\n                  (click)=\"pickIcon(icon)\">\n            <span class=\"msi\">{{ icon }}</span>\n          </button>\n        }\n      </div>\n    </div>\n\n    <div class=\"fb-field\">\n      <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-accent-color' | translate }}</div>\n      <div class=\"fb-color-swatches\">\n        @for (color of colorPresets; track color) {\n          <span class=\"fb-color-swatch\"\n                [class]=\"color\"\n                [class.is-active]=\"_group.properties.color === color\"\n                (click)=\"pickColor(color)\"\n                [attr.aria-label]=\"color\"></span>\n        }\n      </div>\n    </div>\n  </div>\n</details>\n\n<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">account_tree</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.group-children' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n    @if (!_group.components?.length) {\n      <div class=\"fb-children-empty\">{{ 'core.component.form-builder.group-no-children' | translate }}</div>\n    } @else {\n      <div class=\"fb-children-list\">\n        @for (child of _group.components; track child.id) {\n          <div class=\"fb-child-row\">\n            <span class=\"fb-child-row__icon\"><span class=\"msi\">{{ symbolForChild(child) }}</span></span>\n            <span class=\"fb-child-row__label\">{{ labelForChild(child) }}</span>\n            <span class=\"fb-child-row__key\">{{ child.key }}</span>\n          </div>\n        }\n      </div>\n    }\n  </div>\n</details>\n\n<details class=\"fb-section\" open>\n  <summary class=\"fb-section__head\">\n    <span class=\"msi\">visibility</span>\n    <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n    <span class=\"msi chev\">chevron_right</span>\n  </summary>\n  <div class=\"fb-section__body\">\n    <attribute-expression\n      [components]=\"[]\"\n      [variables]=\"[]\"\n      [(model)]=\"_group.properties.visibleWhenExpression\"\n      [label]=\"'core.component.form-builder.visible-when' | translate\">\n    </attribute-expression>\n    <attribute-expression\n      [components]=\"[]\"\n      [variables]=\"[]\"\n      [(model)]=\"_group.properties.hiddenWhenExpression\"\n      [label]=\"'core.component.form-builder.hidden-when' | translate\">\n    </attribute-expression>\n  </div>\n</details>\n","// Định nghĩa các Components của Form Render\nimport { SdFormGenericExpression } from './form-generic-expression.model';\n\nexport type SdFormGenericValidation = ValidationExpression | ValidationFunction;\n\ninterface ValidationBase {\n  alert: 'warning' | 'error'; //\n}\n\nexport const ValidationAlerts = [\n  {\n    value: 'error',\n    display: 'Lỗi',\n  },\n  {\n    value: 'warning',\n    display: 'Cảnh báo',\n  },\n];\n\ninterface ValidationExpression extends ValidationBase {\n  type: 'expression';\n  expression: SdFormGenericExpression;\n  message: string; // Có thể là html\n}\n\ninterface ValidationFunction extends ValidationBase {\n  type: 'function';\n  code: string; // Lấy từ value của SdFormGenericValidationFunction\n}\n\ninterface ValidateArgs {\n  entity: Record<string, any>;\n}\n\nexport interface SdFormGenericValidationFunction {\n  value: string;\n  display: string;\n  validate: (args: ValidateArgs) => Promise<string | undefined | null>; // Hàm trả về string message nếu có lỗi, message có thể là html\n}\n\nexport interface SdFormGenericValidationConfiguration {\n  // Danh sách các functions validate được cấu hình sẵn để làm dữ liêu cho dropdown\n  functions?: SdFormGenericValidationFunction[];\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, OnInit, inject, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n  Attribute,\n  AttributeOperators,\n  DayInfoPreviouses,\n  DayInfoTypes,\n  SdFormGenericExpression,\n  SdFormGenericExpressionCondition,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { SdSuffixDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Component xây dựng Expression dựa vào SdFormGenericExpression\n@Component({\n  selector: 'expression-builder',\n  templateUrl: './expression-builder.component.html',\n  styleUrl: './expression-builder.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    SdInput,\n    SdInputNumber,\n    SdSelect,\n    SdAutocomplete,\n    SdButton,\n    SdSelect,\n    SdModal,\n    ExpressionQueryPipe,\n    SdDatetime,\n    SdSuffixDefDirective,\n    TranslatePipe,\n  ],\n})\nexport class ExpressionBuilderComponent implements OnInit {\n  private ref = inject(ChangeDetectorRef);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  form = new FormGroup({});\n  attributeOperators = AttributeOperators;\n  attributes: Attribute[] = [];\n  numberAttributes: Attribute[] = [];\n  dateAttributes: Attribute[] = [];\n  attribute: Record<string, Attribute> = {};\n  types = DayInfoTypes;\n  previouses = DayInfoPreviouses;\n\n  @Input() label?: string;\n\n  @Input('attributes') set _attributes(attributes: Attribute[]) {\n    this.attributes = attributes || [];\n    this.numberAttributes = this.attributes\n      .filter(e => e.type === 'number')\n      .map(e => ({\n        ...e,\n        value: '${' + e.value + '}',\n      }));\n    this.dateAttributes = this.attributes\n      .filter(e => e.type === 'datetime')\n      .map(e => ({\n        ...e,\n        value: '${' + e.value + '}',\n      }));\n    this.attribute = ArrayUtilities.toObject('value', this.attributes);\n  }\n\n  expression?: SdFormGenericExpression = {\n    key: Utilities.randomId(),\n    type: 'combinator',\n    combinator: '&&',\n    conditions: [],\n  };\n  model?: SdFormGenericExpression = {\n    key: Utilities.randomId(),\n    type: 'combinator',\n    combinator: '&&',\n    conditions: [],\n  };\n  @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n    this.model = this.model || {\n      key: Utilities.randomId(),\n      type: 'combinator',\n      combinator: '&&',\n      conditions: [],\n    };\n  }\n  readonly modelChange = output<SdFormGenericExpression | undefined>();\n  readonly sdChange = output<SdFormGenericExpression | undefined>();\n  readonly edit = output<void>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  onEdit = async () => {\n    // Khi cập nhật expression thì clone ra\n    this.expression = JSON.parse(JSON.stringify(this.model));\n    // Thông báo cho component cha có sự kiện edit trong trường hợp attributes có thay đổi\n    this.edit.emit();\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n    conditions.push({\n      key: Utilities.randomId(),\n      type: 'condition',\n      field: undefined,\n      operator: 'EQUAL',\n      value: undefined,\n      dayInfo: {},\n    });\n    this.ref.markForCheck();\n  };\n\n  addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n    conditions.push({\n      key: Utilities.randomId(),\n      type: 'combinator',\n      combinator: '&&',\n      conditions: [],\n    });\n    this.ref.markForCheck();\n  };\n\n  remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n    conditions.splice(idx, 1);\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    this.model = this.expression;\n    this.modelChange.emit(this.model);\n    this.sdChange.emit(this.model);\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n\n  onChangeAttribute = (condition: SdFormGenericExpressionCondition) => {\n    const fieldAttribute = this.attribute[condition.field!];\n    if (fieldAttribute.type === 'datetime') {\n      condition.dayInfo = condition.dayInfo || {};\n    }\n  };\n\n  onChangeDateInfo = (condition: SdFormGenericExpressionCondition) => {\n    // Xử lý giá trị\n    if (condition.dayInfo?.type === 'NOW') {\n      condition.value = 'now';\n    } else if (condition.dayInfo?.type === 'RELATED' && condition.dayInfo.relatedValue) {\n      condition.value = DayInfoPreviouses.find(e => e.value === condition.dayInfo.related)?.format(condition.dayInfo.relatedValue) ?? null;\n    } else if (condition.value?.type === 'DATETIME' && condition.value) {\n      condition.value = DateUtilities.toFormat(condition.value, 'yyyy/MM/dd HH:mm:00');\n    }\n  };\n}\n","<!--\n  FEEL-style expression trigger pill (M3 redesign).\n  Bấm vào pill mở modal builder hiện tại (onEdit).\n-->\n<div class=\"fb-field\">\n  @if (label) {\n    <div class=\"fb-field__label\">{{ label }}</div>\n  }\n  @let exprText = model | expressionQuery;\n  <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\">\n    <span class=\"fb-expr__badge\">FEEL</span>\n    @if (exprText) {\n      <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n    } @else {\n      <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n    }\n    <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n      <span class=\"msi\">functions</span>\n    </button>\n  </div>\n</div>\n@if (expression) {\n  <sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\" modalClass=\"sd-form-builder-dialog\">\n    <div class=\"c-builder\">\n      <div class=\"d-flex justify-content-end\">\n        <sd-button\n          prefixIcon=\"calculate\"\n          class=\"mr-4\"\n          [title]=\"'core.component.form-builder.condition-group' | translate\"\n          color=\"primary\"\n          (click)=\"addCombinator(expression.conditions)\"></sd-button>\n        <sd-button\n          prefixIcon=\"add\"\n          [title]=\"'core.component.form-builder.condition' | translate\"\n          color=\"primary\"\n          (click)=\"addCondition(expression.conditions)\"\n          type=\"fill\"></sd-button>\n      </div>\n      <!-- Cấp 1 -->\n      @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n        <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n          <div class=\"c-condition\">\n            <!-- Dòng 1 chỉ hiện WHERE -->\n            @if (idxLv1 === 0) {\n              <div class=\"c-where\">WHERE</div>\n            }\n            <!-- Dòng 2 hiển thị combinator -->\n            @if (idxLv1 === 1) {\n              <div class=\"c-select\">\n                <sd-select\n                  size=\"sm\"\n                  [(model)]=\"expression.combinator\"\n                  [items]=\"[\n                    { value: '&&', display: 'AND' },\n                    { value: '||', display: 'OR' }\n                  ]\"\n                  valueField=\"value\"\n                  displayField=\"display\"\n                  required\n                  hideInlineError=\"\"></sd-select>\n              </div>\n            }\n          </div>\n          @if (conditionLv1.type === 'condition') {\n            <sd-autocomplete\n              size=\"sm\"\n              [form]=\"form\"\n              style=\"width: 200px\"\n              [(model)]=\"conditionLv1.field\"\n              [items]=\"attributes\"\n              (sdChange)=\"onChangeAttribute(conditionLv1)\"\n              valueField=\"value\"\n              displayField=\"display\"\n              required\n              hideInlineError></sd-autocomplete>\n            @let fieldAttribute = attribute[conditionLv1.field!];\n            <sd-select\n              size=\"sm\"\n              [form]=\"form\"\n              style=\"width: 100px\"\n              [(model)]=\"conditionLv1.operator\"\n              [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n              valueField=\"value\"\n              displayField=\"display\"\n              [disabled]=\"!fieldAttribute?.type\"\n              required\n              hideInlineError></sd-select>\n            @if (\n              !!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL'\n            ) {\n              @if (fieldAttribute.type === 'string') {\n                <sd-input size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n              } @else if (fieldAttribute.type === 'number') {\n                <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" hideInlineError></sd-input-number>\n                <sd-autocomplete\n                  size=\"sm\"\n                  [form]=\"form\"\n                  style=\"flex: 1\"\n                  [(model)]=\"conditionLv1.value\"\n                  [items]=\"numberAttributes\"\n                  valueField=\"value\"\n                  displayField=\"display\"\n                  hideInlineError></sd-autocomplete>\n              } @else if (fieldAttribute.type === 'datetime' && conditionLv1.dayInfo) {\n                <sd-select\n                  size=\"sm\"\n                  [placeholder]=\"'core.component.form-builder.time' | translate\"\n                  [form]=\"form\"\n                  style=\"width: 150px\"\n                  [items]=\"types\"\n                  valueField=\"value\"\n                  displayField=\"display\"\n                  [(model)]=\"conditionLv1.dayInfo.type\"\n                  (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n                  required\n                  hideInlineError>\n                </sd-select>\n                @if (conditionLv1.dayInfo.type === 'RELATED') {\n                  <sd-input-number\n                    size=\"sm\"\n                    [form]=\"form\"\n                    style=\"width: 80px\"\n                    [(model)]=\"conditionLv1.dayInfo.relatedValue\"\n                    (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n                    [min]=\"1\"\n                    required\n                    hideInlineError>\n                  </sd-input-number>\n                  <sd-select\n                    size=\"sm\"\n                    [form]=\"form\"\n                    style=\"flex: 1\"\n                    [items]=\"previouses\"\n                    valueField=\"value\"\n                    displayField=\"display\"\n                    [(model)]=\"conditionLv1.dayInfo.related\"\n                    (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n                    required\n                    hideInlineError>\n                  </sd-select>\n                } @else if (conditionLv1.dayInfo.type === 'DATETIME') {\n                  <sd-datetime\n                    size=\"sm\"\n                    [form]=\"form\"\n                    style=\"flex: 1\"\n                    [(model)]=\"conditionLv1.value\"\n                    (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n                    required\n                    hideInlineError>\n                  </sd-datetime>\n                } @else if (conditionLv1.dayInfo.type === 'ATTRIBUTE') {\n                  <sd-autocomplete\n                    size=\"sm\"\n                    [form]=\"form\"\n                    style=\"flex: 1\"\n                    [(model)]=\"conditionLv1.value\"\n                    [items]=\"dateAttributes\"\n                    valueField=\"value\"\n                    displayField=\"display\"\n                    hideInlineError></sd-autocomplete>\n                }\n              } @else if (fieldAttribute.type === 'boolean') {\n                <sd-select\n                  size=\"sm\"\n                  [form]=\"form\"\n                  style=\"flex: 1\"\n                  [(model)]=\"conditionLv1.value\"\n                  [items]=\"[\n                    { value: true, display: fieldAttribute.displayOnTrue },\n                    { value: false, display: fieldAttribute.displayOnFalse }\n                  ]\"\n                  valueField=\"value\"\n                  displayField=\"display\"\n                  required\n                  hideInlineError></sd-select>\n              } @else if (fieldAttribute.type === 'values') {\n                <sd-autocomplete\n                  size=\"sm\"\n                  [form]=\"form\"\n                  style=\"flex: 1\"\n                  [(model)]=\"conditionLv1.value\"\n                  [items]=\"fieldAttribute.values\"\n                  valueField=\"value\"\n                  displayField=\"display\"\n                  required\n                  hideInlineError></sd-autocomplete>\n              }\n            }\n            <sd-button class=\"ml-auto\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n          } @else if (conditionLv1.type === 'combinator') {\n            <div class=\"c-builder\">\n              <div class=\"d-flex justify-content-end\">\n                <sd-button class=\"mr-4\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n                <sd-button\n                  prefixIcon=\"add\"\n                  [title]=\"'core.component.form-builder.condition' | translate\"\n                  size=\"sm\"\n                  color=\"primary\"\n                  (click)=\"addCondition(conditionLv1.conditions)\"\n                  type=\"fill\"></sd-button>\n              </div>\n              <!-- Cấp 2 -->\n              @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n                <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n                  <div class=\"c-condition\">\n                    <!-- Dòng 1 chỉ hiện WHERE -->\n                    @if (idxLv2 === 0) {\n                      <div class=\"c-where\">WHERE</div>\n                    }\n                    <!-- Dòng 2 hiển thị combinator -->\n                    @if (idxLv2 === 1) {\n                      <div class=\"c-select\">\n                        <sd-select\n                          size=\"sm\"\n                          [(model)]=\"conditionLv1.combinator\"\n                          [items]=\"[\n                            { value: '&&', display: 'AND' },\n                            { value: '||', display: 'OR' }\n                          ]\"\n                          valueField=\"value\"\n                          displayField=\"display\"\n                          required\n                          hideInlineError=\"\"></sd-select>\n                      </div>\n                    }\n                  </div>\n                  @if (conditionLv2.type === 'condition') {\n                    <sd-autocomplete\n                      size=\"sm\"\n                      [form]=\"form\"\n                      style=\"width: 200px\"\n                      [(model)]=\"conditionLv2.field\"\n                      [items]=\"attributes\"\n                      (sdChange)=\"onChangeAttribute(conditionLv2)\"\n                      valueField=\"value\"\n                      displayField=\"display\"\n                      required\n                      hideInlineError></sd-autocomplete>\n                    @let fieldAttribute = attribute[conditionLv2.field!];\n                    <sd-select\n                      size=\"sm\"\n                      [form]=\"form\"\n                      style=\"width: 100px\"\n                      [(model)]=\"conditionLv2.operator\"\n                      [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n                      valueField=\"value\"\n                      displayField=\"display\"\n                      [disabled]=\"!fieldAttribute?.type\"\n                      required\n                      hideInlineError></sd-select>\n                    @if (\n                      !!fieldAttribute?.type &&\n                      conditionLv2.operator &&\n                      conditionLv2.operator !== 'NULL' &&\n                      conditionLv2.operator !== 'NOT_NULL'\n                    ) {\n                      @if (fieldAttribute.type === 'string') {\n                        <sd-input\n                          size=\"sm\"\n                          [form]=\"form\"\n                          style=\"flex: 1\"\n                          [(model)]=\"conditionLv2.value\"\n                          required\n                          hideInlineError></sd-input>\n                      } @else if (fieldAttribute.type === 'number') {\n                        <sd-input-number\n                          size=\"sm\"\n                          [form]=\"form\"\n                          style=\"flex: 1\"\n                          [(model)]=\"conditionLv2.value\"\n                          hideInlineError></sd-input-number>\n                        <sd-autocomplete\n                          size=\"sm\"\n                          [form]=\"form\"\n                          style=\"flex: 1\"\n                          [(model)]=\"conditionLv2.value\"\n                          [items]=\"numberAttributes\"\n                          valueField=\"value\"\n                          displayField=\"display\"\n                          hideInlineError></sd-autocomplete>\n                      } @else if (fieldAttribute.type === 'datetime' && conditionLv2.dayInfo) {\n                        <sd-select\n                          size=\"sm\"\n                          [form]=\"form\"\n                          [placeholder]=\"'core.component.form-builder.time' | translate\"\n                          style=\"width: 150px\"\n                          [items]=\"types\"\n                          valueField=\"value\"\n                          displayField=\"display\"\n                          [(model)]=\"conditionLv2.dayInfo.type\"\n                          (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n                          required\n                          hideInlineError>\n                        </sd-select>\n                        @if (conditionLv2.dayInfo.type === 'RELATED') {\n                          <sd-input-number\n                            size=\"sm\"\n                            [form]=\"form\"\n                            style=\"width: 80px\"\n                            [(model)]=\"conditionLv2.dayInfo.relatedValue\"\n                            (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n                            [min]=\"1\"\n                            required\n                            hideInlineError>\n                          </sd-input-number>\n                          <sd-select\n                            size=\"sm\"\n                            [form]=\"form\"\n                            style=\"flex: 1\"\n                            [items]=\"previouses\"\n                            valueField=\"value\"\n                            displayField=\"display\"\n                            [(model)]=\"conditionLv2.dayInfo.related\"\n                            (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n                            required\n                            hideInlineError>\n                          </sd-select>\n                        } @else if (conditionLv2.dayInfo.type === 'DATETIME') {\n                          <sd-datetime\n                            size=\"sm\"\n                            [form]=\"form\"\n                            style=\"flex: 1\"\n                            [(model)]=\"conditionLv2.value\"\n                            (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n                            required\n                            hideInlineError>\n                          </sd-datetime>\n                        } @else if (conditionLv2.dayInfo.type === 'ATTRIBUTE') {\n                          <sd-autocomplete\n                            size=\"sm\"\n                            [form]=\"form\"\n                            style=\"flex: 1\"\n                            [(model)]=\"conditionLv2.value\"\n                            [items]=\"dateAttributes\"\n                            valueField=\"value\"\n                            displayField=\"display\"\n                            hideInlineError></sd-autocomplete>\n                        }\n                      } @else if (fieldAttribute.type === 'boolean') {\n                        <sd-select\n                          size=\"sm\"\n                          [form]=\"form\"\n                          style=\"flex: 1\"\n                          [(model)]=\"conditionLv2.value\"\n                          [items]=\"[\n                            { value: true, display: fieldAttribute.displayOnTrue },\n                            { value: false, display: fieldAttribute.displayOnFalse }\n                          ]\"\n                          valueField=\"value\"\n                          displayField=\"display\"\n                          required\n                          hideInlineError></sd-select>\n                      } @else if (fieldAttribute.type === 'values') {\n                        <sd-autocomplete\n                          size=\"sm\"\n                          [form]=\"form\"\n                          style=\"flex: 1\"\n                          [(model)]=\"conditionLv2.value\"\n                          [items]=\"fieldAttribute.values\"\n                          valueField=\"value\"\n                          displayField=\"display\"\n                          required\n                          hideInlineError></sd-autocomplete>\n                      }\n                    }\n                    <sd-button\n                      class=\"ml-auto\"\n                      prefixIcon=\"delete\"\n                      [tooltip]=\"'core.component.form-builder.delete' | translate\"\n                      (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n                  }\n                </div>\n              }\n            </div>\n          }\n        </div>\n      }\n    </div>\n    <ng-container sdFooterRight>\n      <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n    </ng-container>\n  </sd-modal>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, ViewChild, AfterViewInit, OnDestroy, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput, SdSelect } from '@sdcorejs/angular/forms';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { Attribute, GetAttributes } from '../../../../models';\nimport {\n  SdFormGenericValidation,\n  SdFormGenericValidationFunction,\n  ValidationAlerts,\n} from '../../../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../../../models/form-generic.model';\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n@Component({\n  selector: 'configure-validation',\n  templateUrl: './configure-validation.component.html',\n  styleUrl: './configure-validation.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdIcon, MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, TranslatePipe],\n})\nexport class ConfigureValidationComponent implements AfterViewInit, OnDestroy {\n  @ViewChild(SdModal) modal?: SdModal;\n  form = new FormGroup({});\n  attributes: Attribute[] = [];\n  validations: SdFormGenericValidation[] = [];\n  functions: SdFormGenericValidationFunction[] = [];\n  alerts = ValidationAlerts;\n  readonly accept = output<SdFormGenericValidation[]>();\n  private readonly ref = inject(ChangeDetectorRef);\n  private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n  constructor() {\n    this.functions = this.formGenericConfiguration?.form?.validation?.functions || [];\n  }\n\n  ngAfterViewInit(): void {\n    // this.#subscription.add(\n    //   this.#validationsChanges.pipe(debounceTime(200), startWith(this.validations)).subscribe(() => {\n    //     // Khi component thay đổi thì sync lại\n    //     this.ref.markForCheck();\n    //   })\n    // );\n  }\n\n  ngOnDestroy(): void {}\n\n  open = (formGeneric: SdFormGeneric) => {\n    // Xử lý gán validations\n    if (Array.isArray(formGeneric?.validations)) {\n      this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\n    } else {\n      this.validations = [];\n    }\n    this.attributes = GetAttributes(formGeneric.components);\n    if (formGeneric) {\n      this.modal?.open();\n      this.ref.markForCheck();\n    }\n  };\n\n  addValidation = (type: SdFormGenericValidation['type']) => {\n    if (type === 'expression') {\n      this.validations.push({\n        alert: 'error',\n        type,\n        expression: {\n          key: Utilities.randomId(),\n          type: 'combinator',\n          combinator: '&&',\n          conditions: [],\n        },\n        message: '',\n      });\n    } else if (type === 'function') {\n      this.validations.push({\n        alert: 'error',\n        type,\n        code: '',\n      });\n    }\n    this.ref.markForCheck();\n  };\n\n  removaValidation = (index: number) => {\n    this.validations.splice(index, 1);\n    this.ref.markForCheck();\n  };\n\n  updateValidations = () => {\n    this.accept.emit(this.validations);\n    this.modal?.close();\n  };\n}\n","<sd-modal\n  [title]=\"'core.component.form-builder.config-validation-error-warning' | translate\"\n  view=\"dialog\"\n  width=\"800px\"\n  modalClass=\"sd-form-builder-dialog\"\n  #popupConfigureVariables>\n  @for (validation of validations; track $index; let idx = $index) {\n    <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\n      <div class=\"row mx-0\">\n        <sd-select\n          class=\"col-3\"\n          [label]=\"'core.component.form-builder.message-type' | translate\"\n          [(model)]=\"validation.alert\"\n          [items]=\"alerts\"\n          valueField=\"value\"\n          displayField=\"display\"\n          required></sd-select>\n        @if (validation.type === 'expression') {\n          <sd-input class=\"col-9\" [form]=\"form\" [label]=\"'core.component.form-builder.message-display' | translate\" [(model)]=\"validation.message\" required></sd-input>\n          <expression-builder class=\"col-12\" [label]=\"'core.component.form-builder.condition-expression' | translate\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\n        } @else if (validation.type === 'function') {\n          <sd-select\n            class=\"col-9\"\n            [form]=\"form\"\n            [(model)]=\"validation.code\"\n            [items]=\"functions\"\n            valueField=\"value\"\n            displayField=\"display\"\n            required></sd-select>\n        }\n        <sd-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\" name=\"delete\"></sd-icon>\n        <!-- <sd-button\n\n          prefixIcon=\"delete\"\n          (click)=\"removaValidation(idx)\"\n          color=\"error\"\n          type=\"text\"></sd-button> -->\n      </div>\n    </div>\n  }\n  <sd-button [title]=\"'core.component.form-builder.add-validation' | translate\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"text\"></sd-button>\n  <mat-menu #menu=\"matMenu\" yPosition=\"above\" panelClass=\"fb-validation-menu\">\n    <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\n      <!-- <sd-icon fontIcon=\"warning\"></sd-icon> -->\n      <span>{{ 'core.component.form-builder.expression' | translate }}</span>\n    </button>\n    <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\n      <!-- <sd-icon fontIcon=\"error\"></sd-icon> -->\n      <span>{{ 'core.component.form-builder.available-methods' | translate }}</span>\n    </button>\n  </mat-menu>\n  <ng-container sdFooterRight>\n    <sd-button type=\"fill\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\n  </ng-container>\n</sd-modal>\n","import { SdFormGenericComponent, SdFormGenericGroup } from '../../models';\n\nexport type FormBuilderLayoutItem = SdFormGenericComponent | SdFormGenericGroup;\n\nexport interface FormBuilderLayoutRow {\n  id: string;\n  items: FormBuilderLayoutItem[];\n  columns: number;\n}\n\nexport interface MoveItemToRowRequest {\n  itemId: string;\n  targetRowId: string;\n  targetIndex?: number;\n}\n\nexport interface MoveItemToRowResult {\n  rows: FormBuilderLayoutRow[];\n  moved: boolean;\n  reason?: 'item-not-found' | 'target-row-not-found' | 'row-overflow';\n}\n\nexport function normalizeColumns(item: FormBuilderLayoutItem): number {\n  const raw = Number(item.layout?.columns ?? 12);\n  if (!Number.isFinite(raw)) return 12;\n  return Math.min(12, Math.max(1, Math.round(raw)));\n}\n\nexport function buildFormBuilderRows(components: FormBuilderLayoutItem[]): FormBuilderLayoutRow[] {\n  const rows: FormBuilderLayoutRow[] = [];\n\n  for (const component of components) {\n    const columns = normalizeColumns(component);\n    let row = rows[rows.length - 1];\n\n    if (!row || row.columns + columns > 12) {\n      row = { id: '', items: [], columns: 0 };\n      rows.push(row);\n    }\n\n    row.items.push(component);\n    row.columns += columns;\n  }\n\n  return rows.map(row => ({\n    ...row,\n    id: createRowId(row),\n  }));\n}\n\nexport function flattenFormBuilderRows(rows: FormBuilderLayoutRow[]): FormBuilderLayoutItem[] {\n  return rows.flatMap(row => row.items);\n}\n\nexport function canPlaceInRow(row: FormBuilderLayoutRow, item: FormBuilderLayoutItem, ignoredItemId?: string): boolean {\n  const currentColumns = row.items\n    .filter(rowItem => rowItem.id !== ignoredItemId)\n    .reduce((sum, rowItem) => sum + normalizeColumns(rowItem), 0);\n\n  return currentColumns + normalizeColumns(item) <= 12;\n}\n\nexport function moveItemToRow(rows: FormBuilderLayoutRow[], request: MoveItemToRowRequest): MoveItemToRowResult {\n  const source = findItem(rows, request.itemId);\n  if (!source) {\n    return { rows, moved: false, reason: 'item-not-found' };\n  }\n\n  const targetRow = rows.find(row => row.id === request.targetRowId);\n  if (!targetRow) {\n    return { rows, moved: false, reason: 'target-row-not-found' };\n  }\n\n  if (!canPlaceInRow(targetRow, source.item, request.itemId)) {\n    return { rows, moved: false, reason: 'row-overflow' };\n  }\n\n  const nextRows = rows.map(row => ({ ...row, items: [...row.items] }));\n  const nextSource = findItem(nextRows, request.itemId);\n  const nextTarget = nextRows.find(row => row.id === request.targetRowId);\n  if (!nextSource || !nextTarget) {\n    return { rows, moved: false, reason: 'item-not-found' };\n  }\n\n  const [item] = nextRows[nextSource.rowIndex].items.splice(nextSource.itemIndex, 1);\n  const insertAt = clampIndex(request.targetIndex ?? nextTarget.items.length, nextTarget.items.length);\n  nextTarget.items.splice(insertAt, 0, item);\n\n  return {\n    rows: buildFormBuilderRows(flattenFormBuilderRows(nextRows)),\n    moved: true,\n  };\n}\n\nfunction createRowId(row: Pick<FormBuilderLayoutRow, 'items'>): string {\n  const firstId = row.items[0]?.id || 'empty';\n  return `row-${firstId}`;\n}\n\nfunction clampIndex(index: number, length: number): number {\n  return Math.max(0, Math.min(index, length));\n}\n\nfunction findItem(\n  rows: FormBuilderLayoutRow[],\n  itemId: string\n): { rowIndex: number; itemIndex: number; item: FormBuilderLayoutItem } | undefined {\n  for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n    const itemIndex = rows[rowIndex].items.findIndex(item => item.id === itemId);\n    if (itemIndex >= 0) {\n      return {\n        rowIndex,\n        itemIndex,\n        item: rows[rowIndex].items[itemIndex],\n      };\n    }\n  }\n  return undefined;\n}\n","import {\n  CdkDrag,\n  CdkDragDrop,\n  CdkDragEnter,\n  CdkDragMove,\n  CdkDragSortEvent,\n  CdkDropList,\n  DragDropModule,\n  moveItemInArray,\n  transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  computed,\n  ElementRef,\n  effect,\n  inject,\n  input,\n  signal,\n  untracked,\n  viewChild,\n  viewChildren,\n  OnInit,\n  OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdConfirmService, SdNotifyService } from '@sdcorejs/angular/services';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\nimport {\n  COMPONENT_ICONS,\n  FormBuilderComponent,\n  FormBuilderComponentGroup,\n  FormBuilderComponents,\n  GenerateId,\n  GenerateKey,\n  SdFormGenericComponent,\n  SdFormGenericGroup,\n  SdFormGenericVariable,\n} from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../models/form-generic.model';\nimport { SdFormRender } from '../form-render/form-render.component';\nimport {\n  CheckboxAttribute,\n  CheckboxControl,\n  ChipCalendarAttribute,\n  ChipCalendarControl,\n  ChipStringAttribute,\n  ChipStringControl,\n  DatetimeAttribute,\n  DatetimeControl,\n  GroupAttribute,\n  HtmlAttribute,\n  HtmlControl,\n  NumberAttribute,\n  NumberControl,\n  RadioAttribute,\n  RadioControl,\n  SelectAttribute,\n  SelectControl,\n  TableAttribute,\n  TableControl,\n  TextareaAttribute,\n  TextareaControl,\n  TextfieldAttribute,\n  TextFieldControl,\n  UploadAttribute,\n  UploadControl,\n} from './components';\nimport { ConfigureValidationComponent } from './components/configure-validation/configure-validation.component';\nimport { buildFormBuilderRows, canPlaceInRow, flattenFormBuilderRows, FormBuilderLayoutRow, moveItemToRow } from './form-builder-layout';\nimport { BuilderService } from './services';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\ninterface DragDropRowItem extends FormBuilderLayoutRow {\n  rowIndex?: number;\n}\n\ninterface ResizeState {\n  itemId: string;\n  rowId: string;\n  columns: string;\n}\n\ntype RowInsertionEdge = 'before' | 'after';\n\ntype PaletteDropTarget =\n  | { kind: 'empty' }\n  | { kind: 'inline'; rowId: string; index: number; columns: string }\n  | { kind: 'edge'; rowId: string; edge: RowInsertionEdge };\n\n@Component({\n  selector: 'sd-form-builder',\n  templateUrl: './form-builder.component.html',\n  styleUrl: './form-builder.component.scss',\n  imports: [\n    CommonModule,\n    MatTooltipModule,\n    DragDropModule,\n    // Controls\n    TextFieldControl,\n    TextfieldAttribute,\n    TextareaControl,\n    TextareaAttribute,\n    ChipStringControl,\n    ChipStringAttribute,\n    ChipCalendarControl,\n    ChipCalendarAttribute,\n    NumberControl,\n    NumberAttribute,\n    SelectControl,\n    SelectAttribute,\n    DatetimeControl,\n    DatetimeAttribute,\n    RadioControl,\n    RadioAttribute,\n    CheckboxControl,\n    CheckboxAttribute,\n    HtmlControl,\n    HtmlAttribute,\n    UploadControl,\n    UploadAttribute,\n    TableControl,\n    TableAttribute,\n    GroupAttribute,\n    SdModal,\n    SdInput,\n    SdTextarea,\n    SdButton,\n    SdFormRender,\n    ConfigureValidationComponent,\n    TranslatePipe,\n  ],\n})\nexport class SdFormBuilder implements OnInit, OnDestroy {\n  // ── viewChild signals (Angular 17+) ────────────────────────────────────\n  readonly popupViewJSON = viewChild<SdModal>('popupViewJSON');\n  readonly popupConfigureVariables = viewChild<SdModal>('popupConfigureVariables');\n  readonly configureValidation = viewChild(ConfigureValidationComponent);\n  readonly formRender = viewChild(SdFormRender);\n  private readonly canvasDropZone = viewChild<ElementRef<HTMLElement>>('canvasDropZone');\n  readonly rowDropLists = viewChildren<unknown, CdkDropList>('rowDropList', { read: CdkDropList });\n  readonly connectedRowDropLists = computed<CdkDropList[]>(() => [...this.rowDropLists()]);\n\n  // ── injected services ──────────────────────────────────────────────────\n  readonly #ref = inject(ChangeDetectorRef);\n  readonly #notifyService = inject(SdNotifyService);\n  readonly #confirmService = inject(SdConfirmService);\n  readonly #builderService = inject(BuilderService);\n  readonly #i18n = inject(I18nService);\n\n  form = new FormGroup({});\n\n  // ── signal inputs ──────────────────────────────────────────────────────\n  /** Input chính: schema form. Mỗi lần ref thay đổi → effect sẽ clone về local arrays. */\n  readonly formGeneric = input<SdFormGeneric | undefined>(undefined);\n\n  // ── component registry (immutable) ─────────────────────────────────────\n  readonly formBuilderComponents = FormBuilderComponents;\n  readonly componentIcons = COMPONENT_ICONS;\n\n  // ── palette state (signal + computed group buckets) ────────────────────\n  readonly paletteSearch = signal('');\n  readonly paletteGroups = computed<{ key: FormBuilderComponentGroup; label: string; items: FormBuilderComponent[] }[]>(() => {\n    const term = this.paletteSearch().trim().toLowerCase();\n    // why: trong chế độ Detail group, ẩn item 'group' khỏi palette — không cho group lồng group.\n    const inGroup = !!this.editingGroupId();\n    const match = (c: FormBuilderComponent) =>\n      (!inGroup || c.type !== 'group') && (!term || c.name.toLowerCase().includes(term) || c.type.toLowerCase().includes(term));\n    const buckets: Record<FormBuilderComponentGroup, FormBuilderComponent[]> = { basic: [], choice: [], advanced: [], layout: [] };\n    for (const c of this.formBuilderComponents) {\n      if (match(c)) buckets[c.group].push(c);\n    }\n    return [\n      { key: 'basic' as const, label: 'Basic', items: buckets.basic },\n      { key: 'choice' as const, label: 'Choice', items: buckets.choice },\n      { key: 'advanced' as const, label: 'Advanced', items: buckets.advanced },\n      { key: 'layout' as const, label: 'Layout', items: buckets.layout },\n    ].filter(g => g.items.length > 0);\n  });\n\n  // ── local mutable state ────────────────────────────────────────────────\n  // Components/variables/validations giữ là plain arrays vì code hiện tại\n  // mutate in-place rất nhiều chỗ (push, splice, forEach …). Đổi sang signal\n  // tốn rủi ro với rất ít lợi ích — chỉ markForCheck() khi cần.\n  components: Required<SdFormGeneric>['components'] = [];\n  variables: Required<SdFormGeneric>['variables'] = [];\n  validations: Required<SdFormGeneric>['validations'] = [];\n\n  /** Cloned variables — dùng cho modal \"Configure variables\" (huỷ thì discard, ok thì gán ngược). */\n  clonedVariables: SdFormGenericVariable[] = [];\n\n  readonly selectedComponent = signal<SdFormGenericComponent | SdFormGenericGroup | undefined>(undefined);\n  readonly isPreview = signal(false);\n\n  // ── group drill-in (Detail) ─────────────────────────────────────────────\n  // why: bỏ hẳn drag/drop trong group. Thay vào đó \"Detail\" 1 group → mở canvas\n  // riêng chỉ thiết kế children của group đó (cùng tooling: palette/reorder/resize/\n  // attribute), KHÔNG cho group lồng group. OK = giữ, Cancel = revert. Depth tối đa\n  // 1 (group không chứa group) nên chỉ cần 1 con trỏ editingGroupId, không cần stack.\n  readonly editingGroupId = signal<string | undefined>(undefined);\n  /** Group đang được Detail (tìm ở TOP-LEVEL theo id), undefined = đang ở canvas chính. */\n  readonly editingGroup = computed<SdFormGenericGroup | undefined>(() => {\n    const id = this.editingGroupId();\n    if (!id) return undefined;\n    return this.components.find(c => c.id === id && c.type === 'group') as SdFormGenericGroup | undefined;\n  });\n  /** Snapshot (deep clone JSON) của group.components khi vào Detail — phục vụ Cancel. */\n  #groupSnapshot?: string;\n\n  /** Mảng components đang được canvas thao tác: children của group khi Detail, ngược lại là top-level. */\n  #scope = (): (SdFormGenericComponent | SdFormGenericGroup)[] => this.editingGroup()?.components ?? this.components;\n\n  /** Signal toàn cục: TRUE khi BẤT KỲ cdkDrag nào đang active (palette, canvas, group, resize).\n   *  Trigger class `.fb-shell--dragging` để ẩn hover/actions/resize toàn diện, không phụ thuộc :has(). */\n  readonly isAnyDragging = signal(false);\n  readonly dragSource = signal<'palette' | 'row' | 'canvas' | 'resize' | undefined>(undefined);\n  readonly draggedPaletteItem = signal<FormBuilderComponent | undefined>(undefined);\n  readonly paletteDropTarget = signal<PaletteDropTarget | undefined>(undefined);\n  /** @deprecated Internal drag-preview compatibility mirror; use no application code. */\n  readonly rowInsertionEdge = signal<RowInsertionEdge>('after');\n  /** @deprecated Internal drag-preview compatibility mirror; use no application code. */\n  readonly inlineDropTargetRow = signal<DragDropRowItem | undefined>(undefined);\n  readonly resizeState = signal<ResizeState | undefined>(undefined);\n  readonly isResizing = computed(() => !!this.resizeState());\n\n  expand = true;\n  dragDropRows: DragDropRowItem[] = [];\n  isDragging = false;\n  targetItem?: DragDropRowItem = undefined;\n  private lastDragPointer?: { x: number; y: number };\n  readonly #host: ElementRef<HTMLElement> = inject(ElementRef);\n\n  #setPaletteDropTarget = (target: PaletteDropTarget | undefined) => {\n    this.paletteDropTarget.set(target);\n    this.rowInsertionEdge.set(target?.kind === 'edge' ? target.edge : 'after');\n    this.inlineDropTargetRow.set(target?.kind === 'inline' ? this.dragDropRows.find(row => row.id === target.rowId) : undefined);\n  };\n\n  /** Handler chung cho mọi cdkDragStarted — set signal global true. */\n  onAnyDragStarted = () => {\n    this.isAnyDragging.set(true);\n  };\n\n  onPaletteDragStarted = (item?: FormBuilderComponent) => {\n    this.draggedPaletteItem.set(item);\n    this.#setPaletteDropTarget(undefined);\n    this.targetItem = undefined;\n    this.lastDragPointer = undefined;\n    this.dragSource.set('palette');\n    this.onAnyDragStarted();\n  };\n\n  onRowDragStarted = () => {\n    this.dragSource.set('row');\n    this.onAnyDragStarted();\n  };\n\n  onAnyDragMoved = (event: CdkDragMove<any>) => {\n    this.lastDragPointer = event.pointerPosition;\n    if (this.dragSource() === 'palette') {\n      this.#updatePaletteDropTargetFromPointer(event.pointerPosition);\n      return;\n    }\n    if (!this.#isPointerInsideCanvas(event.pointerPosition)) {\n      if (this.targetItem) {\n        this.targetItem = undefined;\n        this.#ref.markForCheck();\n      }\n      return;\n    }\n    const hit = this.#rowHitFromPointer(event.pointerPosition);\n    if (hit?.row && this.targetItem !== hit.row) {\n      this.targetItem = hit.row;\n      this.#ref.markForCheck();\n    }\n  };\n\n  #isPointerInsideCanvas = (pointer: { x: number; y: number }): boolean => {\n    const rect = this.canvasDropZone()?.nativeElement.getBoundingClientRect();\n    return !!rect && pointer.x >= rect.left && pointer.x <= rect.right && pointer.y >= rect.top && pointer.y <= rect.bottom;\n  };\n\n  #updatePaletteDropTargetFromPointer = (pointer: { x: number; y: number }) => {\n    if (!this.#isPointerInsideCanvas(pointer)) {\n      this.#setPaletteDropTarget(undefined);\n      this.#ref.markForCheck();\n      return;\n    }\n    if (!this.dragDropRows.length) {\n      this.#setPaletteDropTarget({ kind: 'empty' });\n      this.#ref.markForCheck();\n      return;\n    }\n    const hit = this.#rowHitFromPointer(pointer);\n    if (!hit) {\n      this.#setPaletteDropTarget(undefined);\n      this.#ref.markForCheck();\n      return;\n    }\n    const element = document.elementFromPoint(pointer.x, pointer.y);\n    const rowItems = element?.closest('.fb-row__items');\n    const rowElement = rowItems?.closest('.fb-row') as HTMLElement | null;\n    const paletteItem = this.draggedPaletteItem();\n    if (rowElement?.id === hit.row.id && paletteItem?.type !== 'break' && !this.isRowInlineDropLocked(hit.row)) {\n      const current = this.paletteDropTarget();\n      if (current?.kind === 'inline' && current.rowId === hit.row.id) return;\n      this.#setPaletteDropTarget({\n        kind: 'inline',\n        rowId: hit.row.id,\n        index: hit.row.items.length,\n        columns: `${this.#availableColumns(hit.row)}`,\n      });\n    } else {\n      this.#setPaletteDropTarget({ kind: 'edge', rowId: hit.row.id, edge: hit.edge });\n    }\n    this.#ref.markForCheck();\n  };\n\n  /** Handler chung cho mọi cdkDragEnded — set signal global false (dùng setTimeout 0\n   *  để chờ CDK xử lý xong drop event trước khi UI re-enable). */\n  onAnyDragEnded = () => {\n    setTimeout(() => {\n      this.isAnyDragging.set(false);\n      this.dragSource.set(undefined);\n      this.draggedPaletteItem.set(undefined);\n      this.#setPaletteDropTarget(undefined);\n      this.lastDragPointer = undefined;\n      this.targetItem = undefined;\n      this.#ref.markForCheck();\n    }, 0);\n  };\n\n  startResizeControl = (item: SdFormGenericComponent | SdFormGenericGroup, row: DragDropRowItem) => {\n    this.dragSource.set('resize');\n    this.isAnyDragging.set(true);\n    this.resizeState.set({ itemId: item.id, rowId: row.id, columns: `${item.layout?.columns || '12'}` });\n    this.#ref.markForCheck();\n  };\n\n  endResizeControl = (event: any) => {\n    this.dragEndChangeSizeControl(event);\n    this.resizeState.set(undefined);\n    this.onAnyDragEnded();\n  };\n\n  #componentsChanges = new Subject<void>();\n  #variablesChanges = new Subject<void>();\n  #validationsChanges = new Subject<void>();\n  #subscription = new Subscription();\n\n  constructor() {\n    // Khi input `formGeneric` ref thay đổi: clone components/variables/validations\n    // sang local arrays và bắn subject tương ứng cho stream debounced (syncRows).\n    // untracked() bao bọc các mutation để không tạo cycle (effect chỉ tracks formGeneric()).\n    effect(() => {\n      const fg = this.formGeneric();\n      untracked(() => {\n        this.components = Array.isArray(fg?.components) ? JSON.parse(JSON.stringify(fg!.components)) : [];\n        this.variables = Array.isArray(fg?.variables) ? JSON.parse(JSON.stringify(fg!.variables)) : [];\n        this.validations = Array.isArray(fg?.validations) ? JSON.parse(JSON.stringify(fg!.validations)) : [];\n        this.#componentsChanges.next();\n        this.#variablesChanges.next();\n        this.#validationsChanges.next();\n      });\n    });\n  }\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.#componentsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n        this.#syncComponentsToRows();\n        this.#ref.markForCheck();\n      })\n    );\n    this.#subscription.add(\n      this.#variablesChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n        this.#ref.markForCheck();\n      })\n    );\n    this.#subscription.add(\n      this.#validationsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n        this.#ref.markForCheck();\n      })\n    );\n  }\n\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n\n  addComponent = (item: FormBuilderComponent, index?: number, layoutColumns = '12') => {\n    // why: không cho thêm group khi đang Detail trong 1 group (tránh group lồng group).\n    if (item.type === 'group' && this.editingGroupId()) return;\n    const id = GenerateId();\n    const columns = item.type === 'break' ? '12' : layoutColumns;\n    let newComponent: SdFormGenericComponent | SdFormGenericGroup;\n    if (item.type === 'group') {\n      // Group là layout container, không có key/validate; có nested components[] + properties{icon,color}.\n      newComponent = {\n        id,\n        type: 'group',\n        label: 'Group',\n        layout: { columns },\n        components: [],\n        properties: {\n          icon: item.symbol || 'category',\n          color: 'primary',\n        },\n      } as SdFormGenericGroup;\n    } else if (item.type === 'break') {\n      // Break: 12-col luôn, đóng vai trò row separator cố định. Extend base nên có key\n      // (auto-gen cho stability) nhưng không hiển thị trong attribute panel.\n      newComponent = {\n        id,\n        key: GenerateKey(),\n        type: 'break',\n        label: 'Break',\n        layout: { columns: '12' },\n        validate: {},\n        disabled: false,\n        properties: {},\n      } as any;\n    } else {\n      newComponent = {\n        id,\n        key: GenerateKey(),\n        type: item.type as any,\n        label: item.type,\n        layout: { columns },\n        validate: { required: false },\n        disabled: false,\n        properties: {},\n      } as SdFormGenericComponent;\n    }\n    const scope = this.#scope();\n    if (index !== undefined) {\n      scope.splice(index, 0, newComponent);\n    } else {\n      scope.push(newComponent);\n    }\n\n    this.#recountTabIndex();\n    const created = scope.find(component => component.id === id);\n    this.selectedComponent.set(created);\n    this.selectComponent(created);\n    this.#ref.markForCheck();\n  };\n\n  // ── Helpers cho UI mới ────────────────────────────────────────\n  /** Symbol Material để render trên canvas item / attribute header. */\n  symbolFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n    if (item.type === 'group') return (item as SdFormGenericGroup).properties?.icon || 'category';\n    return this.componentIcons[item.type]?.symbol ?? 'help';\n  };\n\n  /** Human-readable type label (e.g. \"Text field\", \"Date\"). */\n  typeLabelFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n    return this.componentIcons[item.type]?.label ?? item.type;\n  };\n\n  placeholderSymbolFor = (\n    item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n  ): string => {\n    if (!item) return 'add';\n    if (this.#isPaletteComponent(item)) return item.symbol;\n    if ('items' in item) return 'view_week';\n    return this.symbolFor(item);\n  };\n\n  placeholderTitleFor = (\n    item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n  ): string => {\n    if (!item) return 'Component';\n    if (this.#isPaletteComponent(item)) return item.name;\n    if ('items' in item) return 'Row';\n    return ('label' in item && item.label) || this.typeLabelFor(item);\n  };\n\n  placeholderMetaFor = (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined): string => {\n    if (!item) return '';\n    if (this.#isPaletteComponent(item)) return 'New field';\n    if ('items' in item) return `${item.items.length} field${item.items.length === 1 ? '' : 's'}`;\n    return this.typeLabelFor(item);\n  };\n\n  placeholderColumnsFor = (\n    item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n  ): number => {\n    if (!item) return 12;\n    if ('items' in item) return 12;\n    if (this.#isPaletteComponent(item)) {\n      const row = this.targetItem;\n      if (row && !this.isRowInlineDropLocked(row)) return Math.max(2, this.#availableColumns(row));\n      return item.type === 'break' ? 12 : 6;\n    }\n    return +(item.layout?.columns || 12);\n  };\n\n  /** True nếu component có expression điều kiện — drives the \"conditional\" status chip. */\n  hasConditional = (item: SdFormGenericComponent | SdFormGenericGroup): boolean => {\n    const p: any = item.properties || {};\n    return !!(p.visibleWhenExpression || p.hiddenWhenExpression || p.disabledWhenExpression || p.requiredWhenExpression);\n  };\n\n  /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */\n  groupColorVars = (color: string | undefined | null): { bg: string; fg: string } => {\n    switch (color) {\n      case 'secondary':\n        return { bg: 'var(--md-sys-color-secondary-container)', fg: 'var(--md-sys-color-on-secondary-container)' };\n      case 'success':\n        return { bg: 'var(--md-sys-color-success-container)', fg: 'var(--md-sys-color-success)' };\n      case 'warning':\n        return { bg: 'var(--md-sys-color-warning-container)', fg: 'var(--md-sys-color-warning)' };\n      case 'error':\n        return { bg: 'var(--md-sys-color-error-container)', fg: 'var(--md-sys-color-error)' };\n      case 'primary':\n      default:\n        return { bg: 'var(--md-sys-color-primary-container)', fg: 'var(--md-sys-color-primary)' };\n    }\n  };\n\n  /** Segmented Design/Preview toggle (replaces play_circle/stop_circle). */\n  setMode = (preview: boolean) => {\n    this.isPreview.set(preview);\n  };\n\n  // ── Group drill-in (Detail) navigation ──────────────────────────────────\n  /** Mở canvas thiết kế riêng cho 1 group (chỉ children của nó). Snapshot để Cancel revert. */\n  enterGroupEdit = (group: SdFormGenericGroup) => {\n    this.#groupSnapshot = JSON.stringify(group.components ?? []);\n    this.editingGroupId.set(group.id);\n    this.selectedComponent.set(undefined);\n    this.#recountTabIndex();\n    this.#ref.markForCheck();\n  };\n\n  /** OK: giữ thay đổi children, quay về canvas chính. */\n  confirmGroupEdit = () => {\n    this.#groupSnapshot = undefined;\n    this.editingGroupId.set(undefined);\n    this.selectedComponent.set(undefined);\n    this.#syncComponentsToRows();\n    this.#ref.markForCheck();\n  };\n\n  /** Cancel: revert children về snapshot lúc vào Detail, rồi quay về canvas chính. */\n  cancelGroupEdit = () => {\n    const g = this.editingGroup();\n    if (g && this.#groupSnapshot !== undefined) {\n      g.components = JSON.parse(this.#groupSnapshot);\n    }\n    this.#groupSnapshot = undefined;\n    this.editingGroupId.set(undefined);\n    this.selectedComponent.set(undefined);\n    this.#syncComponentsToRows();\n    this.#ref.markForCheck();\n  };\n\n  /** Quick-add break sau row chỉ định (theo scope hiện tại — top-level hoặc group).\n   *  Tính component index cuối cùng của row đó trong scope, splice break vào sau.\n   */\n  insertBreakAfter = (row: DragDropRowItem) => {\n    const scope = this.#scope();\n    const lastItemId = row.items[row.items.length - 1]?.id;\n    const insertAfter = lastItemId ? scope.findIndex(c => c.id === lastItemId) : scope.length - 1;\n    const newBreak: any = {\n      id: GenerateId(),\n      key: GenerateKey(),\n      type: 'break',\n      label: 'Break',\n      layout: { columns: '12' },\n      validate: {},\n      disabled: false,\n      properties: {},\n    };\n    scope.splice(insertAfter + 1, 0, newBreak);\n    this.#recountTabIndex();\n    this.#ref.markForCheck();\n  };\n\n  /** Xoá component theo scope hiện tại (top-level hoặc children của group đang Detail). */\n  removeComponent = (id: string) => {\n    const g = this.editingGroup();\n    if (g) {\n      g.components = g.components.filter((t: { id: string }) => t.id !== id);\n    } else {\n      this.components = this.components.filter((t: { id: string }) => t.id !== id);\n    }\n    if (this.selectedComponent()?.id === id) this.selectedComponent.set(undefined);\n    this.#recountTabIndex();\n  };\n\n  selectComponent = (item?: SdFormGenericComponent | SdFormGenericGroup) => {\n    this.selectedComponent.set(item);\n    this.#ref.markForCheck();\n  };\n\n  onClickedOutside = (e: any) => {\n    const classList = (e.target as Element).classList;\n    if (!classList.length || classList.contains('components') || classList.contains('cdk-drop-list')) {\n      this.selectedComponent.set(undefined);\n    }\n  };\n\n  clickFormContentEmpty = () => {\n    if (!this.dragDropRows?.length) {\n      this.selectedComponent.set(undefined);\n    }\n  };\n\n  drop = (event: CdkDragDrop<any[]>) => {\n    if (event.previousContainer === event.container) {\n      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n      this.#syncRowsToComponents();\n      // Xử lý kéo chéo giữa các row khi pointer rời khỏi container hiện tại.\n      if (!event.isPointerOverContainer) {\n        const dragItemId = event.item.element.nativeElement.id;\n        if (dragItemId) {\n          const dragItem = this.#scope().find((t: { id: string }) => t.id === dragItemId);\n          this.xuLyKeoCheo(dragItem);\n        }\n      }\n    } else {\n      const draggedData = this.#draggedDataFromDropEvent(event);\n      if (this.#isPaletteComponent(draggedData)) {\n        const placement = this.#paletteDropPlacement(draggedData);\n        this.#setPaletteDropTarget(undefined);\n        if (!placement) return;\n        this.addComponent(draggedData, placement.index, placement.columns);\n      } else {\n        const movedItem = event.previousContainer.data[event.previousIndex] as SdFormGenericComponent | SdFormGenericGroup;\n        const targetRow = this.#rowForItems(event.container.data);\n        if (targetRow && !canPlaceInRow(targetRow, movedItem, movedItem.id)) {\n          this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n          return;\n        }\n\n        transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n        this.#syncRowsToComponents();\n      }\n    }\n    this.#recountTabIndex();\n  };\n\n  dragStartComponentItem = (event: any) => {\n    void event;\n    this.dragSource.set('canvas');\n    this.onAnyDragStarted();\n    this.isDragging = true;\n  };\n\n  dragEndComponentItem = (event: any) => {\n    this.isDragging = false;\n  };\n\n  onMouseover = (event: MouseEvent, rowItem: DragDropRowItem) => {\n    if (this.isDragging && this.targetItem !== rowItem) {\n      this.targetItem = rowItem;\n      this.#ref.markForCheck();\n    }\n  };\n\n  isRowFull = (row: DragDropRowItem): boolean => this.#usedColumns(row) >= 12;\n\n  isRowInlineDropLocked = (row: DragDropRowItem): boolean => this.#availableColumns(row) < 2;\n\n  shouldShowRowInsertionPlaceholder = (row: DragDropRowItem, edge?: RowInsertionEdge): boolean => {\n    const target = this.paletteDropTarget();\n    const resolvedEdge = edge ?? (target?.kind === 'edge' ? target.edge : 'after');\n    return target?.kind === 'edge' && target.rowId === row.id && target.edge === resolvedEdge;\n  };\n\n  shouldShowInlinePalettePlaceholder = (row: DragDropRowItem, index: number): boolean => {\n    const target = this.paletteDropTarget();\n    return target?.kind === 'inline' && target.rowId === row.id && target.index === index;\n  };\n\n  isPaletteEmptyDropTarget = (): boolean => this.paletteDropTarget()?.kind === 'empty';\n\n  palettePlaceholderColumnsFor = (row?: DragDropRowItem): number => {\n    const target = this.paletteDropTarget();\n    return target?.kind === 'inline' && (!row || target.rowId === row.id) ? +target.columns : 12;\n  };\n\n  onRowItemsDropEntered = (row: DragDropRowItem, event?: CdkDragEnter<any[]>) => {\n    const paletteItem = this.draggedPaletteItem();\n    if (this.dragSource() !== 'palette' || !paletteItem || paletteItem.type === 'break' || this.isRowInlineDropLocked(row)) return;\n    this.#setPaletteDropTarget({\n      kind: 'inline',\n      rowId: row.id,\n      index: Math.max(0, Math.min(event?.currentIndex ?? row.items.length, row.items.length)),\n      columns: `${this.#availableColumns(row)}`,\n    });\n    this.#ref.markForCheck();\n  };\n\n  onRowItemsDropSorted = (row: DragDropRowItem, event: CdkDragSortEvent<any[]>) => {\n    const target = this.paletteDropTarget();\n    if (this.dragSource() !== 'palette' || target?.kind !== 'inline' || target.rowId !== row.id) return;\n    this.#setPaletteDropTarget({ ...target, index: Math.max(0, Math.min(event.currentIndex, row.items.length)) });\n    this.#ref.markForCheck();\n  };\n\n  onRowItemsDropExited = (row: DragDropRowItem) => {\n    const target = this.paletteDropTarget();\n    if (target?.kind === 'inline' && target.rowId === row.id) {\n      this.#setPaletteDropTarget(undefined);\n      this.#ref.markForCheck();\n    }\n  };\n\n  canEnterCanvasDropList = (\n    drag: CdkDrag<FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem>\n  ): boolean => {\n    const data = drag.data;\n    if (!data) return false;\n    if (this.#isPaletteComponent(data)) return true;\n    return typeof data === 'object' && 'items' in data;\n  };\n\n  canEnterRowDropList = (\n    drag: CdkDrag<FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup>,\n    drop: CdkDropList<(SdFormGenericComponent | SdFormGenericGroup)[]>\n  ): boolean => {\n    const row = this.#rowForItems(drop.data);\n    if (!row) return false;\n\n    const data = drag.data;\n    if (!data) return false;\n    if (this.#isPaletteComponent(data)) {\n      return data.type !== 'break' && this.#availableColumns(row) >= 2;\n    }\n    if ('layout' in data && 'id' in data) {\n      return canPlaceInRow(row, data, data.id);\n    }\n\n    return false;\n  };\n\n  onFocus = (event: FocusEvent) => {\n    void event;\n  };\n\n  xuLyKeoCheo = (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => {\n    if (dragItem && this.targetItem) {\n      const result = moveItemToRow(this.dragDropRows, {\n        itemId: dragItem.id,\n        targetRowId: this.targetItem.id,\n      });\n      if (result.moved) {\n        this.dragDropRows = this.#withRowIndexes(result.rows);\n        this.#syncRowsToComponents();\n      } else if (result.reason === 'row-overflow') {\n        this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n      }\n    }\n    this.targetItem = undefined;\n  };\n  noReturnPredicate = () => {\n    return false;\n  };\n\n  #recountTabIndex = () => {\n    const scope = this.#scope();\n    scope.forEach((item, index) => {\n      if (item.layout) {\n        item.layout!.row = `${index + 1}`;\n        item.layout!.columns = item.layout?.columns || '12';\n      } else {\n        item.layout = {\n          row: `${index + 1}`,\n          columns: '12',\n        };\n      }\n    });\n    const sel = this.selectedComponent();\n    if (sel && sel?.layout?.row) {\n      sel.layout.row = scope.find(t => t.id === sel.id)?.layout?.row;\n    }\n    this.#syncComponentsToRows();\n  };\n\n  // Hàm xử lý chuyển đổi components (scope hiện tại) -> dragDropRows\n  #syncComponentsToRows = () => {\n    this.dragDropRows = this.#withRowIndexes(buildFormBuilderRows(this.#scope()));\n  };\n\n  #syncRowsToComponents = () => {\n    const flat = flattenFormBuilderRows(this.dragDropRows);\n    const g = this.editingGroup();\n    if (g) {\n      g.components = flat as SdFormGenericComponent[];\n    } else {\n      this.components = flat;\n    }\n  };\n\n  changeSizeControl = async (\n    event: CdkDragMove<SdFormGenericComponent | SdFormGenericGroup>,\n    item: SdFormGenericComponent | SdFormGenericGroup,\n    items: (SdFormGenericComponent | SdFormGenericGroup)[],\n    currentIndex: number\n  ) => {\n    // const totalColumnInRow = items.map(k => k.layout.columns).reduce((acc, curr) => acc + parseInt(curr, 0), 0);\n    const totalColumnBeforeItem = items\n      .map(k => +k.layout!.columns || 12)\n      .reduce((acc, curr, index) => {\n        if (index < currentIndex) {\n          acc = acc + curr;\n        }\n        return acc;\n      }, 0);\n    const rect = document.getElementById('frmComponent')?.getBoundingClientRect() as DOMRect;\n    const left = rect.left;\n    const right = rect.right - left;\n    const mouse = event.pointerPosition.x - left!;\n    const t = Math.round(12 / (100 / ((100 * mouse) / right))) - totalColumnBeforeItem;\n    // Clamp + skip-if-unchanged để tránh re-render mỗi pixel mouse di chuyển.\n    const newCols = t > 12 ? '12' : t < 2 ? '2' : `${t}`;\n    if (item.layout!.columns !== newCols) {\n      item.layout!.columns = newCols as any;\n    }\n    const currentResizeState = this.resizeState();\n    if (currentResizeState?.itemId !== item.id || currentResizeState?.columns !== newCols) {\n      this.resizeState.set({\n        itemId: item.id,\n        rowId: currentResizeState?.rowId ?? this.#rowForItems(items)?.id ?? `row-${item.id}`,\n        columns: newCols,\n      });\n      this.#ref.markForCheck();\n    }\n\n    //     document.getElementById('test').innerHTML = `<pre>\n    // left: ${left}\n    // right: ${document.getElementById('frmComponent').getBoundingClientRect().right}\n    // right-left: ${right}\n    // mouse: ${event.pointerPosition.x}\n    // mouse-left: ${mouse}\n    // t: ${t}\n    // columns: ${item.layout.columns}\n    // </pre>`;\n  };\n\n  dragEndChangeSizeControl = (event: any) => {\n    this.#recountTabIndex();\n  };\n\n  onChangeViewed = (component: SdFormGenericComponent) => {\n    component.properties!.viewed = !component.properties!.viewed;\n    // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n    this.#builderService.componentEmitters.next(component);\n  };\n\n  onChangeHidden = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n    component.properties!.hidden = !component.properties!.hidden;\n    // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n    this.#builderService.componentEmitters.next(component);\n  };\n\n  // Duplicate component nhưng sẽ clear id và key để tránh trùng lặp (theo scope hiện tại)\n  onDuplicate = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n    const clonedComponent = this.#cloneComponentWithNewIdentity(component);\n    const scope = this.#scope();\n    scope.push(clonedComponent);\n    this.#recountTabIndex();\n    const created = scope.find(t => t.id === clonedComponent.id);\n    this.selectedComponent.set(created);\n    this.selectComponent(created);\n    this.#ref.markForCheck();\n  };\n\n  // Copy form hiện tại\n  jsonString?: string;\n  viewJSON = () => {\n    this.jsonString = JSON.stringify({ components: this.components });\n    this.popupViewJSON()?.open();\n    this.#ref.markForCheck();\n  };\n\n  updateJSON = () => {\n    try {\n      if (this.jsonString) {\n        const json: Record<string, any> = JSON.parse(this.jsonString);\n        if ('components' in json) {\n          this.components = json['components'];\n          this.popupViewJSON()?.close();\n          this.#syncComponentsToRows();\n          this.#ref.markForCheck();\n        } else {\n          throw new Error('Invalid JSON');\n        }\n      }\n    } catch (err: any) {\n      console.error(err);\n      this.#notifyService.warning(err?.message);\n    }\n  };\n\n  configureVariables = () => {\n    this.clonedVariables = JSON.parse(JSON.stringify(this.variables || []));\n    this.popupConfigureVariables()?.open();\n    this.#ref.markForCheck();\n  };\n\n  addVariables = () => {\n    this.clonedVariables.push({\n      id: Utilities.randomId(),\n      key: '',\n      label: '',\n    });\n  };\n\n  removeVariables = (id: string) => {\n    const idx = this.clonedVariables.findIndex(e => e.id === id);\n    this.clonedVariables.splice(idx, 1);\n  };\n\n  updateVariables = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      this.#ref.markForCheck();\n      return;\n    }\n    this.variables = this.clonedVariables;\n    this.popupConfigureVariables()?.close();\n    this.#ref.markForCheck();\n  };\n\n  // Chìa ra cho bên ngoài lấy components hiện tại\n  getComponents = (): (SdFormGenericComponent | SdFormGenericGroup)[] => {\n    this.#syncRowsToComponents();\n    return JSON.parse(JSON.stringify(this.components || []));\n  };\n\n  // Chìa ra cho bên ngoài lấy variables hiện tại\n  getVariables = (): SdFormGenericVariable[] => {\n    return JSON.parse(JSON.stringify(this.variables || []));\n  };\n\n  #getValidations = (): SdFormGenericValidation[] => {\n    return JSON.parse(JSON.stringify(this.validations || []));\n  };\n\n  getForm = (): SdFormGeneric => {\n    return {\n      components: this.getComponents(),\n      variables: this.getVariables(),\n      validations: this.#getValidations(),\n    };\n  };\n\n  openConfigureValidation = () => {\n    this.configureValidation()?.open(this.getForm());\n  };\n\n  onUpdateValidations = (validations: SdFormGenericValidation[]) => {\n    this.validations = validations;\n  };\n\n  onValidate = async () => {\n    const errorMessages = await this.formRender()?.getValidationMessages('error');\n    if (errorMessages?.length) {\n      this.#notifyService.error(errorMessages);\n      return;\n    }\n    const warningMessages = await this.formRender()?.getValidationMessages('warning');\n    if (warningMessages?.length) {\n      this.#confirmService.confirm(warningMessages.join(', ')).then(() => {\n        this.#notifyService.success('Submit success');\n      });\n    } else {\n      this.#notifyService.success('Submit success');\n    }\n  };\n\n  #withRowIndexes = (rows: FormBuilderLayoutRow[]): DragDropRowItem[] => {\n    return rows.map((row, index) => ({\n      ...row,\n      rowIndex: index,\n    }));\n  };\n\n  #rowForItems = (items: any[]): DragDropRowItem | undefined => {\n    return this.dragDropRows.find(row => row.items === items);\n  };\n\n  #isPaletteComponent = (item: unknown): item is FormBuilderComponent => {\n    return !!item && typeof item === 'object' && 'symbol' in item && 'type' in item;\n  };\n\n  #draggedDataFromDropEvent = (event: CdkDragDrop<any[]>): unknown => {\n    return event.item.data ?? event.previousContainer.data[event.previousIndex];\n  };\n\n  #usedColumns = (row: DragDropRowItem): number => {\n    return row.items.reduce((sum, item) => sum + +(item.layout?.columns || 12), 0);\n  };\n\n  #availableColumns = (row: DragDropRowItem): number => {\n    return Math.max(0, 12 - this.#usedColumns(row));\n  };\n\n  #scopeIndexAfterRow = (row: DragDropRowItem): number => {\n    const scope = this.#scope();\n    const lastItem = row.items[row.items.length - 1];\n    const lastIndex = lastItem ? scope.findIndex(component => component.id === lastItem.id) : -1;\n    return lastIndex >= 0 ? lastIndex + 1 : scope.length;\n  };\n\n  #scopeIndexBeforeRow = (row: DragDropRowItem): number => {\n    const scope = this.#scope();\n    const firstItem = row.items[0];\n    const firstIndex = firstItem ? scope.findIndex(component => component.id === firstItem.id) : -1;\n    return firstIndex >= 0 ? firstIndex : scope.length;\n  };\n\n  #rowHitFromPointer = (pointer: { x: number; y: number }): { row: DragDropRowItem; edge: RowInsertionEdge } | undefined => {\n    const directRowEl = document.elementFromPoint(pointer.x, pointer.y)?.closest('.fb-row') as HTMLElement | null;\n    const rowElements = directRowEl ? [directRowEl] : Array.from(this.#host.nativeElement.querySelectorAll<HTMLElement>('.fb-row[id]'));\n\n    let best: { rowEl: HTMLElement; edge: RowInsertionEdge; distance: number } | undefined;\n    for (const rowEl of rowElements) {\n      const rect = rowEl.getBoundingClientRect();\n      const edge: RowInsertionEdge = pointer.y < rect.top + rect.height / 2 ? 'before' : 'after';\n      const distance = pointer.y < rect.top ? rect.top - pointer.y : pointer.y > rect.bottom ? pointer.y - rect.bottom : 0;\n      if (!best || distance < best.distance) {\n        best = { rowEl, edge, distance };\n      }\n    }\n\n    if (!best?.rowEl.id) return undefined;\n    const row = this.dragDropRows.find(item => item.id === best.rowEl.id);\n    return row ? { row, edge: best.edge } : undefined;\n  };\n\n  #paletteDropPlacement = (item: FormBuilderComponent): { index: number; columns?: string } | undefined => {\n    const target = this.paletteDropTarget();\n    if (!target) return undefined;\n    if (target.kind === 'empty') return { index: 0, columns: item.type === 'break' ? undefined : '12' };\n    const row = this.dragDropRows.find(candidate => candidate.id === target.rowId);\n    if (!row) return undefined;\n    if (target.kind === 'inline') {\n      return {\n        index: this.#scopeIndexFromDrop(row.items, target.index) ?? this.#scope().length,\n        columns: item.type === 'break' ? undefined : target.columns,\n      };\n    }\n    return {\n      index: target.edge === 'before' ? this.#scopeIndexBeforeRow(row) : this.#scopeIndexAfterRow(row),\n      columns: item.type === 'break' ? undefined : '12',\n    };\n  };\n\n  #scopeIndexFromDrop = (containerData: any[], currentIndex: number): number | undefined => {\n    const scope = this.#scope();\n    const row = this.#rowForItems(containerData);\n    if (row) {\n      const anchor = row.items[currentIndex] ?? row.items[row.items.length - 1];\n      if (!anchor) return scope.length;\n\n      const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n      if (anchorIndex < 0) return scope.length;\n      return currentIndex >= row.items.length ? anchorIndex + 1 : anchorIndex;\n    }\n\n    if (containerData === this.dragDropRows) {\n      const rowAtIndex = this.dragDropRows[currentIndex];\n      const anchor = rowAtIndex?.items[0];\n      if (!anchor) return scope.length;\n\n      const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n      return anchorIndex >= 0 ? anchorIndex : scope.length;\n    }\n\n    return undefined;\n  };\n\n  #cloneComponentWithNewIdentity = <T extends SdFormGenericComponent | SdFormGenericGroup>(component: T): T => {\n    const clonedComponent = JSON.parse(JSON.stringify(component)) as T;\n    this.#regenerateComponentIdentity(clonedComponent);\n    return clonedComponent;\n  };\n\n  #regenerateComponentIdentity = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n    component.id = GenerateId();\n    if (component.type === 'group') {\n      component.components = component.components.map(child => this.#cloneComponentWithNewIdentity(child));\n      return;\n    }\n\n    component.key = GenerateKey();\n  };\n}\n","<!-- cdkDropListGroup: auto-connect tất cả cdkDropList trong palette, canvas rows, group bodies.\n     [class.fb-shell--dragging]: JS-driven flag để ẩn hover/actions/resize toàn diện\n     trong lúc drag (CSS :has() không bắt 100% trường hợp với CDK preview clone). -->\n<div\n  class=\"fb-shell\"\n  cdkDropListGroup\n  [class.fb-shell--dragging]=\"isAnyDragging()\"\n  [class.fb-shell--palette-dragging]=\"dragSource() === 'palette'\"\n  [class.fb-shell--resizing]=\"isResizing()\">\n  <ng-template #dragPreviewTemplate>\n    <span class=\"fb-drag-preview__glyph\" aria-hidden=\"true\"></span>\n    <span class=\"fb-drag-preview__body\" aria-hidden=\"true\">\n      <span class=\"fb-drag-preview__line is-strong\"></span>\n      <span class=\"fb-drag-preview__line\"></span>\n    </span>\n  </ng-template>\n  <ng-template #dropPlaceholderTemplate let-item>\n    <span class=\"fb-drop-placeholder__icon\" aria-hidden=\"true\">\n      <span class=\"msi\">{{ placeholderSymbolFor(item) }}</span>\n    </span>\n    <span class=\"fb-drop-placeholder__body\" aria-hidden=\"true\">\n      <span class=\"fb-drop-placeholder__title\">{{ placeholderTitleFor(item) }}</span>\n      <span class=\"fb-drop-placeholder__meta\">{{ placeholderMetaFor(item) }}</span>\n    </span>\n  </ng-template>\n\n  <!-- ════════════════════════ LEFT PALETTE ════════════════════════ -->\n  <aside class=\"fb-palette\">\n    <div class=\"fb-panel-header\">\n      <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.components' | translate }}</div>\n    </div>\n\n    <!-- Search pill -->\n    <div class=\"fb-palette__search\">\n      <span class=\"msi\" aria-hidden=\"true\">search</span>\n      <input\n        type=\"text\"\n        [placeholder]=\"'core.component.form-builder.search-components' | translate\"\n        [value]=\"paletteSearch()\"\n        (input)=\"paletteSearch.set($any($event.target).value)\" />\n      <span class=\"kbd\">⌘K</span>\n    </div>\n\n    <div class=\"fb-palette__scroll\">\n      @for (group of paletteGroups(); track group.key) {\n        <div class=\"fb-palette__group-label\">{{ group.label }}</div>\n        <div\n          class=\"fb-palette__list\"\n          cdkDropList\n          [cdkDropListData]=\"group.items\"\n          [cdkDropListConnectedTo]=\"connectedRowDropLists()\"\n          [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n          @for (formBuilderComponent of group.items; track formBuilderComponent.type) {\n            <div\n              cdkDrag\n              [cdkDragData]=\"formBuilderComponent\"\n              class=\"fb-palette-item\"\n              [matTooltip]=\"formBuilderComponent.name\"\n              matTooltipPosition=\"right\"\n              (click)=\"addComponent(formBuilderComponent)\"\n              (cdkDragStarted)=\"onPaletteDragStarted(formBuilderComponent)\"\n              (cdkDragMoved)=\"onAnyDragMoved($event)\"\n              (cdkDragEnded)=\"onAnyDragEnded()\"\n              aria-hidden=\"true\">\n              <span class=\"fb-palette-item__icon\"\n                ><span class=\"msi\">{{ formBuilderComponent.symbol }}</span></span\n              >\n              <span class=\"fb-palette-item__name\">{{ formBuilderComponent.name }}</span>\n              <span class=\"fb-palette-item__drag\"><span class=\"msi\">drag_indicator</span></span>\n              <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n                <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n              </div>\n              <div *cdkDragPlaceholder class=\"fb-palette-native-placeholder\" aria-hidden=\"true\"></div>\n            </div>\n          }\n        </div>\n      }\n    </div>\n  </aside>\n\n  <!-- ════════════════════════ CENTER CANVAS ═══════════════════════ -->\n  <section class=\"fb-canvas\">\n    @let _editingGroup = editingGroup();\n    @if (_editingGroup) {\n      <!-- ── Drill-in header: đang thiết kế children của 1 group ── -->\n      <header class=\"fb-canvas__header fb-canvas__header--group\">\n        <div class=\"fb-canvas__title fb-groupedit__crumb\">\n          <button\n            type=\"button\"\n            class=\"fb-icon-btn\"\n            [matTooltip]=\"'core.component.form-builder.back-to-design' | translate\"\n            (click)=\"cancelGroupEdit()\">\n            <span class=\"msi\">chevron_left</span>\n          </button>\n          <span class=\"fb-groupedit__icon\"\n            ><span class=\"msi\">{{ _editingGroup.properties?.icon || 'category' }}</span></span\n          >\n          <span>{{ _editingGroup.label || ('core.component.form-builder.edit-group' | translate) }}</span>\n          <span class=\"fb-groupedit__hint\">{{ 'core.component.form-builder.edit-group' | translate }}</span>\n        </div>\n        <div class=\"fb-canvas__actions\">\n          <sd-button type=\"text\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"cancelGroupEdit()\"></sd-button>\n          <sd-button\n            type=\"fill\"\n            color=\"primary\"\n            prefixIcon=\"check\"\n            [title]=\"'core.component.form-builder.confirm' | translate\"\n            (click)=\"confirmGroupEdit()\"></sd-button>\n        </div>\n      </header>\n    } @else {\n      <header class=\"fb-canvas__header\">\n        <div class=\"fb-canvas__title\">\n          <span>{{ 'core.component.form-builder.layout' | translate }}</span>\n        </div>\n        <div class=\"fb-canvas__actions\">\n          <!-- Toolbar cluster: view JSON / variables / validation -->\n          <button type=\"button\" class=\"fb-icon-btn\" [matTooltip]=\"'core.component.form-builder.view-json' | translate\" (click)=\"viewJSON()\">\n            <span class=\"msi\">data_object</span>\n          </button>\n          <button\n            type=\"button\"\n            class=\"fb-icon-btn\"\n            [matTooltip]=\"'core.component.form-builder.config-variable' | translate\"\n            (click)=\"configureVariables()\">\n            <span class=\"msi\">data_array</span>\n          </button>\n          <button\n            type=\"button\"\n            class=\"fb-icon-btn\"\n            [matTooltip]=\"'core.component.form-builder.config-validation-warning-error' | translate\"\n            (click)=\"openConfigureValidation()\">\n            <span class=\"msi\">rule</span>\n          </button>\n\n          <span class=\"fb-divider\"></span>\n\n          <!-- M3 segmented Design/Preview toggle -->\n          <div class=\"fb-mode-toggle\" role=\"tablist\">\n            <button type=\"button\" role=\"tab\" [class.is-active]=\"!isPreview()\" [attr.aria-selected]=\"!isPreview()\" (click)=\"setMode(false)\">\n              <span class=\"msi\">edit</span>\n              <span>{{ 'core.component.form-builder.design' | translate }}</span>\n            </button>\n            <button type=\"button\" role=\"tab\" [class.is-active]=\"isPreview()\" [attr.aria-selected]=\"isPreview()\" (click)=\"setMode(true)\">\n              <span class=\"msi\">visibility</span>\n              <span>{{ 'core.component.form-builder.preview' | translate }}</span>\n            </button>\n          </div>\n        </div>\n      </header>\n    }\n\n    <div #canvasDropZone class=\"fb-canvas__body\" [class.is-preview]=\"isPreview()\" id=\"frmComponent\">\n      @if (isPreview()) {\n        <!-- ── Preview mode ───────────────────────────────────────────── -->\n        <div class=\"fb-preview-card\">\n          <div class=\"fb-preview-card__chip\">\n            <span class=\"msi\">visibility</span>\n            {{ 'core.component.form-builder.preview-runtime' | translate }}\n          </div>\n          <sd-form-render [configuration]=\"{ components: this.components, validations: this.validations }\"></sd-form-render>\n          <div class=\"fb-preview-card__footer\">\n            <sd-button type=\"text\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"setMode(false)\"></sd-button>\n            <sd-button\n              type=\"fill\"\n              color=\"primary\"\n              [title]=\"'core.component.form-builder.submit' | translate\"\n              (click)=\"onValidate()\"></sd-button>\n          </div>\n        </div>\n      } @else {\n        <!-- ── Design mode ────────────────────────────────────────────── -->\n        @if (!dragDropRows.length && !isPaletteEmptyDropTarget()) {\n          <div class=\"fb-empty\">\n            <div class=\"fb-empty__art\"><span class=\"msi\">dashboard_customize</span></div>\n            <div class=\"fb-empty__title\">{{ 'core.component.form-builder.empty-title' | translate }}</div>\n            <div class=\"fb-empty__hint\">\n              {{ 'core.component.form-builder.empty-hint' | translate }}\n              <span class=\"fb-empty__kbd\"><span class=\"msi\">keyboard</span>⌘ K</span>\n            </div>\n          </div>\n        }\n\n        <div\n          cdkDropList\n          cdkDropListOrientation=\"vertical\"\n          [cdkDropListData]=\"dragDropRows\"\n          [cdkDropListEnterPredicate]=\"canEnterCanvasDropList\"\n          (cdkDropListDropped)=\"drop($event)\"\n          (click)=\"clickFormContentEmpty()\"\n          aria-hidden=\"true\">\n          @if (isPaletteEmptyDropTarget()) {\n            <div class=\"fb-row-insert-placeholder fb-palette-drop-placeholder\" [style.--fb-placeholder-columns]=\"12\" aria-hidden=\"true\">\n              <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: draggedPaletteItem() }\"></ng-container>\n            </div>\n          }\n          @for (row of dragDropRows; track row.id) {\n            @if (shouldShowRowInsertionPlaceholder(row, 'before')) {\n              <div class=\"fb-row-insert-placeholder fb-palette-drop-placeholder\" [style.--fb-placeholder-columns]=\"12\" aria-hidden=\"true\">\n                <ng-container\n                  *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: draggedPaletteItem() || row }\"></ng-container>\n              </div>\n            }\n            <div\n              cdkDrag\n              [cdkDragData]=\"row\"\n              class=\"fb-row\"\n              (mouseover)=\"onMouseover($event, row)\"\n              (focus)=\"onFocus($event)\"\n              (cdkDragStarted)=\"onRowDragStarted()\"\n              (cdkDragMoved)=\"onAnyDragMoved($event)\"\n              (cdkDragEnded)=\"onAnyDragEnded()\"\n              [class.is-drag-target]=\"targetItem === row\"\n              [class.is-row-full]=\"isRowFull(row)\"\n              [class.is-row-inline-locked]=\"isRowInlineDropLocked(row)\"\n              [class.is-resizing-row]=\"resizeState()?.rowId === row.id\"\n              [id]=\"row.id\"\n              aria-hidden=\"true\">\n              <div class=\"fb-row__drag\" [matTooltip]=\"'core.component.form-builder.drag-vertically' | translate\" cdkDragHandle>\n                <span class=\"msi\">drag_indicator</span>\n              </div>\n              <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n                <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n              </div>\n              <div\n                *cdkDragPlaceholder\n                class=\"fb-drop-placeholder fb-drop-placeholder--row\"\n                [style.--fb-placeholder-columns]=\"12\"\n                aria-hidden=\"true\">\n                <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: row }\"></ng-container>\n              </div>\n              <!-- Quick-add break button — show on row hover, insert break after this row -->\n              <button\n                type=\"button\"\n                class=\"fb-row-break-btn\"\n                [matTooltip]=\"'core.component.form-builder.break' | translate\"\n                matTooltipPosition=\"right\"\n                (click)=\"insertBreakAfter(row); $event.stopPropagation()\">\n                <span class=\"msi\">horizontal_rule</span>\n              </button>\n\n              <div\n                #rowDropList=\"cdkDropList\"\n                class=\"fb-row__items\"\n                style=\"display: flex; flex: 1; gap: var(--gap-2)\"\n                cdkDropList\n                cdkDropListOrientation=\"horizontal\"\n                [cdkDropListData]=\"row.items\"\n                [cdkDropListConnectedTo]=\"connectedRowDropLists()\"\n                [cdkDropListEnterPredicate]=\"canEnterRowDropList\"\n                (cdkDropListEntered)=\"onRowItemsDropEntered(row, $event)\"\n                (cdkDropListSorted)=\"onRowItemsDropSorted(row, $event)\"\n                (cdkDropListExited)=\"onRowItemsDropExited(row)\"\n                (cdkDropListDropped)=\"drop($event)\">\n                @for (item of row.items; track item.id; let i = $index) {\n                  @if (shouldShowInlinePalettePlaceholder(row, i)) {\n                    <div\n                      class=\"fb-drop-placeholder fb-palette-drop-placeholder\"\n                      [style.--fb-placeholder-columns]=\"palettePlaceholderColumnsFor(row)\"\n                      aria-hidden=\"true\">\n                      <ng-container\n                        *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: draggedPaletteItem() }\"></ng-container>\n                    </div>\n                  }\n                  <!-- Group component renders as outlined card with colored header bar -->\n                  @if (item.type === 'group') {\n                    @let g = $any(item);\n                    @let cv = groupColorVars(g.properties?.color);\n                    <div\n                      cdkDrag\n                      [cdkDragData]=\"item\"\n                      [id]=\"item.id\"\n                      class=\"fb-group column-{{ item.layout?.columns || 12 }}\"\n                      [class.fb-item]=\"false\"\n                      [class.is-selected]=\"item.id === selectedComponent()?.id\"\n                      [class.is-hidden]=\"item.properties?.hidden\"\n                      [style.flex]=\"'0 0 calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n                      [style.maxWidth]=\"'calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n                      (click)=\"selectComponent(item); $event.stopPropagation()\"\n                      (cdkDragStarted)=\"dragStartComponentItem($event)\"\n                      (cdkDragMoved)=\"onAnyDragMoved($event)\"\n                      (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n                      aria-hidden=\"true\">\n                      <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n                      </div>\n                      <div\n                        *cdkDragPlaceholder\n                        class=\"fb-drop-placeholder\"\n                        [style.--fb-placeholder-columns]=\"placeholderColumnsFor(item)\"\n                        aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n                      </div>\n                      <!-- cdkDragHandle: chỉ cho phép kéo group qua header — body free cho click vào child. -->\n                      <div class=\"fb-group__header\" cdkDragHandle [style.background]=\"cv.bg\" [style.color]=\"cv.fg\">\n                        <span class=\"fb-group__icon\"\n                          ><span class=\"msi\">{{ g.properties?.icon || 'category' }}</span></span\n                        >\n                        <span class=\"fb-group__label\">{{ item.label }}</span>\n                        @if (hasConditional(item)) {\n                          <span class=\"fb-group__conditional-chip\">\n                            <span class=\"msi\" style=\"font-size: 12px\">bolt</span>\n                            {{ 'core.component.form-builder.conditional' | translate }}\n                          </span>\n                        }\n                        <span class=\"fb-group__count\">{{ g.components?.length || 0 }} fields</span>\n                      </div>\n                      <!-- Floating action toolbar -->\n                      <div class=\"fb-actions\">\n                        <!-- why: Detail = mở canvas thiết kế riêng cho group (thay cho drag/drop trong group). -->\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [matTooltip]=\"'core.component.form-builder.edit-group' | translate\"\n                          (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n                          <span class=\"msi\">open_in_full</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n                          (click)=\"onDuplicate(item); $event.stopPropagation()\">\n                          <span class=\"msi\">content_copy</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [class.warning]=\"item.properties?.hidden\"\n                          [class.on]=\"item.properties?.hidden\"\n                          [matTooltip]=\"\n                            item.properties?.hidden\n                              ? ('core.component.form-builder.show' | translate)\n                              : ('core.component.form-builder.hide' | translate)\n                          \"\n                          (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n                          <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn danger\"\n                          [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n                          (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n                          <span class=\"msi\">delete</span>\n                        </button>\n                      </div>\n\n                      <!-- Static preview: children render read-only (không drag/resize/select).\n                           Sửa nội dung group qua nút Detail (enterGroupEdit). -->\n                      <div class=\"fb-group__body fb-group__body--static\" (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n                        @if (!g.components?.length) {\n                          <div class=\"fb-group__empty\">\n                            <span class=\"msi\" style=\"font-size: 16px; margin-right: 6px\">open_in_full</span>\n                            {{ 'core.component.form-builder.group-empty-hint' | translate }}\n                          </div>\n                        }\n                        @for (child of g.components; track child.id) {\n                          <div\n                            class=\"fb-item is-child fb-item--static column-{{ child.layout?.columns || 12 }}\"\n                            [class.is-hidden]=\"child.properties?.hidden\">\n                            <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: child }\"> </ng-container>\n                          </div>\n                        }\n                      </div>\n                    </div>\n                  } @else if (item.type === 'break') {\n                    <!-- Break: row separator cố định. Render 12-col line, không có resize/edit attribute. -->\n                    <div\n                      cdkDrag\n                      [cdkDragData]=\"item\"\n                      [id]=\"item.id\"\n                      class=\"fb-item is-break column-12\"\n                      [class.is-selected]=\"item.id === selectedComponent()?.id\"\n                      [class.is-hidden]=\"item.properties?.hidden\"\n                      (click)=\"selectComponent(item); $event.stopPropagation()\"\n                      (cdkDragStarted)=\"dragStartComponentItem($event)\"\n                      (cdkDragMoved)=\"onAnyDragMoved($event)\"\n                      (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n                      aria-hidden=\"true\">\n                      <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n                      </div>\n                      <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" [style.--fb-placeholder-columns]=\"12\" aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n                      </div>\n                      <div class=\"fb-break-line\">\n                        <span class=\"msi\">horizontal_rule</span>\n                        <span class=\"fb-break-label\">{{ 'core.component.form-builder.break' | translate }}</span>\n                      </div>\n                      <div class=\"fb-actions\">\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [class.warning]=\"item.properties?.hidden\"\n                          [class.on]=\"item.properties?.hidden\"\n                          [matTooltip]=\"\n                            item.properties?.hidden\n                              ? ('core.component.form-builder.show' | translate)\n                              : ('core.component.form-builder.hide' | translate)\n                          \"\n                          (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n                          <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn danger\"\n                          [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n                          (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n                          <span class=\"msi\">delete</span>\n                        </button>\n                      </div>\n                    </div>\n                  } @else {\n                    <!-- Regular form component -->\n                    <div\n                      cdkDrag\n                      [cdkDragData]=\"item\"\n                      [id]=\"item.id\"\n                      class=\"fb-item column-{{ item.layout?.columns || 12 }}\"\n                      [class.is-selected]=\"item.id === selectedComponent()?.id\"\n                      [class.is-hidden]=\"item.properties?.hidden\"\n                      [class.is-readonly]=\"item.properties?.viewed\"\n                      [class.is-resizing]=\"resizeState()?.itemId === item.id\"\n                      (click)=\"selectComponent(item); $event.stopPropagation()\"\n                      (cdkDragStarted)=\"dragStartComponentItem($event)\"\n                      (cdkDragMoved)=\"onAnyDragMoved($event)\"\n                      (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n                      aria-hidden=\"true\">\n                      <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n                      </div>\n                      <div\n                        *cdkDragPlaceholder\n                        class=\"fb-drop-placeholder\"\n                        [style.--fb-placeholder-columns]=\"placeholderColumnsFor(item)\"\n                        aria-hidden=\"true\">\n                        <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n                      </div>\n\n                      <!-- Status chip (mutually exclusive priority: hidden > readonly > conditional) -->\n                      @if (item.properties?.hidden) {\n                        <span class=\"fb-status-chip hidden\">\n                          <span class=\"msi\">visibility_off</span>\n                          {{ 'core.component.form-builder.hidden' | translate }}\n                        </span>\n                      } @else if (item.properties?.viewed) {\n                        <span class=\"fb-status-chip readonly\">\n                          <span class=\"msi\">edit_off</span>\n                          {{ 'core.component.form-builder.read-only' | translate }}\n                        </span>\n                      } @else if (hasConditional(item)) {\n                        <span class=\"fb-status-chip conditional\">\n                          <span class=\"msi\">bolt</span>\n                          {{ 'core.component.form-builder.conditional' | translate }}\n                        </span>\n                      }\n\n                      <!-- Floating action toolbar pill -->\n                      <div class=\"fb-actions\">\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [class.warning]=\"item.properties?.viewed\"\n                          [class.on]=\"item.properties?.viewed\"\n                          [matTooltip]=\"\n                            item.properties?.viewed\n                              ? ('core.component.form-builder.unset-readonly' | translate)\n                              : ('core.component.form-builder.set-readonly' | translate)\n                          \"\n                          (click)=\"onChangeViewed(item); $event.stopPropagation()\">\n                          <span class=\"msi\">edit_off</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n                          (click)=\"onDuplicate(item); $event.stopPropagation()\">\n                          <span class=\"msi\">content_copy</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn\"\n                          [class.warning]=\"item.properties?.hidden\"\n                          [class.on]=\"item.properties?.hidden\"\n                          [matTooltip]=\"\n                            item.properties?.hidden\n                              ? ('core.component.form-builder.show' | translate)\n                              : ('core.component.form-builder.hide' | translate)\n                          \"\n                          (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n                          <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n                        </button>\n                        <button\n                          type=\"button\"\n                          class=\"fb-icon-btn danger\"\n                          [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n                          (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n                          <span class=\"msi\">delete</span>\n                        </button>\n                      </div>\n\n                      <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: item }\"> </ng-container>\n\n                      @if (resizeState()?.itemId === item.id) {\n                        <span class=\"fb-resize-chip\">{{ resizeState()?.columns }}/12</span>\n                      }\n\n                      <!-- Resize handle (pill) — cdkDragLockAxis=\"x\" để chỉ kéo ngang.\n                           Wrapping cdkDropList có enterPredicate=false, không nhận drop. -->\n                      <div cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n                        <div\n                          cdkDrag\n                          cdkDragLockAxis=\"x\"\n                          class=\"fb-resize\"\n                          (cdkDragStarted)=\"startResizeControl(item, row)\"\n                          (cdkDragMoved)=\"changeSizeControl($event, item, row.items, i)\"\n                          (cdkDragEnded)=\"endResizeControl($event)\"\n                          [matTooltip]=\"'core.component.form-builder.flex' | translate\"\n                          aria-label=\"resize\"></div>\n                      </div>\n                    </div>\n                  }\n                }\n                @if (shouldShowInlinePalettePlaceholder(row, row.items.length)) {\n                  <div\n                    class=\"fb-drop-placeholder fb-palette-drop-placeholder\"\n                    [style.--fb-placeholder-columns]=\"palettePlaceholderColumnsFor(row)\"\n                    aria-hidden=\"true\">\n                    <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: draggedPaletteItem() }\"></ng-container>\n                  </div>\n                }\n              </div>\n            </div>\n            @if (shouldShowRowInsertionPlaceholder(row, 'after')) {\n              <div class=\"fb-row-insert-placeholder fb-palette-drop-placeholder\" [style.--fb-placeholder-columns]=\"12\" aria-hidden=\"true\">\n                <ng-container\n                  *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: draggedPaletteItem() || row }\"></ng-container>\n              </div>\n            }\n          }\n        </div>\n      }\n    </div>\n  </section>\n\n  <!-- ════════════════════════ RIGHT ATTRIBUTES ════════════════════════ -->\n  <aside class=\"fb-attrs\">\n    <div class=\"fb-panel-header\">\n      <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.attribute' | translate }}</div>\n    </div>\n\n    @let _selectedComponent = selectedComponent();\n    @if (_selectedComponent) {\n      <!-- Selection header: type icon + name + key/type -->\n      <div class=\"fb-attrs__selection\">\n        <span class=\"fb-attrs__sel-icon\"\n          ><span class=\"msi\">{{ symbolFor(_selectedComponent) }}</span></span\n        >\n        <div class=\"fb-attrs__sel-meta\">\n          <div class=\"fb-attrs__sel-name\">{{ $any(_selectedComponent).label || ('core.component.form-builder.untitled' | translate) }}</div>\n          <div class=\"fb-attrs__sel-key\">\n            @if ($any(_selectedComponent).key) {\n              {{ $any(_selectedComponent).key }} · {{ typeLabelFor(_selectedComponent) }}\n            } @else {\n              {{ typeLabelFor(_selectedComponent) }}\n            }\n          </div>\n        </div>\n      </div>\n\n      <div class=\"fb-attrs__body\" aria-hidden=\"true\">\n        @if (_selectedComponent.type === 'textfield') {\n          <textfield-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textfield-attribute>\n        } @else if (_selectedComponent.type === 'textarea') {\n          <textarea-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textarea-attribute>\n        } @else if (_selectedComponent.type === 'chip-string') {\n          <chip-string-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></chip-string-attribute>\n        } @else if (_selectedComponent.type === 'chip-calendar') {\n          <chip-calendar-attribute\n            [components]=\"components\"\n            [variables]=\"variables\"\n            [component]=\"_selectedComponent\"></chip-calendar-attribute>\n        } @else if (_selectedComponent.type === 'number') {\n          <number-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></number-attribute>\n        } @else if (_selectedComponent.type === 'datetime') {\n          <datetime-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></datetime-attribute>\n        } @else if (_selectedComponent.type === 'select') {\n          <select-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></select-attribute>\n        } @else if (_selectedComponent.type === 'radio') {\n          <radio-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></radio-attribute>\n        } @else if (_selectedComponent.type === 'checkbox') {\n          <checkbox-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></checkbox-attribute>\n        } @else if (_selectedComponent.type === 'html') {\n          <html-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></html-attribute>\n        } @else if (_selectedComponent.type === 'upload') {\n          <upload-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></upload-attribute>\n        } @else if (_selectedComponent.type === 'table') {\n          <table-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></table-attribute>\n        } @else if (_selectedComponent.type === 'group') {\n          <group-attribute [group]=\"$any(_selectedComponent)\"></group-attribute>\n        }\n      </div>\n    } @else {\n      <div class=\"fb-attrs__placeholder\">\n        <span class=\"msi\">ads_click</span>\n        <div class=\"title\">{{ 'core.component.form-builder.no-selection-title' | translate }}</div>\n        <div class=\"hint\">{{ 'core.component.form-builder.no-selection-hint' | translate }}</div>\n      </div>\n    }\n  </aside>\n</div>\n\n<!-- ══════════════════ Reusable control template ═════════════════ -->\n<ng-template #controlTemplate let-item>\n  @if (item.type === 'textfield') {\n    <textfield-control [component]=\"item\"></textfield-control>\n  } @else if (item.type === 'textarea') {\n    <textarea-control [component]=\"item\"></textarea-control>\n  } @else if (item.type === 'chip-string') {\n    <chip-string-control [component]=\"item\"></chip-string-control>\n  } @else if (item.type === 'chip-calendar') {\n    <chip-calendar-control [component]=\"item\"></chip-calendar-control>\n  } @else if (item.type === 'number') {\n    <number-control [component]=\"item\"></number-control>\n  } @else if (item.type === 'datetime') {\n    <datetime-control [component]=\"item\"></datetime-control>\n  } @else if (item.type === 'select') {\n    <select-control [component]=\"item\"></select-control>\n  } @else if (item.type === 'radio') {\n    <radio-control [component]=\"item\"></radio-control>\n  } @else if (item.type === 'checkbox') {\n    <checkbox-control [component]=\"item\"></checkbox-control>\n  } @else if (item.type === 'html') {\n    <html-control [component]=\"item\"></html-control>\n  } @else if (item.type === 'upload') {\n    <upload-control [component]=\"item\"></upload-control>\n  } @else if (item.type === 'table') {\n    <table-control [component]=\"item\"></table-control>\n  }\n</ng-template>\n\n<!-- ══════════════════════ JSON / variables modals ═══════════════════════ -->\n<sd-modal title=\"JSON\" view=\"dialog\" width=\"80%\" modalClass=\"sd-form-builder-dialog\" #popupViewJSON>\n  <sd-textarea [(model)]=\"jsonString\"></sd-textarea>\n  <ng-container sdFooterRight>\n    <sd-button\n      type=\"fill\"\n      [title]=\"'core.component.form-builder.save' | translate\"\n      (click)=\"updateJSON()\"\n      prefixIcon=\"save\"\n      color=\"primary\"></sd-button>\n  </ng-container>\n</sd-modal>\n<sd-modal\n  [title]=\"'core.component.form-builder.config-variable' | translate\"\n  view=\"dialog\"\n  width=\"800px\"\n  modalClass=\"sd-form-builder-dialog\"\n  #popupConfigureVariables>\n  @for (variable of clonedVariables; track variable.id) {\n    <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\n      <sd-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"variable.key\" required></sd-input>\n      <sd-input\n        [form]=\"form\"\n        [label]=\"'core.component.form-builder.display-label' | translate\"\n        [(model)]=\"variable.label\"\n        required></sd-input>\n      <sd-button prefixIcon=\"delete\" (click)=\"removeVariables(variable.id)\" color=\"error\"></sd-button>\n    </div>\n  }\n  <a href=\"javascript:;\" (click)=\"addVariables()\">{{ 'core.component.form-builder.add-variable' | translate }}</a>\n  <ng-container sdFooterRight>\n    <sd-button\n      type=\"fill\"\n      [title]=\"'core.component.form-builder.save' | translate\"\n      (click)=\"updateVariables()\"\n      prefixIcon=\"save\"\n      color=\"primary\"></sd-button>\n  </ng-container>\n</sd-modal>\n<configure-validation (accept)=\"onUpdateValidations($event)\"></configure-validation>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, OnInit, inject, input, output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { ArrayUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n  Attribute,\n  AttributeOperators,\n  GetAttributes,\n  SdFormGenericComponent,\n  SdFormGenericExpression,\n  SdFormGenericGroup,\n} from '../../models';\nimport { ExpressionFeelPipe } from '../../pipes';\nimport { FormGenericService } from '../../services';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n  selector: 'sd-feel-expression',\n  templateUrl: './sd-feel-expression.component.html',\n  styleUrl: './sd-feel-expression.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SdInput, SdInputNumber, SdSelect, SdAutocomplete, SdButton, SdSelect, SdModal, TranslatePipe],\n})\nexport class SdFeelExpression implements OnInit {\n  private ref = inject(ChangeDetectorRef);\n  private expressionFeelPipe = inject(ExpressionFeelPipe);\n  private formGenericService = inject(FormGenericService);\n\n  @ViewChild(SdModal) modal?: SdModal;\n  form = new FormGroup({});\n  attributeOperators = AttributeOperators;\n  attributes: Attribute[] = [];\n  attribute: Record<string, Attribute> = {};\n  readonly components = input.required<(SdFormGenericComponent | SdFormGenericGroup)[]>();\n  // ValuesKey\n  expression?: SdFormGenericExpression;\n  @Input({ alias: 'expression', required: true }) set _expression(expression: SdFormGenericExpression | undefined) {\n    if (this.expression !== expression) {\n      this.expression = expression;\n    }\n    this.expression = this.expression || {\n      key: `${new Date().getTime().toString(36)}`,\n      type: 'combinator',\n      combinator: '&&',\n      conditions: [],\n    };\n  }\n  readonly expressionChange = output<SdFormGenericExpression>();\n\n  //\n  model?: string;\n  @Input({ alias: 'model', required: true }) set _model(model: string | undefined) {\n    if (this.model !== model) {\n      this.model = model;\n    }\n  }\n  readonly modelChange = output<string | undefined>();\n\n  readonly sdChange = output<{\n    model?: string;\n    expression?: SdFormGenericExpression;\n  }>();\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  edit = async () => {\n    this.attributes = await this.#getAttributes(this.components());\n    this.attribute = ArrayUtilities.toObject('value', this.attributes);\n    this.modal?.open?.();\n    this.ref.markForCheck();\n  };\n\n  addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n    conditions.push({\n      key: `${new Date().getTime().toString(36)}`,\n      type: 'condition',\n      field: undefined,\n      operator: 'EQUAL',\n      value: undefined,\n      dayInfo: {},\n    });\n    this.ref.markForCheck();\n  };\n\n  addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n    conditions.push({\n      key: `${new Date().getTime().toString(36)}`,\n      type: 'combinator',\n      combinator: '&&',\n      conditions: [],\n    });\n    this.ref.markForCheck();\n  };\n\n  remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n    conditions.splice(idx, 1);\n    this.ref.markForCheck();\n  };\n\n  onAccept = () => {\n    if (this.form.invalid) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    if (this.expression) {\n      this.model = this.expressionFeelPipe.transform(this.expression!);\n      this.expressionChange.emit(this.expression);\n    } else {\n      this.model = '';\n    }\n    this.modelChange.emit(this.model);\n    this.sdChange.emit({\n      model: this.model,\n      expression: this.expression,\n    });\n    this.modal?.close();\n    this.ref.markForCheck();\n  };\n\n  // Từ components map thành các attributes\n  #getAttributes = async (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Promise<Attribute[]> => {\n    const attributes: Attribute[] = [];\n    if (components.length) {\n      for (const component of components) {\n        if (component.type === 'group') {\n          attributes.push(...GetAttributes(component.components));\n        } else if (component.type === 'textfield' || component.type === 'textarea') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'string',\n          });\n        } else if (component.type === 'number') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'number',\n          });\n        } else if (component.type === 'checkbox') {\n          attributes.push({\n            value: component.key,\n            display: component.label,\n            type: 'boolean',\n            displayOnTrue: 'YES',\n            displayOnFalse: 'NO',\n          });\n        } else if (component.type === 'radio' || component.type === 'select') {\n          if (component.values?.length) {\n            attributes.push({\n              value: component.key,\n              display: component.label,\n              type: 'values',\n              values: component.values.map(e => ({\n                value: e.value,\n                display: e.label,\n              })),\n            });\n          } else {\n            const values = await this.formGenericService.selection.items(component.valuesKey, {\n              entity: {},\n              component,\n            });\n            // Nếu là mảng thì push vào\n            if (Array.isArray(values)) {\n              attributes.push({\n                value: component.key,\n                display: component.label,\n                type: 'values',\n                values,\n              });\n            } else {\n              attributes.push({\n                value: component.key,\n                display: component.label,\n                type: 'string',\n              });\n            }\n          }\n        }\n      }\n    }\n    return attributes;\n  };\n}\n","<a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{model || '--'}}</a>\n@if (expression) {\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\" modalClass=\"sd-form-builder-dialog\">\n  <div class=\"c-builder\">\n    <div class=\"d-flex justify-content-end\">\n      <sd-button prefixIcon=\"calculate\" class=\"mr-4\" [title]=\"'core.component.form-builder.condition-group' | translate\" color=\"primary\" (click)=\"addCombinator(expression.conditions)\"></sd-button>\n      <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" color=\"primary\" (click)=\"addCondition(expression.conditions)\" type=\"fill\"></sd-button>\n    </div>\n    <!-- Cấp 1 -->\n    @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n      <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n        <div class=\"c-condition\">\n          <!-- Dòng 1 chỉ hiện WHERE -->\n          @if (idxLv1 === 0) {\n            <div class=\"c-where\">WHERE</div>\n          }\n          <!-- Dòng 2 hiển thị combinator -->\n          @if (idxLv1 === 1) {\n            <div class=\"c-select\">\n              <sd-select\n                size=\"sm\"\n                [(model)]=\"expression.combinator\"\n                [items]=\"[\n                  { value: '&&', display: 'AND' },\n                  { value: '||', display: 'OR' }\n                ]\"\n                valueField=\"value\"\n                displayField=\"display\"\n                required\n                hideInlineError=\"\"></sd-select>\n            </div>\n          }\n        </div>\n        @if (conditionLv1.type === 'condition') {\n            <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv1.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n            @let fieldAttribute = attribute[conditionLv1.field!];\n            <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv1.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n            @if(!!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL') {\n              @if(fieldAttribute.type === 'string') {\n                <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n              } @else if(fieldAttribute.type === 'number') {\n                <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input-number>\n              } @else if(fieldAttribute.type === 'boolean') {\n                <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n              }@else if(fieldAttribute.type === 'values') {\n                <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n              }\n            }\n            <sd-button\n              class=\"ml-auto\"\n              prefixIcon=\"delete\"\n              [tooltip]=\"'core.component.form-builder.delete' | translate\"\n              (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n         \n        } @else if (conditionLv1.type === 'combinator') {\n          <div class=\"c-builder\">\n            <div class=\"d-flex justify-content-end\">\n              <sd-button\n                class=\"mr-4\"\n                prefixIcon=\"delete\"\n                [tooltip]=\"'core.component.form-builder.delete' | translate\"\n                (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n              <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" size=\"sm\" color=\"primary\" (click)=\"addCondition(conditionLv1.conditions)\" type=\"fill\"></sd-button>\n            </div>\n            <!-- Cấp 2 -->\n            @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n              <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n                <div class=\"c-condition\">\n                  <!-- Dòng 1 chỉ hiện WHERE -->\n                  @if (idxLv2 === 0) {\n                    <div class=\"c-where\">WHERE</div>\n                  }\n                  <!-- Dòng 2 hiển thị combinator -->\n                  @if (idxLv2 === 1) {\n                    <div class=\"c-select\">\n                      <sd-select\n                        size=\"sm\"\n                        [(model)]=\"conditionLv1.combinator\"\n                        [items]=\"[\n                          { value: '&&', display: 'AND' },\n                          { value: '||', display: 'OR' }\n                        ]\"\n                        valueField=\"value\"\n                        displayField=\"display\"\n                        required\n                        hideInlineError=\"\"></sd-select>\n                    </div>\n                  }\n                </div>\n                @if (conditionLv2.type === 'condition') {\n                    <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv2.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n                    @let fieldAttribute = attribute[conditionLv2.field!];\n                    <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv2.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n                    @if(!!fieldAttribute?.type && conditionLv2.operator && conditionLv2.operator !== 'NULL' && conditionLv2.operator !== 'NOT_NULL') {\n                      @if(fieldAttribute.type === 'string') {\n                        <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input>\n                      } @else if(fieldAttribute.type === 'number') {\n                        <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input-number>\n                      } @else if(fieldAttribute.type === 'boolean') {\n                        <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n                      }@else if(fieldAttribute.type === 'values') {\n                        <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n                      }\n                    }\n                    <sd-button\n                      class=\"ml-auto\"\n                      prefixIcon=\"delete\"\n                      [tooltip]=\"'core.component.form-builder.delete' | translate\"\n                      (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n                 \n                }\n              </div>\n            }\n          </div>\n        }\n      </div>\n    }\n  </div>\n  <sd-button sdFooterRight prefixIcon=\"check\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n</sd-modal>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DateUtilities","StringUtilities","SdInputNumber","startWith","debounceTime","SdInput","SdSelect","SdAutocomplete","BuildQueries","i1"],"mappings":"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"}