{"version":3,"file":"uni-components-library.mjs","sources":["../../../projects/uni-components-library/src/lib/imports.ts","../../../projects/uni-components-library/src/lib/theme/preset.ts","../../../projects/uni-components-library/src/lib/stories/blocks/left-menu/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/panel-menu/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/accordion/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/alert/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/badge/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/breadcrumb/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/confirm-dialog/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/dialog/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/divider/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/icon/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/menu/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/overlay-panel/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/progressbar/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/scroll-panel/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/tab-view/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/toast/classes.ts","../../../projects/uni-components-library/src/lib/stories/components/tree/classes.ts","../../../projects/uni-components-library/src/lib/theme/uni-theme-classes.ts","../../../projects/uni-components-library/src/lib/stories/components/panel-menu/panel-menu.component.ts","../../../projects/uni-components-library/src/lib/stories/components/panel-menu/panel-menu.template.html","../../../projects/uni-components-library/src/lib/stories/blocks/left-menu/left-menu.component.ts","../../../projects/uni-components-library/src/lib/stories/blocks/left-menu/left-menu.template.html","../../../projects/uni-components-library/src/lib/stories/components/alert/alert.component.ts","../../../projects/uni-components-library/src/lib/stories/components/alert/alert.template.html","../../../projects/uni-components-library/src/lib/stories/components/badge/badge.component.ts","../../../projects/uni-components-library/src/lib/stories/components/badge/badge.template.html","../../../projects/uni-components-library/src/lib/stories/blocks/header-with-menu/classes.ts","../../../projects/uni-components-library/src/lib/stories/blocks/user-menu/classes.ts","../../../projects/uni-components-library/src/lib/stories/blocks/user-menu/user-menu.model.ts","../../../projects/uni-components-library/src/lib/stories/blocks/user-menu/user-menu.component.ts","../../../projects/uni-components-library/src/lib/stories/blocks/user-menu/user-menu.template.html","../../../projects/uni-components-library/src/lib/stories/blocks/left-menu/menu.model.ts","../../../projects/uni-components-library/src/lib/stories/blocks/header-with-menu/user-menu.model.ts","../../../projects/uni-components-library/src/lib/stories/blocks/header-with-menu/header.component.ts","../../../projects/uni-components-library/src/lib/stories/blocks/header-with-menu/header.template.html","../../../projects/uni-components-library/src/lib/stories/components/icon/icon.component.ts","../../../projects/uni-components-library/src/lib/stories/components/icon/icon.template.html","../../../projects/uni-components-library/src/lib/stories/components/confirm-dialog/confirm-dialog.component.ts","../../../projects/uni-components-library/src/lib/stories/components/confirm-dialog/confirm-dialog-template.html","../../../projects/uni-components-library/src/lib/stories/components/breadcrumb/breadcrumb.component.ts","../../../projects/uni-components-library/src/lib/stories/components/breadcrumb/breadcrumb.template.html","../../../projects/uni-components-library/src/lib/stories/widgets/info-card/info-card.component.ts","../../../projects/uni-components-library/src/lib/stories/widgets/info-card/info-card.template.html","../../../projects/uni-components-library/src/dynamic-component.service.ts","../../../projects/uni-components-library/src/lib/stories/forms/button/button.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/button/button.template.html","../../../projects/uni-components-library/src/lib/stories/forms/input/input.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/input/input.template.html","../../../projects/uni-components-library/src/lib/stories/forms/textarea/textarea.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/textarea/textarea.template.html","../../../projects/uni-components-library/src/lib/stories/forms/checkbox/checkbox.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/checkbox/checkbox.template.html","../../../projects/uni-components-library/src/lib/stories/forms/radio-button-group/radio-button-group.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/radio-button-group/radio-button-group.template.html","../../../projects/uni-components-library/src/lib/stories/forms/select/select.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/select/select.component.html","../../../projects/uni-components-library/src/lib/new/components/select/select.component.ts","../../../projects/uni-components-library/src/lib/new/components/select/select.component.html","../../../projects/uni-components-library/src/lib/new/components/quill-editor/quill-editor.component.ts","../../../projects/uni-components-library/src/lib/new/components/quill-editor/quill-editor.component.html","../../../projects/uni-components-library/src/lib/new/components/select2/select2.component.ts","../../../projects/uni-components-library/src/lib/new/components/select2/select2.component.html","../../../projects/uni-components-library/src/lib/stories/forms/time-picker/time-picker.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/time-picker/time-picker.template.html","../../../projects/uni-components-library/src/lib/stories/forms/file-upload/file-upload.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/file-upload/file-upload.template.html","../../../projects/uni-components-library/src/lib/stories/forms/multi-folder-select/multi-folder-select.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/multi-folder-select/multi-folder-select.template.html","../../../projects/uni-components-library/src/lib/stories/forms/multiselect/multiselect-data.ts","../../../projects/uni-components-library/src/lib/stories/components/icon copy/icon.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/multiselect/multiselect.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/multiselect/multiselect.component.html","../../../projects/uni-components-library/src/lib/stories/blocks-dynamic/dynamic-form/dynamic-form.component.ts","../../../projects/uni-components-library/src/lib/stories/blocks-dynamic/dynamic-form/dynamic-form.template.html","../../../projects/uni-components-library/src/lib/stories/components/dialog/dialog.component.ts","../../../projects/uni-components-library/src/lib/stories/components/dialog/dialog.template.html","../../../projects/uni-components-library/src/lib/stories/forms/html-editor/html-editor.component.ts","../../../projects/uni-components-library/src/lib/stories/components/dynamic-filter/dynamic-filter.component.ts","../../../projects/uni-components-library/src/lib/stories/components/dynamic-filter/dynamic-filter.component.html","../../../projects/uni-components-library/src/lib/new/components/button/button.component.ts","../../../projects/uni-components-library/src/lib/new/components/button/button.template.html","../../../projects/uni-components-library/src/lib/stories/blocks-dynamic/dynamic-table/dynamic-table.component.ts","../../../projects/uni-components-library/src/lib/stories/blocks-dynamic/dynamic-table/dynamic-table.template.html","../../../projects/uni-components-library/src/lib/stories/components/accordion/accordion-tab.component.ts","../../../projects/uni-components-library/src/lib/stories/components/accordion/accordion.component.ts","../../../projects/uni-components-library/src/lib/stories/components/accordion/accordion.template.html","../../../projects/uni-components-library/src/lib/stories/widgets/shortcut/shortcut.component.ts","../../../projects/uni-components-library/src/lib/stories/widgets/shortcut/shortcut.template.html","../../../projects/uni-components-library/src/lib/stories/widgets/table/table.model.ts","../../../projects/uni-components-library/src/lib/stories/widgets/table/table.component.ts","../../../projects/uni-components-library/src/lib/stories/widgets/table/table.template.html","../../../projects/uni-components-library/src/lib/stories/widgets/list/list.model.ts","../../../projects/uni-components-library/src/lib/stories/widgets/list/list.component.ts","../../../projects/uni-components-library/src/lib/stories/widgets/list/list.template.html","../../../projects/uni-components-library/src/lib/stories/forms/checkbox-group/checkbox-group.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/checkbox-group/checkbox-group.template.html","../../../projects/uni-components-library/src/lib/stories/forms/color-picker/color-picker.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/color-picker/color-picker.template.html","../../../projects/uni-components-library/src/lib/stories/forms/radio-button/radio-button.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/radio-button/radio-button.template.html","../../../projects/uni-components-library/src/lib/stories/forms/range-slider/range-slider.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/range-slider/range-slider.template.html","../../../projects/uni-components-library/src/lib/stories/forms/select-button/select-button.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/select-button/select-button.template.html","../../../projects/uni-components-library/src/lib/stories/forms/toggle-switch/toggle-switch.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/toggle-switch/toggle-switch.template.html","../../../projects/uni-components-library/src/lib/stories/forms/tree-select/tree-select.component.ts","../../../projects/uni-components-library/src/lib/stories/forms/tree-select/tree-select.template.html","../../../projects/uni-components-library/src/public-api.ts","../../../projects/uni-components-library/src/uni-components-library.ts"],"sourcesContent":["// Import PrimeNG modules\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { AutoComplete } from 'primeng/autocomplete';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { AvatarGroupModule } from 'primeng/avatargroup';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { DatePicker } from 'primeng/datepicker';\r\nimport { Carousel } from 'primeng/carousel';\r\nimport { CascadeSelect } from 'primeng/cascadeselect';\r\nimport { Checkbox } from 'primeng/checkbox';\r\nimport { Chip } from 'primeng/chip';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { ConfirmPopupModule } from 'primeng/confirmpopup';\r\nimport { ColorPicker } from 'primeng/colorpicker';\r\nimport { ContextMenuModule } from 'primeng/contextmenu';\r\nimport { DataView } from 'primeng/dataview';\r\nimport { Dialog } from 'primeng/dialog';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { DockModule } from 'primeng/dock';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { DragDropModule } from 'primeng/dragdrop';\r\nimport { Select } from 'primeng/select';\r\nimport { DeferModule } from 'primeng/defer';\r\nimport { FieldsetModule } from 'primeng/fieldset';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { FocusTrap } from 'primeng/focustrap';\r\nimport { GalleriaModule } from 'primeng/galleria';\r\nimport { InplaceModule } from 'primeng/inplace';\r\nimport { InputMask } from 'primeng/inputmask';\r\nimport { InputSwitchModule } from 'primeng/inputswitch';\r\nimport { ToggleSwitch } from 'primeng/toggleswitch';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumber } from 'primeng/inputnumber';\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { InputGroup } from 'primeng/inputgroup';\r\nimport { InputOtp } from 'primeng/inputotp';\r\nimport { Image } from 'primeng/image';\r\nimport { Knob } from 'primeng/knob';\r\nimport { Listbox } from 'primeng/listbox';\r\nimport { MegaMenuModule } from 'primeng/megamenu';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { MenubarModule } from 'primeng/menubar';\r\nimport { Message } from 'primeng/message';\r\nimport { MessagesModule } from 'primeng/messages';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { MeterGroup } from 'primeng/metergroup';\r\nimport { OrderList } from 'primeng/orderlist';\r\nimport { OrganizationChartModule } from 'primeng/organizationchart';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { PanelModule } from 'primeng/panel';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { PasswordModule } from 'primeng/password';\r\nimport { PickList } from 'primeng/picklist';\r\nimport { ProgressBar } from 'primeng/progressbar';\r\nimport { RadioButton } from 'primeng/radiobutton';\r\nimport { Rating } from 'primeng/rating';\r\nimport { Scroller } from 'primeng/scroller';\r\nimport { ScrollPanelModule } from 'primeng/scrollpanel';\r\nimport { ScrollTop } from 'primeng/scrolltop';\r\nimport { SelectButton } from 'primeng/selectbutton';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { Slider } from 'primeng/slider';\r\nimport { SpeedDialModule } from 'primeng/speeddial';\r\nimport { SplitButton } from 'primeng/splitbutton';\r\nimport { SplitterModule } from 'primeng/splitter';\r\nimport { StepperModule } from 'primeng/stepper';\r\nimport { StepsModule } from 'primeng/steps';\r\nimport { TabMenuModule } from 'primeng/tabmenu';\r\nimport { TableModule } from 'primeng/table';\r\nimport { TabViewModule } from 'primeng/tabview';\r\nimport { Tag } from 'primeng/tag';\r\nimport { Terminal } from 'primeng/terminal';\r\nimport { TieredMenuModule } from 'primeng/tieredmenu';\r\nimport { Timeline } from 'primeng/timeline';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ToggleButton } from 'primeng/togglebutton';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { Tree } from 'primeng/tree';\r\nimport { TreeSelect } from 'primeng/treeselect';\r\nimport { TreeTableModule } from 'primeng/treetable';\r\nimport { AnimateOnScrollModule } from 'primeng/animateonscroll';\r\nimport { CardModule } from 'primeng/card';\r\nimport { BlockUI } from 'primeng/blockui';\r\nimport { ProgressSpinner } from 'primeng/progressspinner';\r\nimport { Ripple } from 'primeng/ripple';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { InputIcon } from 'primeng/inputicon';\r\nimport { StyleClass } from 'primeng/styleclass';\r\nimport { AutoFocusModule } from 'primeng/autofocus';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgModule } from '@angular/core';\r\nimport { OverlayBadgeModule } from 'primeng/overlaybadge';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    AvatarModule,\r\n    AvatarGroupModule,\r\n    AnimateOnScrollModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    AccordionModule,\r\n    AutoComplete,\r\n    BadgeModule,\r\n    BreadcrumbModule,\r\n    BlockUI,\r\n    ButtonModule,\r\n    CalendarModule,\r\n    DatePicker,\r\n    Carousel,\r\n    CascadeSelect,\r\n    Checkbox,\r\n    Chip,\r\n    ColorPicker,\r\n    ConfirmDialog,\r\n    ConfirmPopupModule,\r\n    ContextMenuModule,\r\n    DataView,\r\n    Dialog,\r\n    DividerModule,\r\n    DrawerModule,\r\n    DockModule,\r\n    DragDropModule,\r\n    Select,\r\n    DeferModule,\r\n    FieldsetModule,\r\n    FileUpload,\r\n    FloatLabel,\r\n    FocusTrap,\r\n    GalleriaModule,\r\n    InplaceModule,\r\n    InputMask,\r\n    InputSwitchModule,\r\n    InputTextModule,\r\n    TextareaModule,\r\n    InputNumber,\r\n    InputGroup,\r\n    InputGroupAddonModule,\r\n    InputOtp,\r\n    Image,\r\n    Knob,\r\n    Listbox,\r\n    MegaMenuModule,\r\n    MenuModule,\r\n    MenubarModule,\r\n    Message,\r\n    MessagesModule,\r\n    MultiSelectModule,\r\n    MeterGroup,\r\n    OrganizationChartModule,\r\n    OrderList,\r\n    OverlayPanelModule,\r\n    PaginatorModule,\r\n    PanelModule,\r\n    PanelMenuModule,\r\n    PasswordModule,\r\n    PickList,\r\n    ProgressSpinner,\r\n    ProgressBar,\r\n    RadioButton,\r\n    Rating,\r\n    SelectButton,\r\n    SidebarModule,\r\n    Scroller,\r\n    ScrollPanelModule,\r\n    ScrollTop,\r\n    Skeleton,\r\n    Slider,\r\n    SpeedDialModule,\r\n    SplitterModule,\r\n    StepperModule,\r\n    SplitButton,\r\n    StepsModule,\r\n    TableModule,\r\n    TabMenuModule,\r\n    TabViewModule,\r\n    Tag,\r\n    Terminal,\r\n    TieredMenuModule,\r\n    Timeline,\r\n    ToastModule,\r\n    ToggleButton,\r\n    ToggleSwitch,\r\n    ToolbarModule,\r\n    TooltipModule,\r\n    Tree,\r\n    TreeSelect,\r\n    TreeTableModule,\r\n    CardModule,\r\n    Ripple,\r\n    StyleClass,\r\n    IconField,\r\n    InputIcon,\r\n    AutoFocusModule,\r\n    OverlayBadgeModule,\r\n  ],\r\n  exports: [\r\n    AvatarModule,\r\n    AvatarGroupModule,\r\n    AnimateOnScrollModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    AccordionModule,\r\n    AutoComplete,\r\n    BadgeModule,\r\n    BreadcrumbModule,\r\n    BlockUI,\r\n    ButtonModule,\r\n    CalendarModule,\r\n    DatePicker,\r\n    Carousel,\r\n    CascadeSelect,\r\n    Checkbox,\r\n    Chip,\r\n    ColorPicker,\r\n    ConfirmDialog,\r\n    ConfirmPopupModule,\r\n    ContextMenuModule,\r\n    DataView,\r\n    Dialog,\r\n    DividerModule,\r\n    DrawerModule,\r\n    DeferModule,\r\n    DockModule,\r\n    DragDropModule,\r\n    Select,\r\n    FieldsetModule,\r\n    FileUpload,\r\n    FocusTrap,\r\n    GalleriaModule,\r\n    InplaceModule,\r\n    InputMask,\r\n    InputSwitchModule,\r\n    InputTextModule,\r\n    TextareaModule,\r\n    InputNumber,\r\n    InputGroup,\r\n    InputGroupAddonModule,\r\n    InputOtp,\r\n    Image,\r\n    Knob,\r\n    Listbox,\r\n    MegaMenuModule,\r\n    MenuModule,\r\n    MenubarModule,\r\n    Message,\r\n    MessagesModule,\r\n    MultiSelectModule,\r\n    MeterGroup,\r\n    OrganizationChartModule,\r\n    OrderList,\r\n    OverlayPanelModule,\r\n    PaginatorModule,\r\n    PanelModule,\r\n    PanelMenuModule,\r\n    PasswordModule,\r\n    PickList,\r\n    ProgressSpinner,\r\n    ProgressBar,\r\n    RadioButton,\r\n    Rating,\r\n    SelectButton,\r\n    SidebarModule,\r\n    Scroller,\r\n    ScrollPanelModule,\r\n    ScrollTop,\r\n    Skeleton,\r\n    Slider,\r\n    SpeedDialModule,\r\n    SplitterModule,\r\n    StepperModule,\r\n    SplitButton,\r\n    StepsModule,\r\n    TableModule,\r\n    TabMenuModule,\r\n    TabViewModule,\r\n    Tag,\r\n    Terminal,\r\n    TieredMenuModule,\r\n    Timeline,\r\n    ToastModule,\r\n    ToggleButton,\r\n    ToggleSwitch,\r\n    ToolbarModule,\r\n    TooltipModule,\r\n    Tree,\r\n    TreeSelect,\r\n    TreeTableModule,\r\n    CardModule,\r\n    Ripple,\r\n    StyleClass,\r\n    FloatLabel,\r\n    IconField,\r\n    InputIcon,\r\n    AutoFocusModule,\r\n    OverlayBadgeModule,\r\n  ],\r\n})\r\nexport class ImportsModule {}\r\n","import Aura from '@primeng/themes/aura';\r\n\r\n// Define dark mode selector\r\nexport const DARK_MODE_SELECTOR = 'dark';\r\n\r\n// Export theme configuration for PrimeNG\r\nexport const themeConfig = {\r\n  preset: Aura,\r\n  options: {\r\n    darkModeSelector: `.${DARK_MODE_SELECTOR}`\r\n  }\r\n};\r\n\r\n/**\r\n * Get the current theme mode based on localStorage only, ignoring system preference\r\n * @returns boolean true if dark mode is active\r\n */\r\nexport function isDarkMode(): boolean {\r\n  if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n    return false;\r\n  }\r\n\r\n  // Only check saved preference, ignore system preference\r\n  const savedTheme = localStorage.getItem('universal-theme');\r\n  if (savedTheme) {\r\n    return savedTheme === 'dark';\r\n  }\r\n\r\n  // Default to light theme if no preference is saved\r\n  return false;\r\n}\r\n\r\n/**\r\n * Toggle dark mode on the HTML element\r\n * @returns The new theme state (true = dark, false = light)\r\n */\r\nexport function toggleDarkMode(): boolean {\r\n  if (typeof document === 'undefined') {\r\n    return false;\r\n  }\r\n\r\n  const html = document.documentElement;\r\n  const isDark = html.classList.contains(DARK_MODE_SELECTOR);\r\n\r\n  // Toggle dark mode class\r\n  if (isDark) {\r\n    html.classList.remove(DARK_MODE_SELECTOR);\r\n    localStorage.setItem('universal-theme', 'light');\r\n    return false;\r\n  } else {\r\n    html.classList.add(DARK_MODE_SELECTOR);\r\n    localStorage.setItem('universal-theme', 'dark');\r\n    return true;\r\n  }\r\n}\r\n\r\n/**\r\n * Initialize theme based on saved preference or system preference\r\n */\r\nexport function initTheme(): void {\r\n  if (typeof document === 'undefined') {\r\n    return;\r\n  }\r\n\r\n  const shouldBeDark = isDarkMode();\r\n  const html = document.documentElement;\r\n\r\n  if (shouldBeDark) {\r\n    html.classList.add(DARK_MODE_SELECTOR);\r\n  } else {\r\n    html.classList.remove(DARK_MODE_SELECTOR);\r\n  }\r\n\r\n  // Listen for system theme changes if no saved preference\r\n  if (!localStorage.getItem('universal-theme') && window.matchMedia) {\r\n    const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n    darkModeMediaQuery.addEventListener('change', (e) => {\r\n      if (e.matches) {\r\n        html.classList.add(DARK_MODE_SELECTOR);\r\n      } else {\r\n        html.classList.remove(DARK_MODE_SELECTOR);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n// Function to load external scripts\r\nexport function loadExternalScripts() {\r\n  if (typeof document === 'undefined') return; // SSR check\r\n\r\n  // Iconify script for icons\r\n  const iconifyScript = document.createElement('script');\r\n  iconifyScript.src = 'https://code.iconify.design/2/2.0.3/iconify.min.js';\r\n  iconifyScript.async = true;\r\n  document.head.appendChild(iconifyScript);\r\n}\r\n","/**\r\n * Custom styles for the left-menu component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\nexport interface LeftMenuClasses {\r\n  container: string;\r\n  template: string;\r\n  items: {\r\n    parent: string;\r\n    chevron: string;\r\n    label: string;\r\n    separator: string;\r\n    link: string;\r\n    icon: string;\r\n    badge: string;\r\n    shortcut: string;\r\n  };\r\n  nested: {\r\n    separator: string;\r\n    link: string;\r\n    icon: string;\r\n    label: string;\r\n    badge: string;\r\n    shortcut: string;\r\n  };\r\n}\r\n\r\nexport const CLASSES: LeftMenuClasses = {\r\n  container: 'w-full',\r\n  template: 'border-0 bg-transparent',\r\n  items: {\r\n    parent: 'link flex bg-transparent items-center px-2 py-2 cursor-pointer group font-bold text-gray-800',\r\n    chevron: 'pi pi-chevron-down text-primary mr-2',\r\n    label: '',\r\n    separator: 'link font-semibold bg-transparent py-2 cursor-text hover:bg-white',\r\n    link: 'link flex items-center px-2 py-2 cursor-pointer bg-transparent group text-gray-700 hover:bg-gray-100',\r\n    icon: 'text-primary group-hover:text-inherit',\r\n    badge: 'ml-auto',\r\n    shortcut: 'ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1'\r\n  },\r\n  nested: {\r\n    separator: 'link font-semibold bg-transparent py-2 cursor-text hover:bg-white',\r\n    link: 'link flex items-center px-2 py-2 cursor-pointer bg-transparent group text-gray-700 hover:bg-gray-100',\r\n    icon: 'text-primary group-hover:text-inherit',\r\n    label: 'ml-2',\r\n    badge: 'ml-auto',\r\n    shortcut: 'ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1'\r\n  }\r\n};\r\n","export interface PanelMenuClasses {\r\n  container: string;\r\n  panel: {\r\n    header: string;\r\n    content: string;\r\n    expanded: string;\r\n    collapsed: string;\r\n  };\r\n  item: {\r\n    default: string;\r\n    active: string;\r\n    disabled: string;\r\n  };\r\n  submenu: {\r\n    container: string;\r\n    item: string;\r\n  };\r\n  icon: string;\r\n  label: string;\r\n  badge: string;\r\n}\r\n\r\nexport const defaultClasses: PanelMenuClasses = {\r\n  container: 'universal-panel-menu',\r\n  panel: {\r\n    header: 'p-panelmenu-header',\r\n    content: 'p-panelmenu-content',\r\n    expanded: 'p-panelmenu-expanded',\r\n    collapsed: 'p-panelmenu-collapsed'\r\n  },\r\n  item: {\r\n    default: 'p-menuitem',\r\n    active: 'p-menuitem-active',\r\n    disabled: 'p-disabled'\r\n  },\r\n  submenu: {\r\n    container: 'p-submenu-list',\r\n    item: 'p-menuitem'\r\n  },\r\n  icon: 'p-menuitem-icon',\r\n  label: 'p-menuitem-text',\r\n  badge: 'p-badge'\r\n};\r\n\r\n","/**\r\n * Custom styles for the accordion component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\n\r\nexport interface AccordionClasses {\r\n  container: string;\r\n  header: string;\r\n  content: string;\r\n  tab: {\r\n    active: string;\r\n    inactive: string;\r\n    disabled: string;\r\n  };\r\n  icon: {\r\n    expand: string;\r\n    collapse: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: AccordionClasses = {\r\n  container: 'universal-accordion',\r\n  header: 'text-base font-semibold text-primary',\r\n  content: 'pb-3',\r\n  tab: {\r\n    active: '',\r\n    inactive: '',\r\n    disabled: 'opacity-50 cursor-not-allowed'\r\n  },\r\n  icon: {\r\n    expand: 'text-primary text-sm transition-transform duration-200',\r\n    collapse: 'text-primary text-sm transition-transform duration-200'\r\n  }\r\n};\r\n","export interface AlertClasses {\r\n  container: string;\r\n  wrapper: string;\r\n  header: {\r\n    container: string;\r\n    title: string;\r\n    icon: string;\r\n  };\r\n  closeButton: string;\r\n  content: string;\r\n  severity: {\r\n    info: string;\r\n    success: string;\r\n    warning: string;\r\n    error: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: AlertClasses = {\r\n  container: 'border rounded-lg p-4 mb-5',\r\n  wrapper: 'flex items-center justify-between',\r\n  header: {\r\n    container: 'flex items-center',\r\n    title: 'font-bold text-lg',\r\n    icon: 'text-xl mr-2'\r\n  },\r\n  closeButton: 'opacity-70 hover:opacity-100 transition-opacity',\r\n  content: 'mt-2',\r\n  severity: {\r\n    info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-900/30 dark:border-blue-800 dark:text-blue-200',\r\n    success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-900/30 dark:border-green-800 dark:text-green-200',\r\n    warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-900/30 dark:border-yellow-800 dark:text-yellow-200',\r\n    error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-900/30 dark:border-red-800 dark:text-red-200'\r\n  }\r\n};\r\n","export interface BadgeClasses {\r\n  container: string;\r\n  badge: {\r\n    default: string;\r\n    small: string;\r\n    large: string;\r\n    xlarge: string;\r\n  };\r\n  tag: {\r\n    default: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: BadgeClasses = {\r\n  container: 'universal-badge inline-flex items-center',\r\n  badge: {\r\n    default: 'font-medium',\r\n    small: 'text-xs',\r\n    large: 'text-sm',\r\n    xlarge: 'text-base'\r\n  },\r\n  tag: {\r\n    default: 'rounded-md font-medium'\r\n  }\r\n};\r\n\r\n","export interface BreadcrumbClasses {\r\n  container: string;\r\n  link: string;\r\n  text: {\r\n    default: string;\r\n    link: string;\r\n    current: string;\r\n  };\r\n  separator: string;\r\n  home: {\r\n    icon: string;\r\n    container: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: BreadcrumbClasses = {\r\n  container: 'max-w-full bg-transparent',\r\n  link: 'p-menuitem-link',\r\n  text: {\r\n    default: 'text-color',\r\n    link: 'text-gray-400 hover:text-gray-600',\r\n    current: 'text-black font-semibold'\r\n  },\r\n  separator: 'mx-2 text-gray-400',\r\n  home: {\r\n    icon: 'pi pi-home',\r\n    container: 'flex items-center'\r\n  }\r\n};\r\n\r\n","\r\nexport interface ConfirmDialogClasses {\r\n  container: string;\r\n  dialog: string;\r\n  message: string;\r\n  footer: string;\r\n  button: {\r\n    container: string;\r\n    confirm: string;\r\n    cancel: string;\r\n  };\r\n  triggerButton: string;\r\n}\r\n\r\nexport const defaultClasses: ConfirmDialogClasses = {\r\n  container: 'universal-confirm-dialog card flex justify-center',\r\n  dialog: '',\r\n  message: 'text-base',\r\n  footer: 'flex gap-2 justify-end mt-4',\r\n  button: {\r\n    container: 'mx-1',\r\n    confirm: '',\r\n    cancel: ''\r\n  },\r\n  triggerButton: ''\r\n};\r\n","export interface DialogClasses {\r\n  container: string;\r\n  header: string;\r\n  content: string;\r\n  footer: string;\r\n  closeButton: string;\r\n  maximizeButton: string;\r\n}\r\n\r\nexport const defaultClasses: DialogClasses = {\r\n  container: 'universal-dialog',\r\n  header: 'font-medium text-lg',\r\n  content: 'p-4',\r\n  footer: 'flex justify-end gap-2 p-3 border-t border-gray-200',\r\n  closeButton: 'hover:bg-gray-100',\r\n  maximizeButton: 'hover:bg-gray-100'\r\n};\r\n\r\n","/**\r\n * Custom styles for the divider component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\nexport interface DividerClasses {\r\n  container: string;\r\n  horizontal: string;\r\n  vertical: string;\r\n  content: {\r\n    left: string;\r\n    center: string;\r\n    right: string;\r\n    top: string;\r\n    bottom: string;\r\n  };\r\n  type: {\r\n    solid: string;\r\n    dashed: string;\r\n    dotted: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: DividerClasses = {\r\n  container: 'universal-divider',\r\n  horizontal: 'my-4',\r\n  vertical: 'mx-4 h-full',\r\n  content: {\r\n    left: 'text-left',\r\n    center: 'text-center',\r\n    right: 'text-right',\r\n    top: 'items-start',\r\n    bottom: 'items-end'\r\n  },\r\n  type: {\r\n    solid: 'border-solid',\r\n    dashed: 'border-dashed',\r\n    dotted: 'border-dotted'\r\n  }\r\n};\r\n\r\n","export interface IconClasses {\r\n  base: string;\r\n  dark: string;\r\n  types: {\r\n    primeng: string;\r\n    iconify: string;\r\n    materialSymbols: string;\r\n  };\r\n  sizes: {\r\n    small: string;\r\n    medium: string;\r\n    large: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: IconClasses = {\r\n  base: 'universal-icon',\r\n  dark: 'dark-theme',\r\n  types: {\r\n    primeng: 'pi',\r\n    iconify: 'iconify',\r\n    materialSymbols: 'material-symbols-rounded'\r\n  },\r\n  sizes: {\r\n    small: '12px',\r\n    medium: '16px',\r\n    large: '24px'\r\n  }\r\n};\r\n\r\n","/**\r\n * Custom styles for the menu component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\nexport interface MenuClasses {\r\n  container: string;\r\n  item: {\r\n    default: string;\r\n    active: string;\r\n    disabled: string;\r\n  };\r\n  submenu: {\r\n    container: string;\r\n    item: string;\r\n  };\r\n  separator: string;\r\n  icon: string;\r\n  label: string;\r\n  badge: string;\r\n}\r\n\r\nexport const defaultClasses: MenuClasses = {\r\n  container: 'universal-menu',\r\n  item: {\r\n    default: 'p-menuitem',\r\n    active: 'p-menuitem-active',\r\n    disabled: 'p-disabled'\r\n  },\r\n  submenu: {\r\n    container: 'p-submenu-list',\r\n    item: 'p-menuitem'\r\n  },\r\n  separator: 'p-menu-separator',\r\n  icon: 'p-menuitem-icon',\r\n  label: 'p-menuitem-text',\r\n  badge: 'p-badge'\r\n};","/**\r\n * Custom styles for the overlay-panel component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\nexport interface OverlayPanelClasses {\r\n  container: string;\r\n  content: string;\r\n  closeIcon: string;\r\n  header: string;\r\n  footer: string;\r\n}\r\n\r\nexport const defaultClasses: OverlayPanelClasses = {\r\n  container: 'universal-overlay-panel',\r\n  content: 'p-3',\r\n  closeIcon: 'p-overlay-close-icon',\r\n  header: 'p-overlay-header',\r\n  footer: 'p-overlay-footer'\r\n};\r\n\r\n","export interface ProgressbarClasses {\r\n  container: string;\r\n  value: string;\r\n  label: string;\r\n  determinate: string;\r\n  indeterminate: string;\r\n}\r\n\r\nexport const defaultClasses: ProgressbarClasses = {\r\n  container: 'universal-progressbar',\r\n  value: 'p-progressbar-value',\r\n  label: 'p-progressbar-label',\r\n  determinate: 'p-progressbar-determinate',\r\n  indeterminate: 'p-progressbar-indeterminate'\r\n};\r\n\r\n","/**\r\n * Custom styles for the scroll-panel component\r\n * Edit this file to customize the appearance\r\n */\r\n\r\nexport interface ScrollPanelClasses {\r\n  container: string;\r\n  wrapper: string;\r\n  content: string;\r\n  bar: {\r\n    vertical: string;\r\n    horizontal: string;\r\n  };\r\n}\r\n\r\nexport const defaultClasses: ScrollPanelClasses = {\r\n  container: 'universal-scroll-panel',\r\n  wrapper: 'p-scrollpanel-wrapper',\r\n  content: 'p-scrollpanel-content',\r\n  bar: {\r\n    vertical: 'p-scrollpanel-bar-y',\r\n    horizontal: 'p-scrollpanel-bar-x'\r\n  }\r\n};\r\n","export interface TabViewClasses {\r\n  container: string;\r\n  navContainer: string;\r\n  nav: string;\r\n  tab: {\r\n    default: string;\r\n    active: string;\r\n    disabled: string;\r\n  };\r\n  tabHeader: string;\r\n  tabContent: string;\r\n  closeIcon: string;\r\n}\r\n\r\nexport const defaultClasses: TabViewClasses = {\r\n  container: 'universal-tab-view',\r\n  navContainer: 'p-tabview-nav-container',\r\n  nav: 'p-tabview-nav',\r\n  tab: {\r\n    default: 'p-tabview-nav-link',\r\n    active: 'p-tabview-selected',\r\n    disabled: 'p-disabled'\r\n  },\r\n  tabHeader: 'p-tabview-header',\r\n  tabContent: 'p-tabview-panels',\r\n  closeIcon: 'p-tabview-close'\r\n};\r\n\r\n","export interface ToastClasses {\r\n  container: string;\r\n  message: {\r\n    container: string;\r\n    success: string;\r\n    info: string;\r\n    warn: string;\r\n    error: string;\r\n  };\r\n  icon: string;\r\n  content: string;\r\n  summary: string;\r\n  detail: string;\r\n  closeButton: string;\r\n  buttonContainer: string;\r\n  button: string;\r\n}\r\n\r\nexport const defaultClasses: ToastClasses = {\r\n  container: 'universal-toast',\r\n  message: {\r\n    container: 'p-toast-message',\r\n    success: 'p-toast-message-success',\r\n    info: 'p-toast-message-info',\r\n    warn: 'p-toast-message-warn',\r\n    error: 'p-toast-message-error'\r\n  },\r\n  icon: 'p-toast-message-icon',\r\n  content: 'p-toast-message-content',\r\n  summary: 'p-toast-summary',\r\n  detail: 'p-toast-detail',\r\n  closeButton: 'p-toast-icon-close',\r\n  buttonContainer: 'flex gap-2 mb-3',\r\n  button: 'p-button'\r\n};\r\n\r\n","export interface TreeClasses {\r\n  container: string;\r\n  node: {\r\n    container: string;\r\n    content: string;\r\n    toggler: string;\r\n    icon: string;\r\n    label: string;\r\n    checkbox: string;\r\n    selected: string;\r\n    expanded: string;\r\n    collapsed: string;\r\n  };\r\n  filter: {\r\n    container: string;\r\n    input: string;\r\n    icon: string;\r\n  };\r\n  loading: string;\r\n  emptyMessage: string;\r\n}\r\n\r\nexport const defaultClasses: TreeClasses = {\r\n  container: 'universal-tree',\r\n  node: {\r\n    container: 'p-treenode',\r\n    content: 'p-treenode-content',\r\n    toggler: 'p-tree-toggler',\r\n    icon: 'p-treenode-icon',\r\n    label: 'p-treenode-label',\r\n    checkbox: 'p-checkbox',\r\n    selected: 'p-highlight',\r\n    expanded: 'p-treenode-expanded',\r\n    collapsed: 'p-treenode-collapsed'\r\n  },\r\n  filter: {\r\n    container: 'p-tree-filter-container',\r\n    input: 'p-tree-filter',\r\n    icon: 'p-tree-filter-icon'\r\n  },\r\n  loading: 'p-tree-loading',\r\n  emptyMessage: 'p-tree-empty-message'\r\n};\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { defaultClasses as AccordionClasses } from '../stories/components/accordion/classes';\r\nimport { defaultClasses as AlertClasses } from '../stories/components/alert/classes';\r\nimport { defaultClasses as BadgeClasses } from '../stories/components/badge/classes';\r\nimport { defaultClasses as BreadcrumbClasses } from '../stories/components/breadcrumb/classes';\r\nimport { defaultClasses as ConfirmDialogClasses } from '../stories/components/confirm-dialog/classes';\r\nimport { defaultClasses as DialogClasses } from '../stories/components/dialog/classes';\r\nimport { defaultClasses as DividerClasses } from '../stories/components/divider/classes';\r\nimport { defaultClasses as IconClasses } from '../stories/components/icon/classes';\r\nimport { defaultClasses as MenuClasses } from '../stories/components/menu/classes';\r\nimport { defaultClasses as OverlayPanelClasses } from '../stories/components/overlay-panel/classes';\r\nimport { defaultClasses as PanelMenuClasses } from '../stories/components/panel-menu/classes';\r\nimport { defaultClasses as ProgressbarClasses } from '../stories/components/progressbar/classes';\r\nimport { defaultClasses as ScrollPanelClasses } from '../stories/components/scroll-panel/classes';\r\nimport { defaultClasses as TabViewClasses } from '../stories/components/tab-view/classes';\r\nimport { defaultClasses as ToastClasses } from '../stories/components/toast/classes';\r\nimport { defaultClasses as TreeClasses } from '../stories/components/tree/classes';\r\n\r\nexport interface UniThemeClasses {\r\n  alert?: Partial<typeof AlertClasses>;\r\n  accordion?: Partial<typeof AccordionClasses>;\r\n  badge?: Partial<typeof BadgeClasses>;\r\n  breadcrumb?: Partial<typeof BreadcrumbClasses>;\r\n  confirmDialog?: Partial<typeof ConfirmDialogClasses>;\r\n  dialog?: Partial<typeof DialogClasses>;\r\n  divider?: Partial<typeof DividerClasses>;\r\n  icon?: Partial<typeof IconClasses>;\r\n  menu?: Partial<typeof MenuClasses>;\r\n  overlayPanel?: Partial<typeof OverlayPanelClasses>;\r\n  panelMenu?: Partial<typeof PanelMenuClasses>;\r\n  progressbar?: Partial<typeof ProgressbarClasses>;\r\n  scrollPanel?: Partial<typeof ScrollPanelClasses>;\r\n  tabView?: Partial<typeof TabViewClasses>;\r\n  toast?: Partial<typeof ToastClasses>;\r\n  tree?: Partial<typeof TreeClasses>;\r\n}\r\n\r\n// Default theme classes\r\nexport const UNI_THEME_DEFAULT_CLASSES: UniThemeClasses = {\r\n  alert: AlertClasses,\r\n  accordion: AccordionClasses,\r\n  badge: BadgeClasses,\r\n  breadcrumb: BreadcrumbClasses,\r\n  confirmDialog: ConfirmDialogClasses,\r\n  dialog: DialogClasses,\r\n  divider: DividerClasses,\r\n  icon: IconClasses,\r\n  menu: MenuClasses,\r\n  overlayPanel: OverlayPanelClasses,\r\n  panelMenu: PanelMenuClasses,\r\n  progressbar: ProgressbarClasses,\r\n  scrollPanel: ScrollPanelClasses,\r\n  tabView: TabViewClasses,\r\n  toast: ToastClasses,\r\n  tree: TreeClasses\r\n};\r\n\r\n// Angular InjectionToken for theme classes\r\nexport const UNI_THEME_CLASSES = new InjectionToken<UniThemeClasses>(\r\n  'UNI_THEME_CLASSES',\r\n  {\r\n    providedIn: 'root',\r\n    factory: () => UNI_THEME_DEFAULT_CLASSES\r\n  }\r\n);\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PanelMenuModule } from 'primeng/panelmenu';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { PanelMenuClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'universal-panel-menu',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    PanelMenuModule,\r\n    BadgeModule,\r\n    RippleModule,\r\n    RouterModule\r\n  ],\r\n  templateUrl: './panel-menu.template.html'\r\n})\r\nexport class UniversalPanelMenuComponent {\r\n  @Input() items: MenuItem[] = [];\r\n  @Input() multiple: boolean = true;\r\n  @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\r\n  @Input() styleClass: string = '';\r\n  \r\n  // Use the classes from the external file\r\n  classes: PanelMenuClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.panelMenu) {\r\n      this.classes = { ...defaultClasses, ...this.theme.panelMenu };\r\n    }\r\n  }\r\n  \r\n  // Output event emitter for menu item clicks\r\n  @Output() menuItemClick: EventEmitter<MenuItem> = new EventEmitter<MenuItem>();\r\n  \r\n  onMenuItemClick(event: any): void {\r\n    // PrimeNG PanelMenu emits an event object with item property\r\n    console.log(event)\r\n    if (event && event.item) {\r\n      this.menuItemClick.emit(event.item);\r\n    }\r\n  }\r\n}\r\n","<p-panelMenu\r\n    [model]=\"items\"\r\n    [multiple]=\"multiple\"\r\n    [transitionOptions]=\"transitionOptions\"\r\n    [styleClass]=\"classes.container + ' ' + styleClass\"\r\n    (onNodeClick)=\"onMenuItemClick($event)\">\r\n    <ng-template #item let-item>\r\n        <ng-container *ngIf=\"item.route; else urlRef\">\r\n            <a\r\n                [routerLink]=\"item.route\"\r\n                routerLinkActive=\"bg-gray-100 text-primary font-semibold\"\r\n                [routerLinkActiveOptions]=\"{ exact: true }\"\r\n                class=\"flex align-items-center cursor-pointer text-color px-3 py-2 transition-colors duration-150\"\r\n                style=\"align-items: center;\"\r\n            >\r\n                <span [class]=\"item.icon\"></span>\r\n                <span class=\"ml-2\">{{ item.label }}</span>\r\n            </a>\r\n        </ng-container>\r\n        <ng-template #urlRef>\r\n            <a *ngIf=\"item.url; else noLink\" [href]=\"item.url\" class=\"flex align-items-center\r\n                cursor-pointer text-color px-3 py-2\" style=\"align-items: center;\">\r\n                <span [class]=\"item.icon\"></span>\r\n                <span class=\"ml-2\">{{ item.label }}</span>\r\n            </a>\r\n            <ng-template #noLink>\r\n                <span class=\"flex items-center cursor-pointer text-surface-700 dark:text-surface-0 px-4 py-2\">\r\n                    <span [class]=\"item.icon\"></span>\r\n                    <span class=\"ml-2\">{{ item.label }}</span>\r\n                    <i *ngIf=\"item.items\" class=\"pi pi-angle-down text-primary ml-auto\"></i>\r\n                </span>\r\n            </ng-template>\r\n        </ng-template>\r\n    </ng-template>\r\n</p-panelMenu>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MenuItem } from './menu.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CLASSES, LeftMenuClasses } from './classes';\r\nimport { UniversalPanelMenuComponent } from '../../components/panel-menu/panel-menu.component';\r\nimport { MenuItem as PrimeMenuItem } from 'primeng/api';\r\n\r\n@Component({\r\n  selector: 'universal-left-menu',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    UniversalPanelMenuComponent\r\n  ],\r\n  templateUrl: './left-menu.template.html'\r\n})\r\nexport class LeftMenuComponent {\r\n  @Input() items: MenuItem[] = [];\r\n  @Input() route: string = '';\r\n  @Input() class: string = '';\r\n\r\n  // Use the classes from the external file\r\n  readonly classes: LeftMenuClasses = CLASSES;\r\n\r\n  @Output() routeChange = new EventEmitter<string>();\r\n\r\n  onRouteChange(item: MenuItem) {\r\n    if(item.route === this.route) return;\r\n    if(item.items && item.items.length > 0) {\r\n      return;\r\n    }\r\n    this.route = item.route as string;\r\n    this.routeChange.emit(this.route);\r\n  }\r\n\r\n  onMenuItemClick(item: PrimeMenuItem) {\r\n    // Convert PrimeNG MenuItem to our MenuItem type if necessary\r\n    console.log(item)\r\n    if (item.command) {\r\n      // If the item has a command property, execute it\r\n      item.command({ originalEvent: undefined, item });\r\n    } else if (item.routerLink) {\r\n      // If it has a routerLink, emit that as the route\r\n      this.routeChange.emit(item.routerLink.toString());\r\n    }\r\n  }\r\n}\r\n","<universal-panel-menu\r\n  [items]=\"items\"\r\n  [styleClass]=\"class\"\r\n  (menuItemClick)=\"onMenuItemClick($event)\">\r\n</universal-panel-menu>\r\n","// alert.component.ts\r\nimport { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { AlertClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\n\r\n\r\n@Component({\r\n  selector: 'universal-alert',\r\n  standalone: true,\r\n  imports: [CommonModule, ButtonModule],\r\n  templateUrl: './alert.template.html'\r\n})\r\nexport class UniversalAlert {\r\n  @Input() title = '';\r\n  @Input() icon = '';\r\n  @Input() text = '';\r\n  @Input() showCloseButton = false;\r\n  @Input() severity: 'info' | 'success' | 'warning' | 'error' = 'info';\r\n\r\n  isVisible = true;\r\n\r\n    classes: AlertClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.alert) {\r\n      this.classes = { ...defaultClasses, ...this.theme.alert };\r\n    }\r\n  }\r\n\r\n  get alertClass(): string {\r\n    return this.classes.severity[this.severity] || this.classes.severity.info;\r\n  }\r\n\r\n  get ariaLabel(): string {\r\n    return `${this.severity} alert: ${this.title}`;\r\n  }\r\n\r\n  closeAlert(): void {\r\n    this.isVisible = false;\r\n  }\r\n}\r\n","<div\r\n  [ngClass]=\"[alertClass, classes.container]\"\r\n  *ngIf=\"isVisible\"\r\n  role=\"alert\"\r\n  [attr.aria-label]=\"ariaLabel\">\r\n  <div [class]=\"classes.wrapper\">\r\n    <div [class]=\"classes.header.container\">\r\n      <i [class]=\"icon\" [ngClass]=\"classes.header.icon\"></i>\r\n      <h3 [class]=\"classes.header.title\">{{ title }}</h3>\r\n    </div>\r\n    <button\r\n      *ngIf=\"showCloseButton\"\r\n      type=\"button\"\r\n      (click)=\"closeAlert()\"\r\n      [class]=\"classes.closeButton\"\r\n      aria-label=\"Close alert\">\r\n      <i class=\"pi pi-times\"></i>\r\n    </button>\r\n  </div>\r\n  <div [class]=\"classes.content\" [innerHTML]=\"text\"></div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n\r\ntype BadgeSeverity = 'primary' | 'secondary' | 'info' | 'success' | 'warn' | 'danger' | 'help' | 'contrast';\r\ntype BadgeSize = 'small' | 'large' | 'xlarge';\r\n\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { BadgeClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\n@Component({\r\n  selector: 'universal-badge',\r\n  standalone: true,\r\n  imports: [CommonModule, BadgeModule,TagModule],\r\n  templateUrl: './badge.template.html'\r\n})\r\nexport class BadgeComponent {\r\n  @Input() value: string  = '';\r\n  @Input() severity: BadgeSeverity | any = 'primary';\r\n  @Input() size: BadgeSize = 'small';\r\n  @Input() styleClass = '';\r\n  @Input() sqared: boolean = false;\r\n  @Input() classes: BadgeClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.badge) {\r\n      this.classes = { ...defaultClasses, ...this.theme.badge };\r\n    }\r\n  }\r\n  \r\n  get ariaLabel(): string {\r\n    return `${this.severity} badge: ${this.value}`;\r\n  }\r\n}\r\n","<p-badge \r\n  *ngIf=\"!sqared\"\r\n  [value]=\"value\"\r\n  [severity]=\"severity\"\r\n  [size]=\"size\"\r\n  [styleClass]=\"(classes.container + ' ' + classes.badge[size] + ' ' + styleClass).trim()\"\r\n  role=\"status\"\r\n  [attr.aria-label]=\"ariaLabel\">\r\n</p-badge>\r\n\r\n<p-tag \r\n  *ngIf=\"sqared\"\r\n  [value]=\"value\"\r\n  [severity]=\"severity\"\r\n  [styleClass]=\"(classes.container + ' ' + classes.tag.default + ' ' + styleClass).trim()\"\r\n  role=\"status\"\r\n  [attr.aria-label]=\"ariaLabel\">\r\n</p-tag>","import { HeaderClasses } from \"./header.component\";\r\n\r\n\r\nexport const CLASSES: HeaderClasses = {\r\n  container: 'header flex items-center justify-between gap-3 w-full p-3 -mt-[15px] relative',\r\n  logoSection: {\r\n    wrapper: 'flex items-center',\r\n    menuButton: 'icon cursor-pointer pi pi-bars text-gray-800 dark:text-gray-200 transition-colors duration-200',\r\n    logo: 'ml-3 h-[40px]'\r\n  },\r\n  searchSection: {\r\n    wrapper: 'flex-1 flex justify-end md:justify-center max-w-[400px]',\r\n    searchContainer: 'flex fixed md:relative left-0 right-0 -top-52 md:top-auto md:mt-auto w-full transition-all duration-300 ease-in-out p-3 md:p-0 bg-white md:bg-transparent z-50 md:z-auto',\r\n    iconField: 'w-full',\r\n    searchInput: 'w-full',\r\n    searchCloseButton: 'md:hidden px-3 py-2',\r\n    searchToggleButton: 'md:hidden mr-4',\r\n    icon: 'icon cursor-pointer text-gray-800'\r\n  },\r\n  userSection: {\r\n    wrapper: 'flex justify-content-end',\r\n    userInfo: {\r\n      container: 'cursor-pointer py-1 text-slate-950 max-w-[250px] pr-6 relative',\r\n      name: 'hidden sm:block',\r\n      avatar: 'sm:hidden flex items-center justify-center bg-blue-200 rounded-full aspect-square w-[42px] h-[42px] font-semibold',\r\n      arrowIcon: 'material-symbols-rounded absolute right-0 top-0 translate-y-1/2',\r\n      organization: 'text-xs hidden sm:block text-ellipsis whitespace-nowrap overflow-hidden'\r\n    }\r\n  }\r\n};\r\n","import { UserMenuClasses } from './user-menu.component';\r\n\r\nexport const CLASSES: UserMenuClasses = {\r\n  wrapper: 'flex justify-content-end',\r\n  userInfo: {\r\n    container: 'cursor-pointer py-1 text-slate-950 dark:text-slate-200 max-w-[250px] pr-6 relative',\r\n    name: 'hidden sm:block',\r\n    avatar: 'sm:hidden flex items-center justify-center bg-blue-200 dark:bg-blue-600 rounded-full aspect-square w-[42px] h-[42px] font-semibold',\r\n    arrowIcon: 'material-symbols-rounded absolute right-0 top-0 translate-y-1/2 dark:text-slate-200',\r\n    organization: 'text-xs hidden sm:block text-ellipsis whitespace-nowrap overflow-hidden dark:text-slate-300'\r\n  }\r\n};\r\n","import { MenuItem } from 'primeng/api';\r\n\r\n// Default user information\r\nexport const DEFAULT_USER = {\r\n  userName: 'Jānis Bērziņš',\r\n  organization: 'Liepājas valstspilsētas pašvaldības aģentūra \"Liepājas Sabiedriskais transports\"',\r\n  avatarInitials: 'JB'\r\n};\r\n\r\nexport const USER_MENU_ITEMS: MenuItem[] = [\r\n  {\r\n    label: 'Profils',\r\n    icon: 'pi pi-user',\r\n    command: () => {\r\n      console.log('Profile clicked');\r\n    }\r\n  },\r\n  {\r\n    label: 'Iestatījumi',\r\n    icon: 'pi pi-cog',\r\n    command: () => {\r\n      console.log('Settings clicked');\r\n    }\r\n  },\r\n  {\r\n    separator: true\r\n  },\r\n  {\r\n    label: 'Iziet',\r\n    icon: 'pi pi-sign-out',\r\n    command: () => {\r\n      console.log('Sign out clicked');\r\n    }\r\n  }\r\n];\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { CLASSES } from './classes';\r\nimport { DEFAULT_USER } from './user-menu.model';\r\n\r\nexport interface UserMenuClasses {\r\n  wrapper: string;\r\n  userInfo: {\r\n    container: string;\r\n    name: string;\r\n    avatar: string;\r\n    arrowIcon: string;\r\n    organization: string;\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: 'universal-user-menu',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    MenuModule\r\n  ],\r\n  templateUrl: './user-menu.template.html',\r\n})\r\nexport class UserMenuComponent {\r\n  @ViewChild('userMenu') userMenu: any;\r\n  @Input() userName: string = DEFAULT_USER.userName;\r\n  @Input() organization: string = DEFAULT_USER.organization;\r\n  @Input() menuItems: MenuItem[] = [];\r\n  @Input() avatarInitials: string = DEFAULT_USER.avatarInitials;\r\n\r\n  // Use the classes from the external file\r\n  readonly classes: UserMenuClasses = CLASSES;\r\n\r\n  showUserMenu(event: Event) {\r\n    this.userMenu.toggle(event);\r\n  }\r\n}\r\n","<div [class]=\"classes.wrapper\">\r\n  <p-menu #userMenu [model]=\"menuItems\" [popup]=\"true\" />\r\n\r\n  <div (click)=\"showUserMenu($event)\" [class]=\"classes.userInfo.container\">\r\n    <span [class]=\"classes.userInfo.name\">{{ userName }}</span>\r\n    <span [class]=\"classes.userInfo.avatar\">{{ avatarInitials }}</span>\r\n    <span [class]=\"classes.userInfo.arrowIcon\">\r\n      keyboard_arrow_down\r\n    </span>\r\n    <div *ngIf=\"organization\" [class]=\"classes.userInfo.organization\">\r\n      {{ organization }}\r\n    </div>\r\n  </div>\r\n</div>\r\n","export interface MenuItem {\r\n  label: string; // The label of the menu item\r\n  expanded?: boolean; // Optional: For expandable/collapsible menus\r\n  items?: MenuItem[]; // Optional: Nested menu items\r\n  icon?: string; // Optional: Icon associated with the menu item\r\n  route?: string; // Optional: Route for navigation\r\n  seperator?: boolean; // Optional: Separator for grouping\r\n}\r\n\r\nexport const Menu: MenuItem[] = [\r\n  {\r\n    label: 'Darba rīki',\r\n    expanded: true,\r\n    items: [\r\n      {\r\n        label: 'Rēķini',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Esmu iepazinies',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Darbinieki',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Materiālie resursi',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Krājumu norakstīšana',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Darba laika uzskaite',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Darba laika plānošana',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    label: 'Administrēšana',\r\n    expanded: false,\r\n    items: [\r\n      {\r\n        label: 'Sistēma un uzstādījumi',\r\n        seperator: true,\r\n      },\r\n      {\r\n        label: 'Lietotāju pārvaldība',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Licences pārvaldība',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Moduļi',\r\n        seperator: true,\r\n      },\r\n      {\r\n        label: 'Darba laika plānošana',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Darba plūsmas',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Pārvaldība',\r\n        seperator: true,\r\n      },\r\n\r\n      {\r\n        label: 'Organizācijas',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Serviss',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    label: 'Mana darba vieta',\r\n    expanded: false,\r\n    items: [\r\n      {\r\n        label: 'Alga',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Atvaļinājumi',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Mācību pieteikumi',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Izdevumi',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Komandējumi',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Noderīgi',\r\n        seperator: true,\r\n      },\r\n      {\r\n        label: 'Atskaites',\r\n        icon: 'pi pi-file',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Meklēt kolēģi',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Prombūtnes kalendārs',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Ārējās saites',\r\n        items: [],\r\n        icon: 'pi pi-file',\r\n        route: '#',\r\n      },\r\n    ],\r\n  },\r\n];\r\n\r\nexport const Menu2 = [\r\n  {\r\n    label: 'Mans Universal',\r\n    expanded: false,\r\n    items: [],\r\n  },\r\n  {\r\n    label: 'Vadība',\r\n    expanded: false,\r\n    items: [\r\n      {\r\n        label: 'Darbvirsma',\r\n        items: [],\r\n        icon: 'pi pi-objects-column',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Virsgrāmata',\r\n        items: [],\r\n        icon: 'pi pi-book',\r\n        route: '#',\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    label: ' Pro Universal',\r\n    expanded: true,\r\n    items: [\r\n      {\r\n        label: 'Darbvirsma',\r\n        items: [],\r\n        icon: 'pi pi-objects-column',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Virsgrāmata',\r\n        items: [],\r\n        icon: 'pi pi-book',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Kase',\r\n        items: [],\r\n        icon: 'pi pi-money-bill',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Banka',\r\n        items: [],\r\n        icon: 'pi pi-building-columns',\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Noliktava',\r\n        icon: 'pi pi-warehouse',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'LoĢistika',\r\n        icon: 'pi pi-directions',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Kases sistēmas',\r\n        icon: 'pi pi-briefcase',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Realizācija',\r\n        icon: 'pi pi-cloud-upload',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Debitoru novērtēšana',\r\n        icon: 'pi pi-wallet',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Pamatlīdzekļi',\r\n        icon: 'pi pi-ticket',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'PL un inventāra inventarizācija',\r\n        icon: 'pi pi-warehouse',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Algas',\r\n        icon: 'pi pi-credit-card',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Darba laika plānošana',\r\n        icon: 'pi pi-calendar',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Avansa norēkini',\r\n        icon: 'pi pi-receipt',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Komandējumi',\r\n        icon: 'pi pi-directions-alt',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Nākamo periodu ieņēmumi/izdevumi',\r\n        icon: 'pi pi-money-bill',\r\n        items: [],\r\n      },\r\n      {\r\n        label: 'Vadības grāmatvedība',\r\n        icon: 'pi pi-briefcase',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n      {\r\n        label: 'Līgumi',\r\n        icon: 'pi pi-chart-bar',\r\n        items: [],\r\n        route: '#',\r\n      },\r\n    ],\r\n  },\r\n];\r\nexport const UserMenuItems = [\r\n  {\r\n    label: 'Profile',\r\n    route: '#',\r\n  },\r\n  {\r\n    label: 'Settings',\r\n    route: '#',\r\n  },\r\n  {\r\n    label: 'Logout',\r\n    route: '#',\r\n  },\r\n];\r\n","export const UserMenuItems = [\r\n  {\r\n    label: 'Profils',\r\n    // expanded: true,\r\n    items: [\r\n      {\r\n        label: 'Iestatījumi',\r\n        items: [],\r\n        type: 'material-symbols',\r\n        icon: 'pi pi-cog',\r\n        route: '',\r\n      },\r\n      {\r\n        label: 'Paroles maiņa',\r\n        items: [],\r\n        type: 'material-symbols',\r\n        icon: 'pi pi-key',\r\n        route: '',\r\n      },\r\n      {\r\n        label: 'Iziet',\r\n        items: [],\r\n        type: 'material-symbols',\r\n        icon: 'pi pi-sign-out',\r\n        route: '',\r\n      },\r\n    ],\r\n  },\r\n];\r\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Component, ViewChild, AfterViewInit, Input, Renderer2, OnInit, PLATFORM_ID, Inject } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { CLASSES } from './classes';\r\n\r\nimport { PRIME_NG_CONFIG } from 'primeng/config';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { MenuModule } from 'primeng/menu';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { InputIconModule } from 'primeng/inputicon';\r\n\r\nimport { LeftMenuComponent } from '../left-menu/left-menu.component';\r\nimport { UserMenuComponent } from '../user-menu/user-menu.component';\r\n//import { UniversalPreset, updateThemeMode } from '../../../theme/universal-preset';\r\nimport { Menu, MenuItem } from '../left-menu/menu.model';\r\nimport { UserMenuItems } from './user-menu.model';\r\n\r\nexport interface HeaderClasses {\r\n  container: string;\r\n  logoSection: {\r\n    wrapper: string;\r\n    menuButton: string;\r\n    logo: string;\r\n  };\r\n  searchSection: {\r\n    wrapper: string;\r\n    searchContainer: string;\r\n    iconField: string;\r\n    searchInput: string;\r\n    searchCloseButton: string;\r\n    searchToggleButton: string;\r\n    icon: string;\r\n  };\r\n  userSection: {\r\n    wrapper: string;\r\n    userInfo: {\r\n      container: string;\r\n      name: string;\r\n      avatar: string;\r\n      arrowIcon: string;\r\n      organization: string;\r\n    }\r\n  };\r\n}\r\n\r\n@Component({\r\n  selector: 'universal-header',\r\n  standalone: true,\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    InputTextModule,\r\n    MenuModule,\r\n    LeftMenuComponent,\r\n    UserMenuComponent,\r\n    IconFieldModule,\r\n    InputIconModule,\r\n  ],\r\n  providers: [{ provide: PRIME_NG_CONFIG, useValue: { ripple: true } }],\r\n  templateUrl: './header.template.html',\r\n})\r\nexport class HeaderComponent implements OnInit, AfterViewInit {\r\n  isDarkMode = false;\r\n  private isBrowser: boolean;\r\n\r\n  // Use the classes from the external file\r\n  readonly classes: HeaderClasses = CLASSES;\r\n\r\n  constructor(\r\n    private renderer: Renderer2,\r\n    @Inject(PLATFORM_ID) platformId: Object,\r\n    @Inject(PRIME_NG_CONFIG) private config: any\r\n  ) {\r\n    this.isBrowser = isPlatformBrowser(platformId);\r\n    if (this.isBrowser) {\r\n      this.isDarkMode = document.documentElement.classList.contains('dark');\r\n    }\r\n  }\r\n\r\n  toggleTheme() {\r\n    // Use the centralized theme toggle implementation\r\n    this.isDarkMode = !this.isDarkMode;\r\n\r\n    if (this.isBrowser) {\r\n      const html = document.documentElement;\r\n\r\n      // Toggle dark class\r\n      if (this.isDarkMode) {\r\n        html.classList.add('dark');\r\n      } else {\r\n        html.classList.remove('dark');\r\n      }\r\n\r\n      // Save preference\r\n      localStorage.setItem('universal-theme', this.isDarkMode ? 'dark' : 'light');\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (!this.isBrowser) return;\r\n\r\n    // Check for saved theme preference\r\n    const savedTheme = localStorage.getItem('universal-theme');\r\n\r\n    if (savedTheme) {\r\n      this.isDarkMode = savedTheme === 'dark';\r\n    } else {\r\n      // Check system preference if no saved preference\r\n      this.isDarkMode = window.matchMedia &&\r\n                        window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Ensure content_holder gets the default class when component loads\r\n    document.getElementsByTagName('html')[0].classList.add('h-full');\r\n    document.getElementsByTagName('body')[0].classList.add('p-[15px]');\r\n    document.getElementsByTagName('body')[0].classList.add('relative');\r\n    document.getElementsByTagName('body')[0].classList.add('h-full');\r\n    document.getElementById('content_holder')?.classList.add('lg:pl-[285px]');\r\n    document.getElementById('left-menu')?.classList.add('-left-[350px]');\r\n    document.getElementById('left-menu')?.classList.add('lg:left-[15px]');\r\n  }\r\n\r\n  @ViewChild('leftMenu') leftMenu: any;\r\n  @Input() items: MenuItem[] = [...Menu];\r\n\r\n  userMenuItems = [...UserMenuItems]; // Use the imported user menu items\r\n\r\n  toggleMenu() {\r\n    const leftMenu = document.getElementById('left-menu');\r\n    const contentHolder = document.getElementById('content_holder');\r\n    const screenWidth = window.innerWidth;\r\n\r\n    if (leftMenu) {\r\n      if (screenWidth < 1024) {\r\n        leftMenu.classList.toggle('-left-[350px]');\r\n      } else {\r\n        leftMenu.classList.toggle('lg:left-[15px]');\r\n      }\r\n    }\r\n\r\n    if (contentHolder) {\r\n      contentHolder.classList.toggle('lg:pl-[285px]');\r\n    }\r\n  }\r\n\r\n  // User menu is now handled by the UserMenuComponent\r\n\r\n  toggleSearch() {\r\n    console.log('Search toggled');\r\n    const search = document.getElementById('search');\r\n    const screenWidth = window.innerWidth;\r\n\r\n    if (search) {\r\n      // if (screenWidth < 1024) {\r\n      search.classList.toggle('-top-52');\r\n      search.classList.toggle('w-full');\r\n      //  search.classList.toggle('left-0');\r\n      //   search.classList.toggle('right-0');\r\n      search.classList.toggle('top-0');\r\n      //  search.classList.toggle('p-4');\r\n      //   search.classList.toggle('bg-white');\r\n      //  search.classList.toggle('z-50');\r\n      //   } else {\r\n      //    search.classList.toggle('lg:left-[15px]');\r\n      //  }\r\n    }\r\n  }\r\n}\r\n","<div [class]=\"classes.container\">\r\n  <div [class]=\"classes.logoSection.wrapper\">\r\n    <span #menuButton (click)=\"toggleMenu()\" [class]=\"classes.logoSection.menuButton\">\r\n    </span>\r\n\r\n    <img [class]=\"classes.logoSection.logo\" src=\"logo.png\" alt=\"logo\" />\r\n  </div>\r\n  <div [class]=\"classes.searchSection.wrapper\">\r\n    <div id=\"search\" [class]=\"classes.searchSection.searchContainer\">\r\n      <p-iconfield [class]=\"classes.searchSection.iconField\">\r\n        <p-inputicon styleClass=\"pi pi-search\" />\r\n        <input type=\"text\" pInputText placeholder=\"Meklēt\" [class]=\"classes.searchSection.searchInput\" />\r\n      </p-iconfield>\r\n      <div (click)=\"toggleSearch()\" [class]=\"classes.searchSection.searchCloseButton\">\r\n        <span [class]=\"classes.searchSection.icon + ' pi pi-times'\"></span>\r\n      </div>\r\n    </div>\r\n\r\n    <div (click)=\"toggleSearch()\" [class]=\"classes.searchSection.searchToggleButton\">\r\n      <span [class]=\"classes.searchSection.icon + ' pi pi-search'\"></span>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"flex items-center gap-2\">\r\n  <universal-user-menu [menuItems]=\"userMenuItems\"></universal-user-menu>\r\n  <button\r\n      (click)=\"toggleTheme()\"\r\n      class=\"flex items-center justify-center w-10 h-10 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors text-gray-800 dark:text-gray-200\"\r\n      [attr.aria-label]=\"isDarkMode ? 'Switch to light mode' : 'Switch to dark mode'\"\r\n    >\r\n      <i class=\"pi\" [ngClass]=\"isDarkMode ? 'pi-sun' : 'pi-moon'\"></i>\r\n    </button>\r\n    </div>\r\n</div>\r\n<div\r\n  class=\"absolute top-[73px] bottom-[15px] w-[270px] p-card p-1 shadow-lg lg:shadow-none z-50 border rounded-lg transition-all duration-300 ease-in-out\"\r\n  id=\"left-menu\">\r\n  <universal-left-menu [items]=\"items\"/>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\n/**\r\n * To use <iconify-icon> in your application, include the Iconify CDN script in your app's index.html:\r\n * <script src=\"https://code.iconify.design/iconify-icon/1.0.8/iconify-icon.min.js\"></script>\r\n * See https://docs.iconify.design/icon-components/web-component.html for details.\r\n */\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { IconClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\n\r\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\r\n\r\n@Component({\r\n    selector: \"universal-icon\",\r\n    templateUrl: \"./icon.template.html\",\r\n    standalone: true,\r\n    imports: [CommonModule],\r\n    schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class UniversalIconComponent {\r\n    @Input() type: \"primeng\" | \"material-symbols\" | \"iconify\" = \"primeng\";\r\n    @Input() icon: string = \"\";\r\n    @Input() class: string = \" \";\r\n    @Input() size: string = \"12px\";\r\n    @Input() color: string = \"black\";\r\n    @Input() darkMode: boolean = false; // Allow explicit dark mode setting\r\n\r\n    // Use the classes from the external file\r\n    classes: IconClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.icon) {\r\n      this.classes = { ...defaultClasses, ...this.theme.icon };\r\n    }\r\n  }\r\n    \r\n    /**\r\n     * Detects if dark mode is active based on CSS class or media query\r\n     */\r\n    get isDarkMode(): boolean {\r\n        // Check if dark mode is explicitly set via input\r\n        if (this.darkMode) {\r\n            return true;\r\n        }\r\n        \r\n        // Check if document has dark-theme class on body or html\r\n        if (typeof document !== 'undefined') {\r\n            if (document.body.classList.contains('dark-theme') || \r\n                document.documentElement.classList.contains('dark-theme')) {\r\n                return true;\r\n            }\r\n            \r\n            // Check system preference if available\r\n            if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n                return true;\r\n            }\r\n        }\r\n        \r\n        return false;\r\n    }\r\n    \r\n    /**\r\n     * Gets the appropriate icon color based on theme\r\n     */\r\n    getIconColor(): string {\r\n        // In dark mode, ensure proper contrast\r\n        if (this.isDarkMode) {\r\n            // If color is explicitly set to something other than black/dark colors, keep it\r\n            if (this.color && !['black', '#000', '#000000', 'rgb(0,0,0)', 'rgba(0,0,0,1)'].includes(this.color)) {\r\n                // If it's already a light color or our primary color, keep it\r\n                if (this.color === '#cc0099' || this.isLightColor(this.color)) {\r\n                    return this.color;\r\n                }\r\n                // Otherwise, use white for better contrast in dark mode\r\n                return '#ffffff';\r\n            }\r\n            // Default to white for dark backgrounds\r\n            return '#ffffff';\r\n        }\r\n        \r\n        // In light mode, just use the specified color\r\n        return this.color || 'black';\r\n    }\r\n    \r\n    /**\r\n     * Helper to determine if a color is light (for contrast purposes)\r\n     */\r\n    private isLightColor(color: string): boolean {\r\n        // Simple check for obviously light colors\r\n        if (['white', '#fff', '#ffffff', 'rgb(255,255,255)', 'rgba(255,255,255,1)'].includes(color)) {\r\n            return true;\r\n        }\r\n        \r\n        // For hex colors, do a rough luminance check\r\n        if (color.startsWith('#')) {\r\n            const hex = color.replace('#', '');\r\n            const r = parseInt(hex.length === 3 ? hex[0] + hex[0] : hex.substring(0, 2), 16);\r\n            const g = parseInt(hex.length === 3 ? hex[1] + hex[1] : hex.substring(2, 4), 16);\r\n            const b = parseInt(hex.length === 3 ? hex[2] + hex[2] : hex.substring(4, 6), 16);\r\n            \r\n            // Calculate perceived brightness (ITU-R BT.709)\r\n            const brightness = (r * 0.299 + g * 0.587 + b * 0.114) / 255;\r\n            return brightness > 0.5;\r\n        }\r\n        \r\n        return false;\r\n    }\r\n}\r\n","<span *ngIf=\"type === 'primeng'\" \r\n    [class]=\"classes.types.primeng + ' ' + classes.base + ' ' + (isDarkMode ? classes.dark : '') + ' ' + class\" \r\n    [ngClass]=\"icon\"\r\n    [ngStyle]=\"{'font-size': size, color: getIconColor()}\"></span>\r\n<iconify-icon *ngIf=\"type === 'iconify' && icon\" \r\n    [icon]=\"icon\"\r\n    [width]=\"size\"\r\n    [height]=\"size\"\r\n    [style.color]=\"getIconColor()\"\r\n    [class]=\"classes.types.iconify + ' ' + classes.base + ' ' + (isDarkMode ? classes.dark : '') + ' ' + class\">\r\n</iconify-icon>\r\n<span *ngIf=\"type === 'material-symbols'\" \r\n    [class]=\"classes.types.materialSymbols + ' ' + classes.base + ' ' + (isDarkMode ? classes.dark : '') + ' ' + class\"\r\n    [ngStyle]=\"{'font-size': size, color: getIconColor()}\">{{ icon }}</span>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { defaultClasses } from './classes';\r\nimport type { ConfirmDialogClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\nexport interface MessageProp {\r\n  severity?: string;\r\n  summary?: string;\r\n  detail?: string;\r\n  life?: number;\r\n}\r\n\r\n\r\n\r\nexport interface ButtonProp {\r\n  label?: string;\r\n  icon?: string;\r\n  outlined?: boolean;\r\n  size?: \"small\" | \"large\" | undefined;\r\n  message?: MessageProp;\r\n  action?: (e?: any) => void;\r\n}\r\n\r\nexport class ConfirmDialogModel {\r\n  header: string = '';\r\n  message: string = '';\r\n  buttons: ButtonProp[] = [];\r\n}\r\n\r\n@Component({\r\n  selector: 'universal-confirm-dialog',\r\n  templateUrl: './confirm-dialog-template.html',\r\n  standalone: true,\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    ConfirmDialog,\r\n    ToastModule,\r\n    ButtonModule\r\n  ],\r\n  providers: [ConfirmationService, MessageService],\r\n})\r\nexport class ConfirmDialogComponent {\r\n  @Input() dialogForm: ConfirmDialogModel = new ConfirmDialogModel();\r\n  @Input() buttonText: string = 'Save';\r\n\r\n  @Output() buttonClickedEvent = new EventEmitter<ButtonProp>();\r\n\r\n  buttonClicked?: ButtonProp;\r\n\r\n    classes: ConfirmDialogClasses = defaultClasses;\r\n\r\n  constructor(\r\n    private confirmationService: ConfirmationService,\r\n    private messageService: MessageService,\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.confirmDialog) {\r\n      this.classes = { ...defaultClasses, ...this.theme.confirmDialog };\r\n    }\r\n  }\r\n\r\n  onButtonAction(button: ButtonProp): void {\r\n    if (button.message) {\r\n      this.messageService.add(button.message);\r\n    }\r\n    if (button.action) {\r\n      button.action();\r\n    }\r\n    this.buttonClicked = button;\r\n    this.buttonClickedEvent.emit(button);\r\n    this.close();\r\n  }\r\n\r\n  confirm(): void {\r\n    this.dialogForm = this.dialogForm || new ConfirmDialogModel();\r\n    this.dialogForm.message = this.dialogForm.message || 'Please confirm to proceed.';\r\n    this.dialogForm.header = this.dialogForm.header || 'Confirmation';\r\n\r\n    if (!this.dialogForm.buttons.length) {\r\n      this.dialogForm.buttons = [\r\n        {\r\n          label: 'Confirm',\r\n          icon: 'pi pi-check',\r\n          size: 'small',\r\n          message: {\r\n            severity: 'info',\r\n            summary: 'Confirmed',\r\n            detail: 'You have accepted',\r\n            life: 3000,\r\n          },\r\n        },\r\n        {\r\n          label: 'Cancel',\r\n          icon: 'pi pi-times',\r\n          outlined: true,\r\n          size: 'small',\r\n          message: {\r\n            severity: 'error',\r\n            summary: 'Rejected',\r\n            detail: 'You have rejected',\r\n            life: 3000,\r\n          },\r\n        },\r\n      ];\r\n    }\r\n\r\n    this.confirmationService.confirm(this.dialogForm);\r\n  }\r\n\r\n  close(): void {\r\n    this.confirmationService.close();\r\n  }\r\n}\r\n","<div [class]=\"classes.container\">\r\n  <p-toast></p-toast>\r\n  <p-confirmdialog #cd [styleClass]=\"classes.dialog\">\r\n    <ng-template pTemplate=\"message\">\r\n      <div [class]=\"classes.message\">{{ dialogForm?.message }}</div>\r\n    </ng-template>\r\n    <ng-template pTemplate=\"footer\">\r\n      <div [class]=\"classes.footer\">\r\n        <ng-container *ngFor=\"let btn of dialogForm?.buttons\">\r\n          <div [class]=\"classes.button.container\">\r\n            <p-button\r\n              (click)=\"onButtonAction(btn)\"\r\n              [label]=\"btn.label\"\r\n              [icon]=\"btn.icon\"\r\n              [outlined]=\"btn.outlined\"\r\n              [size]=\"btn.size\"\r\n              [styleClass]=\"btn.outlined ? classes.button.cancel : classes.button.confirm\"\r\n            ></p-button>\r\n          </div>\r\n        </ng-container>\r\n      </div>\r\n    </ng-template>\r\n  </p-confirmdialog>\r\n  <p-button (click)=\"confirm()\" [label]=\"buttonText\" [styleClass]=\"classes.triggerButton\"></p-button>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UniversalIconComponent } from '../icon/icon.component';\r\nimport { BreadcrumbItem, HomeItem } from './breadcrumb.model';\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { BreadcrumbClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\n\r\n@Component({\r\n  selector: 'universal-breadcrumb',\r\n  templateUrl: './breadcrumb.template.html',\r\n  standalone: true,\r\n  imports: [\r\n    BreadcrumbModule,\r\n    CommonModule,\r\n    UniversalIconComponent\r\n  ]\r\n})\r\nexport class UniversalBreadcrumbComponent {\r\n  @Input() items: BreadcrumbItem[] = [];\r\n  @Input() home: HomeItem = { icon: 'pi pi-home', route: '/' };\r\n  @Input() styleClass: string = '';\r\n  \r\n  // Use the classes from the external file\r\n  classes: BreadcrumbClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.breadcrumb) {\r\n      this.classes = { ...defaultClasses, ...this.theme.breadcrumb };\r\n    }\r\n  }\r\n\r\n  // Output event emitter for breadcrumb navigation clicks\r\n  @Output() navigationClick: EventEmitter<BreadcrumbItem> = new EventEmitter<BreadcrumbItem>();\r\n\r\n  onBreadcrumbClick(item: BreadcrumbItem, event: Event): void {\r\n    event.preventDefault();\r\n    this.navigationClick.emit(item);\r\n  }\r\n}\r\n","<p-breadcrumb\r\n    [model]=\"items\"\r\n    [home]=\"home\"\r\n    [styleClass]=\"classes.container + ' ' + styleClass\">\r\n    <ng-template pTemplate=\"item\" let-item>\r\n      <ng-container *ngIf=\"!item.isLast; else lastBreadcrumb\">\r\n        <!-- For all items except the last one -->\r\n        <ng-container *ngIf=\"item.route; else urlItem\">\r\n          <!-- If the item has a route -->\r\n          <a [class]=\"classes.link\" (click)=\"onBreadcrumbClick(item, $event)\">\r\n            <span [ngClass]=\"[item.icon ? item.icon : '', classes.text.default]\"></span>\r\n            <span [class]=\"classes.text.link\">{{ item.label }}</span>\r\n          </a>\r\n        </ng-container>\r\n        <ng-template #urlItem>\r\n          <!-- If the item has a URL -->\r\n          <a [href]=\"item.url\" [class]=\"classes.link\" (click)=\"onBreadcrumbClick(item, $event)\">\r\n            <span [ngClass]=\"[item.icon ? item.icon : '', classes.text.default]\"></span>\r\n            <span [class]=\"classes.text.link\">{{ item.label }}</span>\r\n          </a>\r\n        </ng-template>\r\n      </ng-container>\r\n      <ng-template #lastBreadcrumb>\r\n        <!-- For the last item, render as plain text with current style -->\r\n        <span [ngClass]=\"[item.icon ? item.icon : '', classes.text.default]\"></span>\r\n        <span [class]=\"classes.text.current\">{{ item.label }}</span>\r\n      </ng-template>\r\n    </ng-template>\r\n</p-breadcrumb>\r\n\r\n","// task.component.ts\r\nimport { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CardModule } from 'primeng/card';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n  selector: 'universal-info-card-widget',\r\n  standalone: true,\r\n  imports: [CardModule, CommonModule, ButtonModule],\r\n  templateUrl: './info-card.template.html',\r\n})\r\nexport class InfoCardWidget {\r\n  @Input() title: string = '';\r\n  @Input() icon: string = '';\r\n  @Input() value: string = '';\r\n  constructor() { \r\n    console.log('InfoCardWidget initialized',this.title,this.icon,this.value);\r\n  } // Constructor can be omitted if not needed\r\n}\r\n","<p-card>\r\n  <ng-template #content>\r\n    <div class=\"flex justify-between gap-5\">\r\n      <div>\r\n        <span class=\"block text-muted-color font-medium mb-2\">{{ title }}</span>\r\n        <div class=\"text-surface-900 font-bold text-3xl\">{{ value }}</div>\r\n      </div>\r\n      <div><i [class]=\"icon\" class=\"!text-xl\"></i></div>\r\n    </div>\r\n  </ng-template>\r\n</p-card>","import {\r\n    ApplicationRef,\r\n    ComponentFactoryResolver,\r\n    ComponentRef,\r\n    EmbeddedViewRef,\r\n    Injectable,\r\n    Injector,\r\n    EventEmitter\r\n  } from '@angular/core';\r\n  \r\n  @Injectable({\r\n    providedIn: 'root'\r\n  })\r\n  export class DynamicComponentService {\r\n    constructor(\r\n      private injector: Injector,\r\n      private appRef: ApplicationRef,\r\n      private componentFactoryResolver: ComponentFactoryResolver\r\n    ) {}\r\n  \r\n    /**\r\n     * Dynamically creates a component, sets its @Input properties, and attaches it to the body.\r\n     * @param component - The component to create.\r\n     * @param inputs - An object with key/value pairs to assign to the component's @Input properties.\r\n     * @returns A reference to the created component.\r\n     */\r\n    openComponent<T>(component: any, inputs: { [key: string]: any }): ComponentRef<T> {\r\n      // Create the component factory\r\n      const factory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n      // Create the component using a temporary injector\r\n      const componentRef = factory.create(this.injector) as ComponentRef<T>;\r\n  \r\n      // Assign input properties\r\n      Object.keys(inputs).forEach((inputName: string) => {\r\n        (componentRef.instance as any)[inputName] = inputs[inputName];\r\n        console.log(`Setting input ${inputName} to ${inputs[inputName]}`);\r\n      });\r\n  \r\n      // Attach component view to the application\r\n      this.appRef.attachView(componentRef.hostView);\r\n  \r\n      // Get DOM element from component\r\n      const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n      document.body.appendChild(domElem);\r\n  \r\n      return componentRef;\r\n    }\r\n    InitSilentComponent<T>(component: any, inputs: { [key: string]: any }): ComponentRef<T> {\r\n        // Create the component factory\r\n        const factory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n        // Create the component using a temporary injector\r\n        const componentRef = factory.create(this.injector) as ComponentRef<T>;\r\n    \r\n        // // Assign input properties\r\n        // Object.keys(inputs).forEach((inputName: string) => {\r\n        //   (componentRef.instance as any)[inputName] = inputs[inputName];\r\n        //   console.log(`Setting input ${inputName} to ${inputs[inputName]}`);\r\n        // });\r\n    //     // Attach component view to the application\r\n    //   this.appRef.attachView(componentRef.hostView);\r\n  \r\n        return componentRef;\r\n      }\r\n  \r\n    /**\r\n     * Binds event handlers to a component's output properties.\r\n     * @param componentRef - The component reference.\r\n     * @param eventBindings - Map of event names to handler functions.\r\n     */\r\n    bindEvents<T>(componentRef: ComponentRef<T>, eventBindings: { [eventName: string]: (data: any) => void }): void {\r\n      if (!eventBindings) return;\r\n      \r\n      Object.keys(eventBindings).forEach(eventName => {\r\n        const handler = eventBindings[eventName];\r\n        const outputProp = (componentRef.instance as any)[eventName];\r\n        \r\n        if (outputProp instanceof EventEmitter) {\r\n          outputProp.subscribe((data: any) => {\r\n            handler(data);\r\n          });\r\n        }\r\n      });\r\n    }\r\n  \r\n    /**\r\n     * Destroys a dynamically created component.\r\n     * @param componentRef - The component reference to destroy.\r\n     */\r\n    closeComponent<T>(componentRef: ComponentRef<T>): void {\r\n      this.appRef.detachView(componentRef.hostView);\r\n      componentRef.destroy();\r\n    }\r\n  }\r\n  \r\n  export function getValueFromPath(obj: any, path: string): any {\r\n    return path.split('.').reduce((acc, part) => acc && acc[part], obj);\r\n  }\r\n  \r\n  declare global {\r\n    interface EventTarget {\r\n      value?: string;\r\n      selectedIndex?: number;\r\n    }\r\n  }","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n  selector: 'universal-button',\r\n  templateUrl: './button.template.html',\r\n  standalone: true,\r\n  imports: [ButtonModule]\r\n})\r\nexport class ButtonComponent {\r\n  @Input() label: string = '';\r\n  @Input() severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast';\r\n  @Input() icon?: string;\r\n  @Input() iconPos: 'left' | 'right' = 'left';\r\n  @Input() disabled: boolean = false;\r\n  @Input() loading: boolean = false;\r\n  @Input() outlined: boolean = false;\r\n  @Input() raised: boolean = false;\r\n  @Input() text: boolean = false;\r\n  @Input() rounded: boolean = false;\r\n  @Input() size: 'small' | 'normal' | 'large' = 'normal';\r\n  @Input() class?: string;\r\n  @Output() click = new EventEmitter<void>();\r\n\r\n  onClick(event?: Event) {\r\n    if (event) {\r\n      event.stopPropagation();\r\n    }\r\n    \r\n    if (!this.disabled && !this.loading) {\r\n      this.click.emit();\r\n    }\r\n  }\r\n}\r\n","<p-button\r\n  [label]=\"label\"\r\n  [severity]=\"severity\"\r\n  [icon]=\"icon\"\r\n  [iconPos]=\"iconPos\"\r\n  [disabled]=\"disabled\"\r\n  [loading]=\"loading\"\r\n  [outlined]=\"outlined\"\r\n  [raised]=\"raised\"\r\n  [text]=\"text\"\r\n  [rounded]=\"rounded\"\r\n  [class]=\"'p-button-' + size + ' ' + (class || '')\"\r\n  (onClick)=\"onClick($event)\">\r\n</p-button>\r\n","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'universal-input',\r\n  templateUrl: './input.template.html',\r\n  standalone: true,\r\n  imports: [InputTextModule, CommonModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UniversalInputComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class UniversalInputComponent implements ControlValueAccessor {\r\n  @Input() type: string = 'text';\r\n  @Input() label: string = 'Some label';\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() class: string = '';\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() placeholder: string = '';\r\n\r\n  private _value: any = '';\r\n\r\n  // Two-way binding getter and setter\r\n  @Input()\r\n  get value(): any {\r\n    return this._value;\r\n  }\r\n  set value(newVal: any) {\r\n    if (newVal !== this._value) {\r\n      this._value = newVal;\r\n      this.valueChange.emit(this._value);\r\n      this.onChange(this._value);\r\n    }\r\n  }\r\n\r\n  // Output for two-way binding\r\n  @Output() valueChange = new EventEmitter<string>();\r\n\r\n  // Common event outputs\r\n  @Output() focusEvent = new EventEmitter<FocusEvent>();\r\n  @Output() blurEvent = new EventEmitter<FocusEvent>();\r\n  @Output() inputEvent = new EventEmitter<Event>();\r\n  @Output() keyupEvent = new EventEmitter<KeyboardEvent>();\r\n  @Output() keydownEvent = new EventEmitter<KeyboardEvent>();\r\n  @Output() changeEvent = new EventEmitter<Event>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: any): void {\r\n    if (value !== undefined && value !== null) {\r\n      this._value = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  // Handler methods to re-emit events\r\n  onFocus(event: FocusEvent) {\r\n    this.focusEvent.emit(event);\r\n  }\r\n\r\n  onBlur(event: FocusEvent) {\r\n    this.blurEvent.emit(event);\r\n    this.onTouched();\r\n  }\r\n\r\n  onInput(event: Event) {\r\n    this.inputEvent.emit(event);\r\n  }\r\n\r\n  onKeyup(event: KeyboardEvent) {\r\n    this.keyupEvent.emit(event);\r\n  }\r\n\r\n  onKeydown(event: KeyboardEvent) {\r\n    this.keydownEvent.emit(event);\r\n  }\r\n\r\n  onChangeEvent(event: Event) {\r\n    this.changeEvent.emit(event);\r\n  }\r\n  onInputEvent(event: Event) {\r\n    const newValue = (event.target as HTMLInputElement).value;\r\n    this.value = newValue; // will emit valueChange and call onChange\r\n    this.inputEvent.emit(event);\r\n  }\r\n}\r\n","<div class=\"flex\" [ngClass]=\"{'flex-col': labelPosition === 'top', 'flex-row': labelPosition === 'left'}\" [class]=\"class\">\r\n  @if (label) {\r\n    <label [for]=\"label\" class=\"font-semibold\" [ngClass]=\"{'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left'}\">{{ label }}@if (required) {<span class=\"text-red-600 ml-1\">*</span>}</label>\r\n  }\r\n  <input\r\n  pInputText\r\n  [type]=\"type\"\r\n  [disabled]=\"disabled\"\r\n  [required]=\"required\"\r\n  [placeholder]=\"placeholder\"\r\n  [value]=\"value\"\r\n  (input)=\"onInputEvent($event)\"\r\n  (focus)=\"onFocus($event)\"\r\n  (blur)=\"onBlur($event)\"\r\n  (keyup)=\"onKeyup($event)\"\r\n  (keydown)=\"onKeydown($event)\"\r\n  (change)=\"onChangeEvent($event)\"\r\n/>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TextareaModule } from 'primeng/textarea';\r\n\r\n@Component({\r\n  selector: 'universal-textarea',\r\n  templateUrl: './textarea.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, TextareaModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => TextareaComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class TextareaComponent implements ControlValueAccessor {\r\n  private _value: string = '';\r\n  \r\n  @Input()\r\n  get value(): string {\r\n    return this._value;\r\n  }\r\n  set value(val: string) {\r\n    if (val !== this._value) {\r\n      this._value = val;\r\n      this.valueChange.emit(this._value);\r\n      this.onChange(this._value);\r\n    }\r\n  }\r\n  \r\n  @Input() rows: number = 3;\r\n  @Input() cols: number | null = null;\r\n  @Input() maxLength: number | null = null;\r\n  @Input() placeholder?: string;\r\n  @Input() disabled: boolean = false;\r\n  @Input() readonly: boolean = false;\r\n  @Input() showCounter: boolean = false;\r\n  @Input() class?: string;\r\n  @Input() label?: string;\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: string): void {\r\n    if (value !== undefined) {\r\n      this._value = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(value: string) {\r\n    this.valueChange.emit(value);\r\n    this.onChange(value);\r\n  }\r\n\r\n  onChangeEvent(event: Event) {\r\n    const value = (event.target as HTMLTextAreaElement).value;\r\n    this.change.emit(value);\r\n  }\r\n\r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n\r\n  get currentLength(): number {\r\n    return this.value?.length || 0;\r\n  }\r\n}\r\n","<div class=\"flex\" [ngClass]=\"{'flex-col': labelPosition === 'top', 'flex-row': labelPosition === 'left'}\" [class]=\"class || ''\">\r\n  @if (label) {\r\n    <label [for]=\"label\" class=\"font-semibold\" [ngClass]=\"{'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left'}\">{{ label }}@if (required) {<span class=\"text-red-600 ml-1\">*</span>}</label>\r\n  }\r\n  <textarea\r\n    pTextarea\r\n    [(ngModel)]=\"value\"\r\n    [rows]=\"rows\"\r\n    [cols]=\"cols\"\r\n    [maxlength]=\"maxLength\"\r\n    [placeholder]=\"placeholder\"\r\n    [disabled]=\"disabled\"\r\n    [readonly]=\"readonly\"\r\n    [required]=\"required\"\r\n    [class]=\"labelPosition === 'left' ? 'w-full' : ''\"\r\n    (ngModelChange)=\"onModelChange($event)\"\r\n    (change)=\"onChangeEvent($event)\"\r\n    (blur)=\"onBlur()\">\r\n  </textarea>\r\n  <div>\r\n    <small *ngIf=\"showCounter && maxLength\" class=\"p-text-secondary\" >{{currentLength}}/{{maxLength}}</small>\r\n  </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\n\r\n@Component({\r\n  selector: 'universal-checkbox',\r\n  templateUrl: './checkbox.template.html',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    CheckboxModule,\r\n    FormsModule\r\n  ],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => CheckboxComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class CheckboxComponent implements ControlValueAccessor {\r\n  @Input() label: string = '';\r\n  @Input() value: any;\r\n  \r\n  private _checked: boolean = false;\r\n  \r\n  @Input()\r\n  get checked(): boolean {\r\n    return this._checked;\r\n  }\r\n  set checked(val: boolean) {\r\n    if (val !== this._checked) {\r\n      this._checked = val;\r\n      this.checkedChange.emit(this._checked);\r\n      this.onChange(this._checked);\r\n    }\r\n  }\r\n  \r\n  @Output() checkedChange = new EventEmitter<boolean>();\r\n  @Input() disabled: boolean = false;\r\n  @Input() binary: boolean = true;\r\n  @Input() variant: 'filled' | 'outlined' = 'filled';\r\n  @Input() class: string = '';\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: boolean): void {\r\n    if (value !== undefined) {\r\n      this._checked = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(checked: boolean) {\r\n    this.checked = checked;\r\n    this.checkedChange.emit(checked);\r\n    this.onChange(checked);\r\n  }\r\n  \r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n  <p-checkbox\r\n    [(ngModel)]=\"checked\"\r\n    (ngModelChange)=\"onModelChange($event)\"\r\n    (blur)=\"onBlur()\"\r\n    [binary]=\"binary\"\r\n    [value]=\"value\"\r\n    [disabled]=\"disabled\"\r\n    [variant]=\"variant\"\r\n    [class]=\"class\">\r\n  </p-checkbox>\r\n  <label class=\"ml-2\" *ngIf=\"label\">{{ label }}</label>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n\r\nexport interface RadioOption {\r\n  label: string;\r\n  value: any;\r\n  disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'universal-radio-button-group',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, RadioButtonModule],\r\n  templateUrl: './radio-button-group.template.html',\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => RadioButtonGroupComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class RadioButtonGroupComponent implements ControlValueAccessor {\r\n  @Input() name = '';\r\n  @Input() options: RadioOption[] = [];\r\n  @Input() disabled = false;\r\n  @Input() variant: 'filled' | 'outlined' = 'outlined';\r\n  @Input() direction: 'horizontal' | 'vertical' = 'vertical';\r\n  @Input() label?: string;\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n  \r\n  private _selectedValue: any;\r\n  \r\n  @Input()\r\n  get selectedValue(): any {\r\n    return this._selectedValue;\r\n  }\r\n  set selectedValue(val: any) {\r\n    if (val !== this._selectedValue) {\r\n      this._selectedValue = val;\r\n      this.selectedValueChange.emit(this._selectedValue);\r\n      this.onChange(this._selectedValue);\r\n    }\r\n  }\r\n  \r\n  @Input() isError = false;\r\n  @Output() selectedValueChange = new EventEmitter<any>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: any): void {\r\n    if (value !== undefined) {\r\n      this._selectedValue = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onValueChange(value: any) {\r\n    this.selectedValue = value;\r\n    this.selectedValueChange.emit(value);\r\n    this.onChange(value);\r\n  }\r\n  \r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}\r\n","<div>\r\n  <!-- Label if provided -->\r\n  <div *ngIf=\"label\" [ngClass]=\"{'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left'}\">\r\n    <label class=\"font-semibold\">{{ label }}\r\n      <span *ngIf=\"required\" class=\"text-red-600 ml-1\">*</span>\r\n    </label>\r\n  </div>\r\n  \r\n  <div [class]=\"direction === 'horizontal' ? 'flex flex-row gap-3' : 'flex flex-col gap-2'\">\r\n    <div *ngFor=\"let option of options; let i = index\" class=\"flex items-center\">\r\n      <p-radioButton\r\n        [name]=\"name\"\r\n        [value]=\"option.value\"\r\n        [inputId]=\"name + '_' + i\"\r\n        [disabled]=\"option.disabled || disabled\"\r\n        [variant]=\"variant\"\r\n        [(ngModel)]=\"selectedValue\"\r\n        (ngModelChange)=\"onValueChange($event)\"\r\n        (blur)=\"onBlur()\">\r\n      </p-radioButton>\r\n      <label [for]=\"name + '_' + i\" [class]=\"{'ml-2': true, 'text-red-600': isError}\">{{ option.label }}</label>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SelectModule } from 'primeng/select';\r\n\r\n@Component({\r\n  selector: 'universal-select',\r\n  templateUrl: './select.component.html',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, SelectModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UniversalSelectComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class UniversalSelectComponent implements ControlValueAccessor {\r\n  private _value: any;\r\n  \r\n  @Input()\r\n  get value(): any {\r\n    return this._value;\r\n  }\r\n  set value(val: any) {\r\n    if (val !== this._value) {\r\n      this._value = val;\r\n      this.valueChange.emit(this._value);\r\n      this.onChange(this._value);\r\n    }\r\n  }\r\n  \r\n  @Input() options: any[] = [];\r\n  @Input() optionLabel?: string;\r\n  @Input() optionValue?: string;\r\n  @Input() optionDisabled?: string;\r\n  @Input() placeholder?: string;\r\n  @Input() disabled: boolean = false;\r\n  @Input() filter: boolean = false;\r\n  @Input() showClear: boolean = true;\r\n  @Input() class: string = '';\r\n  @Input() label?: string;\r\n  @Input() labelPosition?: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n\r\n  @Output() valueChange = new EventEmitter<any>();\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: any): void {\r\n    if (value !== undefined) {\r\n      this._value = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(value: any) {\r\n    this.value = value;\r\n    this.valueChange.emit(value);\r\n  }\r\n\r\n  onChangeEvent(event: any) {\r\n    this.change.emit(event.value);\r\n  }\r\n  \r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}\r\n","<div class=\"flex\" [ngClass]=\"{'flex-col': labelPosition === 'top', 'flex-row': labelPosition === 'left'}\" [class]=\"class\">\r\n  @if (label) {\r\n    <label [for]=\"label\" class=\"font-semibold\" [ngClass]=\"{'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left'}\">{{ label }}@if (required) {<span class=\"text-red-600 ml-1\">*</span>}</label>\r\n  }\r\n<p-select\r\n  [(ngModel)]=\"value\"\r\n  [options]=\"options\"\r\n  [optionLabel]=\"optionLabel\"\r\n  [optionValue]=\"optionValue\"\r\n  [optionDisabled]=\"optionDisabled\"\r\n  [placeholder]=\"placeholder\"\r\n  [disabled]=\"disabled\"\r\n  [filter]=\"filter\"\r\n  [showClear]=\"showClear\"\r\n  (ngModelChange)=\"onModelChange($event)\"\r\n  (onChange)=\"onChangeEvent($event)\"\r\n  (onBlur)=\"onBlur()\">\r\n</p-select>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  SimpleChanges,\r\n  forwardRef\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  FormsModule,\r\n  NG_VALUE_ACCESSOR,\r\n  ReactiveFormsModule\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'universal-select-new',\r\n  templateUrl: './select.component.html',\r\n  standalone: true,\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UniversalSelectComponentNew),\r\n      multi: true\r\n    }\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    FormsModule\r\n  ]\r\n})\r\nexport class UniversalSelectComponentNew implements ControlValueAccessor {\r\n\r\n  \r\n  // Detect click outside to close dropdown\r\n  @HostListener('document:click', ['$event.target'])\r\n  onClickOutside(target: HTMLElement): void {\r\n    if (!this._eref.nativeElement.contains(target)) {\r\n      this.dropdownOpen = false;\r\n    }\r\n  }\r\n  @HostListener('document:keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent): void {\r\n    if (this.dropdownOpen && (event.key === 'Escape' || event.key === 'Tab')) {\r\n      this.dropdownOpen = false;\r\n    }\r\n  }\r\n  \r\n\r\n  /**\r\n   * If true, enables multi-select mode (array values).\r\n   */\r\n  @Input() multiple: boolean = false;\r\n  private _value: any;\r\n\r\n  \r\n  @Input()\r\n  get value(): any {\r\n    return this._value;\r\n  }\r\n  set value(val: any) {\r\n    if (val !== this._value) {\r\n      this._value = val;\r\n      this.onChange(val);\r\n      this.valueChange.emit(val);\r\n\r\n\r\n    }\r\n  }\r\n  public formatedValue = ''\r\n\r\n  @Input() options: any[] = [];\r\n  @Input() optionLabel: string = 'label';\r\n  @Input() optionValue: string = 'value';\r\n  @Input() optionDisabled?: string;\r\n  @Input() placeholder?: string;\r\n  @Input() disabled: boolean = false;\r\n  @Input() class: string = '';\r\n  @Input() label?: string;\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n  @Input() displayValue: boolean = false;\r\n  @Input() initValue: any;\r\n  public changed = false\r\n\r\n  @Output() valueChange = new EventEmitter<any>();\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  // ControlValueAccessor\r\n  onChange: any = () => { };\r\n  onTouched: any = () => { };\r\n  constructor(private _eref: ElementRef) { \r\n    \r\n  }\r\n  // ngOnInit(){\r\n  //   console.log('init value for sel',this.initValue)\r\n  //   this.value=this.initValue.value\r\n  // }\r\n\r\n\r\n  \r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['initValue'] && changes['initValue'].currentValue) {\r\n      const val = changes['initValue'].currentValue;\r\n      this.value = this.optionValue ? val[this.optionValue] : val;\r\n    }\r\n  }\r\n  writeValue(value: any): void {\r\n    this._value = value;\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * Handles both native select and ngModelChange events.\r\n   * Defensive: Only accesses .value if defined; emits a valid value always.\r\n   */\r\n  // onModelChange(event: any) {\r\n  //   let value: any;\r\n  //   // If event is a native select event\r\n  //   if (event && event.target && typeof event.target.value !== 'undefined') {\r\n  //     value = event.target.value;\r\n  //   } else if (event && typeof event === 'object' && this.optionValue) {\r\n  //     // If event is an option object (ngModelChange with [ngValue])\r\n  //     value = event[this.optionValue];\r\n  //   } else {\r\n  //     value = event ?? null;\r\n  //   }\r\n  //   this.value = value;\r\n  //   this.change.emit(value);\r\n\r\n  // }\r\n\r\n  onBlur() {\r\n    this.onTouched();\r\n    //console.log('init value for sel', this.initValue)\r\n    this.value = this.initValue.value\r\n  }\r\n\r\n  public dropdownOpen = false;\r\n\r\n  getSelectedLabel(): string | null {\r\n    const selected = this.getOptionFromValue(this._value);\r\n    return selected\r\n      ? (this.optionLabel ? selected[this.optionLabel] : selected)\r\n      : null;\r\n  }\r\n\r\n  getOptionFromValue(value: any): any {\r\n    if (!value || !this.options?.length) return null;\r\n    return this.options.find(opt =>\r\n      this.optionValue ? opt[this.optionValue] === value : opt === value\r\n    );\r\n  }\r\n\r\n  selectOption(option: any) {\r\n    if (this.optionDisabled && option[this.optionDisabled]) return;\r\n    const newValue = this.optionValue ? option[this.optionValue] : option;\r\n    this.value = newValue;\r\n    this.changed = true;\r\n    this.dropdownOpen = false;\r\n    this.change.emit(newValue);\r\n    this.onTouched();\r\n  }\r\nonModelChange(event: any) {\r\n  let selectedOption = this.getOptionFromValue(event);\r\n  if (selectedOption) {\r\n    this.selectOption(selectedOption);\r\n  } else {\r\n    this.value = null;\r\n    this.change.emit(null);\r\n  }\r\n}\r\n  \r\n\r\n}\r\n","<div\r\n  class=\"flex\"\r\n  [ngClass]=\"{\r\n    'flex-col': labelPosition === 'top',\r\n    'items-center gap-2': labelPosition === 'left'\r\n  }\"\r\n  [class]=\"class\"\r\n>\r\n  @if (label) {\r\n    <label\r\n      class=\"font-semibold text-sm\"\r\n      [ngClass]=\"{\r\n        'mb-1': labelPosition === 'top',\r\n        'pr-2': labelPosition === 'left'\r\n      }\"\r\n    >\r\n      {{ label }}\r\n      @if (required) {\r\n        <span class=\"text-red-600 ml-1\">*</span>\r\n      }\r\n    </label>\r\n  }\r\n\r\n  <select\r\n    class=\"w-full border rounded-md px-3 py-2 bg-white text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100\"\r\n    [disabled]=\"disabled\"\r\n    [ngModel]=\"value\"\r\n    (ngModelChange)=\"onModelChange($event)\"\r\n  >\r\n    <!-- Placeholder shown when no value is selected -->\r\n    <option\r\n      \r\n      [ngValue]=\"null\"\r\n    >\r\n      {{ placeholder || 'Select option' }}\r\n    </option>\r\n\r\n    <option\r\n      *ngFor=\"let option of options\"\r\n      [ngValue]=\"optionValue ? option[optionValue] : option\"\r\n      [disabled]=\"optionDisabled && option[optionDisabled]\"\r\n    >\r\n     {{displayValue  ? (optionValue ? option[optionValue] : option)+' |' :''}} {{ optionLabel ? option[optionLabel] : option }}\r\n    </option>\r\n  </select>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { QuillModule } from 'ngx-quill';\r\n\r\n@Component({\r\n  selector: 'universal-quill-editor',\r\n  templateUrl: './quill-editor.component.html',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, QuillModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UniversalQuillEditorComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class UniversalQuillEditorComponent implements ControlValueAccessor {\r\n  @Input() value: string = '';\r\n  @Input() placeholder: string = '';\r\n  @Input() disabled: boolean = false;\r\n  @Input() label?: string;\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n  @Input() class: string = '';\r\n\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: string): void {\r\n    this.value = value;\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(value: string) {\r\n    this.value = value;\r\n    this.onChange(value);\r\n    this.valueChange.emit(value);\r\n    this.change.emit(value);\r\n  }\r\n\r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}\r\n","<div *ngIf=\"!disabled\"\r\n  class=\"flex\"\r\n  [ngClass]=\"{\r\n    'flex-col': labelPosition === 'top',\r\n    'items-center gap-2': labelPosition === 'left'\r\n  }\"\r\n  [class]=\"class\"\r\n>\r\n  <ng-container *ngIf=\"label\">\r\n    <label\r\n      class=\"font-semibold text-sm\"\r\n      [ngClass]=\"{\r\n        'mb-1': labelPosition === 'top',\r\n        'pr-2': labelPosition === 'left'\r\n      }\"\r\n    >\r\n      {{ label }}<span *ngIf=\"required\" class=\"text-red-600 ml-1\">*</span>\r\n    </label>\r\n  </ng-container>\r\n  <quill-editor\r\n    [(ngModel)]=\"value\"\r\n    [placeholder]=\"placeholder\"\r\n    [readOnly]=\"disabled\"\r\n    (ngModelChange)=\"onModelChange($event)\"\r\n    (blur)=\"onBlur()\"\r\n    class=\"w-full text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100\"\r\n  ></quill-editor>\r\n</div>\r\n<div *ngIf=\"disabled\">\r\n  <div >\r\n    <div class=\"htmlViewer border border-gray-300 p-4 rounded-md \">\r\n      <div [innerHTML]=\"value\"></div>\r\n    </div>\r\n  </div>\r\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, HostListener, Input, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'universal-select2',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './select2.component.html'\n})\nexport class UniversalSelect2Component {\n  // Minimal API\n  @Input() options: any[] = [];\n  @Input() optionLabel: string = 'label';\n  @Input() optionValue: string = 'value';\n  /** Fallback keys for displaying labels when optionLabel is missing */\n  @Input() labelFallbacks: string[] = ['label', 'name', 'title', 'description', 'code'];\n\n  @Input() placeholder: string = 'Select option';\n  @Input() disabled: boolean = false;\n  @Input() class: string = '';\n\n  @Input() value: any = null;\n  /**\n   * When provided, change events will also emit an object { key: emitKey, value }\n   * valueChange will emit the primitive by default, but if emitKey is set and\n   * you rely on object-shaped events, you can also listen to (change).\n   */\n  @Input() emitKey?: string;\n  @Output() valueChange = new EventEmitter<any>();\n  @Output() change = new EventEmitter<any>();\n\n  @Input() emptyValueLabel: string = 'Select option';\n  @Input() emptyValue: any = null;\n\n  dropdownOpen = false;\n\n  // Close when clicking outside for basic UX\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    // If click is outside this component root, close\n    // Since this component is minimal and template-rooted, check closest selector\n    if (!target.closest('universal-select2')) {\n      this.dropdownOpen = false;\n    }\n  }\n\n  get selectedLabel(): string {\n    const match = this.options.find(o => this.valuesEqual(this.optionValue ? o?.[this.optionValue] : o, this.value));\n    if (match) return this.getLabel(match) || this.placeholder;\n    return this.placeholder;\n  }\n\n  getLabel(option: any): string {\n    if (this.optionLabel && option && option[this.optionLabel] != null && option[this.optionLabel] !== '') {\n      return String(option[this.optionLabel]);\n    }\n    for (const key of this.labelFallbacks) {\n      if (option && option[key] != null && option[key] !== '') {\n        return String(option[key]);\n      }\n    }\n    // Fallback to JSON if nothing else\n    return typeof option === 'object' ? JSON.stringify(option) : String(option ?? '');\n  }\n\n  private valuesEqual(a: any, b: any): boolean {\n    // Treat numeric strings and numbers as equal\n    // Handle null/undefined equality\n    if (a == null && b == null) return true;\n    // Loose comparison to handle '1' vs 1 and similar cases\n    // eslint-disable-next-line eqeqeq\n    return a == b;\n  }\nngOnInit(): void {\n  console.log('options', this.options);\n}\nngOnChanges(changes: SimpleChanges): void {\n    console.log('options', this.options);\n  }\n  toggle(): void {\n    if (this.disabled) return;\n    this.dropdownOpen = !this.dropdownOpen;\n  }\n  close(): void {\n    this.dropdownOpen = false;\n  }\n\n  select(option: any): void {\n    const newValue = this.optionValue ? option?.[this.optionValue] : option;\n    this.value = newValue;\n    // Emit primitive for two-way binding\n    this.valueChange.emit(this.emitKey ? { key: this.emitKey, value: newValue } : newValue);\n    // Emit change for listeners who want event object\n    this.change.emit(this.emitKey ? { key: this.emitKey, value: newValue } : newValue);\n    this.close();\n  }\n}\n","<div class=\"relative inline-block w-full\" [class]=\"class\">\n  <!-- Trigger -->\n  <div\n    class=\"w-full border rounded-md px-3 py-2 bg-white text-sm flex items-center justify-between cursor-pointer select-none\"\n    [class.opacity-50]=\"disabled\"\n    (click)=\"toggle()\"\n  >\n    <span [class.text-gray-400]=\"!value\">{{ selectedLabel }}</span>\n    <svg class=\"w-4 h-4 text-gray-500 ml-2\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n      <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 011.06.02L10 10.94l3.71-3.71a.75.75 0 011.08 1.04l-4.25 4.25a.75.75 0 01-1.06 0L5.21 8.27a.75.75 0 01.02-1.06z\" clip-rule=\"evenodd\" />\n    </svg>\n  </div>\n\n  <!-- Options -->\n  <div\n    *ngIf=\"dropdownOpen\"\n    class=\"absolute z-10 mt-1 w-full bg-white border rounded-md shadow-sm max-h-60 overflow-auto\"\n  >\n  <div\n    class=\"px-3 py-2 text-sm hover:bg-gray-100 cursor-pointer text-gray-400 \"\n    (click)=\"emptyValue?emptyValue:select(null)\"\n    >\n    {{ emptyValueLabel }}\n    </div>\n    <div\n      *ngFor=\"let option of options\"\n      class=\"px-3 py-2 text-sm hover:bg-gray-100 cursor-pointer\"\n      (click)=\"select(option)\"\n    >\n      {{ getLabel(option) }}\n    </div>\n\n   \n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\n@Component({\r\n  selector: 'universal-time-picker',\r\n  templateUrl: './time-picker.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, InputTextModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UniversalTimePickerComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class UniversalTimePickerComponent implements ControlValueAccessor {\r\n  @Input() disabled: boolean = false;\r\n  @Input() min: string = '';\r\n  @Input() max: string = '';\r\n  @Input() step: string = '';\r\n  @Input() class?: string;\r\n  @Input() label: string | undefined;\r\n  @Input() required: boolean = false;\r\n  @Input() labelPosition: 'top' | 'left' = 'left';\r\n\r\n  private _value: string = '';\r\n  \r\n  @Input()\r\n  get value(): string {\r\n    return this._value;\r\n  }\r\n  set value(val: string) {\r\n    // Ensure the time is in 24-hour format\r\n    let formattedValue = val;\r\n    if (val && val.includes(' ')) {\r\n      // If the value contains a space, it might be in 12-hour format\r\n      const [time, period] = val.split(' ');\r\n      if (period && (period.toLowerCase() === 'am' || period.toLowerCase() === 'pm')) {\r\n        // Convert to 24-hour format\r\n        formattedValue = this.convertTo24Hour(time, period);\r\n      }\r\n    }\r\n\r\n    if (formattedValue !== this._value) {\r\n      this._value = formattedValue;\r\n      this.valueChange.emit(this._value);\r\n      this.onChange(this._value);\r\n    }\r\n  }\r\n\r\n  // Helper method to convert 12-hour format to 24-hour format\r\n  private convertTo24Hour(time: string, period: string): string {\r\n    const [hours, minutes] = time.split(':');\r\n    let hour = parseInt(hours, 10);\r\n    \r\n    if (period.toLowerCase() === 'pm' && hour < 12) {\r\n      hour += 12;\r\n    } else if (period.toLowerCase() === 'am' && hour === 12) {\r\n      hour = 0;\r\n    }\r\n    \r\n    return `${hour.toString().padStart(2, '0')}:${minutes}`;\r\n  }\r\n\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: string): void {\r\n    if (value !== undefined) {\r\n      this._value = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(value: string) {\r\n    this.valueChange.emit(value);\r\n    this.onChange(value);\r\n  }\r\n\r\n  onChangeEvent(event: Event) {\r\n    const value = (event.target as HTMLInputElement).value;\r\n    this.change.emit(value);\r\n  }\r\n\r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}","<div class=\"flex\" [class]=\"labelPosition === 'top' ? 'flex-col' : 'flex-row'\">\r\n  @if (label) {\r\n    <label [for]=\"label\" class=\"font-semibold\" [class]=\"labelPosition === 'top' ? 'pb-1' : 'flex items-center pr-2'\">{{ label }}@if (required) {<span class=\"text-red-600 ml-1\">*</span>}</label>\r\n  }\r\n<input\r\n  pInputText\r\n  type=\"time\"\r\n  [(ngModel)]=\"value\"\r\n  [disabled]=\"disabled\"\r\n  [min]=\"min\"\r\n  [max]=\"max\"\r\n  [step]=\"step\"\r\n  [class]=\"'p-element p-inputtext p-component ' + (class || '')\"\r\n  (ngModelChange)=\"onModelChange($event)\"\r\n  (change)=\"onChangeEvent($event)\"\r\n  (blur)=\"onBlur()\"\r\n  data-force-24h=\"true\"\r\n  data-format=\"24h\" />\r\n</div>","import { Component, EventEmitter, Input, Output, forwardRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/** Strapi file object interface */\r\nexport interface StrapiFile {\r\n  id?: number;\r\n  name: string;\r\n  url: string;\r\n  mime?: string;\r\n  size?: number;\r\n  width?: number;\r\n  height?: number;\r\n  ext?: string;\r\n  alternativeText?: string;\r\n  caption?: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'universal-file-upload',\r\n  templateUrl: './file-upload.template.html',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule\r\n  ],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => FileUploadComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\n\r\nexport class FileUploadComponent implements OnChanges, ControlValueAccessor {\r\n\r\n  /** Display mode of the uploader ('basic' | 'advanced') */\r\n  @Input() mode: 'basic' | 'advanced' = 'basic';\r\n  /** Allow multiple file selection */\r\n  @Input() multiple = false;\r\n  /** Accepted file types (e.g., 'image/*') */\r\n  @Input() accept = '*/*';\r\n  /** Maximum file size in bytes */\r\n  @Input() maxFileSize = 1000000;\r\n  /** Disable the upload component */\r\n  @Input() disabled = false;\r\n  /** Label for the choose button */\r\n  @Input() chooseLabel = '⇪';\r\n  /** Label for the upload button */\r\n  @Input() uploadLabel = '⇪';\r\n  /** Label for the cancel button */\r\n  @Input() cancelLabel = 'X';\r\n  /** Files array for two-way binding */\r\n  @Input() files: (File | string | StrapiFile)[] = []; // Accept File, URL, or Strapi file object\r\n  @Input() placeholder = 'Choose files';\r\n  /** For Strapi integration - if true, this field is a linked field and should return only IDs */\r\n  @Input() isLinkedField = false;\r\n\r\n/** View model for template: { name, size, type, src, status } */\r\nfileViewModels: Array<{\r\n  name: string;\r\n  size: number | null;\r\n  type: string | null;\r\n  src: string;\r\n  status: 'cloud' | 'local';\r\n}> = [];\r\n  @Input() label = '';\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  /** Emits when files are changed */\r\n  @Output() filesChange = new EventEmitter<any[]>();\r\n\r\n  imageUrls: string[] = [];\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['files'] && changes['files'].currentValue !== undefined) {\r\n      this.files = changes['files'].currentValue;\r\n      const formValue = this.getFormValue();\r\n      this.onChange(formValue);\r\n      this.updateFileViewModels();\r\n    }\r\n  }\r\n\r\n  onFileSelected(event: Event): void {\r\n    const input = event.target as HTMLInputElement;\r\n    if (!input.files) return;\r\n    const selectedFiles = Array.from(input.files);\r\n    // Only add File objects, keep URLs intact\r\n    this.files = this.multiple ? [...this.files, ...selectedFiles] : selectedFiles;\r\n    const formValue = this.getFormValue();\r\n    this.filesChange.emit(formValue);\r\n    this.onChange(formValue);\r\n    this.onTouched();\r\n    this.updateFileViewModels();\r\n  }\r\n\r\n  removeFile(index: number): void {\r\n    this.files.splice(index, 1);\r\n    const formValue = this.getFormValue();\r\n    this.filesChange.emit(formValue);\r\n    this.onChange(formValue);\r\n    this.onTouched();\r\n    this.updateFileViewModels();\r\n  }\r\n\r\n  /**\r\n   * Get the form value - returns Strapi IDs for linked fields, File objects for local files\r\n   */\r\n  private getFormValue(): any[] {\r\n    if (!this.isLinkedField) {\r\n      return this.files.filter(f => f instanceof File) as File[];\r\n    }\r\n\r\n    return this.files.map(file => {\r\n      if (file instanceof File) {\r\n        return file; // Return File object for local files\r\n      } else if (typeof file === 'string') {\r\n        return file; // Return URL string\r\n      } else {\r\n        // For Strapi files in linked fields, return the ID if available\r\n        return file.id !== undefined ? file.id : file;\r\n      }\r\n    });\r\n  }\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: (files: any[]) => void = () => {};\r\n  onTouched: () => void = () => {};\r\n\r\n  writeValue(files: (File | string | StrapiFile)[] | null): void {\r\n    this.files = files || [];\r\n    this.updateFileViewModels();\r\n    \r\n    // Emit the form value immediately to ensure proper initialization\r\n    const formValue = this.getFormValue();\r\n    this.onChange(formValue);\r\n  }\r\n\r\n  registerOnChange(fn: (files: any[]) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  isImage(file: File | StrapiFile): boolean {\r\n    if (file instanceof File) {\r\n      return file.type.startsWith('image/');\r\n    } else {\r\n      // For Strapi files, check mime type\r\n      return file.mime ? file.mime.startsWith('image/') : false;\r\n    }\r\n  }\r\n\r\n  formatSize(size: number): string {\r\n    return size < 1024\r\n      ? `${size} B`\r\n      : size < 1024 * 1024\r\n      ? `${(size / 1024).toFixed(1)} KB`\r\n      : `${(size / 1024 / 1024).toFixed(1)} MB`;\r\n  }\r\n\r\n  private updateFileViewModels(): void {\r\n    // Revoke old URLs to prevent memory leaks\r\n    this.imageUrls.forEach(url => URL.revokeObjectURL(url));\r\n    this.imageUrls = [];\r\n    this.fileViewModels = this.files.map(file => {\r\n      if (typeof file === 'string') {\r\n        // Cloud file (URL)\r\n        return {\r\n          name: this.extractFileName(file),\r\n          size: null,\r\n          type: null,\r\n          src: file,\r\n          status: 'cloud' as const\r\n        };\r\n      } else if (file instanceof File) {\r\n        // Local file (File object)\r\n        let src = '';\r\n        if (this.isImage(file)) {\r\n          src = URL.createObjectURL(file);\r\n          this.imageUrls.push(src);\r\n        }\r\n        return {\r\n          name: file.name,\r\n          size: file.size,\r\n          type: file.type,\r\n          src,\r\n          status: 'local' as const\r\n        };\r\n      } else {\r\n        // Strapi file object\r\n        return {\r\n          name: file.name,\r\n          size: file.size || null,\r\n          type: file.mime || null,\r\n          src: file.url,\r\n          status: 'cloud' as const\r\n        };\r\n      }\r\n    });\r\n  }\r\n\r\n  private extractFileName(url: string): string {\r\n    try {\r\n      return decodeURIComponent(url.split('/').pop() || url);\r\n    } catch {\r\n      return url;\r\n    }\r\n  }\r\n\r\n  async downloadFile(fileViewModel: { src: string; name: string; status: 'cloud' | 'local' }): Promise<void> {\r\n    if (fileViewModel.status === 'cloud') {\r\n      try {\r\n        const response = await fetch(fileViewModel.src);\r\n        if (!response.ok) {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n        const blob = await response.blob();\r\n        const url = window.URL.createObjectURL(blob);\r\n        const link = document.createElement('a');\r\n        link.href = url;\r\n        link.download = fileViewModel.name;\r\n        document.body.appendChild(link);\r\n        link.click();\r\n        document.body.removeChild(link);\r\n        window.URL.revokeObjectURL(url); // Clean up the blob URL\r\n      } catch (error) {\r\n        console.error('Download failed:', error);\r\n        // Optionally, inform the user that the download failed\r\n        // For example, by emitting an event or setting a message property\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.imageUrls.forEach(url => URL.revokeObjectURL(url));\r\n  }\r\n}\r\n\r\n","<label [for]=\"label\" class=\"font-semibold\"\r\n  [ngClass]=\"{ 'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left' }\">\r\n  {{ label }}\r\n</label>\r\n\r\n<div class=\"w-full space-y-4\">\r\n\r\n  <!-- Custom file upload button -->\r\n  <div\r\n    class=\"w-full cursor-pointer border border-dashed border-gray-400 rounded px-4 py-3 text-center bg-gray-50 hover:bg-gray-100 transition text-gray-600\"\r\n    [class.opacity-50]=\"disabled\"\r\n    [class.pointer-events-none]=\"disabled\"\r\n    (click)=\"fileInput.click()\"\r\n  >\r\n    <!-- You can customize this placeholder -->\r\n    {{ placeholder || chooseLabel || 'Click to upload file(s)' }}\r\n  </div>\r\n\r\n  <!-- Hidden input element -->\r\n  <input\r\n    #fileInput\r\n    type=\"file\"\r\n    [attr.multiple]=\"multiple ? '' : null\"\r\n    [attr.accept]=\"accept\"\r\n    [attr.disabled]=\"disabled ? true : null\"\r\n    [attr.maxFileSize]=\"maxFileSize\"\r\n    class=\"hidden\"\r\n    (change)=\"onFileSelected($event)\"\r\n    [attr.id]=\"label\"\r\n  />\r\n\r\n  <!-- Preview of selected files -->\r\n  <div *ngIf=\"fileViewModels.length > 0\" class=\"space-y-2\">\r\n    <div\r\n      *ngFor=\"let file of fileViewModels; let i = index\"\r\n      class=\"flex items-center gap-4 border p-2 rounded shadow-sm bg-white\"\r\n    >\r\n      <div class=\"w-16 h-16 flex items-center justify-center bg-gray-100 rounded overflow-hidden\">\r\n        <img *ngIf=\"file.type?.startsWith('image/')\" [src]=\"file.src\" class=\"object-cover w-full h-full\" />\r\n        <div *ngIf=\"!file.type?.startsWith('image/')\" class=\"text-gray-400 text-3xl\">📄</div>\r\n      </div>\r\n\r\n      <div class=\"flex-1\">\r\n        <p class=\"font-medium\">{{ file.name }}</p>\r\n        <p class=\"text-sm text-gray-500\">{{ file.size !== null ? formatSize(file.size) : '—' }}</p>\r\n      </div>\r\n\r\n      <div class=\"flex items-center gap-2\">\r\n        <ng-container *ngIf=\"file.status === 'cloud'\">\r\n          <i class=\"pi pi-cloud text-blue-400\" title=\"In Cloud\"></i>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"file.status === 'local'\">\r\n          <i class=\"pi pi-desktop text-green-400\" title=\"Local, needs upload\"></i>\r\n        </ng-container>\r\n        <button *ngIf=\"file.status === 'cloud'\" \r\n                (click)=\"downloadFile(file)\" \r\n                class=\"text-blue-500 hover:text-blue-700\" \r\n                title=\"Download file\">\r\n          <i class=\"pi pi-download\"></i>\r\n        </button>\r\n      </div>\r\n\r\n      <button\r\n        class=\"text-red-500 hover:text-red-700 font-bold\"\r\n        (click)=\"removeFile(i)\"\r\n        title=\"Remove file\"\r\n      >\r\n        ✖\r\n      </button>\r\n    </div>\r\n  </div>\r\n\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormsModule } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeSelectModule } from 'primeng/treeselect';\r\n\r\n@Component({\r\n  selector: 'multi-folder-select',\r\n  templateUrl: './multi-folder-select.template.html',\r\n  standalone: true,\r\n  imports: [TreeSelectModule,FormsModule], // TreeSelectModule will be imported in the template file\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => MultiFolderSelectComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class MultiFolderSelectComponent implements ControlValueAccessor {\r\n  @Input() label?: string;\r\n  @Input() value: any;\r\n  @Input() options: TreeNode[] = [];\r\n  @Input() placeholder: string = '';\r\n  @Input() disabled: boolean = false;\r\n  @Input() selectionMode: 'single' | 'multiple' | 'checkbox' = 'checkbox';\r\n  @Input() filter: boolean = false;\r\n  @Input() filterPlaceholder: string = '';\r\n  @Input() display: 'comma' | 'chip' = 'chip';\r\n  @Input() class: string = '';\r\n\r\n  @Output() valueChange = new EventEmitter<any>();\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  onModelChange(value: any) {\r\n    this.value = value;\r\n    this.valueChange.emit(value);\r\n    this.onChange(value);\r\n  }\r\n\r\n  onChangeEvent(event: any) {\r\n    this.change.emit(event.value);\r\n  }\r\n\r\n  // ControlValueAccessor\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n  writeValue(value: any): void {\r\n    this.value = value;\r\n  }\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n}\r\n","<div *ngIf=\"label\" class=\"font-semibold text-sm mb-1 w-full\">{{ label }}</div>\r\n<p-treeSelect\r\n  [(ngModel)]=\"value\"\r\n  [options]=\"options\"\r\n  [placeholder]=\"placeholder\"\r\n  [disabled]=\"disabled\"\r\n  [selectionMode]=\"selectionMode\"\r\n  [filter]=\"filter\"\r\n  [filterPlaceholder]=\"filterPlaceholder\"\r\n  [display]=\"display\"\r\n  [class]=\"class\"\r\n  (ngModelChange)=\"onModelChange($event)\"\r\n  (onChange)=\"onChangeEvent($event)\"\r\n  (onBlur)=\"onBlur()\"\r\n></p-treeSelect>\r\n","/**\r\n * Data definitions for tree multiselect component\r\n */\r\n\r\n// Define the tree option interface with hierarchical structure\r\nexport interface TreeSelectOption {\r\n  label: string;\r\n  value: string;\r\n  id?: string | number;\r\n  children?: TreeSelectOption[];\r\n  selected?: boolean;\r\n  expanded?: boolean;\r\n  parent?: TreeSelectOption;\r\n  level?: number;\r\n}\r\n\r\n// Interface for selected item badges\r\nexport interface SelectedBadge {\r\n  label: string;\r\n  value: string;\r\n  parent?: string;\r\n}\r\n\r\n// Default style classes for multiselect// Styles for the multiselect component\r\nexport const multiselectStyles = {\r\n  // Main container styles\r\n  wrapperClass: \"relative mb-4\",\r\n  labelClass: \"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\",\r\n\r\n  // Select box styles\r\n  selectClass:\r\n    \"w-full px-3 py-2.5 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 cursor-pointer flex justify-between items-center relative hover:border-gray-400 dark:hover:border-gray-500\",\r\n  selectTextClass: \"flex-grow truncate text-sm\",\r\n  placeholderClass: \"text-gray-500 dark:text-white\",\r\n  selectedTextClass: \"text-gray-900 dark:text-white\",\r\n  dropdownIconClass:\r\n    \"w-7 h-7 ml-2 text-gray-500 dark:text-gray-400 text-[1.5rem] absolute right-3 top-1/2 transform -translate-y-1/2\",\r\n\r\n  // Dropdown styles\r\n  dropdownClass:\r\n    \"absolute z-10 mt-1 w-full bg-white dark:bg-gray-700 shadow-lg rounded-md border border-gray-300 dark:border-gray-700 overflow-auto\",\r\n  dropdownContentClass: \"max-h-60 overflow-y-auto\",\r\n\r\n  // Search input styles\r\n  searchWrapperClass:\r\n    \"sticky top-0 p-2 bg-white dark:bg-gray-700 border-b border-gray-200 dark:border-gray-700\",\r\n  searchIconClass:\r\n    \"absolute left-3 top-2.5 w-4 h-4 text-gray-500 dark:text-gray-400\",\r\n  searchInputClass:\r\n    \"w-full pl-10 pr-3 py-2 text-sm border border-gray-300 dark:border-gray-700 rounded-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-800 dark:text-white\",\r\n\r\n  // Option styles\r\n  optionClass:\r\n    \"flex items-center px-3 py-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-150 text-gray-900 dark:text-white\",\r\n  optionSelectedClass: \"bg-blue-50 dark:bg-blue-900\",\r\n\r\n  // Indentation classes for tree levels\r\n  indentationClasses: [\r\n    \"pl-2\", // Level 0\r\n    \"pl-12\", // Level 1\r\n    \"pl-24\", // Level 2\r\n    \"pl-36\", // Level 3\r\n    \"pl-48\", // Level 4\r\n    \"pl-60\", // Level 5\r\n  ],\r\n\r\n  // Icon and checkbox styles\r\n  expandIconClass:\r\n    \"inline-flex items-center justify-center w-4 h-4 mr-2 transition-transform\",\r\n  checkboxClass:\r\n    \"inline-flex items-center justify-center w-5 h-5 mr-2 border rounded cursor-pointer\",\r\n  checkboxSelectedClass: \"bg-blue-600 border-blue-600\",\r\n  checkboxUnselectedClass: \"border-gray-300 dark:border-gray-400\",\r\n  checkmarkIconClass: \"w-3 h-3 text-white\",\r\n\r\n  // Option label styles\r\n  optionLabelClass: \"flex-grow cursor-pointer\",\r\n  optionLabelSelectedClass: \"font-medium text-blue-700 dark:text-blue-300\",\r\n\r\n  // Selected badges styles\r\n  selectedBadgesClass: \"flex flex-wrap gap-2 mb-2\",\r\n  badgeClass:\r\n    \"flex items-center bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 text-xs rounded-full px-3 py-1.5 border border-blue-200 dark:border-blue-800\",\r\n  badgeCloseClass:\r\n    \"ml-1.5 text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-200 focus:outline-none\",\r\n  noResultsClass: \"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\",\r\n  errorClass: \"mt-1 text-sm text-red-600 dark:text-red-500\",\r\n  indentClass: \"ml-4\",\r\n};\r\n\r\n// Example tree data\r\nexport const treeOptions: TreeSelectOption[] = [\r\n  {\r\n    label: \"Category 1\",\r\n    value: \"cat1\",\r\n    children: [\r\n      { label: \"Option 1.1\", value: \"opt1.1\" },\r\n      { label: \"Option 1.2\", value: \"opt1.2\" },\r\n      {\r\n        label: \"Option 1.3\",\r\n        value: \"opt1.3\",\r\n        children: [\r\n          { label: \"Option 1.3.1\", value: \"opt1.3.1\" },\r\n          { label: \"Option 1.3.2\", value: \"opt1.3.2\" },\r\n        ],\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    label: \"zupa 2\",\r\n    value: \"cat2\",\r\n    children: [\r\n      { label: \"Option 2.1\", value: \"opt2.1\" },\r\n      { label: \"Option 2.2\", value: \"opt2.2\" },\r\n    ],\r\n  },\r\n  {\r\n    label: \"Category 3\",\r\n    value: \"cat3\",\r\n    children: [\r\n      { label: \"Option 3.1\", value: \"opt3.1\" },\r\n      { label: \"Option 3.2\", value: \"opt3.2\" },\r\n    ],\r\n  },\r\n];\r\n","import { Component, Input, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n    selector: 'universal-icon',\r\n    standalone: true,\r\n    imports: [CommonModule],\r\n    template: `<iconify-icon [icon]=\"icon\" class=\"w-full h-full flex items-center justify-center\"></iconify-icon>`,\r\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class IconComponent {\r\n  @Input() icon: string = '';\r\n\r\n  constructor() {}\r\n  \r\n  // Add any additional methods for global icon handling here\r\n  // For example, you could add methods to convert between icon libraries,\r\n  // apply custom transformations, or implement icon preloading\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, Directive, ElementRef, HostListener, forwardRef } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport {\r\n  TreeSelectOption,\r\n  SelectedBadge,\r\n  multiselectStyles,\r\n} from \"./multiselect-data\";\r\nimport { IconComponent } from \"../../components/icon copy/icon.component\";\r\n\r\n/**\r\n * Directive to detect clicks outside an element\r\n */\r\n@Directive({\r\n  selector: '[clickOutside]',\r\n  standalone: true\r\n})\r\nexport class ClickOutsideDirective {\r\n  @Output() clickOutside = new EventEmitter<void>();\r\n\r\n  constructor(private elementRef: ElementRef) {}\r\n\r\n  @HostListener('document:mousedown', ['$event'])\r\n  public onClick(event: MouseEvent) {\r\n    const target = event.target as HTMLElement;\r\n    const clickedInside = this.elementRef.nativeElement.contains(target);\r\n    if (!clickedInside) {\r\n      this.clickOutside.emit();\r\n    }\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: \"universal-multiselect\",\r\n  templateUrl: \"./multiselect.component.html\",\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, ClickOutsideDirective, IconComponent],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => MultiselectComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class MultiselectComponent implements OnInit, ControlValueAccessor {\r\n  // For Angular forms integration\r\n  private onChange: any = () => {};\r\n  private onTouched: any = () => {};\r\n  private _disabled = false;\r\n  @Input() label?: string;\r\n  @Input() placeholder = \"Select options\";\r\n  @Input() error?: string;\r\n  @Input() options: TreeSelectOption[] = [];\r\n  @Input() value: TreeSelectOption[] | string[] = [];\r\n  @Input() id = \"multiselect-\" + Math.random().toString(36).substring(2, 9);\r\n\r\n  @Output() selectionChange = new EventEmitter<TreeSelectOption[]>();\r\n  \r\n  // For Angular forms integration\r\n  @Input()\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n  }\r\n  \r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n\r\n  // Default styles from the data file\r\n  styles = multiselectStyles;\r\n\r\n  // Component state\r\n  isOpen = false;\r\n  searchText = \"\";\r\n  selectedBadges: SelectedBadge[] = [];\r\n  processedOptions: TreeSelectOption[] = [];\r\n  filteredOptions: TreeSelectOption[] = [];\r\n\r\n  ngOnInit() {\r\n    this.processOptions();\r\n    // Initialize selected badges if any options are pre-selected\r\n    this.updateSelectedBadges();\r\n    // Emit initial selection if there are pre-selected options\r\n    if (this.selectedBadges.length > 0) {\r\n      this.emitSelectionChange();\r\n    }\r\n    \r\n    // Log the initial state for debugging\r\n    console.log('MultiselectComponent initialized with:', {\r\n      value: this.value,\r\n      options: this.options,\r\n      processedOptions: this.processedOptions,\r\n      selectedBadges: this.selectedBadges\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Process the options to add level and parent references\r\n   */\r\n  processOptions() {\r\n    this.processedOptions = this.processTreeOptions(this.options);\r\n    \r\n    // Handle pre-selected values if provided\r\n    if (this.value && this.value.length > 0) {\r\n      this.handlePreselectedValues();\r\n    }\r\n    \r\n    this.filteredOptions = [...this.processedOptions];\r\n    this.updateSelectedBadges();\r\n  }\r\n\r\n  /**\r\n   * Recursively process tree options to add level and parent references\r\n   */\r\n  private processTreeOptions(\r\n    options: TreeSelectOption[],\r\n    level = 0,\r\n    parent?: TreeSelectOption\r\n  ): TreeSelectOption[] {\r\n    return options.map((option) => {\r\n      const processedOption: TreeSelectOption = {\r\n        ...option,\r\n        level,\r\n        expanded: option.expanded !== undefined ? option.expanded : true,\r\n        parent,\r\n        selected: option.selected || false,\r\n      };\r\n\r\n      if (option.children && option.children.length > 0) {\r\n        processedOption.children = this.processTreeOptions(\r\n          option.children,\r\n          level + 1,\r\n          processedOption\r\n        );\r\n      }\r\n\r\n      return processedOption;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Toggle dropdown visibility\r\n   */\r\n  toggleDropdown() {\r\n    this.isOpen = !this.isOpen;\r\n  }\r\n\r\n  /**\r\n   * Close dropdown when clicking outside\r\n   */\r\n  closeDropdown() {\r\n    this.isOpen = false;\r\n  }\r\n\r\n  /**\r\n   * Toggle option expanded state\r\n   */\r\n  toggleExpand(option: TreeSelectOption, event: Event) {\r\n    // Only prevent default but don't stop propagation\r\n    event.preventDefault();\r\n    option.expanded = !option.expanded;\r\n  }\r\n\r\n  /**\r\n   * Toggle option selection\r\n   */\r\n  toggleSelection(option: TreeSelectOption, event: Event) {\r\n    // Only prevent default to avoid form submission, but don't stop propagation\r\n    event.preventDefault();\r\n    \r\n    if (this._disabled) return;\r\n    \r\n    option.selected = !option.selected;\r\n\r\n    // We no longer update parent selection based on children\r\n    // to maintain independent selection\r\n    // this.updateParentSelection(option);\r\n\r\n    // Update badges\r\n    this.updateSelectedBadges();\r\n\r\n    // Emit selection change event\r\n    this.emitSelectionChange();\r\n    \r\n    // For Angular forms integration\r\n    // Update the value property to keep it in sync with the current selection\r\n    this.value = this.collectSelectedOptions(this.processedOptions);\r\n    this.onChange(this.value);\r\n    this.onTouched();\r\n  }\r\n\r\n  /**\r\n   * Set selection state for all children\r\n   */\r\n  private setChildrenSelection(\r\n    children: TreeSelectOption[],\r\n    selected: boolean\r\n  ) {\r\n    children.forEach((child) => {\r\n      child.selected = selected;\r\n      if (child.children && child.children.length > 0) {\r\n        this.setChildrenSelection(child.children, selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Update parent selection based on children\r\n   */\r\n  private updateParentSelection(option: TreeSelectOption) {\r\n    if (!option.parent) return;\r\n\r\n    const allSiblings = option.parent.children || [];\r\n    const allSelected = allSiblings.every((sibling) => sibling.selected);\r\n    const anySelected = allSiblings.some((sibling) => sibling.selected);\r\n\r\n    option.parent.selected = allSelected;\r\n\r\n    // Continue up the tree\r\n    this.updateParentSelection(option.parent);\r\n  }\r\n\r\n  /**\r\n   * Update selected badges based on current selection\r\n   */\r\n  private updateSelectedBadges() {\r\n    this.selectedBadges = [];\r\n    this.collectSelectedBadges(this.processedOptions);\r\n  }\r\n\r\n  /**\r\n   * Recursively collect selected badges\r\n   */\r\n  private collectSelectedBadges(\r\n    options: TreeSelectOption[],\r\n    parentLabel?: string\r\n  ) {\r\n    options.forEach((option) => {\r\n      if (option.selected) {\r\n        // Always add the selected item as a badge, regardless of children\r\n        this.selectedBadges.push({\r\n          label: option.label,\r\n          value: option.value,\r\n          parent: parentLabel,\r\n        });\r\n      }\r\n\r\n      // Check children separately (whether or not this option is selected)\r\n      if (option.children && option.children.length > 0) {\r\n        this.collectSelectedBadges(option.children, option.label);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Remove a selected badge\r\n   */\r\n  removeBadge(badge: SelectedBadge) {\r\n    if (this._disabled) return;\r\n    \r\n    this.deselectOption(this.processedOptions, badge.value);\r\n    this.updateSelectedBadges();\r\n    this.emitSelectionChange();\r\n    \r\n    // For Angular forms integration\r\n    this.onChange(this.collectSelectedOptions(this.processedOptions));\r\n    this.onTouched();\r\n  }\r\n\r\n  /**\r\n   * Deselect an option by value\r\n   */\r\n  private deselectOption(options: TreeSelectOption[], value: string): boolean {\r\n    for (const option of options) {\r\n      if (option.value === value) {\r\n        option.selected = false;\r\n\r\n        // Update parent selection\r\n        if (option.parent) {\r\n          this.updateParentSelection(option);\r\n        }\r\n\r\n        return true;\r\n      }\r\n\r\n      if (option.children && option.children.length > 0) {\r\n        if (this.deselectOption(option.children, value)) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Emit selection change event with all selected options\r\n   */\r\n  private emitSelectionChange() {\r\n    const selectedOptions = this.collectSelectedOptions(this.processedOptions);\r\n    this.selectionChange.emit(selectedOptions);\r\n  }\r\n\r\n  /**\r\n   * Collect all selected options\r\n   */\r\n  private collectSelectedOptions(\r\n    options: TreeSelectOption[]\r\n  ): TreeSelectOption[] {\r\n    let selected: TreeSelectOption[] = [];\r\n\r\n    options.forEach((option) => {\r\n      if (option.selected) {\r\n        selected.push(option);\r\n      }\r\n\r\n      if (option.children && option.children.length > 0) {\r\n        selected = [\r\n          ...selected,\r\n          ...this.collectSelectedOptions(option.children),\r\n        ];\r\n      }\r\n    });\r\n\r\n    return selected;\r\n  }\r\n\r\n  /**\r\n   * Filter options based on search text\r\n   */\r\n  filterOptions(options: TreeSelectOption[]): TreeSelectOption[] {\r\n    if (!this.searchText) {\r\n      this.filteredOptions = [...this.processedOptions];\r\n      return this.processedOptions;\r\n    }\r\n\r\n    // Helper function to filter options recursively\r\n    const filterRecursively = (\r\n      opts: TreeSelectOption[]\r\n    ): TreeSelectOption[] => {\r\n      return opts.filter((option) => {\r\n        const matchesSearch = option.label\r\n          .toLowerCase()\r\n          .includes(this.searchText.toLowerCase());\r\n\r\n        // If this option has children, check if any children match\r\n        let childrenMatch = false;\r\n        if (option.children && option.children.length > 0) {\r\n          const filteredChildren = filterRecursively(option.children);\r\n          childrenMatch = filteredChildren.length > 0;\r\n\r\n          // If any children match, we want to show this parent\r\n          if (childrenMatch) {\r\n            // Ensure parent nodes with matching children are expanded\r\n            option.expanded = true;\r\n            return true;\r\n          }\r\n        }\r\n\r\n        return matchesSearch;\r\n      });\r\n    };\r\n\r\n    // Update the filtered options\r\n    this.filteredOptions = filterRecursively([...this.processedOptions]);\r\n\r\n    // Update the UI after filtering\r\n    this.updateSelectedBadges();\r\n\r\n    return this.filteredOptions;\r\n  }\r\n\r\n  /**\r\n   * Handle search input changes\r\n   */\r\n  onSearchInput() {\r\n    // Filter options based on search text\r\n    this.filterOptions(this.processedOptions);\r\n  }\r\n\r\n  /**\r\n   * Check if option should be visible based on search\r\n   */\r\n  isVisible(option: TreeSelectOption): boolean {\r\n    if (!this.searchText) return true;\r\n\r\n    const matchesSearch = option.label\r\n      .toLowerCase()\r\n      .includes(this.searchText.toLowerCase());\r\n\r\n    // If this option has children, check if any children match\r\n    let childrenMatch = false;\r\n    if (option.children && option.children.length > 0) {\r\n      childrenMatch = option.children.some((child) => this.isVisible(child));\r\n    }\r\n\r\n    return matchesSearch || childrenMatch;\r\n  }\r\n\r\n  /**\r\n   * Get the appropriate indentation class based on the level\r\n   */\r\n  getIndentationClass(level: number): string {\r\n    // Ensure we don't exceed the available indentation classes\r\n    const maxIndex = this.styles.indentationClasses.length - 1;\r\n    const safeIndex = Math.min(level, maxIndex);\r\n    return this.styles.indentationClasses[safeIndex];\r\n  }\r\n  \r\n  /**\r\n   * Reset all selections in the options tree\r\n   */\r\n  private resetSelection(options: TreeSelectOption[]): void {\r\n    options.forEach(option => {\r\n      option.selected = false;\r\n      if (option.children && option.children.length > 0) {\r\n        this.resetSelection(option.children);\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Handle pre-selected values from form control\r\n   */\r\n  private handlePreselectedValues() {\r\n    if (!this.value || !this.value.length) return;\r\n    \r\n    // Handle different formats of input values\r\n    const selectedValues = this.value.map(val => {\r\n      if (typeof val === 'string') {\r\n        return val;\r\n      } else if (typeof val === 'object' && val !== null) {\r\n        // Handle object format which could be {value: 'x', label: 'y'} or other formats\r\n        return val.value || (val as any).id || val;\r\n      }\r\n      return val;\r\n    });\r\n    \r\n    // Recursive function to mark options as selected\r\n    const markSelected = (options: TreeSelectOption[]) => {\r\n      options.forEach(option => {\r\n        // Compare with loose equality to handle string/number type differences\r\n        const isSelected = selectedValues.some(val => \r\n          val == option.value || \r\n          (typeof val === 'object' && val !== null && (val.value == option.value || (val as any).id == option.value))\r\n        );\r\n        \r\n        if (isSelected) {\r\n          option.selected = true;\r\n        }\r\n        \r\n        if (option.children && option.children.length > 0) {\r\n          markSelected(option.children);\r\n        }\r\n      });\r\n    };\r\n    \r\n    markSelected(this.processedOptions);\r\n    this.updateSelectedBadges();\r\n  }\r\n  \r\n  // Angular ControlValueAccessor implementation\r\n  writeValue(value: any): void {\r\n    // Log the incoming value for debugging\r\n    console.log('MultiselectComponent writeValue called with:', value);\r\n    \r\n    if (value !== undefined && value !== null) {\r\n      this.value = Array.isArray(value) ? value : [value];\r\n      \r\n      // If component is already initialized\r\n      if (this.processedOptions && this.processedOptions.length > 0) {\r\n        // Reset all selections first to avoid stale selections\r\n        this.resetSelection(this.processedOptions);\r\n        this.handlePreselectedValues();\r\n        this.updateSelectedBadges();\r\n      }\r\n    } else {\r\n      // Reset selection when null/undefined is passed\r\n      this.value = [];\r\n      if (this.processedOptions && this.processedOptions.length > 0) {\r\n        this.resetSelection(this.processedOptions);\r\n        this.updateSelectedBadges();\r\n      }\r\n    }\r\n  }\r\n  \r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n  \r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n  \r\n  setDisabledState(isDisabled: boolean): void {\r\n    this._disabled = isDisabled;\r\n  }\r\n}\r\n","<div [class]=\"styles.wrapperClass\" clickOutside (clickOutside)=\"closeDropdown()\">\r\n  <!-- Label -->\r\n  <label *ngIf=\"label\" [for]=\"id\" [class]=\"styles.labelClass\">\r\n    {{ label }}\r\n  </label>\r\n\r\n  <!-- Selected badges -->\r\n  <div *ngIf=\"selectedBadges.length > 0\" [class]=\"styles.selectedBadgesClass\">\r\n    <div *ngFor=\"let badge of selectedBadges\" [class]=\"styles.badgeClass\">\r\n      <span *ngIf=\"badge.parent\" class=\"font-medium mr-1\">{{ badge.parent }}:</span>\r\n      {{ badge.label }}\r\n      <button type=\"button\" [class]=\"styles.badgeCloseClass\" (click)=\"removeBadge(badge); $event.preventDefault()\" aria-label=\"Remove badge\">\r\n        <!-- X icon -->\r\n        <svg class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\r\n        </svg>\r\n      </button>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Main select box -->\r\n  <div [id]=\"id\" [class.border-red-500]=\"error\" (click)=\"toggleDropdown()\" [class]=\"styles.selectClass\">\r\n    <div [class]=\"styles.selectTextClass\">\r\n      <span *ngIf=\"selectedBadges.length === 0\" [class]=\"styles.placeholderClass\">{{ placeholder }}</span>\r\n      <span *ngIf=\"selectedBadges.length > 0\" [class]=\"styles.selectedTextClass\">{{ selectedBadges.length }} items selected</span>\r\n    </div>\r\n\r\n    <!-- Chevron down icon -->\r\n    <svg class=\"w-4 h-4 ml-auto transition-transform\" [ngClass]=\"{ 'rotate-180': isOpen }\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\r\n    </svg>\r\n  </div>\r\n\r\n  <!-- Dropdown -->\r\n  <div *ngIf=\"isOpen\" [class]=\"styles.dropdownClass\">\r\n    <!-- Search input -->\r\n    <div [class]=\"styles.searchWrapperClass\">\r\n      <div class=\"relative\">\r\n        <!-- Magnify icon -->\r\n        <svg class=\"absolute left-2 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-4.35-4.35M11 19a8 8 0 1 1 0-16 8 8 0 0 1 0 16z\" />\r\n        </svg>\r\n        <input type=\"text\" [(ngModel)]=\"searchText\" [class]=\"styles.searchInputClass\" placeholder=\"Search...\" (input)=\"onSearchInput()\" autocomplete=\"off\">\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Tree options -->\r\n    <div [class]=\"styles.dropdownContentClass\">\r\n      <ng-container *ngIf=\"filteredOptions.length > 0; else noResults\">\r\n        <ng-container *ngTemplateOutlet=\"optionTree; context: { $implicit: filteredOptions }\"></ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #noResults>\r\n        <div [class]=\"styles.noResultsClass\">No results found</div>\r\n      </ng-template>\r\n\r\n      <!-- Recursive template for tree options -->\r\n      <ng-template #optionTree let-options>\r\n        <div *ngFor=\"let option of options\">\r\n          <div *ngIf=\"isVisible(option)\" [ngClass]=\"[\r\n              styles.optionClass,\r\n              option.selected ? 'bg-blue-50 dark:bg-blue-900' : '',\r\n              getIndentationClass(option.level || 0)\r\n            ]\" class=\"flex items-center gap-2\">\r\n            \r\n            <!-- Expand icon for parent nodes -->\r\n            <span *ngIf=\"option.children && option.children.length > 0\" class=\"cursor-pointer\" (click)=\"toggleExpand(option, $event)\">\r\n              <svg class=\"w-5 h-5 transition-transform\" [ngClass]=\"{ 'rotate-90': option.expanded }\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\r\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\r\n              </svg>\r\n            </span>\r\n\r\n            <!-- Checkbox -->\r\n            <div class=\"w-5 h-5 flex items-center justify-center border rounded cursor-pointer transition\" \r\n              [ngClass]=\"option.selected \r\n                ? 'bg-blue-600 border-blue-600 text-white' \r\n                : 'bg-white dark:bg-gray-700 border-gray-300 dark:border-gray-600 text-transparent'\"\r\n              (click)=\"toggleSelection(option, $event)\">\r\n              <!-- Check icon -->\r\n              <svg *ngIf=\"option.selected\" class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" viewBox=\"0 0 24 24\">\r\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n              </svg>\r\n            </div>\r\n\r\n            <!-- Option label -->\r\n            <span [ngClass]=\"[\r\n                styles.optionLabelClass,\r\n                option.selected ? styles.optionLabelSelectedClass : ''\r\n              ]\" (click)=\"toggleSelection(option, $event)\">{{ option.label }}</span>\r\n          </div>\r\n\r\n          <!-- Children -->\r\n          <div *ngIf=\"option.children && option.children.length > 0 && option.expanded\">\r\n            <ng-container *ngTemplateOutlet=\"optionTree; context: { $implicit: option.children }\"></ng-container>\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Error -->\r\n  <p *ngIf=\"error\" class=\"mt-1 text-sm text-red-600 dark:text-red-500\">{{ error }}</p>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, OnDestroy, Output, SimpleChanges, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n// Import form components\nimport { UniversalInputComponent } from '../../forms/input/input.component';\nimport { TextareaComponent } from '../../forms/textarea/textarea.component';\nimport { CheckboxComponent } from '../../forms/checkbox/checkbox.component';\nimport { RadioButtonGroupComponent } from '../../forms/radio-button-group/radio-button-group.component';\nimport { UniversalSelectComponent } from '../../forms/select/select.component';\nimport { UniversalSelectComponentNew } from '../../../new/components/select/select.component';\nimport { UniversalQuillEditorComponent } from '../../../new/components/quill-editor/quill-editor.component';\nimport { UniversalSelect2Component } from '../../../new/components/select2/select2.component';\nimport { UniversalTimePickerComponent } from '../../forms/time-picker/time-picker.component';\nimport { ButtonComponent } from '../../forms/button/button.component';\nimport { FileUploadComponent } from '../../forms/file-upload/file-upload.component';\nimport {  getValueFromPath } from '../../../../dynamic-component.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { MultiFolderSelectComponent } from '../../forms/multi-folder-select/multi-folder-select.component';\nimport { MultiselectComponent } from '../../forms/multiselect/multiselect.component';\n\n// Form configuration interfaces\nexport interface FormFieldConfig {\n  key: string;\n  type: 'text' | 'number' | 'textarea' | 'html-editor' | 'checkbox' | 'radio' | 'select' | 'select2' | 'multi-select' | 'time' | 'file'; // Added 'select2', 'multi-select', 'file', and 'html-editor' types\n  label?: string;\n  placeholder?: string;\n  defaultValue?: any;\n  required?: boolean;\n  disabled?: boolean;\n  readonly?: boolean;\n  /**\n   * If true, the control will be disabled automatically when an initial value\n   * (from formData or defaultValue) is present.\n   */\n  disabledOnValue?: boolean;\n  validators?: any[];\n  errorMessages?: { [key: string]: string };\n  options?: any[]; // static/manual options\n  /**\n   * If present, options will be loaded from this API (external call).\n   * labelKey/valueKey allow mapping of API results.\n   */\n  optionsApi?: {\n    url: string;\n    path?: string; // dot-separated path to extract array, e.g. \"data.values\"\n    labelKey?: string;\n    valueKey?: string;\n    childrenKey?: string;\n    headers?: import('@angular/common/http').HttpHeaders | { [header: string]: string | string[] };\n    displayLabelTransform?: (option: any, originalLabel: string) => string; // Custom function to transform option labels\n  };\n\n  /**\n   * If true, renders as a multi-select dropdown (array value).\n   * Only applies to 'multi-select' type fields.\n   */\n  multiSelect?: boolean;\n  displayValue?: boolean; // If true, display the value in the dropdown\n  /**\n   * For Strapi integration - if true, this field is a linked field\n   * and should be transformed to only include IDs on form submission\n   */\n  isLinkedField?: boolean;\n  \n  rows?: number | null;\n  width?: string;\n  containerClass?: string;\n  labelClass?: string;\n  inputClass?: string;\n  helpText?: string;\n  onChange?: (value: any) => void;\n\n  // File-specific best practices\n  accept?: string; // e.g. 'image/*' for images only\n  multiple?: boolean; // Allow multiple files\n  showGallery?: boolean; // If true and accept includes image/*, show image previews\n\n  gridSpan?: number;\n  labelPosition?: 'top' | 'left';\n\n  preview?: {\n    key: string;\n    filesize?: string;\n    deletable?: boolean;\n    baseUrl?: string;\n  }\n}\n\nexport interface FormRowConfig {\n  fields: FormFieldConfig[];\n  class?: string;\n  layout?: 'flex' | 'grid';\n  gridCols?: number;\n}\n\nexport interface FormSectionConfig {\n  title?: string;\n  description?: string;\n  rows: FormRowConfig[];\n  class?: string;\n}\n\nexport interface ButtonConfig {\n  label: string;\n  icon?: string;\n  class?: string;\n  severity?: 'primary' | 'secondary' | 'success' | 'info' | 'danger' | 'warn' | 'help' | 'contrast';\n  outlined?: boolean;\n  disabled?: boolean;\n  onClick?: (formValue?: any) => void;\n}\n\nexport interface FormConfig {\n  uid?: string|number;\n  sections: FormSectionConfig[];\n  class?: string;\n  key?: string;\n  title?: string;\n  /**\n   * If true, the form is configured for Strapi integration\n   * and will transform linked fields to only include IDs on submission\n   */\n  isStrapiForm?: boolean;\n  submitButton?: {\n    label: string;\n    icon?: string;\n    class?: string;\n    position?: 'left' | 'center' | 'right';\n    severity?: 'primary' | 'secondary' | 'success' | 'info' | 'danger' | 'warn' | 'help' | 'contrast';\n    outlined?: boolean;\n    disabled?: boolean;\n  };\n  resetButton?: {\n    label: string;\n    icon?: string;\n    class?: string;\n    severity?: 'secondary' | 'primary' | 'success' | 'info' | 'danger' | 'warn' | 'help' | 'contrast';\n    outlined?: boolean;\n    disabled?: boolean;\n  };\n  customButtons?: ButtonConfig[];\n}\n\n/**\n * Dynamic Form Component\n *\n * A flexible, configuration-driven form component that generates complex forms\n * using UNIVERSAL form components.\n */\n@Component({\n\n \n  selector: 'universal-dynamic-form',\n  templateUrl: './dynamic-form.template.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    UniversalInputComponent,\n    TextareaComponent,\n    CheckboxComponent,\n    RadioButtonGroupComponent,\n    UniversalSelectComponent,\n    UniversalSelectComponentNew,\n    UniversalSelect2Component,\n    UniversalQuillEditorComponent,\n    UniversalTimePickerComponent,\n    ButtonComponent,\n    FileUploadComponent,\n    MultiFolderSelectComponent,\n    MultiselectComponent\n  ]\n})\nexport class DynamicFormComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * Cache for API-loaded options to prevent repeated fetching.\n   */\n  private apiOptionsCache: { [key: string]: any[] } = {};\n  \n  // Key mapping for dot notation support\n  private keyMapping: Map<string, string> = new Map(); // Maps safe keys to original keys\n  private reverseKeyMapping: Map<string, string> = new Map(); // Maps original keys to safe keys\n\n  constructor(private http: HttpClient, private fb: FormBuilder, private cdr: ChangeDetectorRef) {\n    // Initialize form with empty group to prevent template errors\n    this.form = this.fb.group({});\n  }\n\n  /**\n   * Convert a key with dots to a safe FormGroup key\n   * e.g., \"e_warehouse.categories\" -> \"e_warehouse__DOT__categories\"\n   */\n  private getSafeKey(originalKey: string): string {\n    if (!originalKey.includes('.')) {\n      return originalKey;\n    }\n    \n    const safeKey = originalKey.replace(/\\./g, '__DOT__');\n    this.keyMapping.set(safeKey, originalKey);\n    this.reverseKeyMapping.set(originalKey, safeKey);\n    return safeKey;\n  }\n\n  /**\n   * Get the original key from a safe key\n   */\n  private getOriginalKey(safeKey: string): string {\n    return this.keyMapping.get(safeKey) || safeKey;\n  }\n\n  /**\n   * Transform form data from safe keys back to original keys\n   */\n  private transformFormData(formData: any): any {\n    const transformed: any = {};\n    \n    Object.keys(formData).forEach(safeKey => {\n      const originalKey = this.getOriginalKey(safeKey);\n      transformed[originalKey] = formData[safeKey];\n    });\n    \n    return transformed;\n  }\n\n  /**\n   * Transform input data from original keys to safe keys for form initialization\n   */\n  private transformInputData(inputData: any): any {\n    if (!inputData) return {};\n    \n    const transformed: any = {};\n    \n    Object.keys(inputData).forEach(originalKey => {\n      const safeKey = this.getSafeKey(originalKey);\n      transformed[safeKey] = inputData[originalKey];\n    });\n    \n    return transformed;\n  }\n\n  /**\n   * Public method for template to get safe key for a field\n   */\n  getSafeKeyForTemplate(field: FormFieldConfig): string {\n    return this.getSafeKey(field.key);\n  }\n\n  /**\n   * Handles PrimeNG file upload event for a specific field.\n   * Updates uploadedFiles map for the field.\n   */\n  /**\n   * Handles file input changes from both native input and PrimeNG p-fileUpload.\n   * Updates uploadedFiles and fileInputs for the field.\n   */\n  handleFileInputChange(files: File[], fieldKey: string): void {\n    if (!Array.isArray(files)) return;\n    this.uploadedFiles[fieldKey] = files;\n    this.fileInputs[fieldKey] = files;\n    this.cleanupObjectUrls(fieldKey);\n    if (this.isGalleryField(fieldKey)) {\n      this.fileObjectUrls[fieldKey] = files.map(file => URL.createObjectURL(file));\n    }\n    // Ja ir form controls, atjaunini vērtību un trigger fieldChange emit\n    if (this.form && this.form.get(fieldKey)) {\n      this.form.get(fieldKey)?.setValue(files);\n      this.onFieldChange(fieldKey, files);\n    }\n  }\n  getValueFromPath = getValueFromPath; // Expose helper to the template if needed\n  \n // Utility for template array check\n  isArray(value: any): boolean {\n    return Array.isArray(value);\n  }\n  /**\n   * PrimeNG p-fileUpload event handler\n   */\n  onUpload(files: File[], fieldKey: string): void {\n    if (!Array.isArray(files)) return;\n    this.handleFileInputChange(files, fieldKey);\n  }\n\n  /**\n   * Native input[type=file] event handler\n   */\n  // Native input[type=file] event handler (delegates to handleFileInputChange)\n  // Native input[type=file] event handler (delegates to handleFileInputChange)\n  onFileChange(fieldKey: string, event: Event): void {\n    const input = event.target as HTMLInputElement;\n    if (!input.files) return;\n    const files = Array.from(input.files);\n    this.handleFileInputChange(files, fieldKey);\n  }\n\n  uploadedFiles: { [key: string]: any[] } = {}; // Track uploaded files per field\n\n  fileInputs: { [key: string]: File[] } = {};\n  private fileObjectUrls: { [key: string]: string[] } = {};\n\n  @Input() config: FormConfig = { sections: [] };\n  @Input() class: string = '';\n  @Input() formData: any = {};\n\n  // Using type comments to prevent HTML rendering of generic types\n  /** @type {EventEmitter<any>} */\n  @Output() formSubmit = new EventEmitter();\n\n  removeFile(fieldKey: string, index: number): void {\n    const files = this.fileInputs[fieldKey] || [];\n    if (files[index]) {\n      files.splice(index, 1);\n      this.fileInputs[fieldKey] = files;\n      this.cleanupObjectUrls(fieldKey);\n      if (this.isGalleryField(fieldKey)) {\n        this.fileObjectUrls[fieldKey] = files.map(file => URL.createObjectURL(file));\n      }\n      \n      // Update form control value and trigger field change event\n      if (this.form && this.form.get(fieldKey)) {\n        this.form.get(fieldKey)?.setValue(files.length > 0 ? files : null);\n        this.onFieldChange(fieldKey, files.length > 0 ? files : null);\n      }\n    }\n  }\n\n  getImageUrls(fieldKey: string): string[] {\n    return this.fileObjectUrls[fieldKey] || [];\n  }\n\n  isGalleryField(fieldKey: string): boolean {\n    // You may want to improve this check for your config\n    const field = this.config.sections.flatMap(s => s.rows.flatMap(r => r.fields)).find(f => f.key === fieldKey);\n    return !!field && field.type === 'file' && !!field.showGallery && !!field.accept && field.accept.includes('image');\n  }\n\n  private cleanupObjectUrls(fieldKey: string): void {\n    if (this.fileObjectUrls[fieldKey]) {\n      this.fileObjectUrls[fieldKey].forEach(url => URL.revokeObjectURL(url));\n      this.fileObjectUrls[fieldKey] = [];\n    }\n  }\n\n  ngOnDestroy(): void {\n    Object.keys(this.fileObjectUrls).forEach(fieldKey => this.cleanupObjectUrls(fieldKey));\n  }\n\n  /** @type {EventEmitter<void>} */\n  @Output() formReset = new EventEmitter();\n\n  /** @type {EventEmitter<{key: string, value: any}>} */\n  @Output() fieldChange = new EventEmitter();\n\n  /** @type {EventEmitter<{buttonId: string, formValue: any}>} */\n  @Output() buttonClick = new EventEmitter();\n\n  form: FormGroup;\n  formReady = false;\n\n  \n\n  ngOnInit(): void {\n    this.loadApiOptionsAndBuildForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['config'] || changes['formData']) {\n      this.loadApiOptionsAndBuildForm();\n    }\n  }\n\n  /**\n   * Loads options for fields with optionsApiUrl, then builds the form.\n   * Ensures all async option loads are completed before rendering.\n   */\n  private loadApiOptionsAndBuildForm(): void {\n    ////console.log('formData',this.formData)\n    if (!this.config || !Array.isArray(this.config.sections)) {\n      this.buildForm();\n      return;\n    }\n    const fieldsWithApi: FormFieldConfig[] = [];\n    this.config.sections.forEach(section => {\n      section.rows?.forEach(row => {\n        row.fields?.forEach((field: FormFieldConfig) => {\n          if (field.optionsApi && field.optionsApi.url) {\n            fieldsWithApi.push(field);\n          }\n        });\n      });\n    });\n    if (fieldsWithApi.length === 0) {\n      this.buildForm();\n      return;\n    }\n    // Utility to extract a nested property by dot path\nfunction getByPath(obj: any, path?: string): any {\n  if (!path) return obj;\n  return path.split('.').reduce((acc, key) => acc && acc[key], obj);\n}\n\nconst apiCalls = fieldsWithApi.map(field => {\n  const cacheKey = field.key + ':' + (field.optionsApi?.url || '');\n  if (this.apiOptionsCache[cacheKey]) {\n    field.options = this.apiOptionsCache[cacheKey];\n    return Promise.resolve();\n  }\n  let headers = field.optionsApi!.headers;\n  if (headers && !(headers instanceof HttpHeaders)) {\n    headers = new HttpHeaders(headers);\n  }\n  const httpOptions = headers ? { headers } : {};\n  return this.http.get<any>(field.optionsApi!.url, httpOptions).toPromise().then((response: any) => {\n    // Extract options array from nested path if specified\n    const options = getByPath(response, field.optionsApi!.path);\n    let mappedOptions: any[] = [];\n    if (Array.isArray(options)) {\n      // Recursively map options to { label, value, children } structure\n      const labelKey = field.optionsApi!.labelKey || 'label';\n      const valueKey = field.optionsApi!.valueKey || 'value';\n      const childrenKey = field.optionsApi!.childrenKey || 'children';\n\n      function mapOption(option: any): any {\n        // Get the base label value\n        let label = option[labelKey] ?? option.label ?? '';\n        \n        // Apply custom label transformation if provided\n        if (field.optionsApi!.displayLabelTransform && typeof field.optionsApi!.displayLabelTransform === 'function') {\n          try {\n            label = field.optionsApi!.displayLabelTransform(option, label);\n          } catch (error) {\n            console.warn('Error in displayLabelTransform:', error);\n            // Fallback to original label if transform fails\n          }\n        }\n        \n        const mapped: any = {\n          label: label,\n          value: option[valueKey] ?? option.value ?? '',\n          children: Array.isArray(option[childrenKey]) && option[childrenKey].length > 0\n            ? option[childrenKey].map(mapOption)\n            : undefined\n        };\n        // Preserve original valueKey (e.g., 'id') so downstream consumers can access it directly\n        if (valueKey) {\n          mapped[valueKey] = option[valueKey] ?? option.value ?? '';\n        }\n        return mapped;\n      }\n      mappedOptions = options.map(mapOption);\n\n      // if (labelKey && valueKey) {\n      //   mappedOptions = options.map(opt => ({\n      //     label: opt[labelKey] ?? opt.label ?? '',\n      //     value: opt[valueKey] ?? opt.value ?? '',\n      //     children: childrenKey ? opt[childrenKey] : opt.children ?? undefined\n      //   }));\n      // } else {\n      //   mappedOptions = options.map(opt => ({\n      //     label: opt.label ?? '',\n      //     value: opt.value ?? '',\n      //     children: childrenKey ? opt[childrenKey] : opt.children ?? undefined\n      //   }));\n      // }\n    }\n    ////console.log('mappedOptions',mappedOptions)\n    field.options = mappedOptions;\n    this.apiOptionsCache[cacheKey] = mappedOptions;\n  }).catch(() => {\n    field.options = [];\n    this.apiOptionsCache[cacheKey] = [];\n  });\n});\n   \n    Promise.all(apiCalls)\n  .then(() => this.buildForm())\n  .catch(err => {\n    //console.error('Error loading API options:', err);\n    this.buildForm(); // fallback to build form anyway\n  });\n  }\n\n  private buildForm(): void {\n    try {\n      // Create a new form group\n      const formControls: { [key: string]: FormControl } = {};\n\n      if (!this.config || !this.config.sections || !Array.isArray(this.config.sections)) {\n        this.form = this.fb.group({});\n        return;\n      }\n      ////console.log('Building form with config:', this.config);\n      // Extract all fields from all sections and rows\n      this.config.sections.forEach(section => {\n        if (!section || !section.rows || !Array.isArray(section.rows)) return;\n\n        section.rows.forEach(row => {\n          if (!row || !row.fields || !Array.isArray(row.fields)) return;\n\n          row.fields.forEach(field => {\n            if (!field || !field.key) return;\n            \n            // Get safe key for FormGroup (replaces dots with __DOT__)\n            const safeKey = this.getSafeKey(field.key);\n            ////console.log('Adding control:', field.key, 'as safe key:', safeKey);\n\n            // Create validators array\n            const validators = [];\n            if (field.required) {\n              validators.push(Validators.required);\n            }\n            if (field.validators && Array.isArray(field.validators)) {\n              validators.push(...field.validators);\n            }\n\n            // Handle default values properly based on field type\n            let defaultValue = null;\n\n            if (this.formData && this.formData[field.key] !== undefined) {\n              defaultValue = this.formData[field.key];\n            } else if (field.defaultValue !== undefined) {\n              defaultValue = field.defaultValue;\n            } else {\n              // Set appropriate default values based on field type\n              switch (field.type) {\n                case 'checkbox':\n                  defaultValue = false;\n                  break;\n                case 'text':\n                case 'textarea':\n                case 'html-editor':\n                  defaultValue = '';\n                  break;\n                case 'number':\n                  defaultValue = null;\n                  break;\n                case 'radio':\n                case 'select':\n                  defaultValue = field.options && field.options.length > 0 ?\n                    (field.required ? field.options[0].value : null) : null;\n                  break;\n                case 'time':\n                  defaultValue = null;\n                  break;\n                default:\n                  defaultValue = null;\n              }\n            }\n\n            // Normalize select2 initial value: if object provided, convert to primitive using valueKey\n            if (field.type === 'select2' && defaultValue !== null && typeof defaultValue === 'object') {\n              const valueKey = field.optionsApi?.valueKey || 'value';\n              if (defaultValue[valueKey] !== undefined) {\n                defaultValue = defaultValue[valueKey];\n              }\n            }\n\n            // For multi-select fields, always store an array of keyValues\n            if (field.type === 'multi-select') {\n              const valueKey = field.optionsApi?.valueKey || 'value';\n              const labelKey = field.optionsApi?.labelKey || 'label';\n              let processedDefault: any[] = [];\n              \n              // Check if this is a Strapi form with linked fields\n              const isStrapiForm = !!this.config.isStrapiForm;\n              const isLinkedField = !!field.isLinkedField;\n              \n              if (Array.isArray(defaultValue)) {\n                // Handle Strapi format where we might have an array of IDs or objects\n                if (isStrapiForm || isLinkedField) {\n                  // For Strapi linked fields, we need to convert IDs to objects with proper structure\n                  if (field.options && Array.isArray(field.options) && field.options.length > 0) {\n                    // If we have options available, map IDs to full objects\n                    processedDefault = defaultValue.map(v => {\n                      // If v is already an object with the required structure, use it\n                      if (typeof v === 'object' && v !== null && v[valueKey] !== undefined) {\n                        return v;\n                      }\n                      \n                      // If v is a primitive (likely an ID), find the matching option\n                      // Use loose comparison (==) to handle string/number type differences\n                      const matchingOption = field.options?.find(opt => opt[valueKey] == v);\n                      return matchingOption || { [valueKey]: v, [labelKey]: v };\n                    });\n                  } else {\n                    // If options aren't loaded yet, create placeholder objects\n                    processedDefault = defaultValue.map(v => {\n                      // If v is already an object, check if it has id property (common in Strapi)\n                      if (typeof v === 'object' && v !== null) {\n                        if (v.id !== undefined) {\n                          // Strapi often returns objects with id property\n                          return { [valueKey]: v.id, [labelKey]: v[labelKey] || v.name || v.title || v.id };\n                        } else if (v[valueKey] !== undefined) {\n                          // Object already has the right structure\n                          return v;\n                        }\n                      }\n                      // For primitive values (IDs), create an object with that ID\n                      return { [valueKey]: v, [labelKey]: v };\n                    });\n                  }\n                } else {\n                  // For regular multi-select, ensure we have the right object structure\n                  processedDefault = defaultValue.map(v => {\n                    if (typeof v === 'object' && v !== null && v[valueKey] !== undefined) {\n                      return v;\n                    } else {\n                      return { [valueKey]: v, [labelKey]: v };\n                    }\n                  });\n                }\n              } else if (defaultValue !== undefined && defaultValue !== null) {\n                // Handle single value case\n                if (typeof defaultValue === 'object' && defaultValue !== null && defaultValue[valueKey] !== undefined) {\n                  processedDefault = [defaultValue];\n                } else {\n                  processedDefault = [{ [valueKey]: defaultValue, [labelKey]: defaultValue }];\n                }\n              }\n              \n              // Determine if this control should be disabled based on initial value\n              const hasInitialValue = Array.isArray(processedDefault)\n                ? processedDefault.length > 0\n                : processedDefault !== null && processedDefault !== undefined;\n              const shouldDisable = !!field.disabled || (!!field.disabledOnValue && hasInitialValue);\n\n              formControls[safeKey] = new FormControl(\n                { value: processedDefault, disabled: shouldDisable },\n                validators\n              );\n            } else {\n              // Determine if this control should be disabled based on initial value\n              let hasInitialValue = false;\n              if (Array.isArray(defaultValue)) {\n                hasInitialValue = defaultValue.length > 0;\n              } else if (typeof defaultValue === 'string') {\n                hasInitialValue = defaultValue.trim() !== '';\n              } else if (typeof defaultValue === 'object' && defaultValue !== null) {\n                hasInitialValue = Object.keys(defaultValue).length > 0;\n              } else {\n                hasInitialValue = defaultValue !== null && defaultValue !== undefined;\n              }\n              const shouldDisable = !!field.disabled || (!!field.disabledOnValue && hasInitialValue);\n\n              formControls[safeKey] = new FormControl(\n                { value: defaultValue, disabled: shouldDisable },\n                validators\n              );\n            }\n                  ////console.log('Adding control:', field.key, 'with default value:', defaultValue, 'and validators:', validators);\n\n          });\n        });\n      });\n      ////console.log('form built')\n      // Create the form group with all controls\n      this.form = this.fb.group(formControls);\n      this.formReady = true;\n      this.cdr.detectChanges(); // Ensure change detection runs to update the view\n      ////console.log('form ready')\n    } catch (error) {\n      //console.error('Error building form:', error);\n      // Ensure we have at least an empty form\n      this.form = this.fb.group({});\n      this.formReady = true;\n      this.cdr.detectChanges(); // Ensure change detection runs to update the view\n\n    }\n  }\n\n  onSubmit(): void {\n    if (this.form && this.form.valid) {\n      // Transform fields based on configuration\n      const rawValue = this.form.getRawValue();\n      // First transform safe keys back to original keys\n      const transformedKeys = this.transformFormData(rawValue);\n      const transformed = { ...transformedKeys };\n      \n      // Ensure ALL form fields are included in the payload, even with null values\n      if (this.config && this.config.sections) {\n        const isStrapiForm = !!this.config.isStrapiForm;\n        \n        this.config.sections.forEach(section => {\n          section.rows?.forEach(row => {\n            row.fields?.forEach(field => {\n              const safeKey = this.getSafeKey(field.key);\n              const val = rawValue[safeKey];\n              \n              // Explicitly ensure this field exists in the transformed object\n              // This guarantees that null values are included in the payload\n              if (!transformed.hasOwnProperty(field.key)) {\n                transformed[field.key] = null;\n              }\n              \n              // Handle multi-select fields\n              if (field.type === 'multi-select') {\n                const valueKey = field.optionsApi?.valueKey || 'value';\n                const labelKey = field.optionsApi?.labelKey || 'label';\n                \n                if (isStrapiForm || field.isLinkedField) {\n                  // For Strapi forms or linked fields, only send the ID values\n                  // This is what Strapi expects for linked entities\n                  transformed[field.key] = val ? val.map((v: any) => {\n                    // Handle both objects with valueKey and primitive values\n                    return typeof v === 'object' && v !== null ? v[valueKey] : v;\n                  }) : [];\n                } else {\n                  // For regular forms, send key-value pairs\n                  transformed[field.key] = val ? val.map((v: any) => {\n                    // Ensure we're returning the expected format\n                    if (typeof v === 'object' && v !== null) {\n                      return {\n                        [valueKey]: v[valueKey],\n                        [labelKey]: v[labelKey] || v.name || v.title || v[valueKey]\n                      };\n                    } else {\n                      // Handle primitive values\n                      return { [valueKey]: v, [labelKey]: v };\n                    }\n                  }) : [];\n                }\n              } else {\n                // For all other field types, explicitly set the value (including null)\n                // This ensures that null values are not lost in the payload\n                transformed[field.key] = val;\n              }\n            });\n          });\n        });\n      }\n      \n      this.formSubmit.emit(transformed);\n    } else if (this.form) {\n      this.markAllAsTouched();\n    }\n  }\n\n  onReset(): void {\n    if (this.form) {\n      this.form.reset();\n      this.formReset.emit();\n    }\n  }\n\n  onCustomButtonClick(button: ButtonConfig): void {\n    if (this.form) {\n      const formValue = this.form.getRawValue();\n\n      // Emit event for external handling\n      this.buttonClick.emit({\n        buttonId: button.label,\n        formValue: formValue\n      });\n\n      // Execute custom onClick handler if provided\n      if (button.onClick) {\n        button.onClick(formValue);\n      }\n    }\n  }\n\n  onFieldChange(key: string, event: any): void {\n    if (!this.form || !key) return;\n    \n    // Use safe key to access form control since form controls use safe keys\n    const safeKey = this.getSafeKey(key);\n    if (!this.form.get(safeKey)) return;\n    //console.log('event',event)\n\n    // Prefer the event value if present, else use the form control value\n    let value = event !== undefined ? event : this.form.get(safeKey)?.value;\n\n    // Normalize multi-select linked field values for consumers (emit IDs when linked/Strapi)\n    const field = this.findField(key);\n    const isStrapiForm = !!this.config?.isStrapiForm;\n    if (field && field.type === 'multi-select' && (isStrapiForm || field.isLinkedField)) {\n      const valueKey = field.optionsApi?.valueKey || 'value';\n      value = Array.isArray(value)\n        ? value.map((v: any) => (typeof v === 'object' && v !== null) ? (v[valueKey] ?? v.value ?? v.id) : v)\n        : [];\n    }\n\n    this.fieldChange.emit({ key, value });\n    //console.log('value',{ key, value })\n    // Execute custom onChange handler if provided\n    if (field && field.onChange) {\n      field.onChange(value);\n    }\n  }\n\n  private findField(key: string): FormFieldConfig | undefined {\n    if (!this.config || !this.config.sections) return undefined;\n\n    for (const section of this.config.sections) {\n      if (!section || !section.rows) continue;\n\n      for (const row of section.rows) {\n        if (!row || !row.fields) continue;\n\n        const field = row.fields.find(f => f && f.key === key);\n        if (field) return field;\n      }\n    }\n    return undefined;\n  }\n\n  private markAllAsTouched(): void {\n    if (!this.form) return;\n\n    Object.keys(this.form.controls).forEach(key => {\n      const control = this.form.get(key);\n      if (control) {\n        control.markAsTouched();\n      }\n    });\n  }\n\n  hasError(key: string): boolean {\n    if (!this.form || !key) return false;\n\n    // Use safe key for form control lookup\n    const safeKey = this.getSafeKey(key);\n    const control = this.form.get(safeKey);\n    return control ? control.invalid && (control.dirty || control.touched) : false;\n  }\n\n  getErrorMessage(field: FormFieldConfig): string {\n    if (!field || !field.key || !this.form) return '';\n\n    // Use safe key for form control lookup\n    const safeKey = this.getSafeKey(field.key);\n    const control = this.form.get(safeKey);\n    if (!control || !control.errors) return '';\n\n    const errors = Object.keys(control.errors);\n    if (errors.length === 0) return '';\n\n    const errorType = errors[0];\n\n    // Use custom error message if provided\n    if (field.errorMessages && field.errorMessages[errorType]) {\n      return field.errorMessages[errorType];\n    }\n\n    // Default error messages\n    switch (errorType) {\n      case 'required':\n        return `${field.label || field.key} is required`;\n      case 'email':\n        return `Please enter a valid email address`;\n      case 'minlength':\n        return `${field.label || field.key} must be at least ${control.errors['minlength'].requiredLength} characters`;\n      case 'maxlength':\n        return `${field.label || field.key} cannot exceed ${control.errors['maxlength'].requiredLength} characters`;\n      case 'pattern':\n        return `${field.label || field.key} has an invalid format`;\n      default:\n        return `${field.label || field.key} is invalid`;\n    }\n  }\n\n  getControlClass(key: string, inputClass?: string): string {\n    const baseClass = inputClass || 'w-full';\n    return this.hasError(key) ? `${baseClass} error` : baseClass;\n  }\n  returnFormatedInitialValues(key: string) {\n    if (!this.formData || !this.formData[key]) return null;\n    const field = this.findField(key);\n    if (!field) return null;\n\n    // Handle multi-select fields\n    if (field.type === 'multi-select') {\n      const valueKey = field.optionsApi?.valueKey || 'value';\n      const labelKey = field.optionsApi?.labelKey || 'label';\n      const initialValue = this.formData[key];\n      \n      if (Array.isArray(initialValue)) {\n        return initialValue.map(v => {\n          if (typeof v === 'object' && v !== null) {\n            return { [valueKey]: v[valueKey], [labelKey]: v[labelKey] || v.name || v.title || v[valueKey] };\n          } else {\n            return { [valueKey]: v, [labelKey]: v };\n          }\n        });\n      } else {\n        return [{ [valueKey]: initialValue, [labelKey]: initialValue }];\n      }\n    }\n    if (field.type === 'select' ) {\n      const valueKey = field.optionsApi?.valueKey || 'value';\n      const labelKey = field.optionsApi?.labelKey || 'label';\n      const initialValue = this.formData[key];\n      \n      if (typeof initialValue === 'object' && initialValue !== null) {\n        return { 'value': initialValue[valueKey], 'label': initialValue[labelKey] || initialValue.name || initialValue.title || initialValue[valueKey] };\n      } else {\n        return { 'value': initialValue, 'label': initialValue };\n      }\n    }\n\n    // For other field types, just return the value\n    return this.formData[key];\n  }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" [ngClass]=\"class\">\n  <!-- Form sections -->\n  <ng-container *ngIf=\"formReady; else loading\">\n    <div *ngFor=\"let section of config.sections\" [ngClass]=\"section?.class\">\n      <!-- Section header if provided -->\n      <div *ngIf=\"section.title || section.description\" class=\"mb-4\">\n        <h3 *ngIf=\"section.title\" class=\"text-lg font-medium text-gray-900\">{{ section.title }}</h3>\n        <p *ngIf=\"section.description\" class=\"mt-1 text-sm text-gray-500\">{{ section.description }}</p>\n      </div>\n\n      <!-- Section rows -->\n      <div *ngFor=\"let row of section.rows\" [ngClass]=\"row?.class\">\n        <!-- Flex layout (default) -->\n        <div *ngIf=\"!row.layout || row.layout === 'flex'\" class=\"flex flex-wrap gap-4 mb-4\">\n          <!-- Fields in the row -->\n          <div *ngFor=\"let field of row.fields\"\n               [ngClass]=\"field?.containerClass\"\n               [ngStyle]=\"{'width': field?.width || 'auto'}\">\n            <!-- Field content -->\n            <ng-container [ngTemplateOutlet]=\"fieldContent\" [ngTemplateOutletContext]=\"{field: field}\"></ng-container>\n          </div>\n        </div>\n\n        <!-- Grid layout -->\n        <div *ngIf=\"row.layout === 'grid'\"\n             class=\"grid gap-4 mb-4\"\n             [ngStyle]=\"{'grid-template-columns': 'repeat(' + (row.gridCols || 12) + ', minmax(0, 1fr))'}\">\n          <!-- Fields in the row -->\n          <div *ngFor=\"let field of row.fields\"\n               [ngClass]=\"field?.containerClass\"\n               [ngStyle]=\"{'grid-column': 'span ' + (field?.gridSpan || 1) + ' / span ' + (field?.gridSpan || 1)}\">\n            <!-- Field content -->\n            <ng-container [ngTemplateOutlet]=\"fieldContent\" [ngTemplateOutletContext]=\"{field: field}\"></ng-container>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Form actions -->\n    <div *ngIf=\"config.submitButton || config.resetButton || config.customButtons?.length\"\n         class=\"flex mt-4\"\n         [ngClass]=\"{\n           'justify-start': !config.submitButton || !config.submitButton.position || config.submitButton.position === 'left',\n           'justify-center': config.submitButton && config.submitButton.position === 'center',\n           'justify-end': config.submitButton && config.submitButton.position === 'right'\n         }\">\n\n      <!-- Submit button -->\n      <universal-button\n        *ngIf=\"config.submitButton\"\n        [label]=\"config.submitButton.label\"\n        [icon]=\"config.submitButton.icon || ''\"\n        [class]=\"config.submitButton.class || 'mr-2'\"\n        [severity]=\"config.submitButton.severity || 'primary'\"\n        [outlined]=\"config.submitButton.outlined || false\"\n        \n        type=\"submit\"\n      ></universal-button>\n\n      <!-- Reset button -->\n      <universal-button\n        *ngIf=\"config.resetButton\"\n        [label]=\"config.resetButton.label\"\n        [icon]=\"config.resetButton.icon || ''\"\n        [class]=\"config.resetButton.class || ''\"\n        [severity]=\"config.resetButton.severity || 'secondary'\"\n        [outlined]=\"config.resetButton.outlined || true\"\n        type=\"button\"\n        (click)=\"onReset()\"\n      ></universal-button>\n      \n      <!-- Custom buttons -->\n      <ng-container *ngIf=\"config.customButtons?.length\">\n        <universal-button\n          *ngFor=\"let button of config.customButtons\"\n          [label]=\"button.label\"\n          [icon]=\"button.icon || ''\"\n          [class]=\"button.class || 'ml-2'\"\n          [severity]=\"button.severity || 'secondary'\"\n          [outlined]=\"button.outlined || false\"\n          type=\"button\"\n          (click)=\"onCustomButtonClick(button)\"\n        ></universal-button>\n      </ng-container>\n\n    </div>\n  </ng-container>\n  <ng-template #loading>\n    <p>Loading form...</p>\n  </ng-template>\n</form>\n\n<!-- Field content template -->\n<ng-template #fieldContent let-field=\"field\">\n  <!-- Field input based on type -->\n  <ng-container [ngSwitch]=\"field.type\">\n\n    <!-- Text input -->\n\n    <!-- Quill editor for textarea fields -->\n    <!-- <ng-container *ngSwitchCase=\"'textarea'\">\n      <universal-quill-editor\n        [formControlName]=\"getSafeKeyForTemplate(field)\"\n        [placeholder]=\"field.placeholder\"\n        [style]=\"field.style\"\n        (valueChange)=\"onFieldChange(field.key, $event)\"\n      ></universal-quill-editor>\n    </ng-container> -->\n    <ng-container *ngSwitchCase=\"'text'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-input\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [label]=\"field.label || ''\"\n          [required]=\"field.required || false\"\n          \n          [placeholder]=\"field.placeholder || ''\"\n          [class]=\"field.inputClass || ''\"\n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (valueChange)=\"onFieldChange(field.key, $event)\"\n        ></universal-input>\n      </ng-container>\n    </ng-container>\n\n    <!-- Number input -->\n    <ng-container *ngSwitchCase=\"'number'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-input\n          type=\"number\"\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [label]=\"field.label || ''\"\n          [required]=\"field.required || false\"\n          \n          [placeholder]=\"field.placeholder || ''\"\n          [class]=\"field.inputClass || ''\"\n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (valueChange)=\"onFieldChange(field.key, $event)\"\n        ></universal-input>\n      </ng-container>\n    </ng-container>\n\n    <!-- Textarea -->\n    <ng-container *ngSwitchCase=\"'textarea'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-textarea\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [label]=\"field.label || ''\"\n          [rows]=\"field.rows || 3\"\n          [placeholder]=\"field.placeholder || ''\"\n          \n          [readonly]=\"field.readonly || false\"\n          [class]=\"field.inputClass || ''\"\n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (valueChange)=\"onFieldChange(field.key, $event)\">\n        </universal-textarea>\n      </ng-container>\n    </ng-container>\n\n    <!-- HTML Editor -->\n    <ng-container *ngSwitchCase=\"'html-editor'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <div *ngIf=\"field.label\" class=\"mb-1 font-semibold text-sm\">\n          {{ field.label }}\n          <span *ngIf=\"field.required\" class=\"text-red-600 ml-1\">*</span>\n        </div>\n        <universal-quill-editor\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [placeholder]=\"field.placeholder || ''\"\n          [class]=\"field.inputClass || ''\"\n          (valueChange)=\"onFieldChange(field.key, $event)\"\n        ></universal-quill-editor>\n      </ng-container>\n    </ng-container>\n\n    <!-- Checkbox -->\n    <ng-container *ngSwitchCase=\"'checkbox'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-checkbox\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [label]=\"field.label || ''\"\n          \n          [class]=\"field.inputClass || ''\"\n          (checkedChange)=\"onFieldChange(field.key, $event)\">\n        </universal-checkbox>\n      </ng-container>\n    </ng-container>\n\n    <!-- Radio button group -->\n    <ng-container *ngSwitchCase=\"'radio'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-radio-button-group\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [label]=\"field.label || ''\"\n          [name]=\"getSafeKeyForTemplate(field)\"\n          [options]=\"field.options || []\"\n          \n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (selectedValueChange)=\"onFieldChange(field.key, $event)\">\n        </universal-radio-button-group>\n      </ng-container>\n    </ng-container>\n\n    <!-- Multi-folder-select (tree select) -->\n    <ng-container *ngSwitchCase=\"'multi-select'\">\n      <ng-container *ngIf=\"form.get(getSafeKeyForTemplate(field))\">\n        <universal-multiselect\n          [formControl]=\"$any(form.get(getSafeKeyForTemplate(field)))\"\n          [options]=\"field.options || []\"\n          [placeholder]=\"field.placeholder || ''\"\n          [label]=\"field.label || ''\"\n          [disabled]=\"field.disabled || false\"\n          [class]=\"field.inputClass || ''\"\n          (selectionChange)=\"onFieldChange(field.key, $event)\">\n        </universal-multiselect>\n      </ng-container>\n    </ng-container>\n\n  \n\n    <!-- Select dropdown -->\n    <ng-container *ngSwitchCase=\"'select'\">\n      <ng-container *ngIf=\"form.get(field.key)\">\n        <universal-select-new\n          [formControl]=\"$any(form.get(field.key))\"\n          [options]=\"field.options || []\"\n          [optionLabel]=\"field.optionLabel || 'label'\"\n          [optionValue]=\"field.optionValue || 'value'\"\n          [placeholder]=\"field.placeholder || ''\"\n          [label]=\"field.label || ''\"\n          [required]=\"field.required || false\"\n          [class]=\"field.inputClass || ''\"\n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (valueChange)=\"onFieldChange(field.key, $event)\"\n          [initValue]=\"returnFormatedInitialValues(field.key)\"\n          [displayValue]=\"field.displayValue || false\"\n        ></universal-select-new>\n      </ng-container>\n      <!-- <ng-container *ngIf=\"form.get(field.key)\">\n        <div *ngIf=\"field.label\" class=\"mb-1 font-semibold text-sm\">\n          {{ field.label }}\n          <span *ngIf=\"field.required\" class=\"text-red-600 ml-1\">*</span>\n        </div>\n        <universal-select2\n          [options]=\"field.options || []\"\n          [optionLabel]=\"field.optionLabel || 'label'\"\n          [optionValue]=\"field.optionValue || 'value'\"\n          [placeholder]=\"field.placeholder || ''\"\n          [disabled]=\"field.disabled || false\"\n          [class]=\"field.inputClass || ''\"\n          [value]=\"$any(form.get(field.key))?.value\"\n          (valueChange)=\"form.get(field.key)?.setValue($event); onFieldChange(field.key, $event)\"\n        ></universal-select2>\n      </ng-container> -->\n    </ng-container>\n\n    <!-- Select2 minimal dropdown -->\n    <ng-container *ngSwitchCase=\"'select2'\">\n      <ng-container *ngIf=\"form.get(field.key)\">\n        <div *ngIf=\"field.label\" class=\"mb-1 font-semibold text-sm\">\n          {{ field.label }}\n          <span *ngIf=\"field.required\" class=\"text-red-600 ml-1\">*</span>\n        </div>\n        <universal-select2\n          [options]=\"field.options || []\"\n          [optionLabel]=\"field.optionLabel || 'label'\"\n          [optionValue]=\"field.optionValue || 'value'\"\n          [placeholder]=\"field.placeholder || ''\"\n          [disabled]=\"field.disabled || false\"\n          [class]=\"field.inputClass || ''\"\n          [value]=\"$any(form.get(field.key))?.value\"\n          (valueChange)=\"form.get(field.key)?.setValue($event); onFieldChange(field.key, $event)\"\n        ></universal-select2>\n      </ng-container>\n    </ng-container>\n\n    <!-- Time picker -->\n    <ng-container *ngSwitchCase=\"'time'\">\n      <ng-container *ngIf=\"form.get(field.key)\">\n        <universal-time-picker\n          [formControl]=\"$any(form.get(field.key))\"\n          [label]=\"field.label || ''\"\n          [class]=\"field.inputClass || ''\"\n          [labelPosition]=\"field.labelPosition || 'top'\"\n          (valueChange)=\"onFieldChange(field.key, $event)\"\n        ></universal-time-picker>\n      </ng-container>\n    </ng-container>\n\n    <!-- File upload-->\n    <ng-container *ngSwitchCase=\"'file'\">\n      <ng-container *ngIf=\"form.get(field.key)\">\n        <universal-file-upload\n        [label]=\"field.label || ''\"\n        [placeholder]=\"field.placeholder || ''\"\n          [mode]=\"field.mode || 'basic'\"\n          [multiple]=\"field.multiple || false\"\n          [accept]=\"field.accept || 'image/*'\"\n          [maxFileSize]=\"field.maxFileSize || 1000000\"\n          [disabled]=\"field.disabled || false\"\n          [chooseLabel]=\"field.chooseLabel || 'Choose'\"\n          [uploadLabel]=\"field.uploadLabel || 'Upload'\"\n          [cancelLabel]=\"field.cancelLabel || 'Cancel'\"\n          [files]=\"field.files || []\"\n          [isLinkedField]=\"field.isLinkedField || false\"\n          (filesChange)=\"onUpload($event, field.key)\"\n        ></universal-file-upload>\n        <!-- Image Preview (single or gallery) -->\n        <ng-container *ngIf=\"field.preview && form.get(field.key)?.value\">\n          <!-- Multiple images -->\n          <ng-container *ngIf=\"field.multiple && form.get(field.key)?.value.length\">\n            <div class=\"image-gallery\" *ngIf=\"form.get(field.key)?.value.length\">\n              <ng-container *ngFor=\"let item of form.get(field.key)?.value\">\n                <img\n                  *ngIf=\"item && item[field.preview.key]\"\n                  [src]=\"field.preview.baseUrl ? field.preview.baseUrl + item[field.preview.key] : item[field.preview.key]\"\n                  class=\"file-preview-img\"\n                  [alt]=\"field.label || 'Preview'\"\n                  style=\"max-width: 120px; max-height: 120px; margin: 0 8px 8px 0; border-radius: 6px; object-fit: cover; border: 1px solid #eee;\"\n                />\n              </ng-container>\n            </div>\n          </ng-container>\n          <!-- Single image -->\n          <ng-container *ngIf=\"!field.multiple && form.get(field.key)?.value && form.get(field.key)?.value[field.preview.key]\">\n            <img\n              [src]=\"field.preview.baseUrl! +form.get(field.key)?.value[field.preview.key]\"\n              class=\"file-preview-img\"\n              [alt]=\"field.label || 'Preview'\"\n              style=\"max-width: 120px; max-height: 120px; margin: 0 8px 8px 0; border-radius: 6px; object-fit: cover; border: 1px solid #eee;\"\n            />\n          </ng-container>\n        </ng-container>\n      \n\n        <!-- <p-fileUpload\n          name=\"demo[]\"\n          url=\"https://www.primefaces.org/cdn/api/upload.php\"\n          (onUpload)=\"onUpload($event, field.key)\"\n          [multiple]=\"field.multiple || true\"\n          [accept]=\"field.accept || 'image/*'\"\n          [maxFileSize]=\"1000000\"\n          mode=\"advanced\"\n        >\n          <ng-template #empty>\n            <div>Drag and drop files to here to upload.</div>\n          </ng-template>\n          <ng-template #content>\n            <ul *ngIf=\"uploadedFiles[field.key]?.length\">\n              <li *ngFor=\"let file of uploadedFiles[field.key]\">{{ file.name }} - {{ file.size }} bytes</li>\n            </ul>\n          </ng-template>\n        </p-fileUpload> -->\n      </ng-container>\n    </ng-container>\n    \n\n  <!-- Field help text -->\n  <div *ngIf=\"field.helpText && !hasError(field.key)\" class=\"mt-1 text-sm text-gray-500\">\n    {{ field.helpText }}\n  </div>\n\n  <!-- Field error message -->\n  <div *ngIf=\"hasError(field.key)\" class=\"mt-1 text-sm text-red-600\">\n    {{ getErrorMessage(field) }}\n  </div>\n  </ng-container>\n</ng-template>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { DialogClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\n\r\n\r\n\r\n@Component({\r\n  selector: 'universal-dialog',\r\n  templateUrl: './dialog.template.html',\r\n  standalone: true,\r\n  imports: [DialogModule, FormsModule, CommonModule],\r\n})\r\nexport class UniversalDialogComponent {\r\n  @Input() header: string = 'Dialog Header';\r\n  @Input() visible: boolean = false;\r\n  @Input() modal: boolean = true;\r\n  @Input() style: any = { width: '25rem' };\r\n  @Input() position: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'topleft' | 'topright' | 'bottomleft' | 'bottomright' = 'center';\r\n  @Input() maximizable: boolean = false;\r\n  @Input() draggable: boolean = false;\r\n  @Input() resizable: boolean = false;\r\n  @Input() breakpoints: any;\r\n  @Input() class: string = '';\r\n\r\n  // Use the classes from the external file\r\n  classes: DialogClasses = defaultClasses;\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.dialog) {\r\n      this.classes = { ...defaultClasses, ...this.theme.dialog };\r\n    }\r\n  }\r\n\r\n  // Two-way binding for visible property\r\n  @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n  // Common dialog events\r\n  @Output() show = new EventEmitter<any>();\r\n  @Output() hide = new EventEmitter<any>();\r\n  @Output() maximize = new EventEmitter<any>();\r\n\r\n  // Handler methods to re-emit events\r\n  onShow(event: any) {\r\n    this.show.emit(event);\r\n  }\r\n\r\n  onHide(event: any) {\r\n    this.visible = false;\r\n    this.visibleChange.emit(false);\r\n    this.hide.emit(event);\r\n  }\r\n\r\n  onMaximize(event: any) {\r\n    this.maximize.emit(event);\r\n  }\r\n}\r\n","<div [class]=\"classes.container\">\r\n  <p-dialog \r\n    [header]=\"header\"\r\n    [modal]=\"modal\"\r\n    [(visible)]=\"visible\"\r\n    [style]=\"style\"\r\n    [maximizable]=\"maximizable\"\r\n    [position]=\"position\"\r\n    [draggable]=\"draggable\"\r\n    [breakpoints]=\"breakpoints\"\r\n    [resizable]=\"resizable\"\r\n    [styleClass]=\"classes.container + ' ' + class\"\r\n    (onShow)=\"onShow($event)\"\r\n    (onHide)=\"onHide($event)\"\r\n    (onMaximize)=\"onMaximize($event)\">\r\n    <ng-content></ng-content>\r\n    <ng-template pTemplate=\"footer\">\r\n      <div [class]=\"classes.footer\">\r\n        <ng-content select=\"[footer]\"></ng-content>\r\n      </div>\r\n    </ng-template>\r\n  </p-dialog>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { EditorModule } from 'primeng/editor';\n\n@Component({\n  selector: 'universal-html-editor',\n  standalone: true,\n  imports: [CommonModule, EditorModule, FormsModule],\n  template: `\n    <div class=\"universal-html-editor\">\n      <label *ngIf=\"label\" [for]=\"editorId\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n        {{ label }}\n        <span *ngIf=\"required\" class=\"text-red-500 ml-1\">*</span>\n      </label>\n      <p-editor\n        [id]=\"editorId\"\n        [style]=\"{ height: height }\"\n        [placeholder]=\"placeholder\"\n        [(ngModel)]=\"value\"\n        (onTextChange)=\"onTextChange($event)\"\n        [readonly]=\"readonly\"\n        [formats]=\"formats\">\n      </p-editor>\n      <small *ngIf=\"helpText\" class=\"text-gray-500 mt-1 block\">{{ helpText }}</small>\n    </div>\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => UniversalHtmlEditorComponent),\n      multi: true\n    }\n  ]\n})\nexport class UniversalHtmlEditorComponent implements ControlValueAccessor {\n  @Input() label: string = '';\n  @Input() placeholder: string = 'Ievadiet HTML saturu...';\n  @Input() required: boolean = false;\n  @Input() readonly: boolean = false;\n  @Input() helpText: string = '';\n  @Input() height: string = '200px';\n  @Input() formats: string[] = [\n    'header', 'font', 'size',\n    'bold', 'italic', 'underline', 'strike',\n    'color', 'background',\n    'list', 'bullet', 'indent',\n    'link', 'image',\n    'align', 'clean'\n  ];\n\n  @Output() valueChange = new EventEmitter<string>();\n  @Output() textChange = new EventEmitter<any>();\n\n  value: string = '';\n  editorId: string = `html-editor-${Math.random().toString(36).substr(2, 9)}`;\n\n  private onChange = (value: string) => {};\n  private onTouched = () => {};\n\n  onTextChange(event: any): void {\n    this.value = event.htmlValue || '';\n    this.onChange(this.value);\n    this.onTouched();\n    this.valueChange.emit(this.value);\n    this.textChange.emit(event);\n  }\n\n  // ControlValueAccessor implementation\n  writeValue(value: string): void {\n    this.value = value || '';\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.readonly = isDisabled;\n  }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, OnDestroy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { UniversalDialogComponent } from '../dialog/dialog.component';\r\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\r\nimport {  UniversalInputComponent } from '../../forms/input/input.component';\r\nimport { ButtonComponentNew } from '../../../new/components/button/button.component';\r\n\r\nimport { FormConfig, FormFieldConfig } from '../../blocks-dynamic/dynamic-form/dynamic-form.component';\r\nimport { ButtonComponent } from '../../forms/button/button.component';\r\nimport { UniversalSelectComponent } from '../../forms/select/select.component';\r\nimport { CheckboxComponent } from '../../forms/checkbox/checkbox.component';\r\nimport { UniversalHtmlEditorComponent } from '../../forms/html-editor/html-editor.component';\r\n\r\nexport interface FilterParameter {\r\n  id: string;\r\n  key: string;\r\n  label: string;\r\n  type: 'text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' | 'range' | 'checkboxlist' | 'htmleditor';\r\n  dataType?: 'string' | 'number' | 'boolean' | 'array' | 'date'; // Original data type for type constraints\r\n  value?: any;\r\n  options?: any[];\r\n  optionLabel?: string;\r\n  optionValue?: string;\r\n  placeholder?: string;\r\n  required?: boolean;\r\n  allowedTypes?: ('text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' | 'range' | 'checkboxlist' | 'htmleditor')[]; // Computed allowed types\r\n  // Advanced filter properties\r\n  includeMode?: string; // Strapi 5 filter mode (e.g., '$eq', '$ne', '$in', '$notIn', etc.)\r\n  includeModeOptions?: { label: string; value: string }[]; // Available filter mode options\r\n  rangeConfig?: {\r\n    fromLabel?: string;\r\n    toLabel?: string;\r\n    fromPlaceholder?: string;\r\n    toPlaceholder?: string;\r\n  };\r\n}\r\n\r\nexport interface ApiField {\r\n  title: string;\r\n  key: string;\r\n  type: 'text' | 'number' | 'boolean' | 'object' | 'array' | 'relation' | 'media';\r\n  fullPath: string;\r\n  children?: ApiField[];\r\n}\r\n\r\nexport interface SavedFilter {\r\n  id: string;\r\n  name: string;\r\n  description?: string;\r\n  parameters: FilterParameter[];\r\n  createdAt: Date;\r\n  lastUsed?: Date;\r\n  private?: boolean;\r\n  /** Owner (user) id if provided by API */\r\n  ownerId?: number | null;\r\n}\r\n\r\nexport interface DynamicFilterConfig {\r\n  availableFields?: FilterParameter[];\r\n  allowCustomFields?: boolean;\r\n  maxFilters?: number;\r\n  storageKey?: string;\r\n  apiEndpoint?: string;\r\n  showSavedFilters?: boolean;\r\n  autoSave?: boolean;\r\n  showQuickFilter?: boolean; // Show standalone quick filter selector\r\n  apiUrl?: string;\r\n  headers?: import('@angular/common/http').HttpHeaders | {\r\n    [header: string]: string | string[];\r\n};\r\n  /**\r\n   * Optional endpoints to persist saved filters via API (e.g. Strapi collection).\r\n   * If provided, the component will load/save/delete saved filters using these endpoints.\r\n   * If not provided, localStorage will be used (backward compatible).\r\n   */\r\n  savedFiltersApi?: {\r\n    /** GET list endpoint returning saved filters */\r\n    listUrl: string;\r\n    /** POST create endpoint */\r\n    createUrl: string;\r\n    /** PUT update endpoint. If omitted, will default to `${createUrl}/:id` */\r\n    updateUrl?: string;\r\n    /** DELETE endpoint. If omitted, will default to `${createUrl}/:id` */\r\n    deleteUrl?: string;\r\n    /**\r\n     * Field mapping for API <-> SavedFilter.\r\n     * Defaults assume Strapi response: item.id and item.attributes.{title,description,filter}\r\n     */\r\n    idKey?: string; // default 'id'\r\n    titleKey?: string; // default 'title' | 'name'\r\n    descriptionKey?: string; // default 'description'\r\n    filterKey?: string; // default 'filter'\r\n    /** Optional API field key for the user relation/id. Defaults to 'user' */\r\n    userKey?: string;\r\n    /** Optional API field key for public flag. Defaults to 'public'. */\r\n    publicKey?: string;\r\n    /**\r\n     * If true, user will not be able to update an existing saved filter unless\r\n     * current user id equals the filter owner id from API. Default: false\r\n     */\r\n    enforceOwnership?: boolean;\r\n  };\r\n}\r\n\r\n\r\n@Component({\r\n  selector: 'dynamic-filter',\r\n  templateUrl: './dynamic-filter.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    HttpClientModule,\r\n    ButtonComponent,\r\n    UniversalInputComponent,\r\n    UniversalDialogComponent,\r\n    UniversalSelectComponent,\r\n    CheckboxComponent,\r\n    UniversalHtmlEditorComponent\r\n  ]\r\n})\r\nexport class DynamicFilterComponent implements OnInit, OnDestroy {\r\n  @Input() config: DynamicFilterConfig = { availableFields: [] };\r\n  @Input() visible: boolean = false;\r\n  @Input() header: string = 'Dynamic Filter';\r\n  \r\n  @Output() visibleChange = new EventEmitter<boolean>();\r\n  @Output() filterApply = new EventEmitter<any>();\r\n  @Output() filterReset = new EventEmitter<void>();\r\n  @Output() filterSave = new EventEmitter<SavedFilter>();\r\n  @Output() filterLoad = new EventEmitter<SavedFilter>();\r\n  \r\n  // Quick Filter specific outputs\r\n  @Output() quickFilterSelect = new EventEmitter<SavedFilter | null>();\r\n  @Output() quickFilterApply = new EventEmitter<any>();\r\n\r\n  // Current filter state\r\n  activeFilters: FilterParameter[] = [];\r\n  filterValues: { [key: string]: any } = {};\r\n  \r\n  // Saved filters\r\n  savedFilters: SavedFilter[] = [];\r\n  selectedSavedFilter: SavedFilter | null = null;\r\n  \r\n  // UI state\r\n  showAddFilter: boolean = false;\r\n  showSaveDialog: boolean = false;\r\n  showManageFilters: boolean = false;\r\n  expandedFilters: Set<string> = new Set(); // Track which filters are expanded\r\n  \r\n  // Quick Filter state\r\n  selectedSavedFilterId: string | null = null;\r\n  \r\n  // Add filter form\r\n  newFilterKey: string = '';\r\n  newFilterLabel: string = '';\r\n  newFilterType: string = 'text';\r\n  \r\n  // Save filter form\r\n  saveFilterName: string = '';\r\n  saveFilterDescription: string = '';\r\n  saveFilterPrivate: boolean = true;\r\n  \r\n  // Edit filter state\r\n  editingFilterId: string | null = null;\r\n  isEditMode: boolean = false;\r\n  \r\n  // API Field Selector Properties\r\n  showApiFieldSelector: boolean = false;\r\n  apiFields: ApiField[] = [];\r\n  selectedApiFieldPath: string = '';\r\n  loadingApiFields: boolean = false;\r\n  apiFieldsError: string | null = null;\r\n  \r\n  // Hierarchical field selection\r\n  fieldSelectionLevels: ApiField[][] = []; // Array of field arrays for each level\r\n  selectedFieldsAtLevel: (ApiField | null)[] = []; // Selected field at each level\r\n  currentSelectableFields: ApiField[] = []; // Fields available for selection at current level\r\n  \r\n  // Available field types\r\n  fieldTypes = [\r\n    { label: 'Text', value: 'text' },\r\n    { label: 'Number', value: 'number' },\r\n    { label: 'Select', value: 'select' },\r\n    { label: 'Multi-Select', value: 'multiselect' },\r\n    { label: 'Checkbox', value: 'checkbox' },\r\n    { label: 'Date', value: 'date' },\r\n    { label: 'HTML Editor', value: 'htmleditor' }\r\n  ]\r\n\r\n  // Strapi 5 filter options based on data type\r\n  private strapiFilterOptions = {\r\n    string: [\r\n      { label: 'Vienāds', value: '$eq' },\r\n      { label: 'Nevienāds', value: '$ne' },\r\n      { label: 'Iekļauj', value: '$contains' },\r\n      { label: 'Nekļauj', value: '$notContains' },\r\n      { label: 'Sākas ar', value: '$startsWith' },\r\n      { label: 'Beidz ar', value: '$endsWith' },\r\n      { label: 'Iekļauts', value: '$in' },\r\n      { label: 'Nav iekļauts', value: '$notIn' },\r\n      { label: 'Neeksistē', value: '$null' },\r\n      { label: 'Eksistē', value: '$notNull' }\r\n    ],\r\n    number: [\r\n      { label: 'Vienāds', value: '$eq' },\r\n      { label: 'Nevienāds', value: '$ne' },\r\n      { label: 'Lielāks', value: '$gt' },\r\n      { label: 'Lielāks vai vienāds', value: '$gte' },\r\n      { label: 'Mazāks', value: '$lt' },\r\n      { label: 'Mazāks vai vienāds', value: '$lte' },\r\n      { label: 'Iekļauts', value: '$in' },\r\n      { label: 'Nav iekļauts', value: '$notIn' },\r\n      { label: 'Neeksistē', value: '$null' },\r\n      { label: 'Eksistē', value: '$notNull' }\r\n    ],\r\n    boolean: [\r\n      { label: 'Vienāds', value: '$eq' },\r\n      { label: 'Nevienāds', value: '$ne' },\r\n      { label: 'Neeksistē', value: '$null' },\r\n      { label: 'Eksistē', value: '$notNull' }\r\n    ],\r\n    date: [\r\n      { label: 'Vienāds', value: '$eq' },\r\n      { label: 'Nevienāds', value: '$ne' },\r\n      { label: 'Lielāks', value: '$gt' },\r\n      { label: 'Lielāks vai vienāds', value: '$gte' },\r\n      { label: 'Mazāks', value: '$lt' },\r\n      { label: 'Mazāks vai vienāds', value: '$lte' },\r\n      { label: 'Starp', value: '$between' },\r\n      { label: 'Neeksistē', value: '$null' },\r\n      { label: 'Eksistē', value: '$notNull' }\r\n    ],\r\n    array: [\r\n      { label: 'Iekļauts', value: '$in' },\r\n      { label: 'Nav iekļauts', value: '$notIn' },\r\n      { label: 'Iekļauj', value: '$contains' },\r\n      { label: 'Neiekļauj', value: '$notContains' },\r\n      { label: 'Neeksistē', value: '$null' },\r\n      { label: 'Eksistē', value: '$notNull' }\r\n    ]\r\n  };\r\n\r\n  constructor(private http: HttpClient) {}\r\n\r\n  ngOnInit() {\r\n    try {\r\n      this.loadSavedFilters();\r\n      this.refreshAvailableFieldsCache();\r\n      this.availableFieldsToAdd = this.config.availableFields || [];\r\n      \r\n      // Initialize Strapi filter options for existing active filters\r\n      this.activeFilters.forEach(filter => {\r\n        // Ensure backward compatibility - convert old includeMode values\r\n        if (filter.includeMode === 'include' || filter.includeMode === 'exclude' || !filter.includeMode) {\r\n          filter.includeMode = '$eq'; // Default to equals filter\r\n        }\r\n        \r\n        // Set up Strapi filter options\r\n        this.setupStrapiFilterOptions(filter);\r\n      });\r\n      \r\n      this.updateFormConfig();\r\n      \r\n      // Auto-load last used filter if available\r\n      if (this.config.autoSave && this.savedFilters.length > 0) {\r\n        const lastUsed = this.savedFilters\r\n          .filter(f => f.lastUsed)\r\n          .sort((a, b) => new Date(b.lastUsed!).getTime() - new Date(a.lastUsed!).getTime())[0];\r\n        \r\n        if (lastUsed) {\r\n          this.loadFilter(lastUsed);\r\n        }\r\n      }\r\n      this.toggleApiFieldSelector()\r\n    } catch (error) {\r\n      console.error('Error initializing component:', error);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.config.autoSave) {\r\n      this.autoSaveCurrentFilter();\r\n    }\r\n  }\r\n\r\n  // Dialog visibility management\r\n  onDialogHide() {\r\n    this.visible = false;\r\n    this.visibleChange.emit(false);\r\n  }\r\n\r\n  // Filter parameter management\r\n  addFilter() {\r\n    if (!this.newFilterKey || !this.newFilterLabel) return;\r\n    \r\n    // Check if filter already exists\r\n    if (this.activeFilters.find(f => f.key === this.newFilterKey)) {\r\n      alert('Filter with this key already exists');\r\n      return;\r\n    }\r\n    \r\n    // Check max filters limit\r\n    if (this.config.maxFilters && this.activeFilters.length >= this.config.maxFilters) {\r\n      alert(`Maximum ${this.config.maxFilters} filters allowed`);\r\n      return;\r\n    }\r\n\r\n    // Infer data type from filter type for custom filters\r\n    let inferredDataType: string;\r\n    switch (this.newFilterType) {\r\n      case 'number':\r\n        inferredDataType = 'number';\r\n        break;\r\n      case 'checkbox':\r\n        inferredDataType = 'boolean';\r\n        break;\r\n      case 'date':\r\n        inferredDataType = 'date';\r\n        break;\r\n      case 'select':\r\n      case 'multiselect':\r\n        inferredDataType = 'array';\r\n        break;\r\n      default:\r\n        inferredDataType = 'string';\r\n    }\r\n\r\n    const newFilter: FilterParameter = {\r\n      id: this.generateId(),\r\n      key: this.newFilterKey,\r\n      label: this.newFilterLabel,\r\n      type: this.newFilterType as any,\r\n      dataType: inferredDataType as any,\r\n      placeholder: `Enter ${this.newFilterLabel.toLowerCase()}...`,\r\n      allowedTypes: this.getAllowedFilterTypes(inferredDataType),\r\n      includeMode: '$eq' // Default to equals filter\r\n    };\r\n\r\n    // Set up default configurations for the filter type\r\n    this.setupFilterTypeDefaults(newFilter, this.newFilterType);\r\n\r\n    // Add options for select/multiselect/checkboxlist types\r\n    if (['select', 'multiselect', 'checkboxlist'].includes(this.newFilterType)) {\r\n      if (!newFilter.options) {\r\n        newFilter.options = [];\r\n        newFilter.optionLabel = 'label';\r\n        newFilter.optionValue = 'value';\r\n      }\r\n    }\r\n\r\n    this.activeFilters.push(newFilter);\r\n    this.updateFormConfig();\r\n    this.updateAvailableFields();\r\n    this.expandedFilters.add(newFilter.id);\r\n    this.showAddFilter = false;\r\n    this.resetAddFilterForm();\r\n    \r\n    console.log('Custom filter added successfully:', newFilter);\r\n  }\r\n\r\n  removeFilter(filterId: string) {\r\n    try {\r\n      // Find the filter to remove\r\n      const filterToRemove = this.activeFilters.find(f => f.id === filterId);\r\n      if (filterToRemove) {\r\n        // Remove from active filters\r\n        this.activeFilters = this.activeFilters.filter(f => f.id !== filterId);\r\n        // Remove from filter values\r\n        delete this.filterValues[filterToRemove.key];\r\n        // Update available fields and form config\r\n        this.availableFieldsToAdd = this.config.availableFields?.filter(f => \r\n          !this.activeFilters.some(active => active.key === f.key)\r\n        ) || [];\r\n        this.updateFormConfig();\r\n      }\r\n    } catch (error) {\r\n      console.error('Error removing filter:', error);\r\n    }\r\n  }\r\n\r\n  addFilterFromAvailable(field: FilterParameter) {\r\n    // Simplified implementation for text-only filters\r\n    try {\r\n      // Check if filter already exists\r\n      if (this.activeFilters.some(f => f.key === field.key)) {\r\n        return;\r\n      }\r\n      \r\n      // Check max filters limit\r\n      if (this.config.maxFilters && this.activeFilters.length >= this.config.maxFilters) {\r\n        return;\r\n      }\r\n\r\n      // Create the filter with text type only\r\n      const newFilter: FilterParameter = {\r\n        id: this.generateId(),\r\n        key: field.key,\r\n        label: field.label,\r\n        type: 'text', // Always use text type\r\n        dataType: field.dataType || 'string',\r\n        placeholder: field.placeholder || 'Enter value...',\r\n        required: field.required,\r\n        includeMode: '$eq' // Default to equals filter\r\n      };\r\n      \r\n      // Set up filter mode options based on data type\r\n      this.setupFilterTypeDefaults(newFilter, newFilter.dataType || 'string');\r\n      \r\n      // Add to active filters\r\n      this.activeFilters.push(newFilter);\r\n      \r\n      // Initialize empty filter value\r\n      this.filterValues[newFilter.key] = '';\r\n      \r\n      // Update available fields and form config\r\n      this.availableFieldsToAdd = this.config.availableFields?.filter(f => \r\n        !this.activeFilters.some(active => active.key === f.key)\r\n      ) || [];\r\n      this.updateFormConfig();\r\n      \r\n      // Auto-expand the newly added filter for immediate configuration\r\n      this.expandedFilters.add(newFilter.id);\r\n      \r\n      console.log('Filter added from available:', newFilter.key, 'with initial value:', this.filterValues[newFilter.key]);\r\n\r\n    } catch (error) {\r\n      console.error('Error adding filter:', error);\r\n    }\r\n  }\r\n\r\n  // Method to initialize filter value based on type and data type\r\n  private initializeFilterValue(filter: FilterParameter) {\r\n    // Don't override existing values\r\n    if (this.filterValues[filter.key] !== undefined) {\r\n      return;\r\n    }\r\n\r\n    // Set appropriate initial value based on filter type and data type\r\n    switch (filter.type) {\r\n      case 'checkbox':\r\n        this.filterValues[filter.key] = false;\r\n        break;\r\n        \r\n      case 'multiselect':\r\n      case 'checkboxlist':\r\n        this.filterValues[filter.key] = [];\r\n        break;\r\n        \r\n      case 'range':\r\n        this.filterValues[filter.key] = { from: null, to: null };\r\n        break;\r\n        \r\n      case 'number':\r\n        // For number types, set a meaningful default based on data type\r\n        if (filter.dataType === 'boolean') {\r\n          this.filterValues[filter.key] = false;\r\n        } else {\r\n          this.filterValues[filter.key] = null;\r\n        }\r\n        break;\r\n        \r\n      case 'select':\r\n        this.filterValues[filter.key] = null;\r\n        break;\r\n        \r\n      case 'text':\r\n      case 'date':\r\n      default:\r\n        // For text and date types, leave as null initially\r\n        // User will need to enter a value\r\n        this.filterValues[filter.key] = null;\r\n        break;\r\n    }\r\n    \r\n    console.log(`Initialized filter value for ${filter.key} (${filter.type}):`, this.filterValues[filter.key]);\r\n  }\r\n\r\n  // Filter operations\r\n  applyFilter() {\r\n    console.log('Current filter values:', this.filterValues);\r\n    console.log('Active filters:', this.activeFilters);\r\n    \r\n    const filterData = this.buildFilterData();\r\n    console.log('Built filter data:', filterData);\r\n    \r\n    // Emit the filter data\r\n    this.filterApply.emit(filterData);\r\n    \r\n    // Make API call if endpoint is configured\r\n    if (this.config.apiEndpoint) {\r\n      console.log('Making API call to:', this.config.apiEndpoint);\r\n      this.http.post(this.config.apiEndpoint, filterData).subscribe({\r\n        next: (response) => {\r\n          console.log('Filter API response:', response);\r\n        },\r\n        error: (error) => {\r\n          console.error('Filter API error:', error);\r\n        }\r\n      });\r\n    }\r\n    \r\n    // Update last used timestamp for current saved filter\r\n    if (this.selectedSavedFilter) {\r\n      this.selectedSavedFilter.lastUsed = new Date();\r\n      this.saveSavedFilters();\r\n    }\r\n  }\r\n\r\n  resetFilter() {\r\n    // Clear all form values\r\n    this.filterValues = {};\r\n    this.selectedSavedFilter = null;\r\n    // Update form config to reflect cleared values\r\n    this.updateFormConfig();\r\n    // Emit reset event\r\n    this.filterReset.emit();\r\n  }\r\n\r\n  clearAllFilters() {\r\n    try {\r\n      this.activeFilters = [];\r\n      this.filterValues = {};\r\n      this.selectedSavedFilter = null;\r\n      // Update available fields and form config\r\n      this.availableFieldsToAdd = this.config.availableFields || [];\r\n      this.updateFormConfig();\r\n    } catch (error) {\r\n      console.error('Error clearing filters:', error);\r\n    }\r\n  }\r\n\r\n  // Saved filters management\r\n  saveCurrentFilter() {\r\n    // Use the new saveEditedFilter method which handles both new and edit modes\r\n    this.saveEditedFilter();\r\n  }\r\n\r\n  loadFilter(savedFilter: SavedFilter) {\r\n    this.selectedSavedFilter = savedFilter;\r\n    \r\n    // Load the saved filter configuration\r\n    this.activeFilters = JSON.parse(JSON.stringify(savedFilter.parameters));\r\n    \r\n    // Initialize Strapi filter options for loaded filters\r\n    this.activeFilters.forEach(filter => {\r\n      // Ensure backward compatibility - convert old includeMode values\r\n      if (filter.includeMode === 'include' || filter.includeMode === 'exclude' || !filter.includeMode) {\r\n        filter.includeMode = '$eq'; // Default to equals filter\r\n      }\r\n      \r\n      // Set up Strapi filter options\r\n      this.setupStrapiFilterOptions(filter);\r\n    });\r\n    \r\n    // Restore filter values\r\n    this.filterValues = {};\r\n    savedFilter.parameters.forEach(param => {\r\n      if (param.value !== undefined) {\r\n        this.filterValues[param.key] = param.value;\r\n      }\r\n    });\r\n    \r\n    // Pre-populate save form with loaded filter details\r\n    this.saveFilterName = savedFilter.name;\r\n    this.saveFilterDescription = savedFilter.description || '';\r\n    this.saveFilterPrivate = !!savedFilter.private;\r\n    \r\n    // Update last used timestamp\r\n    savedFilter.lastUsed = new Date();\r\n    this.saveSavedFilters();\r\n    \r\n    this.filterLoad.emit(savedFilter);\r\n    \r\n    console.log('Filter loaded for editing:', savedFilter.name);\r\n  }\r\n\r\n  deleteSavedFilter(filterId: string) {\r\n    if (!confirm('Are you sure you want to delete this saved filter?')) return;\r\n\r\n    const doLocal = () => {\r\n      this.savedFilters = this.savedFilters.filter(f => f.id !== filterId);\r\n      if (this.selectedSavedFilter?.id === filterId) this.selectedSavedFilter = null;\r\n      if (this.editingFilterId === filterId) this.exitEditMode();\r\n      this.saveSavedFilters();\r\n    };\r\n\r\n    // If API configured, call DELETE; otherwise use local storage\r\n    if (this.config.savedFiltersApi) {\r\n      const { deleteUrl, createUrl } = this.config.savedFiltersApi;\r\n      const url = (deleteUrl || `${createUrl}/${filterId}`).replace(':id', filterId);\r\n      const httpOptions: any = {};\r\n      if (this.config.headers) httpOptions.headers = this.config.headers;\r\n      this.http.delete(url, httpOptions).subscribe({\r\n        next: () => doLocal(),\r\n        error: () => doLocal() // fall back to local even if API fails\r\n      });\r\n    } else {\r\n      doLocal();\r\n    }\r\n  }\r\n\r\n  // Edit filter functionality\r\n  editSavedFilter(savedFilter: SavedFilter) {\r\n    // Enter edit mode\r\n    this.isEditMode = true;\r\n    this.editingFilterId = savedFilter.id;\r\n    \r\n    // Load the filter for editing\r\n    this.loadFilter(savedFilter);\r\n    \r\n    // Pre-populate save dialog with current filter details\r\n    this.saveFilterName = savedFilter.name;\r\n    this.saveFilterDescription = savedFilter.description || '';\r\n    \r\n    console.log('Editing filter:', savedFilter.name, 'ID:', savedFilter.id);\r\n  }\r\n\r\n  exitEditMode() {\r\n    this.isEditMode = false;\r\n    this.editingFilterId = null;\r\n    this.resetSaveFilterForm();\r\n    console.log('Exited edit mode');\r\n  }\r\n\r\n  cancelSaveDialog() {\r\n    this.showSaveDialog = false;\r\n    this.resetSaveFilterForm();\r\n  }\r\n\r\n  saveEditedFilter() {\r\n    if (!this.saveFilterName.trim()) {\r\n      alert('Please enter a filter name');\r\n      return;\r\n    }\r\n\r\n    // If a filter is currently loaded/selected, update it\r\n    if (this.selectedSavedFilter) {\r\n      // Find the existing filter to update\r\n      const existingFilterIndex = this.savedFilters.findIndex(f => f.id === this.selectedSavedFilter!.id);\r\n      \r\n      if (existingFilterIndex === -1) {\r\n        alert('Error: Could not find filter to update');\r\n        return;\r\n      }\r\n\r\n      // Update the existing filter\r\n      const updatedFilter: SavedFilter = {\r\n        ...this.savedFilters[existingFilterIndex],\r\n        name: this.saveFilterName.trim(),\r\n        description: this.saveFilterDescription.trim(),\r\n        parameters: JSON.parse(JSON.stringify(this.activeFilters)),\r\n        private: this.saveFilterPrivate\r\n      };\r\n\r\n      // Set current values\r\n      updatedFilter.parameters.forEach(param => {\r\n        param.value = this.filterValues[param.key];\r\n      });\r\n\r\n      const finalizeLocal = () => {\r\n        // Replace the existing filter\r\n        this.savedFilters[existingFilterIndex] = updatedFilter;\r\n        this.selectedSavedFilter = updatedFilter;\r\n        // Preserve quick filter selection after update\r\n        this.selectedSavedFilterId = updatedFilter.id;\r\n        this.saveSavedFilters();\r\n        this.filterSave.emit(updatedFilter);\r\n        console.log('Filter updated successfully:', updatedFilter.name);\r\n      };\r\n\r\n      // If API configured, send PUT/POST to API\r\n      if (this.config.savedFiltersApi) {\r\n        const { updateUrl, createUrl } = this.config.savedFiltersApi;\r\n        const id = updatedFilter.id;\r\n        const url = (updateUrl || `${createUrl}/${id}`).replace(':id', id);\r\n        const httpOptions: any = {};\r\n        if (this.config.headers) httpOptions.headers = this.config.headers;\r\n        const payload = this.buildSavedFilterPayload(updatedFilter);\r\n        this.http.put(url, payload, httpOptions).subscribe({\r\n          next: () => finalizeLocal(),\r\n          error: () => finalizeLocal()\r\n        });\r\n      } else {\r\n        finalizeLocal();\r\n      }\r\n    } else {\r\n      // No filter loaded, create new filter\r\n      const savedFilter: SavedFilter = {\r\n        id: this.generateId(),\r\n        name: this.saveFilterName.trim(),\r\n        description: this.saveFilterDescription.trim(),\r\n        parameters: JSON.parse(JSON.stringify(this.activeFilters)),\r\n        createdAt: new Date()\r\n      };\r\n      (savedFilter as any).private = this.saveFilterPrivate;\r\n\r\n      // Set current values\r\n      savedFilter.parameters.forEach(param => {\r\n        param.value = this.filterValues[param.key];\r\n      });\r\n\r\n      const finalizeLocal = () => {\r\n        this.savedFilters.push(savedFilter);\r\n        // Set the newly created filter as selected and preserve quick filter selection\r\n        this.selectedSavedFilter = savedFilter;\r\n        this.selectedSavedFilterId = savedFilter.id;\r\n        this.saveSavedFilters();\r\n        this.filterSave.emit(savedFilter);\r\n        console.log('New filter created:', savedFilter.name);\r\n      };\r\n\r\n      if (this.config.savedFiltersApi) {\r\n        const { createUrl } = this.config.savedFiltersApi;\r\n        const httpOptions: any = {};\r\n        if (this.config.headers) httpOptions.headers = this.config.headers;\r\n        const payload = this.buildSavedFilterPayload(savedFilter);\r\n        this.http.post(createUrl, payload, httpOptions).subscribe({\r\n          next: (res: any) => {\r\n            // Try to capture ID from response (Strapi style)\r\n            const id = this.extractIdFromApiResponse(res);\r\n            if (id) savedFilter.id = id;\r\n            finalizeLocal();\r\n          },\r\n          error: () => finalizeLocal()\r\n        });\r\n      } else {\r\n        finalizeLocal();\r\n      }\r\n    }\r\n    \r\n    // Close dialog and reset form\r\n    this.resetSaveFilterForm();\r\n    this.showSaveDialog = false;\r\n  }\r\n\r\n  // Local storage operations + optional API\r\n  private loadSavedFilters() {\r\n    // If API configured, prefer loading from API\r\n    if (this.config.savedFiltersApi?.listUrl) {\r\n      const httpOptions: any = {};\r\n      if (this.config.headers) httpOptions.headers = this.config.headers;\r\n      this.http.get<any>(this.config.savedFiltersApi.listUrl, httpOptions).subscribe({\r\n        next: (res) => {\r\n          try {\r\n            this.savedFilters = this.mapSavedFiltersFromApi(res);\r\n          } catch (e) {\r\n            console.warn('Falling back to local storage for saved filters due to mapping error:', e);\r\n            this.loadSavedFiltersFromLocal();\r\n          }\r\n        },\r\n        error: () => {\r\n          this.loadSavedFiltersFromLocal();\r\n        }\r\n      });\r\n    } else {\r\n      this.loadSavedFiltersFromLocal();\r\n    }\r\n  }\r\n\r\n  private loadSavedFiltersFromLocal() {\r\n    const storageKey = this.config.storageKey || 'numo-dynamic-filters';\r\n    const saved = localStorage.getItem(storageKey);\r\n    if (saved) {\r\n      try {\r\n        this.savedFilters = JSON.parse(saved).map((f: any) => ({\r\n          ...f,\r\n          createdAt: new Date(f.createdAt),\r\n          lastUsed: f.lastUsed ? new Date(f.lastUsed) : undefined\r\n        }));\r\n      } catch (error) {\r\n        console.error('Error loading saved filters:', error);\r\n        this.savedFilters = [];\r\n      }\r\n    }\r\n  }\r\n\r\n  private saveSavedFilters() {\r\n    const storageKey = this.config.storageKey || 'numo-dynamic-filters';\r\n    localStorage.setItem(storageKey, JSON.stringify(this.savedFilters));\r\n  }\r\n\r\n  private autoSaveCurrentFilter() {\r\n    if (this.activeFilters.length === 0) return;\r\n    \r\n    const autoSaveFilter: SavedFilter = {\r\n      id: 'auto-save',\r\n      name: 'Auto-saved Filter',\r\n      description: 'Automatically saved filter configuration',\r\n      parameters: JSON.parse(JSON.stringify(this.activeFilters)),\r\n      createdAt: new Date()\r\n    };\r\n    \r\n    // Set current values\r\n    autoSaveFilter.parameters.forEach(param => {\r\n      param.value = this.filterValues[param.key];\r\n    });\r\n    \r\n    // Remove existing auto-save filter\r\n    this.savedFilters = this.savedFilters.filter(f => f.id !== 'auto-save');\r\n    this.savedFilters.unshift(autoSaveFilter);\r\n    this.saveSavedFilters();\r\n  }\r\n\r\n  // Dynamic form integration\r\n  buildFormConfig(): FormConfig {\r\n    console.log('buildFormConfig');\r\n    const fields: FormFieldConfig[] = this.activeFilters.map(filter => ({\r\n      key: filter.key,\r\n      type: filter.type as any,\r\n      label: filter.label,\r\n      placeholder: filter.placeholder,\r\n      required: filter.required || false,\r\n      options: filter.options || [],\r\n      optionLabel: filter.optionLabel || 'label',\r\n      optionValue: filter.optionValue || 'value',\r\n      defaultValue: this.filterValues[filter.key],\r\n      // Multiselect specific properties\r\n      filter: filter.type === 'multiselect' ? true : undefined,\r\n      showClear: filter.type === 'multiselect' ? true : undefined,\r\n      display: filter.type === 'multiselect' ? 'chip' : undefined,\r\n      maxSelectedLabels: filter.type === 'multiselect' ? 3 : undefined\r\n    }));\r\n\r\n    return {\r\n      sections: [\r\n        {\r\n          title: 'Filter Parameters',\r\n          rows: [\r\n            {\r\n              fields: fields,\r\n              layout: 'grid',\r\n              gridCols: 2\r\n            }\r\n          ]\r\n        }\r\n      ],\r\n      submitButton: {\r\n        label: 'Apply Filter',\r\n        icon: 'pi pi-filter',\r\n        severity: 'primary'\r\n      },\r\n      resetButton: {\r\n        label: 'Reset',\r\n        icon: 'pi pi-refresh',\r\n        severity: 'secondary',\r\n        outlined: true\r\n      }\r\n    };\r\n  }\r\n\r\n  onFormSubmit(formData: any) {\r\n    console.log('Form submitted with data:', formData);\r\n    this.filterValues = { ...formData };\r\n    this.applyFilter();\r\n  }\r\n\r\n  onFormReset() {\r\n    // Clear all form values and reset UI\r\n    this.filterValues = {};\r\n    this.selectedSavedFilter = null;\r\n    // Force form to reset by updating form config\r\n    this.updateFormConfig();\r\n  }\r\n\r\n  onFormChange(fieldChangeEvent: any) {\r\n    console.log('onFormChange called with:', fieldChangeEvent);\r\n    \r\n    // Handle individual field change events from dynamic form\r\n    if (fieldChangeEvent && fieldChangeEvent.key && fieldChangeEvent.value !== undefined) {\r\n      // Update the specific field in filterValues\r\n      this.filterValues = {\r\n        ...this.filterValues,\r\n        [fieldChangeEvent.key]: fieldChangeEvent.value\r\n      };\r\n    } else {\r\n      // Fallback: treat as complete form data object\r\n      this.filterValues = { ...fieldChangeEvent };\r\n    }\r\n    \r\n    console.log('filterValues updated to:', this.filterValues);\r\n  }\r\n\r\n  // Utility methods\r\n  private buildFilterData() {\r\n    console.log('buildFilterData called. Current filterValues:', this.filterValues);\r\n    console.log('Active filters:', this.activeFilters.map(f => ({ key: f.key, type: f.type, includeMode: f.includeMode })));\r\n    \r\n    const data: any = {};\r\n    \r\n    this.activeFilters.forEach(filter => {\r\n      let value = this.filterValues[filter.key];\r\n      const operator = filter.includeMode || '$eq'; // Default to equals if no operator set\r\n      \r\n      console.log(`Processing filter ${filter.key} (${filter.type}):`, { value, operator });\r\n      if(operator === '$null' || operator === '$notNull') {\r\n       value = true;\r\n      }\r\n      // Handle different value types appropriately\r\n      if (value !== undefined && value !== null) {\r\n        let shouldInclude = false;\r\n        let processedValue = value;\r\n       \r\n\r\n     \r\n        \r\n        // For arrays (multiselect, checkboxlist), include if not empty\r\n        if (Array.isArray(value)) {\r\n          shouldInclude = value.length > 0;\r\n        }\r\n        // For strings, exclude empty strings\r\n        else if (typeof value === 'string') {\r\n          shouldInclude = value.trim() !== '';\r\n        }\r\n        // For other types (numbers, booleans, objects), include as-is\r\n        else {\r\n          shouldInclude = true;\r\n        }\r\n        \r\n        // Include the filter with both value and operator\r\n        if (shouldInclude) {\r\n          data[filter.key] = {\r\n            value: processedValue,\r\n            operator: operator\r\n          };\r\n        }\r\n      }\r\n    });\r\n    \r\n    console.log('Built filter data with operators:', data);\r\n    return data;\r\n  }\r\n\r\n\r\n\r\n  private generateId(): string {\r\n    return Math.random().toString(36).substr(2, 9);\r\n  }\r\n\r\n  // ===== API mapping helpers =====\r\n  private mapSavedFiltersFromApi(res: any): SavedFilter[] {\r\n    const idKey = this.config.savedFiltersApi?.idKey || 'id';\r\n    const titleKey = this.config.savedFiltersApi?.titleKey || 'title';\r\n    const descriptionKey = this.config.savedFiltersApi?.descriptionKey || 'description';\r\n    const filterKey = this.config.savedFiltersApi?.filterKey || 'filter';\r\n    const publicKey = this.config.savedFiltersApi?.publicKey || 'public';\r\n    const userKey = this.config.savedFiltersApi?.userKey || 'user';\r\n\r\n    // Strapi-style: { data: [ { id, attributes: { title, description, filter } } ] }\r\n    const items = Array.isArray(res?.data) ? res.data : Array.isArray(res) ? res : [];\r\n    return items.map((item: any) => {\r\n      const attr = item.attributes || item;\r\n      const id = (attr && attr[idKey] !== undefined ? attr[idKey] : undefined)\r\n        ?? (item && item[idKey] !== undefined ? item[idKey] : undefined)\r\n        ?? item?.id;\r\n      const name = attr[titleKey] ?? attr.name ?? attr.title ?? 'Unnamed';\r\n      const desc = attr[descriptionKey] ?? '';\r\n      // When publicKey is 'private', this reads private boolean; when 'public', reads public boolean\r\n      const privateOrPublicVal = (attr as any)[publicKey];\r\n      let isPrivate = false;\r\n      if (publicKey === 'private') {\r\n        isPrivate = Boolean(privateOrPublicVal);\r\n      } else {\r\n        // publicKey === 'public': if defined, invert; if undefined, default false\r\n        if (privateOrPublicVal === undefined || privateOrPublicVal === null) {\r\n          isPrivate = false;\r\n        } else {\r\n          isPrivate = !Boolean(privateOrPublicVal);\r\n        }\r\n      }\r\n      // Extract owner id from populated relation in various possible shapes\r\n      let ownerId: number | null = null;\r\n      const userRel = attr[userKey] ?? attr.user;\r\n      if (userRel) {\r\n        if (typeof userRel?.id === 'number') ownerId = userRel.id;\r\n        else if (typeof userRel?.data?.id === 'number') ownerId = userRel.data.id;\r\n        else if (Array.isArray(userRel?.data) && userRel.data[0]?.id) ownerId = userRel.data[0].id;\r\n      }\r\n      let parameters: FilterParameter[] = [];\r\n      const rawFilter = attr[filterKey];\r\n      if (rawFilter) {\r\n        try {\r\n          const obj = typeof rawFilter === 'string' ? JSON.parse(rawFilter) : rawFilter;\r\n          parameters = Array.isArray(obj.parameters) ? obj.parameters : [];\r\n        } catch (_) {\r\n          parameters = [];\r\n        }\r\n      }\r\n      return {\r\n        id: String(id || this.generateId()),\r\n        name,\r\n        description: desc,\r\n        parameters,\r\n        createdAt: new Date(),\r\n        private: isPrivate,\r\n        ownerId\r\n      } as SavedFilter;\r\n    });\r\n  }\r\n\r\n  private buildSavedFilterPayload(filter: SavedFilter): any {\r\n    // Default payload matches Strapi style: { data: { title, description, filter } }\r\n    const titleKey = this.config.savedFiltersApi?.titleKey || 'title';\r\n    const descriptionKey = this.config.savedFiltersApi?.descriptionKey || 'description';\r\n    const filterKey = this.config.savedFiltersApi?.filterKey || 'filter';\r\n    const userKey = this.config.savedFiltersApi?.userKey || 'user';\r\n    const publicKey = this.config.savedFiltersApi?.publicKey || 'public';\r\n    const filterObj = { parameters: filter.parameters?.map(p => ({ ...p })) || [] };\r\n    // Send as STRINGIFIED JSON per request\r\n    const body: any = {\r\n      [titleKey]: filter.name,\r\n      [descriptionKey]: filter.description || '',\r\n      [filterKey]: JSON.stringify(filterObj)\r\n    };\r\n    // Attach current user id if available\r\n    const userId = this.getCurrentUserId();\r\n    if (userId) {\r\n      body[userKey] = userId;\r\n    }\r\n    // Attach public flag if provided on filter object\r\n    if (typeof filter.private === 'boolean') {\r\n      body[publicKey] = filter.private;\r\n    }\r\n    // If backend expects Strapi { data: ... }\r\n    return { data: body };\r\n  }\r\n\r\n  private extractIdFromApiResponse(res: any): string | null {\r\n    // Try Strapi create response: { data: { id, attributes: { ... } } }\r\n    if (res?.data?.id) {\r\n      return String(res.data.id);\r\n    }\r\n    // Sometimes APIs return the created object directly with id\r\n    if (res?.id) {\r\n      return String(res.id);\r\n    }\r\n    // Or arrays\r\n    if (Array.isArray(res?.data) && res.data.length && res.data[0]?.id) {\r\n      return String(res.data[0].id);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // UI helper: whether current user may save the current filter (shows/hides Save button)\r\n  canSaveCurrentFilter(): boolean {\r\n    // If enforcement is off, always allow\r\n    if (!this.config.savedFiltersApi?.enforceOwnership) return true;\r\n    // If creating a new filter (no selected saved), allow\r\n    if (!this.selectedSavedFilter) return true;\r\n    // If selected filter has no owner info, allow by default\r\n    const ownerId = this.selectedSavedFilter.ownerId;\r\n    if (ownerId == null) return true;\r\n    // Compare with current user id\r\n    const currentUserId = this.getCurrentUserId();\r\n    if (currentUserId == null) return true; // no user in LS -> don't block UI\r\n    return ownerId === currentUserId;\r\n  }\r\n\r\n  /**\r\n   * Safely read current user id from localStorage.\r\n   * Expects key 'strapi_user' as JSON with shape { id: number } or { user: { id: number } }.\r\n   */\r\n  private getCurrentUserId(): number | null {\r\n    try {\r\n      if (typeof window === 'undefined' || !('localStorage' in window)) return null;\r\n      const raw = localStorage.getItem('strapi_user');\r\n      if (!raw) return null;\r\n      const obj = JSON.parse(raw);\r\n      if (obj && typeof obj.id === 'number') return obj.id;\r\n      if (obj && obj.user && typeof obj.user.id === 'number') return obj.user.id;\r\n      return null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  resetAddFilterForm() {\r\n    this.newFilterKey = '';\r\n    this.newFilterLabel = '';\r\n    this.newFilterType = 'text';\r\n  }\r\n\r\n  // API Field Management Methods\r\n  async loadApiFields(apiUrl: string) {\r\n    if (!apiUrl) {\r\n      this.apiFieldsError = 'API URL is required';\r\n      return;\r\n    }\r\n\r\n    this.loadingApiFields = true;\r\n    this.apiFieldsError = null;\r\n\r\n    try {\r\n      const url = apiUrl;\r\n      console.log('Loading API fields from:', url);\r\n      \r\n      // Prepare HTTP options with headers if available\r\n      const httpOptions: any = {};\r\n      if (this.config.headers) {\r\n        const headers = this.config.headers;\r\n        if (headers && Object.keys(headers).length > 0) {\r\n          httpOptions.headers = headers;\r\n          console.log('Using headers for API call:', Object.keys(headers));\r\n        }\r\n      }\r\n      \r\n      const response = await this.http.get<ApiField[]>(url, httpOptions).toPromise();\r\n      if (response && Array.isArray(response)) {\r\n        this.apiFields = response;\r\n        this.initializeFieldSelection();\r\n      } else {\r\n        this.apiFieldsError = 'Invalid response format from API';\r\n      }\r\n    } catch (error) {\r\n      console.error('Error loading API fields:', error);\r\n      this.apiFieldsError = `Failed to load fields: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n    } finally {\r\n      this.loadingApiFields = false;\r\n    }\r\n  }\r\n\r\n  private flattenApiFields(fields: ApiField[], parentPath: string = ''): ApiField[] {\r\n    const flattened: ApiField[] = [];\r\n    \r\n    fields.forEach(field => {\r\n      // Add the current field\r\n      flattened.push({\r\n        ...field,\r\n        fullPath: field.fullPath || (parentPath ? `${parentPath}.${field.key}` : field.key)\r\n      });\r\n      \r\n      // Recursively add children\r\n      if (field.children && field.children.length > 0) {\r\n        const childFields = this.flattenApiFields(\r\n          field.children, \r\n          field.fullPath || (parentPath ? `${parentPath}.${field.key}` : field.key)\r\n        );\r\n        flattened.push(...childFields);\r\n      }\r\n    });\r\n    \r\n    return flattened;\r\n  }\r\n\r\n  addFilterFromApiField(apiField: ApiField) {\r\n    if (!apiField) return;\r\n    \r\n    // Check if filter already exists\r\n    if (this.activeFilters.find(f => f.key === apiField.fullPath)) {\r\n      alert('Filter with this field already exists');\r\n      return;\r\n    }\r\n    \r\n    // Check max filters limit\r\n    if (this.config.maxFilters && this.activeFilters.length >= this.config.maxFilters) {\r\n      alert(`Maximum ${this.config.maxFilters} filters allowed`);\r\n      return;\r\n    }\r\n\r\n    // Map API field type to component field type\r\n    const componentType = this.mapApiTypeToComponentType(apiField.type);\r\n    const dataType = this.mapApiTypeToDataType(apiField.type);\r\n    \r\n    const newFilter: FilterParameter = {\r\n      id: this.generateId(),\r\n      key: apiField.fullPath,\r\n      label: apiField.title,\r\n      type: componentType,\r\n      dataType: dataType,\r\n      placeholder: `Enter ${apiField.title.toLowerCase()}...`,\r\n      allowedTypes: this.getAllowedFilterTypes(dataType),\r\n      includeMode: '$eq' // Default to equals filter\r\n    };\r\n\r\n    // Set up default configurations for the filter type\r\n    this.setupFilterTypeDefaults(newFilter, componentType);\r\n    this.setupStrapiFilterOptions(newFilter);\r\n    \r\n    // Initialize filter value\r\n    this.initializeFilterValue(newFilter);\r\n    \r\n    this.activeFilters.push(newFilter);\r\n    this.updateFormConfig();\r\n    this.updateAvailableFields();\r\n    this.expandedFilters.add(newFilter.id);\r\n    \r\n    // Clear selection\r\n    this.selectedApiFieldPath = '';\r\n    \r\n    console.log('Filter added from API field:', newFilter);\r\n  }\r\n\r\n  private mapApiTypeToComponentType(apiType: string): 'text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' | 'range' | 'checkboxlist' {\r\n    switch (apiType) {\r\n      case 'number':\r\n        return 'number';\r\n      case 'boolean':\r\n        return 'checkbox';\r\n      case 'array':\r\n        return 'multiselect';\r\n      case 'relation':\r\n        return 'select';\r\n      case 'media':\r\n        return 'text'; // Could be enhanced to handle file uploads\r\n      case 'object':\r\n      case 'text':\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n  private mapApiTypeToDataType(apiType: string): 'string' | 'number' | 'boolean' | 'array' | 'date' {\r\n    switch (apiType) {\r\n      case 'number':\r\n        return 'number';\r\n      case 'boolean':\r\n        return 'boolean';\r\n      case 'array':\r\n      case 'relation':\r\n        return 'array';\r\n      case 'object':\r\n      case 'media':\r\n      case 'text':\r\n      default:\r\n        return 'string';\r\n    }\r\n  }\r\n\r\n  toggleApiFieldSelector() {\r\n    this.showApiFieldSelector = !this.showApiFieldSelector;\r\n    \r\n    // Load API fields when opening for the first time\r\n    if (this.showApiFieldSelector && this.apiFields.length === 0 && !this.loadingApiFields) {\r\n      // Extract API URL from config or use a default pattern\r\n      const apiUrl = this.extractApiUrl();\r\n      if (apiUrl) {\r\n        this.loadApiFields(apiUrl);\r\n      } else {\r\n        this.apiFieldsError = 'API URL not configured. Please set apiUrl in component config.';\r\n      }\r\n    }\r\n  }\r\n\r\n  extractApiUrl(): string | null {\r\n    // Try to extract from various possible sources\r\n    if ((this.config as any).apiUrl) {\r\n      return (this.config as any).apiUrl;\r\n    }\r\n    \r\n    // Try to extract from global config or environment\r\n    if (typeof window !== 'undefined' && (window as any).apiUrl) {\r\n      return (window as any).apiUrl;\r\n    }\r\n    \r\n    // Default pattern - could be configured\r\n    return 'http://localhost:1337/api/';\r\n  }\r\n\r\n  // Hierarchical Field Selector Methods\r\n  initializeFieldSelection() {\r\n    if (this.apiFields.length > 0) {\r\n      this.fieldSelectionLevels = [this.apiFields];\r\n      this.selectedFieldsAtLevel = [null];\r\n      this.currentSelectableFields = this.apiFields;\r\n    }\r\n  }\r\n\r\n  onFieldSelectionChange(levelIndex: number, selectedKey: string | null) {\r\n    // Find the selected field object from the key\r\n    const selectedField = selectedKey ? \r\n      this.fieldSelectionLevels[levelIndex]?.find(f => f.key === selectedKey) || null : \r\n      null;\r\n    \r\n    // Update the selected field at this level\r\n    this.selectedFieldsAtLevel[levelIndex] = selectedField;\r\n    \r\n    // Clear all levels after this one\r\n    this.fieldSelectionLevels = this.fieldSelectionLevels.slice(0, levelIndex + 1);\r\n    this.selectedFieldsAtLevel = this.selectedFieldsAtLevel.slice(0, levelIndex + 1);\r\n    \r\n    if (selectedField && selectedField.children && selectedField.children.length > 0) {\r\n      // Field has children - add next level\r\n      this.fieldSelectionLevels.push(selectedField.children);\r\n      this.selectedFieldsAtLevel.push(null);\r\n    }\r\n  }\r\n\r\n  canAddField(field: ApiField | null): boolean {\r\n    // Can only add fields that don't have children (leaf fields)\r\n    return field !== null && (!field.children || field.children.length === 0);\r\n  }\r\n\r\n  getSelectedLeafField(): ApiField | null {\r\n    // Return the last selected field that is a leaf (has no children)\r\n    for (let i = this.selectedFieldsAtLevel.length - 1; i >= 0; i--) {\r\n      const field = this.selectedFieldsAtLevel[i];\r\n      if (field && this.canAddField(field)) {\r\n        return field;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  addSelectedApiField() {\r\n    const leafField = this.getSelectedLeafField();\r\n    if (leafField) {\r\n      // Build the full path for the field\r\n      const pathParts: string[] = [];\r\n      for (let i = 0; i < this.selectedFieldsAtLevel.length; i++) {\r\n        const field = this.selectedFieldsAtLevel[i];\r\n        if (field) {\r\n          pathParts.push(field.key);\r\n        }\r\n      }\r\n      const fullPath = pathParts.join('.');\r\n      \r\n      // Create filter parameter from the selected field\r\n      const filterParam: FilterParameter = {\r\n        id: fullPath.replace(/\\./g, '_'),\r\n        key: fullPath,\r\n        label: leafField.title,\r\n        type: this.mapApiFieldTypeToFilterType(leafField.type),\r\n        placeholder: `Filter by ${leafField.title.toLowerCase()}...`\r\n      };\r\n      \r\n      // Add the filter\r\n      this.addFilterFromAvailable(filterParam);\r\n      \r\n      // Reset selection\r\n      this.resetFieldSelection();\r\n    }\r\n  }\r\n\r\n  resetFieldSelection() {\r\n    this.fieldSelectionLevels = this.apiFields.length > 0 ? [this.apiFields] : [];\r\n    this.selectedFieldsAtLevel = [null];\r\n  }\r\n\r\n  mapApiFieldTypeToFilterType(apiType: string): 'text' | 'number' | 'checkbox' | 'date' | 'select' {\r\n    switch (apiType) {\r\n      case 'number':\r\n      case 'integer':\r\n      case 'decimal':\r\n      case 'float':\r\n        return 'number';\r\n      case 'boolean':\r\n        return 'checkbox';\r\n      case 'date':\r\n      case 'datetime':\r\n      case 'timestamp':\r\n        return 'date';\r\n      case 'select':\r\n      case 'enumeration':\r\n        return 'select';\r\n      case 'text':\r\n      case 'string':\r\n      case 'richtext':\r\n      case 'email':\r\n      case 'password':\r\n      case 'uid':\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n  // Helper methods\r\n\r\n  resetSaveFilterForm() {\r\n    this.saveFilterName = '';\r\n    this.saveFilterDescription = '';\r\n  }\r\n\r\n  onSavedFilterSelect(filterId: string) {\r\n    const savedFilter = this.savedFilters.find(f => f.id === filterId);\r\n    if (savedFilter) {\r\n      this.loadFilter(savedFilter);\r\n    }\r\n    console.log(filterId,'filterId')\r\n    if (filterId ===null || filterId ===undefined) {\r\n      this.clearAllFilters();\r\n    }\r\n  }\r\n\r\n  refreshAvailableFieldsCache() {\r\n    this.updateAvailableFields();\r\n  }\r\n\r\n  // Cache for available fields to prevent repeated calculations\r\n  private _availableFieldsCache: FilterParameter[] = [];\r\n  private _lastActiveFiltersKeys: string[] = [];\r\n  \r\n  // Available fields property (not a getter to avoid change detection loops)\r\n  availableFieldsToAdd: FilterParameter[] = [];\r\n  \r\n  // Form config property (not a method to avoid change detection loops)\r\n  formConfig: FormConfig = { sections: [] };\r\n  \r\n  // Type mapping for allowed filter types based on data type\r\n  private getAllowedFilterTypes(dataType?: string): ('text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' | 'range' | 'checkboxlist' | 'htmleditor')[] {\r\n    switch (dataType) {\r\n      case 'string':\r\n        return ['text', 'select', 'multiselect', 'checkboxlist', 'htmleditor'];\r\n      case 'number':\r\n        return ['number', 'select', 'range'];\r\n      case 'boolean':\r\n        return ['checkbox', 'select'];\r\n      case 'array':\r\n        return ['select', 'multiselect', 'checkboxlist'];\r\n      case 'date':\r\n        return ['date', 'text', 'select', 'range'];\r\n      default:\r\n        return ['text', 'number', 'select', 'multiselect', 'checkbox', 'date', 'range', 'checkboxlist', 'htmleditor'];\r\n    }\r\n  }\r\n  \r\n  // Method to update the form configuration\r\n  private updateFormConfig() {\r\n    this.formConfig = this.buildFormConfig();\r\n    console.log('Form config updated:', this.formConfig);\r\n  }\r\n\r\n\r\n  // Method to change filter type for active filters\r\n  changeFilterType(filterId: string, newType: 'text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' | 'range' | 'checkboxlist' | 'htmleditor') {\r\n    try {\r\n      const filter = this.activeFilters.find(f => f.id === filterId);\r\n      if (!filter) {\r\n        console.error('Filter not found:', filterId);\r\n        return;\r\n      }\r\n      \r\n      // Check if the new type is allowed for this filter's data type\r\n      if (filter.allowedTypes && !filter.allowedTypes.includes(newType)) {\r\n        console.error('Filter type not allowed:', newType, 'for data type:', filter.dataType);\r\n        return;\r\n      }\r\n      \r\n      // Clear current value when changing type (to avoid type conflicts)\r\n      delete this.filterValues[filter.key];\r\n      \r\n      // Update filter type\r\n      filter.type = newType;\r\n      \r\n      // Set up default configurations for new types\r\n      this.setupFilterTypeDefaults(filter, newType);\r\n      \r\n      // Update form config to reflect the change\r\n      this.updateFormConfig();\r\n      \r\n      console.log('Filter type changed:', filterId, 'to', newType);\r\n    } catch (error) {\r\n      console.error('Error changing filter type:', error);\r\n    }\r\n  }\r\n  \r\n  // Toggle filter expansion state\r\n  toggleFilterExpansion(filterId: string): void {\r\n    if (this.expandedFilters.has(filterId)) {\r\n      this.expandedFilters.delete(filterId);\r\n    } else {\r\n      this.expandedFilters.add(filterId);\r\n    }\r\n  }\r\n  \r\n  // Check if filter is expanded\r\n  isFilterExpanded(filterId: string): boolean {\r\n    return this.expandedFilters.has(filterId);\r\n  }\r\n  \r\n  // Method to set up default configurations for filter types\r\n  private setupFilterTypeDefaults(filter: FilterParameter, newType: string) {\r\n    // Set up Strapi 5 filter options based on data type\r\n    this.setupStrapiFilterOptions(filter);\r\n    \r\n    // Initialize include mode if not set\r\n    if (!filter.includeMode) {\r\n      filter.includeMode = '$eq'; // Default to equals filter\r\n    }\r\n    \r\n    switch (newType) {\r\n      case 'range':\r\n        // Set up range configuration\r\n        filter.rangeConfig = {\r\n          fromLabel: 'From',\r\n          toLabel: 'To',\r\n          fromPlaceholder: `Enter minimum ${filter.label?.toLowerCase() || filter.key}...`,\r\n          toPlaceholder: `Enter maximum ${filter.label?.toLowerCase() || filter.key}...`\r\n        };\r\n        // Initialize range value structure\r\n        this.filterValues[filter.key] = { from: null, to: null };\r\n        break;\r\n        \r\n      case 'checkboxlist':\r\n        // Ensure options are available for checkbox list\r\n        if (!filter.options || filter.options.length === 0) {\r\n          filter.options = [];\r\n          filter.optionLabel = 'label';\r\n          filter.optionValue = 'value';\r\n        }\r\n        // Initialize as empty array for multiple selections\r\n        this.filterValues[filter.key] = [];\r\n        break;\r\n        \r\n      case 'select':\r\n      case 'multiselect':\r\n        // Ensure options are available\r\n        if (!filter.options || filter.options.length === 0) {\r\n          filter.options = [];\r\n          filter.optionLabel = 'label';\r\n          filter.optionValue = 'value';\r\n        }\r\n        // Initialize appropriate value structure\r\n        this.filterValues[filter.key] = newType === 'multiselect' ? [] : null;\r\n        break;\r\n        \r\n      case 'checkbox':\r\n        // Initialize as boolean\r\n        this.filterValues[filter.key] = false;\r\n        break;\r\n        \r\n      case 'htmleditor':\r\n        // Initialize as empty HTML string\r\n        this.filterValues[filter.key] = '';\r\n        break;\r\n        \r\n      default:\r\n        // For text, number, date - initialize as null\r\n        this.filterValues[filter.key] = null;\r\n        break;\r\n    }\r\n  }\r\n  \r\n  // Method to set up Strapi 5 filter options based on data type\r\n  private setupStrapiFilterOptions(filter: FilterParameter) {\r\n    const dataType = filter.dataType || 'string';\r\n    \r\n    // Get default options from config or use built-in options\r\n    if (filter.includeModeOptions && filter.includeModeOptions.length > 0) {\r\n      // Use options provided in config\r\n      return;\r\n    }\r\n    \r\n    // Set default Strapi 5 filter options based on data type\r\n    switch (dataType) {\r\n      case 'string':\r\n        filter.includeModeOptions = this.strapiFilterOptions.string;\r\n        break;\r\n      case 'number':\r\n        filter.includeModeOptions = this.strapiFilterOptions.number;\r\n        break;\r\n      case 'boolean':\r\n        filter.includeModeOptions = this.strapiFilterOptions.boolean;\r\n        break;\r\n      case 'date':\r\n        filter.includeModeOptions = this.strapiFilterOptions.date;\r\n        break;\r\n      case 'array':\r\n        filter.includeModeOptions = this.strapiFilterOptions.array;\r\n        break;\r\n      default:\r\n        filter.includeModeOptions = this.strapiFilterOptions.string;\r\n        break;\r\n    }\r\n  }\r\n  \r\n  // Method to get filter mode options for a specific filter\r\n  getFilterModeOptions(filter: FilterParameter): { label: string; value: string }[] {\r\n    if (filter.includeModeOptions && filter.includeModeOptions.length > 0) {\r\n      return filter.includeModeOptions;\r\n    }\r\n    \r\n    // Fallback to default options based on data type\r\n    const dataType = filter.dataType || 'string';\r\n    return this.strapiFilterOptions[dataType as keyof typeof this.strapiFilterOptions] || this.strapiFilterOptions.string;\r\n  }\r\n  \r\n  // Method to change filter mode for active filters\r\n  changeFilterMode(filterId: string, newMode: string) {\r\n    const filter = this.activeFilters.find(f => f.id === filterId);\r\n    if (!filter) {\r\n      console.error('Filter not found:', filterId);\r\n      return;\r\n    }\r\n    \r\n    filter.includeMode = newMode;\r\n    console.log('Filter mode changed:', filterId, 'to', newMode);\r\n  }\r\n  \r\n  // Method to handle individual filter value changes\r\n  onFilterValueChange(filterKey: string, value: any) {\r\n    this.filterValues[filterKey] = value;\r\n    \r\n    // Update the form config to reflect the change\r\n    this.updateFormConfig();\r\n  }\r\n  \r\n\r\n  \r\n  // Method to update available fields\r\n  private updateAvailableFields() {\r\n    if (!this.config?.availableFields) {\r\n      this.availableFieldsToAdd = [];\r\n      return;\r\n    }\r\n    \r\n    this.availableFieldsToAdd = this.config.availableFields.filter(field => \r\n      !this.activeFilters.find(active => active.key === field.key)\r\n    );\r\n    \r\n    console.log('Available fields updated:', this.availableFieldsToAdd);\r\n  }\r\n  \r\n\r\n\r\n  get hasActiveFilters() {\r\n    return this.activeFilters.length > 0;\r\n  }\r\n  \r\n  get hasFilterValues() {\r\n    return Object.keys(this.filterValues).some(key => {\r\n      const value = this.filterValues[key];\r\n      return value !== null && value !== undefined && value !== '' && \r\n             (!Array.isArray(value) || value.length > 0);\r\n    });\r\n  }\r\n\r\n  // Quick Filter Methods\r\n  \r\n  /**\r\n   * Get saved filters for the quick filter selector (excludes auto-save)\r\n   */\r\n  getQuickFilterOptions(): SavedFilter[] {\r\n    return this.savedFilters.filter(f => f.id !== 'auto-save');\r\n  }\r\n  \r\n  /**\r\n   * Get the currently selected quick filter ID\r\n   */\r\n  getSelectedQuickFilterId(): string | null {\r\n    return this.selectedSavedFilterId;\r\n  }\r\n  \r\n  /**\r\n   * Get the name of the currently selected filter\r\n   */\r\n  getSelectedFilterName(): string {\r\n    if (!this.selectedSavedFilterId) {\r\n      return '';\r\n    }\r\n    \r\n    const selectedFilter = this.getQuickFilterOptions().find(f => f.id === this.selectedSavedFilterId);\r\n    return selectedFilter ? selectedFilter.name : 'Nezināms filtrs';\r\n  }\r\n  \r\n  /**\r\n   * Check if there are active manual filters (not saved filters)\r\n   */\r\n  hasActiveManualFilters(): boolean {\r\n    return this.hasActiveFilters && this.hasFilterValues && !this.selectedSavedFilterId;\r\n  }\r\n  \r\n  /**\r\n   * Get display name for active filter (saved or manual)\r\n   */\r\n  getActiveFilterDisplayName(): string {\r\n    if (this.selectedSavedFilterId) {\r\n      return this.getSelectedFilterName();\r\n    }\r\n    \r\n    if (this.hasActiveManualFilters()) {\r\n      const activeCount = this.activeFilters.filter(f => {\r\n        const value = this.filterValues[f.key];\r\n        return value !== null && value !== undefined && value !== '' && \r\n               (!Array.isArray(value) || value.length > 0);\r\n      }).length;\r\n      \r\n      return `Manuāls filtrs (${activeCount})`;\r\n    }\r\n    \r\n    return '';\r\n  }\r\n  \r\n  /**\r\n   * Clear all active filters (both saved and manual)\r\n   */\r\n  clearAllActiveFilters(): void {\r\n    if (this.selectedSavedFilterId) {\r\n      this.clearQuickFilter();\r\n    } else {\r\n      this.resetFilter();\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Handle quick filter selection\r\n   */\r\n  onQuickFilterSelect(filterId: string | null): void {\r\n    if (!filterId) {\r\n      // Clear selection\r\n      this.selectedSavedFilterId = null;\r\n      this.resetFilter();\r\n      \r\n      // Emit empty filter data to trigger API request with no filters\r\n      const emptyFilterData = this.buildFilterData();\r\n      this.quickFilterApply.emit(emptyFilterData);\r\n      this.filterApply.emit(emptyFilterData);\r\n      this.quickFilterSelect.emit(null);\r\n      return;\r\n    }\r\n\r\n    const savedFilter = this.getQuickFilterOptions().find(f => f.id === filterId);\r\n    if (savedFilter) {\r\n      this.selectedSavedFilterId = filterId;\r\n      \r\n      // Load the saved filter\r\n      this.loadFilter(savedFilter);\r\n      \r\n      // Apply the filter immediately\r\n      const filterData = this.buildFilterData();\r\n      this.quickFilterApply.emit(filterData);\r\n      this.filterApply.emit(filterData);\r\n      \r\n      // Update last used timestamp\r\n      this.updateQuickFilterLastUsed(savedFilter);\r\n      \r\n      // Emit the selection event\r\n      this.quickFilterSelect.emit(savedFilter);\r\n    }\r\n  }\r\n\r\n\r\n  \r\n  /**\r\n   * Update the last used timestamp for a quick filter\r\n   */\r\n  private updateQuickFilterLastUsed(savedFilter: SavedFilter): void {\r\n    const storageKey = this.config.storageKey || 'numo-dynamic-filters';\r\n    \r\n    try {\r\n      const saved = localStorage.getItem(storageKey);\r\n      if (saved) {\r\n        const filters: SavedFilter[] = JSON.parse(saved);\r\n        const filterIndex = filters.findIndex(f => f.id === savedFilter.id);\r\n        \r\n        if (filterIndex !== -1) {\r\n          filters[filterIndex].lastUsed = new Date();\r\n          localStorage.setItem(storageKey, JSON.stringify(filters));\r\n          \r\n          // Update the local savedFilters array\r\n          const localIndex = this.savedFilters.findIndex(f => f.id === savedFilter.id);\r\n          if (localIndex !== -1) {\r\n            this.savedFilters[localIndex].lastUsed = new Date();\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error('Error updating quick filter last used:', error);\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Clear quick filter selection\r\n   */\r\n  clearQuickFilter(): void {\r\n    this.onQuickFilterSelect(null);\r\n  }\r\n}\r\n","<!-- Standalone Quick Filter Selector -->\n<div *ngIf=\"config.showQuickFilter !== false && getQuickFilterOptions().length > 0\" \n     class=\"quick-filter-selector inline-flex items-center gap-2\">\n  \n  <!-- Always show dropdown -->\n  <universal-select\n    [options]=\"getQuickFilterOptions()\"\n    [optionLabel]=\"'name'\"\n    [optionValue]=\"'id'\"\n    placeholder=\"Izvēlieties saglabāto filtru...\"\n    [value]=\"getSelectedQuickFilterId()\"\n    (valueChange)=\"onQuickFilterSelect($event)\"\n    class=\"min-w-48\">\n  </universal-select>\n  \n  <!-- Show active filter indicator when any filter is active -->\n  <div *ngIf=\"hasActiveManualFilters() || selectedSavedFilterId\" class=\"inline-flex items-center gap-2 px-3 py-2 bg-blue-100 text-blue-800 rounded-lg border border-blue-200\">\n    <i class=\"pi pi-filter text-sm\"></i>\n    <span class=\"text-sm font-medium\">{{ getActiveFilterDisplayName() }}</span>\n    <span class=\"text-xs bg-blue-200 text-blue-700 px-2 py-1 rounded\">Aktīvs</span>\n  </div>\n  \n  <!-- Remove filter button (show when any filter is active) -->\n  <universal-button\n    *ngIf=\"hasActiveManualFilters() || selectedSavedFilterId\"\n    icon=\"pi pi-times\"\n    severity=\"danger\"\n    [outlined]=\"true\"\n    size=\"small\"\n    (click)=\"clearAllActiveFilters()\"\n    title=\"Noņemt filtru\">\n  </universal-button>\n\n</div>\n\n<universal-dialog \n  [header]=\"header\"\n  [(visible)]=\"visible\"\n  [modal]=\"true\"\n  [style]=\"{ width: '800px', maxHeight: '90vh' }\"\n  [draggable]=\"true\"\n  [resizable]=\"true\"\n  (hide)=\"onDialogHide()\">\n\n  <div class=\"dynamic-filter-container\">\n    \n    <!-- Filter Management Header -->\n    <div class=\"flex justify-between items-center mb-4 border-b !pb-3\" style=\"padding-bottom: 1rem;\">\n      <div class=\"flex items-center gap-3\">\n        <h4 class=\"text-lg font-semibold text-gray-800\">Filtra konfigurācija</h4>\n        <span *ngIf=\"hasActiveFilters\" class=\"bg-blue-100 text-blue-800 text-xs font-medium px-2.5 py-0.5 rounded\">\n          {{ activeFilters.length }} aktīvi\n        </span>\n      </div>\n      \n      <div class=\"flex gap-2\">\n        <!-- Saved Filters Dropdown -->\n        <div *ngIf=\"config.showSavedFilters !== false && savedFilters.length > 0\" class=\"relative\">\n          <universal-select\n            [options]=\"savedFilters\"\n            [optionLabel]=\"'name'\"\n            [optionValue]=\"'id'\"\n            placeholder=\"Ielādēt saglabāto filtru...\"\n            [value]=\"selectedSavedFilter?.id\"\n            (valueChange)=\"onSavedFilterSelect($event)\"\n            class=\"w-48\">\n          </universal-select>\n        </div>\n        \n        <!-- Manage Filters Button -->\n        <universal-button\n          *ngIf=\"config.showSavedFilters !== false\"\n          label=\"Pārvaldīt\"\n          icon=\"pi pi-cog\"\n          severity=\"secondary\"\n          [outlined]=\"true\"\n          (click)=\"showManageFilters = true\">\n        </universal-button>\n      </div>\n    </div>\n\n    <!-- Available Fields Section -->\n    <div *ngIf=\"availableFieldsToAdd.length > 0\" class=\"mb-4\">\n      <h5 class=\"text-sm font-medium text-gray-700 mb-2\">Ātri pievienot filtrus:</h5>\n      <div class=\"flex flex-wrap gap-2\">\n        <universal-button\n          *ngFor=\"let field of availableFieldsToAdd\"\n          [label]=\"field.label\"\n          icon=\"pi pi-plus\"\n          severity=\"info\"\n          [outlined]=\"true\"\n          size=\"small\"\n          (click)=\"addFilterFromAvailable(field)\">\n        </universal-button>\n      </div>\n    </div>\n\n    <!-- API Field Selector Section -->\n    <div class=\"mb-4\">\n      <!-- <div class=\"flex justify-between items-center mb-2\">\n        <h5 class=\"text-sm font-medium text-gray-700\">Add from API Fields:</h5>\n        <button\n          type=\"button\"\n          class=\"px-3 py-1 text-sm border border-gray-300 rounded hover:bg-gray-50 flex items-center gap-2\"\n          (click)=\"toggleApiFieldSelector()\">\n          <i [class]=\"showApiFieldSelector ? 'pi pi-chevron-up' : 'pi pi-chevron-down'\"></i>\n          {{ showApiFieldSelector ? 'Hide Fields' : 'Show Fields' }}\n        </button>\n      </div> -->\n      \n\n      \n      <!-- Loading State -->\n      <div *ngIf=\"loadingApiFields\" class=\"flex items-center gap-2 p-4\">\n        <i class=\"pi pi-spin pi-spinner\"></i>\n        <span class=\"text-sm text-gray-600\">Ielādē laukus...</span>\n      </div>\n      \n      <!-- Error State -->\n      <div *ngIf=\"apiFieldsError\" class=\"bg-red-50 border border-red-200 rounded-lg p-3 mb-4\">\n        <div class=\"flex items-center gap-2\">\n          <i class=\"pi pi-exclamation-triangle text-red-500\"></i>\n          <span class=\"text-sm text-red-700\">{{ apiFieldsError }}</span>\n        </div>\n        <universal-button\n          label=\"Mēģināt vēlreiz\"\n          icon=\"pi pi-refresh\"\n          severity=\"danger\"\n          [outlined]=\"true\"\n          size=\"small\"\n          class=\"mt-2\"\n          (click)=\"loadApiFields(extractApiUrl() || '')\">\n        </universal-button>\n      </div>\n      \n      <!-- Hierarchical Field Selection -->\n      <div *ngIf=\"!loadingApiFields && !apiFieldsError && apiFields.length > 0\">\n        <div class=\"space-y-3\">\n          <!-- Dynamic Field Selection Levels -->\n          <div *ngFor=\"let levelFields of fieldSelectionLevels; let levelIndex = index\" class=\"mb-3\">\n            <universal-select\n              [label]=\"'Līmenis ' + (levelIndex + 1) + ' Lauks'\"\n              [options]=\"levelFields\"\n              optionLabel=\"title\"\n              optionValue=\"key\"\n              [placeholder]=\"'Izvēlieties ' + (levelIndex === 0 ? 'saknes' : 'apakš') + ' lauku...'\"\n              [value]=\"selectedFieldsAtLevel[levelIndex]?.key || null\"\n              (valueChange)=\"onFieldSelectionChange(levelIndex, $event)\"\n              [filter]=\"true\"\n              filterPlaceholder=\"Meklēt laukus...\"\n              class=\"w-full\">\n              <ng-template let-option>\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"text-xs px-2 py-1 rounded bg-blue-100 text-blue-800\">\n                    {{ option.type }}\n                  </span>\n                  <span class=\"text-sm\">{{ option.title }}</span>\n                  <span *ngIf=\"option.children && option.children.length > 0\" class=\"text-xs text-gray-500 ml-auto\">\n                    {{ option.children.length }} bērni\n                  </span>\n                  <span *ngIf=\"!option.children || option.children.length === 0\" class=\"text-xs text-green-600 ml-auto\">\n                    ✓ Izvēlams\n                  </span>\n                </div>\n              </ng-template>\n            </universal-select>\n          </div>\n        </div>\n        \n        <!-- Selected Path Info -->\n        <!-- <div *ngIf=\"getSelectedLeafField()\" class=\"bg-green-50 border border-green-200 rounded p-3 mb-3\">\n          <div class=\"text-sm\">\n            <strong>Ready to Add:</strong> {{ getSelectedLeafField()?.title }} <br>\n            <strong>Type:</strong> {{ getSelectedLeafField()?.type }} <br>\n            <strong>Filter Type:</strong> {{ mapApiFieldTypeToFilterType(getSelectedLeafField()?.type || '') }}\n          </div>\n        </div> -->\n        \n        <!-- Add Field Button -->\n        <div class=\"flex justify-between items-center\">\n          <!-- <button\n            type=\"button\"\n            class=\"px-3 py-1 text-sm text-gray-600 hover:text-gray-800\"\n            (click)=\"resetFieldSelection()\">\n            Reset Selection\n          </button> -->\n          <universal-button\n            label=\"Pievienot lauku kā filtru\"\n            icon=\"pi pi-plus\"\n            severity=\"primary\"\n            [disabled]=\"!getSelectedLeafField()\"\n            (click)=\"addSelectedApiField()\">\n          </universal-button>\n        </div>\n        \n        <!-- Field Statistics -->\n        <!-- <div class=\"mt-3 text-xs text-gray-500\">\n          <strong>Available:</strong> {{ apiFields.length }} root fields\n        </div> -->\n      </div>\n      \n      <!-- No Fields State -->\n      <div *ngIf=\"!loadingApiFields && !apiFieldsError && apiFields.length === 0\" class=\"text-center py-4\">\n        <i class=\"pi pi-database text-2xl text-gray-400 mb-2 block\"></i>\n        <p class=\"text-sm text-gray-600\">Nav pieejami lauki no API</p>\n      </div>\n    </div>\n\n    <!-- Active Filters Section -->\n    <div *ngIf=\"hasActiveFilters\" class=\"mb-4\">\n      <div class=\"flex justify-between items-center mb-3\">\n        <h5 class=\"text-sm font-medium text-gray-700\">Aktīvie filtri:</h5>\n       \n      </div>\n      \n      <div class=\"space-y-3\">\n        <div *ngFor=\"let filter of activeFilters\" \n             class=\"bg-gray-50 rounded-lg border\">\n          <!-- Filter Header - Clickable to expand/collapse -->\n          <div class=\"flex items-center justify-between p-4 cursor-pointer hover:bg-gray-100 transition-colors\"\n               (click)=\"toggleFilterExpansion(filter.id)\">\n            <div class=\"flex items-center gap-3\">\n              <i class=\"pi transition-transform duration-200\"\n                 [class.pi-chevron-right]=\"!isFilterExpanded(filter.id)\"\n                 [class.pi-chevron-down]=\"isFilterExpanded(filter.id)\"\n                 [class.rotate-90]=\"isFilterExpanded(filter.id)\"></i>\n              <div class=\"flex flex-col\">\n                <span class=\"font-medium text-gray-800\">{{ filter.label }}</span>\n                <span class=\"text-xs text-gray-500\">{{ filter.key }}</span>\n              </div>\n              <span *ngIf=\"filterValues[filter.key]\" \n                    class=\"text-xs bg-green-100 text-green-800 px-2 py-1 rounded\">\n                Ir vērtība\n              </span>\n              <span *ngIf=\"filter.includeMode\" \n                    class=\"text-xs px-2 py-1 rounded bg-blue-100 text-blue-800\">\n                {{ filter.includeMode }}\n              </span>\n              <!-- <span class=\"text-xs text-gray-500 bg-gray-200 px-2 py-1 rounded\">\n                {{ filter.type }}\n              </span> -->\n            </div>\n            <div class=\"flex items-center gap-2\" (click)=\"$event.stopPropagation()\">\n              <universal-button\n                icon=\"pi pi-times\"\n                severity=\"danger\"\n                [outlined]=\"true\"\n                size=\"small\"\n                (click)=\"removeFilter(filter.id)\">\n              </universal-button>\n            </div>\n          </div>\n          \n          <!-- Collapsible Filter Configuration -->\n          <div *ngIf=\"isFilterExpanded(filter.id)\" \n               class=\"px-4 pb-4 border-t border-gray-200 bg-white\">\n            \n            <!-- Filter Mode Selection -->\n            <div class=\"flex items-center gap-3 mb-3 mt-3\">\n              <label class=\"text-sm text-gray-600 font-medium\">Filtra režīms:</label>\n              <universal-select\n                [value]=\"filter.includeMode\"\n                [options]=\"getFilterModeOptions(filter)\"\n                optionLabel=\"label\"\n                optionValue=\"value\"\n                placeholder=\"Izvēlieties filtra režīmu...\"\n                (valueChange)=\"changeFilterMode(filter.id, $event)\"\n                class=\"min-w-48\">\n              </universal-select>\n           \n            </div>\n            \n            <!-- Filter Value Input -->\n            <div class=\"mb-3\" *ngIf=\"filter.includeMode != '$null' && filter.includeMode != '$notNull'\">\n              <label class=\"text-sm text-gray-600 font-medium mb-2 block\">Filtra vērtība:</label>\n              \n            \n              <!-- Text Input (used for other filters) -->\n              <universal-input\n                *ngIf=\"filter.type !== 'htmleditor'\"\n                [placeholder]=\" 'Ievadiet vērtību...'\"\n                [value]=\"filterValues[filter.key] || ''\"\n                [disabled]=\"filter.includeMode === '$null' || filter.includeMode === '$notNull'\"\n                (valueChange)=\"onFilterValueChange(filter.key, $event)\"\n                [label]=\"''\">\n              </universal-input>\n            </div>\n          \n          </div> <!-- End of collapsible section -->\n        </div> <!-- End of filter card -->\n      </div> <!-- End of filters container -->\n    </div>\n\n\n\n    <!-- No Filters Message -->\n    <div *ngIf=\"!hasActiveFilters\" class=\"text-center py-8 text-gray-500\">\n      <i class=\"pi pi-filter text-4xl mb-3 block\"></i>\n      <p class=\"text-lg mb-2\">Nav konfigurēti filtri</p>\n      <p class=\"text-sm\">Pievienojiet filtrus, lai sāktu filtrēt datus</p>\n    </div>\n\n    <!-- Add Custom Filter Section -->\n    <!-- <div *ngIf=\"config.allowCustomFields !== false\" class=\"border-t pt-4\">\n      <div class=\"flex justify-between items-center mb-3\">\n        <h5 class=\"text-sm font-medium text-gray-700\">Add Custom Filter:</h5>\n        <universal-button\n          [label]=\"showAddFilter ? 'Cancel' : 'Add Filter'\"\n          [icon]=\"showAddFilter ? 'pi pi-times' : 'pi pi-plus'\"\n          [severity]=\"showAddFilter ? 'secondary' : 'primary'\"\n          [outlined]=\"showAddFilter\"\n          size=\"small\"\n          (click)=\"showAddFilter = !showAddFilter\">\n        </universal-button>\n      </div>\n\n      <div *ngIf=\"showAddFilter\" class=\"bg-gray-50 p-4 rounded-lg border\">\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4\">\n          <universal-input\n            label=\"Field Key\"\n            placeholder=\"e.g., email, age, status\"\n            [(value)]=\"newFilterKey\"\n            [required]=\"true\">\n          </universal-input>\n          \n          <universal-input\n            label=\"Display Label\"\n            placeholder=\"e.g., Email Address\"\n            [(value)]=\"newFilterLabel\"\n            [required]=\"true\">\n          </universal-input>\n          \n     \n        </div>\n        \n        <div class=\"flex justify-end gap-2\">\n          <universal-button\n            label=\"Cancel\"\n            severity=\"secondary\"\n            [outlined]=\"true\"\n            (click)=\"showAddFilter = false; resetAddFilterForm()\">\n          </universal-button>\n          <universal-button\n            label=\"Add Filter\"\n            icon=\"pi pi-plus\"\n            severity=\"primary\"\n            [disabled]=\"!newFilterKey || !newFilterLabel\"\n            (click)=\"addFilter()\">\n          </universal-button>\n        </div>\n      </div>\n    </div> -->\n\n    <!-- Action Buttons -->\n    <div *ngIf=\"hasActiveFilters\" class=\"flex justify-between items-center !pt-6 border-t mt-6\" style=\"padding-top: 1rem;\">\n      <div class=\"flex gap-2\">\n        <universal-button\n          *ngIf=\"config.showSavedFilters !== false && canSaveCurrentFilter()\"\n          label=\"Saglabāt filtru\"\n          icon=\"pi pi-save\"\n          severity=\"info\"\n          [outlined]=\"true\"\n          size=\"small\"\n          (click)=\"showSaveDialog = true\">\n        </universal-button>\n        <span *ngIf=\"config.showSavedFilters !== false && !canSaveCurrentFilter()\"\n              class=\"text-xs text-gray-500 ml-2\">\n          Nevari saglabāt šo filtru: esi tikai skatītājs\n        </span>\n      </div>\n      \n      <div class=\"flex gap-3\">\n        <!-- <universal-button\n          label=\"Atiestatīt\"\n          icon=\"pi pi-refresh\"\n          severity=\"secondary\"\n          [outlined]=\"true\"\n          (click)=\"resetFilter()\">\n        </universal-button> -->\n        <universal-button\n        label=\"Notīrīt visu\"\n        icon=\"pi pi-trash\"\n        severity=\"danger\"\n        [outlined]=\"true\"\n        size=\"small\"\n        (click)=\"clearAllFilters()\">\n      </universal-button>\n        <universal-button\n          label=\"Lietot filtru\"\n          icon=\"pi pi-check\"\n          severity=\"primary\"\n          (click)=\"applyFilter()\">\n        </universal-button>\n      </div>\n    </div>\n  </div>\n</universal-dialog>\n\n<!-- Save Filter Dialog -->\n<universal-dialog\n  [header]=\"selectedSavedFilter ? 'Atjaunināt filtra konfigurāciju' : 'Saglabāt filtra konfigurāciju'\"\n  [(visible)]=\"showSaveDialog\"\n  [modal]=\"true\"\n  [style]=\"{ width: '500px' }\"\n  [draggable]=\"true\">\n  \n  <div class=\"space-y-4\">\n    <universal-input\n      label=\"Filtra nosaukums\"\n      placeholder=\"Ievadiet šī filtra nosaukumu...\"\n      [(value)]=\"saveFilterName\"\n      [required]=\"true\">\n    </universal-input>\n    \n    <universal-input\n      label=\"Apraksts (neobligāts)\"\n      placeholder=\"Aprakstiet, ko dara šis filtrs...\"\n      [(value)]=\"saveFilterDescription\">\n    </universal-input>\n\n    <!-- Public flag -->\n    <div class=\"flex items-center gap-3\">\n      <universal-checkbox\n        [label]=\"'Privāts'\"\n        [(checked)]=\"saveFilterPrivate\">\n      </universal-checkbox>\n      <span class=\"text-xs text-gray-500\">Ja atzīmēts, filtrs nebūs redzams citiem lietotājiem</span>\n    </div>\n    \n    <!-- <div class=\"bg-gray-50 p-3 rounded border\">\n      <p class=\"text-sm text-gray-600 mb-2\">Šis filtrs saglabās:</p>\n      <ul class=\"text-xs text-gray-500 space-y-1\">\n        <li *ngFor=\"let filter of activeFilters\" class=\"flex items-center gap-2\">\n          <i class=\"pi pi-check text-green-600\"></i>\n          {{ filter.label }} ({{ filter.type }})\n        </li>\n      </ul>\n    </div> -->\n  </div>\n  \n  <div class=\"flex justify-end gap-2 mt-4\">\n    <universal-button\n      label=\"Atcelt\"\n      severity=\"secondary\"\n      [outlined]=\"true\"\n      (click)=\"cancelSaveDialog()\">\n    </universal-button>\n    <universal-button\n      [label]=\"selectedSavedFilter ? 'Atjaunināt filtru' : 'Saglabāt filtru'\"\n      icon=\"pi pi-save\"\n      severity=\"primary\"\n      [disabled]=\"!saveFilterName.trim()\"\n      (click)=\"saveCurrentFilter()\">\n    </universal-button>\n  </div>\n</universal-dialog>\n\n<!-- Manage Filters Dialog -->\n<universal-dialog\n  header=\"Pārvaldīt saglabātos filtrus\"\n  [(visible)]=\"showManageFilters\"\n  [modal]=\"true\"\n  [style]=\"{ width: '700px' }\"\n  [draggable]=\"true\">\n  \n  <div *ngIf=\"savedFilters.length === 0\" class=\"text-center py-8 text-gray-500\">\n    <i class=\"pi pi-bookmark text-4xl mb-3 block\"></i>\n    <p class=\"text-lg mb-2\">Nav saglabātu filtru</p>\n    <p class=\"text-sm\">Izveidojiet un saglabājiet filtrus, lai tos pārvaldītu šeit</p>\n  </div>\n  \n  <div *ngIf=\"savedFilters.length > 0\" class=\"space-y-3\">\n    <div *ngFor=\"let filter of savedFilters\" \n         class=\"flex items-center justify-between p-4 border rounded-lg hover:bg-gray-50\">\n      <div class=\"flex-1\">\n        <div class=\"flex items-center gap-3 mb-2\">\n          <h6 class=\"font-medium text-gray-800\">{{ filter.name }}</h6>\n          <span class=\"text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded\">\n            {{ filter.parameters.length }} filtri\n          </span>\n          <span *ngIf=\"filter.private\" class=\"text-xs bg-purple-100 text-purple-800 px-2 py-1 rounded\">Privāts</span>\n          <span *ngIf=\"selectedSavedFilter?.id === filter.id\" \n                class=\"text-xs bg-green-100 text-green-800 px-2 py-1 rounded\">\n            Pašlaik ielādēts\n          </span>\n        </div>\n        \n        <p *ngIf=\"filter.description\" class=\"text-sm text-gray-600 mb-2\">\n          {{ filter.description }}\n        </p>\n        \n        <div class=\"flex items-center gap-4 text-xs text-gray-500\">\n          <span>Izveidots: {{ filter.createdAt | date:'short' }}</span>\n          <span *ngIf=\"filter.lastUsed\">Pēdējo reizi izmantots: {{ filter.lastUsed | date:'short' }}</span>\n        </div>\n        \n        <div class=\"flex flex-wrap gap-1 mt-2\">\n          <span *ngFor=\"let param of filter.parameters\" \n                class=\"text-xs bg-gray-200 text-gray-600 px-2 py-1 rounded\">\n            {{ param.label }}\n          </span>\n        </div>\n      </div>\n      \n      <div class=\"flex gap-2 ml-4\">\n        <universal-button\n          label=\"Ielādēt\"\n          icon=\"pi pi-download\"\n          severity=\"primary\"\n          [outlined]=\"true\"\n          size=\"small\"\n          (click)=\"loadFilter(filter); showManageFilters = false\">\n        </universal-button>\n        <universal-button\n          icon=\"pi pi-trash\"\n          severity=\"danger\"\n          [outlined]=\"true\"\n          size=\"small\"\n          (click)=\"deleteSavedFilter(filter.id)\">\n        </universal-button>\n      </div>\n    </div>\n  </div>\n  \n  <div class=\"flex justify-end mt-4\">\n    <universal-button\n      label=\"Aizvērt\"\n      severity=\"secondary\"\n      (click)=\"showManageFilters = false\">\n    </universal-button>\n  </div>\n</universal-dialog>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'universal-button-new',\r\n  templateUrl: './button.template.html',\r\n  styleUrls: ['./button.component.scss'],\r\n  standalone: true\r\n})\r\nexport class ButtonComponentNew {\r\n  @Input() label: string = '';\r\n  @Input() severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast';\r\n  @Input() icon?: string;\r\n  @Input() iconPos: 'left' | 'right' = 'left';\r\n  @Input() disabled: boolean = false;\r\n  @Input() loading: boolean = false;\r\n  @Input() outlined: boolean = false;\r\n  @Input() raised: boolean = false;\r\n  @Input() text: boolean = false;\r\n  @Input() rounded: boolean = false;\r\n  @Input() size: 'small' | 'normal' | 'large' = 'normal';\r\n  @Input() class?: string;\r\n  @Output() click = new EventEmitter<void>();\r\n\r\n  onClick() {\r\n    if (!this.disabled && !this.loading) {\r\n      this.click.emit();\r\n    }\r\n  }\r\n}\r\n","<!-- <button\r\n  type=\"button\"\r\n  [attr.aria-label]=\"label\"\r\n  [disabled]=\"disabled || loading\"\r\n  [ngClass]=\"[\r\n    'inline-flex items-center justify-center font-medium transition-colors duration-200 focus:outline-none',\r\n    size === 'small' ? 'text-sm px-3 py-1.5' : size === 'large' ? 'text-lg px-6 py-3' : 'text-base px-4 py-2',\r\n    outlined ? 'border border-primary-600 bg-transparent text-primary-600 hover:bg-primary-50' : '',\r\n    raised && !outlined ? 'shadow-md' : '',\r\n    text ? 'bg-transparent text-primary-600 hover:bg-primary-50' : '',\r\n    rounded ? 'rounded-full' : 'rounded-md',\r\n    !outlined && !text ? 'bg-primary-600 text-white hover:bg-primary-700' : '',\r\n    (disabled || loading) ? 'opacity-60 cursor-not-allowed' : '',\r\n    class\r\n  ]\"\r\n  (click)=\"onClick()\"\r\n>\r\n  <span *ngIf=\"icon && iconPos === 'left'\" class=\"mr-2\" [ngClass]=\"icon\"></span>\r\n  <span *ngIf=\"label\">{{ label }}</span>\r\n  <span *ngIf=\"icon && iconPos === 'right'\" class=\"ml-2\" [ngClass]=\"icon\"></span>\r\n  <svg *ngIf=\"loading\" class=\"animate-spin ml-2 h-4 w-4 text-inherit\" viewBox=\"0 0 24 24\"><circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" fill=\"none\"></circle><path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"></path></svg>\r\n</button> -->\r\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  EventEmitter,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChildren,\n  ViewContainerRef\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { InfoCardWidget } from '../../widgets/info-card/info-card.component';\nimport { DynamicComponentService, getValueFromPath } from '../../../../dynamic-component.service';\nimport { ButtonModule } from 'primeng/button';\nimport { ButtonComponent } from '../../forms/button/button.component';\nimport { DynamicFormComponent, FormConfig } from '../dynamic-form/dynamic-form.component';\nimport { HttpClient } from '@angular/common/http';\nimport { DynamicFilterComponent, DynamicFilterConfig, FilterParameter, SavedFilter } from '../../components/dynamic-filter/dynamic-filter.component';\nimport { DialogModule } from 'primeng/dialog';\nimport { UniversalDialogComponent } from '../../components/dialog/dialog.component';\nimport { UniversalSelectComponentNew } from '../../../new/components/select/select.component';\nimport { ButtonComponentNew } from '../../../new/components/button/button.component';\nimport { UniversalSelectComponent } from '../../forms/select/select.component';\nimport { UniversalInputComponent } from '../../forms/input/input.component';\n\ndeclare global {\n  interface EventTarget {\n    value?: string;\n    selectedIndex?: number;\n  }\n}\n// actions: [\n//   {\n//     icon: 'pi pi-pencil',\n//     tooltip: 'Edit',\n//     action: (data:any) => {\n//       //console.log('Edit', data);\n//     },\n//   },\n//   {\n//     icon: 'pi pi-pencil',\n//     tooltip: 'Add Child',\n//     action: (data:any) => {\n//       //console.log('Add Child', data);\n//     },\n//   },\n//   {\n//     icon: 'pi pi-trash',\n//     tooltip: 'Delete',\n//     action: (data:any) => {\n//       //console.log('Delete', data);\n//     },\n//   },\n// ],\n\n//example on icons \n// {\n//         key: 'web_item',\n//         header: 'Web prece',\n//         type: 'icons',\n//         iconsOptions: [\n//           { value: true, icon: 'pi pi-check', tooltip: 'Web prece' },\n//           { value: false, icon: 'pi pi-times', tooltip: 'Nav web prece' }\n//         ],\n//       },\nexport enum tableActionTypes {\n  EDIT = 'edit', ADD_CHILD = 'addChild', DELETE = 'delete', CUSTOM = 'custom'\n}\n/** Column configuration for a table cell */\nexport interface TableColumnConfig {\n  key: string;                     // Data key for the cell\n  header: string;                  // Column header label\n  type?: 'text' | 'number' | 'date' | 'image' | 'link' | 'html' | 'component' | 'array' | 'componentVisual' | 'actions' | 'select'|'icons';  // Added componentVisual type\n  width?: string;                // Column width (e.g., '200px', '50%')\n  component?: any;                 // The component to dynamically load for this cell\n  editable?: boolean;             // If true, the cell is editable\n  sortable?: {\n    enabled?: boolean;\n    external?: boolean;\n    api?: string;\n    path?: string;\n    onSort?: (data: any) => void;\n  };             // If true, the column is sortable\n  dataInputs?: { [input: string]: any | ((row: any) => any) }; // Mapping of input names to keys in the row data\n  externalInputs?: { [input: string]: any }; // Additional static inputs not tied to the row data\n  bindedEvents?: { [eventName: string]: (data: any) => void }; // Event bindings for the component\n\n  options?: any[]; // Options for select type columns\n  optionLabel?: string; // Property name to use as label in select options\n  optionValue?: string; // Property name to use as value in select options\n\n  actions?: {                // Array of action buttons for 'actions' type\n    icon: string;          // Icon for the action button\n    tooltip: string,\n    type?: tableActionTypes; // Type of action (edit, addChild, delete)\n    disabled?: boolean; // If true, the button is disabled\n    action: (data: any) => void; // Action to perform when the button is clicked,\n    emptyDataStructure?: any; // Empty data structure to be used when adding a new child\n  }[];\n  arrayConfig?: TableColumnArray;  // Additional configuration if the type is 'array'\n  iconsOptions?: { // Configuration for 'icons' type\n    value: any;          // The value associated with the icon\n    icon: string;        // Icon class (e.g., 'pi pi-check')\n    tooltip: string;     // Tooltip text for the icon\n  }[];\n  baseUrl?:string;\n  cursor?: string; // CSS cursor style (e.g., 'pointer', 'default', 'not-allowed')\n  pointerEvents?: string; // CSS pointer-events property (e.g., 'none', 'auto', 'all')\n  // Event handlers for cell events\n  onClick?: (event: { row: any; value: any; column: TableColumnConfig }) => void;\n  onHover?: (event: { row: any; value: any; column: TableColumnConfig }) => void;\n  onLeave?: (event: { row: any; value: any; column: TableColumnConfig }) => void;\n  onChange?: (event: { row: any; value: any; column: TableColumnConfig }) => void;\n}\n\n/** Additional configuration for array type columns */\nexport interface TableColumnArray {\n  arrayType: 'list' | 'dropdown' | 'checkbox' | 'radio'; // UI type for the array\n  arrayData?: any[];                // Data for the array (if applicable)\n  component?: any;                 // The dynamic component to load when an item is clicked\n  dataInputs?: { [input: string]: any | ((item: any) => any) }; // Mapping for the array item\n  bindedEvents?: { [eventName: string]: (data: any) => void }; // Event bindings for the array item component\n  flexContainer?: boolean;         // If true, render items in a flex container\n  containerClass?: string;         // Additional CSS classes for the container\n}\n\n/** Overall table configuration */\nexport interface TableConfig {\n  columns?: TableColumnConfig[];\n  expandable?: {\n    component?: any;                 // The component to display when a row is expanded\n    dataInputs?: { [input: string]: any | ((row: any) => any) }; // Mapping of input names to keys in the row data\n    externalInputs?: { [input: string]: any }; // Additional static inputs not tied to the row data\n    bindedEvents?: { [eventName: string]: (data: any) => void }; // Event bindings for the expanded component\n    initiallyExpanded?: boolean;     // Whether rows should be expanded by default\n    position?: 'first' | 'last';     // Position of expand button (default is 'first')\n    enabledByData?: string\n  };\n  headless?: boolean; // If true, hide the table header,\n  addItembutton?: {\n    label: string; // Label for the button\n    icon?: string; // Optional icon for the button\n    action: (data: any) => void; // Action to perform when the button is clicked\n    emptyDataStructure?: any; // Empty data structure to be used when adding a new item\n    disabled?: boolean; // If true, the button is disabled\n    hidden?:boolean\n\n  }; // If true, show the add item button,\n  identifierKey?: string; // Unique identifier for the table (optional)\n  filter?: {\n    label?: string;\n    icon?: string; // Optional icon for the button\n    action?: (data: any) => void; // Action to perform when the button is clicked\n    position?: 'top' | 'right';\n    config?: FormConfig;\n    data: {};\n    disabled?: boolean; // If true, the button is disabled\n    opened: boolean; // If true, the filter is opened\n    hidden?: boolean;\n    autoGenerate?: boolean; // If true and no config provided, auto-generate from table columns\n    apiEndpoint?: string; // API endpoint to call on filter submit\n    onFilterChange?: (filterData: any) => void; // Callback for filter changes\n    onFilterSubmit?: (filterData: any) => void; // Callback for filter submit\n    // New dynamic filter configuration\n    dynamicConfig?: DynamicFilterConfig; // Configuration for dynamic filter component\n    useDynamicFilter?: boolean; // If true, use the new dynamic filter component\n  },\n  search?:{\n    enabled?:boolean;\n    url: string;\n    path?: string; // dot-separated path to extract array, e.g. \"data.values\"\n    replacableKey?:string,\n    action?: (data: any) => void; // Action to perform on input\n    localDataType:'tree'|'standart';\n    autoExpand:boolean;\n    keyword?: string; // Function to get the current search value, receives filter.keyword as parameter\n    onKeywordChange?: (keyword: string) => void; // Callback that gets called whenever the keyword changes\n  }\n  pagination?:{\n    page: number;\n    pageSize: number;\n    pageCount: number;\n    total: number;\n    onPage: (data: any) => void; // Action to perform when the button is clicked\n    hidden?:boolean,\n    url?: string;\n    path?: string; // dot-separated path to extract array, e.g. \"data.values\"\n    \n  };\n  headers?: import('@angular/common/http').HttpHeaders | {\n    [header: string]: string | string[];\n  }; // Function to get HTTP headers (e.g., getAuthHeader)\n}\n\n@Component({\n  selector: 'universal-dynamic-table',\n  templateUrl: './dynamic-table.template.html',\n  styles: `\n  .buttons {\n    text-align: right;\n    margin: 20px 0;\n}`,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.Default, // Recommended for performance\n  imports: [\n    CommonModule,\n    TableModule,\n    FormsModule,\n    ReactiveFormsModule,\n    InfoCardWidget,\n    NgComponentOutlet,\n    ButtonModule,\n    ButtonComponent,\n    DynamicFormComponent,\n    DynamicFilterComponent,\n    DialogModule,\n    UniversalDialogComponent,\n    UniversalSelectComponent,\n   ButtonComponentNew,\n   UniversalInputComponent\n  ],\n})\nexport class DynamicTableComponent implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() config: TableConfig = { columns: [] };\n  @Input() data: any[] = [];\n  // Two-way bound active filter data\n  @Input() activeFilter: any;\n  @Output() activeFilterChange = new EventEmitter<any>();\n  // Two-way bound active fast filter (saved filter selection)\n  @Input() activeFastFilter: SavedFilter | null = null;\n  @Output() activeFastFilterChange = new EventEmitter<SavedFilter | null>();\n  // Emit an event when a cell (or array item) triggers an action\n  @Output() cellAction = new EventEmitter<{ row: any; column: TableColumnConfig; action: 'click' | 'change'; newValue?: any; oldValue?: any, result?: { [key: string]: any } }>();\n  // Emit an event when a cell is edited and saved\n  @Output() cellEdited = new EventEmitter<{ row: any; column: TableColumnConfig; newValue: any; oldValue: any, result: { [key: string]: any } }>();\n\n  // Track which cells are in edit mode\n  editingCells: { [rowIndex: number]: { [columnKey: string]: boolean } } = {};\n  // Store edited values temporarily while editing\n  editValues: { [rowIndex: number]: { [columnKey: string]: any } } = {};\n\n  currentComponentRef: ComponentRef<any> | null = null;\n  getValueFromPath = getValueFromPath; // Expose helper to the template if needed\n\n  public tableActionTypes = tableActionTypes; // Expose enum to the template\n\n  // Track which rows are expanded\n  expandedRows: { [rowIndex: number]: boolean } = {};\n  expandableRows: { [rowIndex: number]: boolean } = {};\n  expandedRowsComponents: { [rowIndex: number]: any } = {};\n\n  public filter={\n    keyword:''\n  }\n\n  // Debounced search properties\n  private searchTimeout: any;\n  private readonly searchDebounceTime = 500; // 500ms delay\n\n  @Output() componentReady = new EventEmitter<boolean>();\n  @Output() onFilterSearch = new EventEmitter<{ keyword: string; results: any[]; response: any }>();\n  private containerMap = new Map<string, ViewContainerRef>();\n  @ViewChildren('componentContainer', { read: ViewContainerRef })\n  set containers(containers: QueryList<ViewContainerRef>) {\n    containers.forEach(container => {\n      const rowId = container.element.nativeElement.getAttribute('id');\n      this.containerMap.set(rowId, container);\n    });\n  }\n\n\n  @Output() filterChange = new EventEmitter<any>(); // New filter change event\n  @Output() filterSubmit = new EventEmitter<any>(); // New filter submit event\n  @Output() filterSave = new EventEmitter<SavedFilter>(); // New filter save event\n  @Output() filterLoad = new EventEmitter<SavedFilter>(); // New filter load event\n  @Output() filterApiResponse = new EventEmitter<any>(); // New API response event\n\n  constructor(\n    private injector: Injector,\n    private dynamicComponentService: DynamicComponentService,\n    private cdr: ChangeDetectorRef,\n    private http: HttpClient\n  ) { }\n\n  ngOnDestroy() {\n    // Clear any pending search timeout\n    if (this.searchTimeout) {\n      clearTimeout(this.searchTimeout);\n    }\n  }\n\n\n\n  toogleFilter(event:any) {\n    if (this.config.filter && event) {\n      this.config.filter.opened = !this.config.filter.opened;\n    }\n  }\n\n  getContainer(rowId: string): ViewContainerRef | undefined {\n    return this.containerMap.get(rowId);\n  }\n\n  ngAfterViewInit() {\n    // Emit when the component is ready\n    this.componentReady.emit(true);\n    //console.log(' event Emited DynamicTableComponent ngAfterViewInit');\n  }\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data']) {\n      this.formatData(this.data);\n      this.data = [...this.data]; // Force change detection\n  \n      this.updateExpandedComponentsAfterDataChange();\n    }\n    // Sync external activeFilter into internal config.filter.data when it changes\n    if (changes['activeFilter'] && this.config?.filter) {\n      this.config.filter.data = this.activeFilter || {};\n    }\n    // Sync incoming activeFastFilter with internal selectedSavedFilterId\n    if (changes['activeFastFilter'] && changes['activeFastFilter'].currentValue !== changes['activeFastFilter'].previousValue) {\n      const incoming: SavedFilter | null = this.activeFastFilter || null;\n      this.selectedSavedFilterId = incoming ? incoming.id : null;\n    }\n    //console.log('DynamicTableComponent ngOnChanges', changes);\n  }\n  formatData(data: any[]): void {\n    const assignIds = (items: any[]) => {\n      const dataKey = this.config.expandable?.enabledByData!\n      //console.log('DataKey:', dataKey);\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i];\n  \n        // Identifier key logic\n        if (this.config.identifierKey) {\n          const dataValue = this.resolveMapping(item, this.config.identifierKey);\n          if (dataValue) {\n            item.uniqueId = 'container_' + dataValue;\n          } else {\n            item.uniqueId = 'container_' + i + '_' + new Date().getTime();\n          }\n        } else {\n          item.uniqueId = 'container_' + i + '_' + new Date().getTime();\n        }\n  \n        // Recursively process children\n       \n        if (dataKey && item[dataKey] && Array.isArray(item[dataKey])) {\n          assignIds(item[dataKey]);\n        }\n      }\n    };\n  \n    assignIds(data);\n    \n    // Auto-expand rows that have _expanded: true\n    setTimeout(() => {\n      data.forEach((item, index) => {\n        if (item._expanded === true && !this.expandedRows[item.uniqueId]) {\n          this.toggleRow(index, item);\n        }\n      });\n    }, 0);\n  }\n\n  /**\n   * Debounced search method - triggers search after user stops typing\n   */\n  filterSearch(){\n    // Clear existing timeout\n    if (this.searchTimeout) {\n      clearTimeout(this.searchTimeout);\n    }\n\n    // Set new timeout for debounced search\n    this.searchTimeout = setTimeout(() => {\n      this.performActualSearch();\n    }, this.searchDebounceTime);\n  }\n\n  /**\n   * Performs the actual search operation (original logic)\n   */\n  private performActualSearch() {\n    this.config.search!.keyword=this.filter.keyword;\n    // Call onKeywordChange callback if provided\n    if (this.config.search?.onKeywordChange) {\n      this.config.search.onKeywordChange(this.filter.keyword);\n    }\n    if(!this.config.search!.url || this.config.search!.url==''){\n      return;\n    }\n    // Use getSearchValue if provided, otherwise use the filter keyword\n    const searchValue = this.filter.keyword;\n    let url=this.config.search!.replacableKey?this.config.search!.url.split(this.config.search!.replacableKey).join(searchValue):this.config.search!.url\n   this.http.get<any>(url).subscribe({\n    next: (response: any) => {\n      const data = getByPath(response, this.config.search!.path);\n      this.formatData(data);\n      this.data = data; // Force change detection \n\n      this.updateExpandedComponentsAfterDataChange();\n      this.onFilterSearch.emit({ keyword: searchValue, results: data, response });\n    },\n    error: (error) => {\n      console.error('Search API error:', error);\n    }\n  });\n  }\n\n  paginationFetch(event: any) {\n    if (this.config.pagination?.url && this.config.pagination?.path) {\n      // Build the URL, including search filter if present\n      let url = this.config.pagination.url;\n      \n      // Get search value using getSearchValue if provided, otherwise use filter keyword\n      const searchValue = this.filter.keyword;\n      \n      // If there's a search value and the pagination URL supports replaceable keys\n      if (searchValue && this.config.search?.replacableKey) {\n        // Replace the search key in pagination URL with the current search value\n        url = url.split(this.config.search.replacableKey).join(searchValue);\n      }\n      \n      // If URL and path are configured, fetch data from the server\n      this.http.get<any>(url).subscribe({\n        next: (response: any) => {\n          const data = getByPath(response, this.config.pagination!.path);\n          this.formatData(data);\n          this.data = data; // Update table data\n          this.updateExpandedComponentsAfterDataChange();\n        },\n        error: (error) => {\n          console.error('Pagination API error:', error);\n        }\n      });\n    }\n    \n    // Call the original onPage handler if it exists\n    if (this.config.pagination?.onPage) {\n      this.config.pagination.onPage(event);\n    }\n  }\n  \n  syncData(target: any[], source: any[]) {\n    const targetMap = new Map<number, any>(target.map(item => [item.id, item]));\n  \n    // Mark all existing items as not yet updated\n    const updatedIds = new Set<number>();\n  \n    for (const sourceItem of source) {\n      const targetItem = targetMap.get(sourceItem.id);\n      if (targetItem) {\n        updatedIds.add(sourceItem.id);\n        this.updateItem(targetItem, sourceItem);\n      } else {\n        // New item, push it\n        target.push(this.deepClone(sourceItem));\n        updatedIds.add(sourceItem.id);\n      }\n    }\n  \n    // Remove items that are no longer in source\n    for (let i = target.length - 1; i >= 0; i--) {\n      if (!updatedIds.has(target[i].id)) {\n        target.splice(i, 1);\n      }\n    }\n  }\n  \n  updateItem(targetItem: any, sourceItem: any) {\n    for (const key of Object.keys(sourceItem)) {\n      if (key === 'children') {\n        if (!Array.isArray(targetItem.children)) {\n          targetItem.children = [];\n        }\n        this.syncData(targetItem.children, sourceItem.children || []);\n      } else if (targetItem[key] !== sourceItem[key]) {\n        targetItem[key] = sourceItem[key];\n      }\n    }\n  }\n  \n  deepClone(obj: any): any {\n    return JSON.parse(JSON.stringify(obj)); // For deep cloning of new items\n  }\n\n\n  // Initialize expanded rows based on config\n  ngOnInit(): void {\n    //console.log('DynamicTableComponent ngOnInit', this.config, 'Data:', this.data);\n\n    if (this.config?.expandable?.initiallyExpanded) {\n      this.data.forEach((_, index) => {\n        this.expandedRows[index] = true;\n      });\n    }\n    this.formatData(this.data);\n  }\n\n  /**\n   * For \"component\" type cells, opens the dynamic component in (for example) a modal.\n   */\n  onCellClick(row: any, col: TableColumnConfig): void {\n    if (col.type === 'component' && col.component) {\n      const inputs = this.prepareComponentInputs(row, col);\n      this.currentComponentRef = this.dynamicComponentService.openComponent(col.component, inputs);\n\n      // Bind events to the component instance\n      this.bindComponentEvents(this.currentComponentRef, col.bindedEvents, row);\n    }\n    this.cellAction.emit({ row, column: col, action: 'click' });\n\n  }\n\n  /**\n   * For array type columns, opens the dynamic component on item click.\n   */\n  onArrayItemClick(row: any, col: TableColumnConfig, item?: any, index?: number): void {\n    const arrayCfg = col.arrayConfig;\n    if (arrayCfg) {\n\n      let inputs = this.prepareArrayItemInputs(item, arrayCfg, index);\n      if (arrayCfg.component) {\n        this.currentComponentRef = this.dynamicComponentService.openComponent(arrayCfg.component, inputs);\n\n        // Bind events to the component instance\n        this.bindComponentEvents(this.currentComponentRef, arrayCfg.bindedEvents, item);\n      }\n      let oldValue = col.key.includes('.') ? getValueFromPath(row, col.key) : row[col.key]\n      this.cellAction.emit({ row, column: col, action: 'change', newValue: item, oldValue, result: { [col.key]: item } });\n    }\n  }\n\n  /**\n   * Prepares inputs for a component by combining data inputs and external inputs\n   */\n  prepareComponentInputs(row: any, col: TableColumnConfig): { [key: string]: any } {\n    const rowInputs: { [key: string]: any } = {};\n    if (col.dataInputs) {\n      Object.keys(col.dataInputs).forEach(inputName => {\n        const mapping = col.dataInputs![inputName];\n        if (typeof mapping === 'string') {\n          rowInputs[inputName] = this.resolveMapping(row, mapping);\n        } else if (typeof mapping === 'function') {\n          rowInputs[inputName] = mapping(row);\n        }\n      });\n    }\n    return { ...rowInputs, ...(col.externalInputs || {}) };\n  }\n\n  /**\n   * Prepares inputs for an array item component\n   */\n  prepareArrayItemInputs(item: any, arrayCfg: TableColumnArray, index?: number): { [key: string]: any } {\n    let inputs: { [key: string]: any } = {};\n    if (arrayCfg.dataInputs) {\n      Object.keys(arrayCfg.dataInputs).forEach(inputName => {\n        const mapping = arrayCfg.dataInputs![inputName];\n        if (mapping === 'index') {\n          inputs[inputName] = index;\n        } else if (mapping === 'self') {\n          inputs[inputName] = item;\n        } else if (typeof mapping === 'string') {\n          inputs[inputName] = this.resolveMapping(item, mapping);\n        } else if (typeof mapping === 'function') {\n          inputs[inputName] = mapping(item);\n        }\n      });\n    }\n    return inputs;\n  }\n\n  /**\n   * Binds event handlers to a component instance\n   */\nbindComponentEvents(componentOrInstance: ComponentRef<any> | any, eventBindings?: { [eventName: string]: (data: any) => void }, context?: any): void {\n  if (!componentOrInstance || !eventBindings) return;\n\n  const instance = (componentOrInstance.instance) ? componentOrInstance.instance : componentOrInstance;\n\n  Object.keys(eventBindings).forEach(eventName => {\n    const handler = eventBindings[eventName];\n    const emitter = instance[eventName];\n\n    if (emitter instanceof EventEmitter) {\n      //console.log(`Binding event '${eventName}' to component instance.`);\n      emitter.subscribe((data: any) => {\n        handler.call(null, { context, data });\n      });\n    } else {\n      console.warn(`⚠️ Warning: EventEmitter '${eventName}' was not found on component instance`, instance);\n    }\n  });\n}\n\n\n\n  /**\n   * Handler for when a component outlet is initialized (for inline/visual components)\n   * This allows us to bind events to the component instance\n   */\n  handleComponentOutletInitialized(componentInstance: any, eventBindings?: { [eventName: string]: (data: any) => void }, context?: any): void {\n    if (componentInstance && eventBindings) {\n      Promise.resolve().then(() => {\n        this.bindComponentEvents(componentInstance, eventBindings, context);\n      });\n    }\n  }\n  \n\n  /**\n   * Handler for when an expanded component is initialized\n   * This allows us to bind events to the expanded component\n   */\n  handleExpandedComponentInitialized(componentRef: any, row: any): void {\n    const expandConfig = this.config?.expandable;\n    //console.log('Binding events to expanded component:', expandConfig?.bindedEvents);\n\n    if (componentRef && expandConfig?.bindedEvents) {\n      this.bindComponentEvents(componentRef, expandConfig.bindedEvents, row);\n    }\n  }\n\n  /**\n   * Helper method to compute and return the inputs for visual components.\n   * This is used with *ngComponentOutlet for the 'componentVisual' type.\n   */\n  getComponentInputs(row: any, col: TableColumnConfig): { [key: string]: any } {\n    return this.prepareComponentInputs(row, col);\n  }\n\n  /**\n   * Helper method to compute and return the inputs for the expanded row component.\n   */\n  getExpandedComponentInputs(row: any): { [key: string]: any } {\n    const expandConfig = this.config?.expandable;\n    if (!expandConfig) return {};\n\n    return this.prepareComponentInputs(row, {\n      key: '',\n      header: '',\n      dataInputs: expandConfig.dataInputs,\n      externalInputs: expandConfig.externalInputs\n    });\n\n  }\n\n  /**\n   * Returns the display value for an array item.\n   * If arrayConfig.dataInputs has a \"display\" key, that mapping is used.\n   * Otherwise, if the item is an object with a \"title\" property, that is used.\n   * Else, the raw item is returned.\n   */\n  getDisplayValue(item: any, col: TableColumnConfig): string {\n    if (col.arrayConfig && col.arrayConfig.dataInputs && col.arrayConfig.dataInputs['display']) {\n      const mapping = col.arrayConfig.dataInputs['display'];\n      if (typeof mapping === 'string') {\n        const value = this.resolveMapping(item, mapping);\n        return typeof value === 'object' ? JSON.stringify(value) : value;\n      } else if (typeof mapping === 'function') {\n        return mapping(item);\n      }\n    }\n    // Fallback: if the item has a 'title', use it; otherwise, return the item itself.\n    return (item && item.title) ? item.title : item;\n  }\n\n  private resolveMapping(object: any, mapping: string): any {\n    if (mapping === 'self') {\n      return object;\n    } else if (mapping.startsWith('self.')) {\n      // Remove the 'self.' prefix and resolve the nested property.\n      const newPath = mapping.substring(5);\n      return getValueFromPath(object, newPath);\n    } else if (mapping.includes('.')) {\n      // For any other dot-notated paths.\n      return getValueFromPath(object, mapping);\n    } else {\n      return object[mapping];\n    }\n  }\n\n  /**\n   * Starts editing a cell\n   */\n  startEditing(rowIndex: number, columnKey: string, row: any, col: TableColumnConfig): void {\n    // Initialize the row in the editingCells object if it doesn't exist\n    if (!this.editingCells[rowIndex]) {\n      this.editingCells[rowIndex] = {};\n    }\n\n    // Set this cell to be in edit mode\n    this.editingCells[rowIndex][columnKey] = true;\n\n    // Initialize the row in the editValues object if it doesn't exist\n    if (!this.editValues[rowIndex]) {\n      this.editValues[rowIndex] = {};\n    }\n\n    // Store the current value in the editValues\n    const currentValue = col.key.includes('.')\n      ? this.getValueFromPath(row, col.key)\n      : row[col.key];\n\n    this.editValues[rowIndex][columnKey] = currentValue;\n  }\n\n  /**\n   * Saves edited cell value\n   */\n  saveEdit(rowIndex: number, columnKey: string, row: any, col: TableColumnConfig): void {\n    // Get the edited value\n    const newValue = this.editValues[rowIndex][columnKey];\n\n    // Get the old value\n    const oldValue = col.key.includes('.')\n      ? this.getValueFromPath(row, col.key)\n      : row[col.key];\n\n    // Update the data\n    if (col.key.includes('.')) {\n      // For nested properties, we need to handle this more carefully\n      const keys = col.key.split('.');\n      let current = row;\n\n      // Navigate to the parent object\n      for (let i = 0; i < keys.length - 1; i++) {\n        if (!current[keys[i]]) {\n          current[keys[i]] = {};\n        }\n        current = current[keys[i]];\n      }\n\n      // Set the value on the parent object\n      current[keys[keys.length - 1]] = newValue;\n    } else {\n      // For simple properties, just update directly\n      row[col.key] = newValue;\n    }\n\n    // Exit edit mode\n    this.editingCells[rowIndex][columnKey] = false;\n\n    // Emit the change event\n    this.cellEdited.emit({ row, column: col, newValue, oldValue, result: { [col.key]: newValue } });\n  }\n\n  /**\n   * Cancels editing and reverts to the original value\n   */\n  cancelEdit(rowIndex: number, columnKey: string): void {\n    if (this.editingCells[rowIndex]) {\n      this.editingCells[rowIndex][columnKey] = false;\n    }\n  }\n\n  /**\n   * Checks if a cell is currently being edited\n   */\n  isEditing(rowIndex: number, columnKey: string): boolean {\n    return this.editingCells[rowIndex]?.[columnKey] === true;\n  }\n\n  /**\n   * Updates the temporary edit value as the user types\n   */\n  updateEditValue(rowIndex: number, columnKey: string, value: any): void {\n    if (!this.editValues[rowIndex]) {\n      this.editValues[rowIndex] = {};\n    }\n    this.editValues[rowIndex][columnKey] = value;\n  }\n\n  /**\n   * Toggles the expanded state of a row\n   */\n\n  toggleRow(rowIndex: number, row: any): void {\n    this.expandedRows[row.uniqueId] = !this.expandedRows[row.uniqueId];\n\n    if (this.config?.expandable?.component && this.expandedRows[row.uniqueId]) {\n      const container = this.getContainer(row.uniqueId);\n      if (container) {\n        //console.log('Creating component in container:', container);\n        const componentRef = container.createComponent(this.config?.expandable?.component);\n        let inputs = this.getExpandedComponentInputs(row)\n        Object.keys(inputs).forEach((inputName: string) => {\n          (componentRef.instance as any)[inputName] = inputs[inputName];\n          //console.log(`Setting input ${inputName} to ${inputs[inputName]}`);\n        });\n        this.handleExpandedComponentInitialized(componentRef, row);\n        this.expandedRowsComponents[row.uniqueId] = {\n          componentRef,\n          rowRef: row\n        };\n      }\n      //this.expandedRowsComponents[rowIndex] = {component:this.config?.expandable?.component,input:this.getExpandedComponentInputs(row)};\n      // this.handleExpandedComponentInitialized(this.expandedRowsComponents[rowIndex].component, row);\n\n\n      // let currentComponentRef = this.dynamicComponentService.openComponent(this.config?.expandable?.component, this.getExpandedComponentInputs(row));\n      // this.expandedRowsComponents[rowIndex] = currentComponentRef;\n      // // Bind events to the component instance\n      // this.handleExpandedComponentInitialized(currentComponentRef, row);\n\n      // this.cellAction.emit({ row, column: col });\n    }\n    if (!this.expandedRows[row.uniqueId]) {\n      this.expandedRowsComponents[row.uniqueId].componentRef.destroy();\n      this.expandedRowsComponents[row.uniqueId].componentRef = null;\n      delete this.expandedRowsComponents[row.uniqueId]\n    }\n\n\n  }\n\n  /**\n   * Checks if a row is expanded\n   */\n  isRowExpanded(row: any): boolean {\n    return this.expandedRows[row.uniqueId] === true;\n  }\n\n  /**\n   * Checks if a row is expandable based on the enabledByData property\n   */\n  isRowExpandable(row: any): boolean {\n    // If no expandable config or no enabledByData property, return false (all rows expandable)\n    if (!this.config?.expandable?.enabledByData) {\n      return false;\n    }\n\n    const dataKey = this.config.expandable.enabledByData;\n    const expandedInputs = this.getExpandedComponentInputs(row);\n\n    // If we can't get the inputs or the specified key doesn't exist\n    if (!expandedInputs || expandedInputs[dataKey] === undefined) {\n      return false;\n    }\n\n    const dataValue = expandedInputs[dataKey];\n\n    // Check for array data\n    if (Array.isArray(dataValue)) {\n      return dataValue.length > 0;\n    }\n\n    // For objects, check if they have any properties\n    if (dataValue && typeof dataValue === 'object') {\n      return Object.keys(dataValue).length > 0;\n    }\n\n    // For primitive values (strings, numbers, booleans), return the truthy value\n    return Boolean(dataValue);\n  }\n  actionEdit(action: any, i: number, list: any[], row: any): void {\n    let actionType: tableActionTypes = action.type;\n    //console.log(action, actionType + ' action triggered for row:', i, 'list:', list,);\n    if (actionType == tableActionTypes.DELETE) {\n     // list.splice(i, 1);\n      //this.expandedRows[i]\n\n    }\n    if (actionType == tableActionTypes.EDIT) {\n      //console.log('Edit action triggered for row:', i, 'list:', list,);\n    }\n    if (actionType == tableActionTypes.ADD_CHILD) {\n      if (!this.config?.expandable?.enabledByData) {\n        return\n      }\n      const dataKey = this.config.expandable.enabledByData;\n\n      const expandedInputs = this.getExpandedComponentInputs(row);\n\n      // If we can't get the inputs or the specified key doesn't exist\n      if (!expandedInputs || expandedInputs[dataKey] === undefined) {\n        return;\n      }\n\n      const dataValue = expandedInputs[dataKey];\n\n      // Check for array data\n      if (Array.isArray(dataValue) && action.emptyDataStructure) {\n        // If it's an array, we can push the new item\n        const emptyData = JSON.parse(JSON.stringify(action.emptyDataStructure))\n        this.toggleRow(i, row);\n        dataValue.push(emptyData);\n        this.toggleRow(i, row);\n      }\n\n      //console.log('Add Child action triggered for row:', i, 'list:', list,);\n    }\n  }\n  // addElement(array:any,action:any): void {\n  //   if (Array.isArray(array) && action.emptyDataStructure) {\n  //     // If it's an array, we can push the new item\n  //     const emptyData = JSON.parse(JSON.stringify(action.emptyDataStructure))\n  //     array.push(emptyData);\n  //   }\n  // }\n\n\n\n\n  //example of html\n  //   <th *ngFor=\"let col of config?.columns\" class=\"px-4 py-2 border-b\">\n  //   {{ col.header }}\n  //   <!-- Sort icon for sortable columns -->\n  //   <ng-container *ngIf=\"col.sortable\">\n  //     <p-sortIcon [field]=\"col.key\" [sortOrder]=\"sortOrder\" (sortFunction)=\"onSort($event)\"></p-sortIcon>\n  //   </ng-container>\n  // </th>\n  // Helper to get cell value\n  private getCellValue(row: any, col: TableColumnConfig): any {\n    return col.key.includes('.') ? getValueFromPath(row, col.key) : row[col.key];\n  }\n\n  \n    /**\n     * Returns the display value for a cell.\n     * If dataInputs has a \"display\" function, that is used to transform the value.\n     * Otherwise, returns the raw cell value.\n     */\n    getCellDisplayValue(row: any, col: TableColumnConfig): any {\n      const rawValue = this.getCellValue(row, col);\n      \n      // Check if there's a display function in dataInputs\n      if (col.dataInputs?.['display']) {\n          const displayMapping = col.dataInputs['display'];\n          if (typeof displayMapping === 'function') {\n              return displayMapping(rawValue);\n          } else if (typeof displayMapping === 'string') {\n              return this.resolveMapping(row, displayMapping);\n          }\n      }\n      \n      // Return raw value if no display function\n      return rawValue;\n  }\n\n  // Event handler wrappers for dynamic event functions\n  handleCellClick(row: any, col: TableColumnConfig) {\n    if (typeof col.onClick === 'function') {\n      col.onClick({ row, value: this.getCellValue(row, col), column: col });\n    }\n  }\n  handleCellHover(row: any, col: TableColumnConfig) {\n    if (typeof col.onHover === 'function') {\n      col.onHover({ row, value: this.getCellValue(row, col), column: col });\n    }\n  }\n  handleCellLeave(row: any, col: TableColumnConfig) {\n    if (typeof col.onLeave === 'function') {\n      col.onLeave({ row, value: this.getCellValue(row, col), column: col });\n    }\n  }\n  handleCellChange(row: any, col: TableColumnConfig, value: any) {\n    if (typeof col.onChange === 'function') {\n      col.onChange({ row, value, column: col });\n    }\n  }\n\n  onSort(col: { [key: string]: any }, data: any[]): void {\n    // Toggle order between ascending and descending\n    col['order'] = col['order'] === 1 ? -1 : 1;\n    \n    // Check if external sorting is enabled\n    if (col['sortable']?.external && col['sortable']?.api) {\n      this.externalSort(col);\n    } else {\n      // Local sorting logic\n      data.sort((a, b) => this.customSort(a, b, col['key'], col['order']));\n      this.data = [...data]; // Trigger change detection\n    }\n  }\n\n  /**\n   * Handle external API-based sorting\n   * @param col Column configuration with sortable.api and sortable.path\n   */\n  externalSort(col: { [key: string]: any }): void {\n    if (!col['sortable']?.api) {\n      return;\n    }\n\n    const sortOrder = col['order'] === 1 ? 'asc' : 'desc';\n    const fieldName = col['key'] || col['field'];\n    \n    // Build the API URL - you can customize this based on your API requirements\n    let url = col['sortable'].api;\n    \n    // Replace placeholders if they exist\n    url = url.replace('{{field}}', fieldName);\n    url = url.replace('{{order}}', sortOrder);\n    url = url.replace('{{direction}}', sortOrder);\n    \n    // Make the API call\n    this.http.get<any>(url).toPromise().then((response: any) => {\n      // Extract data using the path if provided\n      const sortedData = col['sortable'].path ? getByPath(response, col['sortable'].path) : response;\n      \n      // Update table data\n      this.formatData(sortedData);\n      this.data = sortedData;\n      this.updateExpandedComponentsAfterDataChange();\n      \n      // Call onSort callback if provided\n      if (col['sortable'].onSort) {\n        col['sortable'].onSort({ data: sortedData, response, field: fieldName, order: sortOrder });\n      }\n    }).catch((error) => {\n      console.error('External sort API call failed:', error);\n      // Fallback to local sorting if API fails\n      this.data.sort((a, b) => this.customSort(a, b, col['key'], col['order']));\n      this.data = [...this.data];\n    });\n  }\n\n  customSort(a: any, b: any, field: string, order: number): number {\n    const aValue = getValueFromPath(a, field);\n    const bValue = getValueFromPath(b, field);\n\n    if (aValue < bValue) {\n      return order === 1 ? -1 : 1;\n    } else if (aValue > bValue) {\n      return order === 1 ? 1 : -1;\n    } else {\n      return 0;\n    }\n  }\n  updateExpandedComponentsAfterDataChange() {\n    for (const key in this.expandedRowsComponents) {\n      const wrapper = this.expandedRowsComponents[key];\n      if (wrapper?.componentRef && wrapper.rowRef) {\n        const updatedInputs = this.getExpandedComponentInputs(wrapper.rowRef);\n  \n        Object.keys(updatedInputs).forEach(inputName => {\n          (wrapper.componentRef.instance as any)[inputName] = updatedInputs[inputName];\n        });\n  \n        // Manually trigger ngOnChanges if needed\n        if (typeof wrapper.componentRef.instance.ngOnChanges === 'function') {\n          const changes: SimpleChanges = {};\n          Object.keys(updatedInputs).forEach(key => {\n            changes[key] = {\n              previousValue: null,\n              currentValue: updatedInputs[key],\n              firstChange: false,\n              isFirstChange: () => false,\n            };\n          });\n          wrapper.componentRef.instance.ngOnChanges(changes);\n        }\n      }\n    }\n  }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n\n  /**\n   * Initialize filter configuration - auto-generate if needed\n   */\n  private initializeFilterConfig(): void {\n    if (this.config.filter && this.config.filter.autoGenerate && !this.config.filter.config) {\n      this.config.filter.config = this.generateFilterConfigFromColumns();\n      this.config.filter.data = {};\n    }\n  }\n\n  /**\n   * Auto-generate filter form configuration from table columns\n   */\n  private generateFilterConfigFromColumns(): FormConfig {\n    if (!this.config.columns) {\n      return { sections: [] };\n    }\n\n    const filterFields = this.config.columns\n      .filter(col => this.isFilterableColumn(col))\n      .map(col => this.createFilterField(col));\n\n    return {\n      sections: [\n        {\n          rows: [\n            {\n              fields: filterFields,\n              layout: 'grid',\n              gridCols: 2\n            }\n          ]\n        }\n      ],\n      submitButton: {\n        label: 'Apply Filter',\n        icon: 'pi pi-check',\n        severity: 'primary'\n      },\n      resetButton: {\n        label: 'Clear',\n        icon: 'pi pi-times',\n        severity: 'secondary',\n        outlined: true\n      }\n    };\n  }\n\n  /**\n   * Check if a column should be included in the filter form\n   */\n  private isFilterableColumn(col: TableColumnConfig): boolean {\n    // Exclude certain column types from filtering\n    const excludedTypes = ['actions', 'component', 'componentVisual', 'image'];\n    return !excludedTypes.includes(col.type || 'text');\n  }\n\n  /**\n   * Create a filter field configuration from a table column\n   */\n  private createFilterField(col: TableColumnConfig): any {\n    const baseField = {\n      key: col.key,\n      label: col.header,\n      containerClass: 'mb-3'\n    };\n\n    switch (col.type) {\n      case 'number':\n        return {\n          ...baseField,\n          type: 'number',\n          placeholder: `Filter by ${col.header}`\n        };\n      case 'date':\n        return {\n          ...baseField,\n          type: 'text', // You might want to use a date picker component\n          placeholder: `Filter by ${col.header}`\n        };\n      case 'select':\n        return {\n          ...baseField,\n          type: 'select',\n          options: col.options || [],\n          optionLabel: col.optionLabel || 'label',\n          optionValue: col.optionValue || 'value',\n          placeholder: `Select ${col.header}`\n        };\n      default:\n        return {\n          ...baseField,\n          type: 'text',\n          placeholder: `Filter by ${col.header}`\n        };\n    }\n  }\n\n  /**\n   * Handle filter form changes\n   */\n  onFilterChange(filterData: any): void {\n    if (this.config.filter) {\n      this.config.filter.data = filterData;\n      \n      // Emit filter change event\n      this.filterChange.emit(filterData);\n      // Emit two-way binding change\n      this.activeFilterChange.emit(filterData);\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterChange) {\n        this.config.filter.onFilterChange(filterData);\n      }\n\n      // Also trigger apply on change\n      this.filterSubmit.emit(filterData);\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi(filterData);\n      }\n    }\n  }\n\n  /**\n   * Handle filter form submission\n   */\n  onFilterSubmit(filterData: any): void {\n    if (this.config.filter) {\n      this.config.filter.data = filterData;\n      \n      // Emit filter submit event\n      this.filterSubmit.emit(filterData);\n      // Emit two-way binding change\n      this.activeFilterChange.emit(filterData);\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterSubmit) {\n        this.config.filter.onFilterSubmit(filterData);\n      }\n      \n      // Make API call if endpoint is provided\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi(filterData);\n      }\n      \n      // Close filter panel after submit\n      this.config.filter.opened = false;\n    }\n  }\n\n  /**\n   * Call filter API endpoint\n   */\n  private callFilterApi(filterData: any): void {\n    if (!this.config.filter?.apiEndpoint) return;\n\n    // Remove empty/null values from filter data\n    const cleanFilterData = this.cleanFilterData(filterData);\n\n    this.http.post(this.config.filter.apiEndpoint, cleanFilterData).subscribe({\n      next: (response: any) => {\n        // Update table data if response contains data\n        if (response) {\n          // Try to extract data array from response\n          let newData = response;\n          \n          // Check if response has common data properties\n          if (response.data && Array.isArray(response.data)) {\n            newData = response.data;\n          } else if (response.results && Array.isArray(response.results)) {\n            newData = response.results;\n          } else if (response.items && Array.isArray(response.items)) {\n            newData = response.items;\n          }\n          \n          if (Array.isArray(newData)) {\n            this.formatData(newData);\n            this.data = [...newData]; // Force change detection\n            this.updateExpandedComponentsAfterDataChange();\n          }\n        }\n        \n        // Emit API response event\n        this.filterApiResponse.emit({\n          success: true,\n          data: response,\n          filterData: cleanFilterData\n        });\n      },\n      error: (error) => {\n        console.error('Filter API call failed:', error);\n        // Emit error event\n        this.filterApiResponse.emit({\n          success: false,\n          error: error,\n          filterData: cleanFilterData\n        });\n      }\n    });\n  }\n\n  /**\n   * Clean filter data by removing empty/null values\n   */\n  private cleanFilterData(filterData: any): any {\n    const cleaned: any = {};\n    \n    Object.keys(filterData).forEach(key => {\n      const value = filterData[key];\n      if (value !== null && value !== undefined && value !== '' && \n          !(Array.isArray(value) && value.length === 0)) {\n        cleaned[key] = value;\n      }\n    });\n    \n    return cleaned;\n  }\n\n  /**\n   * Reset filter form\n   */\n  onFilterReset(): void {\n    if (this.config.filter) {\n      this.config.filter.data = {};\n      \n      // Emit filter change event with empty data\n      this.filterChange.emit({});\n      // Emit two-way binding change with empty data\n      this.activeFilterChange.emit({});\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterChange) {\n        this.config.filter.onFilterChange({});\n      }\n\n      // Align with dynamic reset: submit and call API to refresh\n      this.filterSubmit.emit({});\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi({});\n      }\n    }\n  }\n\n  /**\n   * Open the filter dialog\n   */\n  openFilterDialog(): void {\n    if (this.config.filter) {\n      this.config.filter.opened = true;\n    }\n  }\n\n  /**\n   * Handle filter dialog hide event\n   */\n  onFilterDialogHide(): void {\n    if (this.config.filter) {\n      this.config.filter.opened = false;\n    }\n  }\n\n  /**\n   * Get dynamic filter configuration\n   */\n  getDynamicFilterConfig(): DynamicFilterConfig {\n    if (this.config.filter?.dynamicConfig) {\n      return this.config.filter.dynamicConfig;\n    }\n\n    // Auto-generate dynamic filter config from table columns if not provided\n    const availableFields: FilterParameter[] = this.config.columns!\n      .filter(col => col.type !== 'actions' && col.type !== 'component' && col.type !== 'image')\n      .map(col => {\n        // Replace dots with underscores for FormGroup compatibility\n        const formKey = col.key.replace(/\\./g, '_');\n        return {\n          id: formKey,\n          key: col.key, // Keep original key for data mapping\n          label: col.header,\n          type: this.mapColumnTypeToFilterType(col.type || 'text'),\n          options: col.type === 'select' ? (col as any).options || [] : undefined,\n          optionLabel: col.type === 'select' ? (col as any).optionLabel || 'label' : undefined,\n          optionValue: col.type === 'select' ? (col as any).optionValue || 'value' : undefined,\n          placeholder: `Filter by ${col.header?.toLowerCase() || 'value'}...`\n        };\n      });\n\n    // Generate storage key based on table identifier\n    const tableId = this.config.identifierKey;\n    const storageKey = tableId \n      ? `numo-table-filters-${tableId}` \n      : 'numo-table-filters-unidentified';\n\n    return {\n      availableFields,\n      allowCustomFields: true,\n      maxFilters: 10,\n      storageKey,\n      apiEndpoint: this.config.filter?.apiEndpoint,\n      showSavedFilters: true,\n      autoSave: true,\n      apiUrl: this.config.filter?.dynamicConfig?.apiUrl,\n      headers: this.config.headers // Pass headers from table config\n    };\n  }\n\n  /**\n   * Map column type to filter type\n   */\n  private mapColumnTypeToFilterType(columnType: string): 'text' | 'number' | 'select' | 'multiselect' | 'checkbox' | 'date' {\n    switch (columnType) {\n      case 'number':\n        return 'number';\n      case 'date':\n        return 'date';\n      case 'select':\n        return 'select';\n      default:\n        return 'text';\n    }\n  }\n\n  /**\n   * Handle dynamic filter apply\n   */\n  onDynamicFilterApply(filterData: any): void {\n    if (this.config.filter) {\n      this.config.filter.data = filterData;\n      \n      // Emit filter submit event\n      this.filterSubmit.emit(filterData);\n      //console.log('Filter submit event emitted with:', filterData);\n      // Emit two-way binding change\n      this.activeFilterChange.emit(filterData);\n      // Keep activeFastFilter in sync with current quick selection\n      const current = this.selectedSavedFilterId ? this.getSavedFilters().find(f => f.id === this.selectedSavedFilterId) || null : null;\n      this.activeFastFilterChange.emit(current || null);\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterSubmit) {\n        this.config.filter.onFilterSubmit(filterData);\n      }\n      \n      // Make API call if endpoint is provided\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi(filterData);\n      }\n    }\n  }\n\n  /**\n   * Handle dynamic filter change\n   */\n  onDynamicFilterChange(filterData: any): void {\n    if (this.config.filter) {\n      this.config.filter.data = filterData;\n      \n      // Emit filter change event\n      this.filterChange.emit(filterData);\n      // Emit two-way binding change\n      this.activeFilterChange.emit(filterData);\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterChange) {\n        this.config.filter.onFilterChange(filterData);\n      }\n\n      // Also trigger apply on change\n      this.filterSubmit.emit(filterData);\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi(filterData);\n      }\n    }\n  }\n\n  /**\n   * Handle dynamic filter reset\n   */\n  onDynamicFilterReset(): void {\n    if (this.config.filter) {\n      this.config.filter.data = {};\n      \n      // Emit filter change event\n      this.filterChange.emit({});\n      \n      // Emit filter submit event to trigger data refresh\n      this.filterSubmit.emit({});\n      // Emit two-way binding change\n      this.activeFilterChange.emit({});\n      // Clear active fast filter selection\n      this.activeFastFilterChange.emit(null);\n      this.selectedSavedFilterId = null;\n      \n      // Call custom callbacks if provided\n      if (this.config.filter.onFilterChange) {\n        this.config.filter.onFilterChange({});\n      }\n      \n      if (this.config.filter.onFilterSubmit) {\n        this.config.filter.onFilterSubmit({});\n      }\n      \n      // Make API call to get unfiltered data if endpoint is provided\n      if (this.config.filter.apiEndpoint) {\n        this.callFilterApi({});\n      }\n    }\n  }\n\n  /**\n   * Handle dynamic filter save\n   */\n  onDynamicFilterSave(savedFilter: SavedFilter): void {\n    this.filterSave.emit(savedFilter);\n    // Update active fast filter to the saved one\n    this.activeFastFilterChange.emit(savedFilter);\n    this.selectedSavedFilterId = savedFilter.id;\n  }\n\n  /**\n   * Handle dynamic filter load\n   */\n  onDynamicFilterLoad(savedFilter: SavedFilter): void {\n    if (this.config.filter) {\n      // Update filter data with loaded filter values\n      const filterData: any = {};\n      savedFilter.parameters.forEach(param => {\n        if (param.value !== undefined) {\n          filterData[param.key] = param.value;\n        }\n      });\n      \n      this.config.filter.data = filterData;\n      this.filterLoad.emit(savedFilter);\n      \n      // Emit filter change event\n      this.filterChange.emit(filterData);\n      // Emit two-way binding change\n      this.activeFilterChange.emit(filterData);\n      // Update active fast filter selection\n      this.activeFastFilterChange.emit(savedFilter);\n      this.selectedSavedFilterId = savedFilter.id;\n      \n      // Call custom callback if provided\n      if (this.config.filter.onFilterChange) {\n        this.config.filter.onFilterChange(filterData);\n      }\n    }\n  }\n\n  // Fast filter selector properties and methods\n  private savedFiltersCache: SavedFilter[] = [];\n  private selectedSavedFilterId: string | null = null;\n\n  /**\n   * Get saved filters for the fast filter selector\n   */\n  getSavedFilters(): SavedFilter[] {\n    if (!this.config.filter?.useDynamicFilter) {\n      return [];\n    }\n\n    // Get saved filters from localStorage based on table's storage key\n    const dynamicConfig = this.getDynamicFilterConfig();\n    const storageKey = dynamicConfig.storageKey;\n    \n    try {\n      const saved = localStorage.getItem(storageKey!);\n      if (saved) {\n        this.savedFiltersCache = JSON.parse(saved).map((f: any) => ({\n          ...f,\n          createdAt: new Date(f.createdAt),\n          lastUsed: f.lastUsed ? new Date(f.lastUsed) : undefined\n        }));\n      } else {\n        this.savedFiltersCache = [];\n      }\n    } catch (error) {\n      console.error('Error loading saved filters for fast selector:', error);\n      this.savedFiltersCache = [];\n    }\n\n    // Filter out auto-save filters for the quick selector\n    return this.savedFiltersCache.filter(f => f.id !== 'auto-save');\n  }\n\n  /**\n   * Get the currently selected saved filter ID\n   */\n  getSelectedSavedFilterId(): string | null {\n    return this.selectedSavedFilterId;\n  }\n\n  /**\n   * Handle quick filter selection from the fast filter selector\n   */\n  onQuickFilterSelect(filterId: string): void {\n    if (!filterId) {\n      // Clear selection\n      this.selectedSavedFilterId = null;\n      this.onDynamicFilterReset();\n      this.activeFastFilterChange.emit(null);\n      return;\n    }\n\n    const savedFilter = this.getSavedFilters().find(f => f.id === filterId);\n    if (savedFilter) {\n      this.selectedSavedFilterId = filterId;\n      \n      // Apply the saved filter immediately\n      this.onDynamicFilterLoad(savedFilter);\n      \n      // Update last used timestamp\n      this.updateFilterLastUsed(savedFilter);\n      // Emit active fast filter selection\n      this.activeFastFilterChange.emit(savedFilter);\n    }\n  }\n\n  /**\n   * Update the last used timestamp for a saved filter\n   */\n  private updateFilterLastUsed(savedFilter: SavedFilter): void {\n    const dynamicConfig = this.getDynamicFilterConfig();\n    const storageKey = dynamicConfig.storageKey;\n    \n    try {\n      const saved = localStorage.getItem(storageKey!);\n      if (saved) {\n        const filters: SavedFilter[] = JSON.parse(saved);\n        const filterIndex = filters.findIndex(f => f.id === savedFilter.id);\n        \n        if (filterIndex !== -1) {\n          filters[filterIndex].lastUsed = new Date();\n          localStorage.setItem(storageKey!, JSON.stringify(filters));\n        }\n      }\n    } catch (error) {\n      console.error('Error updating filter last used:', error);\n    }\n  }\n  \n}\nfunction getByPath(obj: any, path?: string): any {\n  if (!path) return obj;\n  return path.split('.').reduce((acc, key) => acc && acc[key], obj);\n}","<!-- Info-badge virs tabulas ar Tailwind -->\n<div class=\"flex justify-end items-center flex-wrap gap-3 mb-4\" >\n  <div *ngIf=\"config?.addItembutton && !config?.addItembutton?.hidden || config?.filter && !config?.filter?.hidden\"\n    class=\"flex justify-between items-start gap-4 mt-4 mb-4\" style=\"margin-inline-end: auto;\">\n    <!-- Left: Add Button -->\n    <div *ngIf=\"config?.addItembutton && !config?.addItembutton?.hidden\">\n      <universal-button [label]=\"config?.addItembutton?.label ?? 'Add Item'\"\n        (click)=\"config?.addItembutton!.action($event)\" icon=\"plus\" iconPos=\"right\" severity=\"primary\"\n        [disabled]=\"config?.addItembutton?.disabled!\"></universal-button>\n    </div>\n\n  </div>\n  <!-- Right: Filter Section -->\n  <div *ngIf=\"config?.filter && !config?.filter?.hidden\" class=\"flex items-center gap-2\">\n    <!-- Fast Filter Selector -->\n    <!-- <div *ngIf=\"config.filter?.useDynamicFilter && getSavedFilters().length > 0\" class=\"relative\">\n    <universal-select\n      [options]=\"getSavedFilters()\"\n      [optionLabel]=\"'name'\"\n      [optionValue]=\"'id'\"\n      placeholder=\"Quick filter...\"\n      [value]=\"getSelectedSavedFilterId()\"\n      (valueChange)=\"onQuickFilterSelect($event)\"\n      class=\"w-48\">\n    </universal-select>\n  </div> -->\n\n\n\n    <!-- Dynamic Filter Component -->\n    <dynamic-filter *ngIf=\"config.filter?.useDynamicFilter\" [config]=\"getDynamicFilterConfig()\"\n      [(visible)]=\"config.filter!.opened\" [header]=\"config.filter?.label ?? 'Dynamic Filter'\"\n      (filterApply)=\"onDynamicFilterApply($event)\" (filterChange)=\"onDynamicFilterChange($event)\"\n      (filterReset)=\"onDynamicFilterReset()\" (filterSave)=\"onDynamicFilterSave($event)\"\n      (filterLoad)=\"onDynamicFilterLoad($event)\">\n    </dynamic-filter>\n\n    <!-- Filter Button -->\n    <universal-button [label]=\"config.filter?.label ?? 'Filter'\" (click)=\"openFilterDialog()\" icon=\"filter\"\n      iconPos=\"left\" severity=\"primary\" [disabled]=\"config.filter?.disabled!\"></universal-button>\n\n\n    <!-- Legacy Filter Dialog -->\n    <universal-dialog *ngIf=\"!config.filter?.useDynamicFilter\" [header]=\"config.filter?.label ?? ''\"\n      [(visible)]=\"config.filter!.opened\" [modal]=\"true\" [style]=\"{ width: '500px' }\" [draggable]=\"true\"\n      [resizable]=\"true\" (hide)=\"onFilterDialogHide()\">\n\n      <universal-dynamic-form *ngIf=\"config.filter && config.filter.config\" [config]=\"config.filter.config\"\n        [formData]=\"config.filter.data\" (formSubmit)=\"onFilterSubmit($event)\" (formReset)=\"onFilterReset()\"\n        (fieldChange)=\"onFilterChange($event)\">\n      </universal-dynamic-form>\n\n    </universal-dialog>\n  </div>\n  <!-- Search box -->\n  <div *ngIf=\"config.search && config.search.enabled !== false\">\n    <universal-input\n      [(value)]=\"filter.keyword\"\n      (valueChange)=\"filterSearch()\"\n      placeholder=\"Meklēt...\"\n      [label]=\"''\"\n      class=\"min-w-64\">\n      <i class=\"pi pi-search\" slot=\"prefix\"></i>\n    </universal-input>\n  </div>\n\n  <!-- Page size -->\n  <div *ngIf=\"config?.pagination?.pageSize\"\n    class=\"text-gray-700 text-sm font-medium bg-gray-100 px-3 py-1 rounded-full\">\n    ☰ {{ config.pagination?.pageSize }}\n  </div>\n\n  <!-- Total items -->\n  <div class=\"text-gray-700 text-sm font-medium bg-gray-100 px-3 py-1 rounded-full\">\n    ∑ {{ config?.pagination?.total || data?.length || 0 }}\n  </div>\n\n</div>\n\n\n<p-table [value]=\"data\" [paginator]=\"config?.pagination?.hidden !== true\" [rows]=\"config?.pagination?.pageSize || 10\"\n  [totalRecords]=\"config?.pagination?.total || data?.length || 0\"\n  [first]=\"((config?.pagination?.page || 1) - 1) * (config?.pagination?.pageSize || 10)\" [lazy]=\"true\"\n  (onLazyLoad)=\"paginationFetch($event)\">\n\n  <ng-template *ngIf=\"!config?.headless\" pTemplate=\"header\">\n    <!-- non selecteble class -->\n    <tr class=\"non-selectable\">\n      <!-- Expand column header if expandable is configured -->\n      <th *ngIf=\"config?.expandable && config?.expandable?.position !== 'last'\" class=\"w-10\"></th>\n\n      <th *ngFor=\"let col of config?.columns\" class=\"px-4 py-2 border-b\" [style.min-width]=\"col.width\">\n        {{ col.header }}\n        <!-- Sort icon for sortable columns -->\n        <ng-container *ngIf=\"col.sortable\">\n          <i style=\"font-size: 10px;\" class=\"pi pi-sort-alt link\" (click)=\"onSort(col,data)\"></i>\n        </ng-container>\n      </th>\n\n      <!-- Expand column header if expandable is configured and position is last -->\n      <th *ngIf=\"config?.expandable && config?.expandable?.position === 'last'\" class=\"w-10\"></th>\n    </tr>\n  </ng-template>\n\n  <ng-template pTemplate=\"body\" let-row let-i=\"rowIndex\">\n    <tr>\n      <!-- Expand button at the beginning if expandable is configured -->\n      <td *ngIf=\"config?.expandable && config?.expandable?.position !== 'last'\" class=\"text-center\">\n        <button [class.disabled]=\"!isRowExpandable(row)\" [style.opacity]=\"isRowExpandable(row)?1:0\"\n          class=\"p-2 rounded-full hover:bg-gray-100\" (click)=\"toggleRow(i,row)\">\n          <i [ngClass]=\"isRowExpanded(row) ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></i>\n        </button>\n      </td>\n\n      <td *ngFor=\"let col of config?.columns\" class=\"px-4 py-2 border-b\"\n        [style.cursor]=\"col.cursor || 'default'\"\n        [style.pointer-events]=\"col.pointerEvents || 'auto'\"\n        (click)=\"col.onClick ? handleCellClick(row, col) : null\"\n        (mouseenter)=\"col.onHover ? handleCellHover(row, col) : null\"\n        (mouseleave)=\"col.onLeave ? handleCellLeave(row, col) : null\">\n        <!-- Render text or number type with editable functionality -->\n        <ng-container *ngIf=\"col.type === 'text' || col.type === 'number'; else renderOther\">\n          <div class=\"flex items-center\">\n            <!-- Display mode -->\n            <ng-container *ngIf=\"!isEditing(i, col.key)\">\n              <span>{{ getCellDisplayValue(row, col) }}</span>\n\n              <!-- Edit icon for editable fields -->\n              <button *ngIf=\"col.editable\" class=\"ml-2 text-blue-500 hover:text-blue-700\"\n                (click)=\"startEditing(i, col.key, row, col)\">\n                <i class=\"pi pi-pencil\"></i>\n              </button>\n            </ng-container>\n\n            <!-- Edit mode -->\n            <ng-container *ngIf=\"isEditing(i, col.key)\">\n              <input [type]=\"col.type === 'number' ? 'number' : 'text'\" [ngModel]=\"editValues[i]?.[col.key]\"\n                (ngModelChange)=\"updateEditValue(i, col.key, $event); col.onChange ? handleCellChange(row, col, $event) : null\"\n                class=\"border px-2 py-1 rounded\" />\n\n              <!-- Accept button -->\n              <button class=\"ml-2 text-green-500 hover:text-green-700\" (click)=\"saveEdit(i, col.key, row, col)\">\n                <i class=\"pi pi-check\"></i>\n              </button>\n\n              <!-- Cancel button -->\n              <button class=\"ml-1 text-red-500 hover:text-red-700\" (click)=\"cancelEdit(i, col.key)\">\n                <i class=\"pi pi-times\"></i>\n              </button>\n            </ng-container>\n          </div>\n        </ng-container>\n\n        <ng-template #renderOther>\n          <!-- Render icons type   hover:bg-gray-100 -->\n\n          <ng-container *ngIf=\"col.type === 'icons'\">\n            <div class=\"flex items-center gap-2\">\n              <ng-container *ngFor=\"let icon of col.iconsOptions\">\n                <button\n                  *ngIf=\"icon.value == getValueFromPath(row, col.key) || icon.value == row[col.key] || (icon.value === true && row[col.key]) || (icon.value === false && row[col.key]== false)\"\n                  [class.active]=\"row[col.key] === icon.value\" class=\"p-2 rounded-full \"\n                  [attr.aria-label]=\"icon.tooltip\">\n                  <i [ngClass]=\"icon.icon\"></i>\n                </button>\n              </ng-container>\n            </div>\n          </ng-container>\n          <!-- Render image type   -->\n\n          <ng-container *ngIf=\"col.type === 'image'\">\n            <div class=\"flex items-center\" style=\"min-width: 70px;\" *ngIf=\"row[col.key]\">\n              <img [src]=\"(col.baseUrl ? col.baseUrl : '') + row[col.key]\" style=\"margin: auto;\" alt=\"Thumbnail\"\n                class=\"w-12 h-12 object-cover rounded-md shadow-sm\" />\n            </div>\n          </ng-container>\n          <!-- Render component type (opens on click) -->\n          <ng-container *ngIf=\"col.type === 'component'\">\n            <span class=\"cursor-pointer underline text-blue-500\" (click)=\"onCellClick(row, col)\">\n              {{ col.key.includes('.') ? getValueFromPath(row, col.key) : row[col.key] }}\n            </span>\n          </ng-container>\n\n          <!-- Render visual component type (inline) -->\n          <ng-container *ngIf=\"col.type === 'componentVisual'\">\n            <ng-container [ngComponentOutlet]=\"col.component\" [ngComponentOutletInputs]=\"getComponentInputs(row, col)\"\n              (ngComponentOutletInitialized)=\"handleComponentOutletInitialized($event, col.bindedEvents, row)\">\n            </ng-container>\n          </ng-container>\n\n          <!-- Render array type -->\n          <ng-container *ngIf=\"col.type === 'array'\">\n            <ng-container [ngSwitch]=\"col.arrayConfig?.arrayType\">\n              <!-- List rendering for array -->\n              <ng-container *ngSwitchCase=\"'list'\">\n                <ul [ngClass]=\"col.arrayConfig?.flexContainer ? 'flex flex-wrap gap-2' : 'list-disc pl-4'\"\n                  [class]=\"col.arrayConfig?.containerClass || ''\">\n                  <li *ngFor=\"let item of (col.arrayConfig?.arrayData || getValueFromPath(row, col.key)); let j = index\"\n                    (click)=\"onArrayItemClick(row, col, item, j)\" class=\"cursor-pointer hover:underline\">\n                    {{ getDisplayValue(item, col) }}\n                  </li>\n                </ul>\n              </ng-container>\n\n              <ng-container *ngSwitchCase=\"'dropdown'\">\n                <select (change)=\"onArrayItemClick(row, col, $event.target?.value, $event.target?.selectedIndex)\">\n                  <option\n                    *ngFor=\"let option of (col.arrayConfig?.arrayData || getValueFromPath(row, col.key)); let j = index\"\n                    [value]=\"option\">\n                    {{ getDisplayValue(option, col) }}\n                  </option>\n                </select>\n              </ng-container>\n              <!-- Checkbox rendering for array (if needed) -->\n              <ng-container *ngSwitchCase=\"'checkbox'\">\n                <div\n                  *ngFor=\"let option of (col.arrayConfig?.arrayData || getValueFromPath(row, col.key)); let j = index\">\n                  <input type=\"checkbox\" (change)=\"onArrayItemClick(row, col, option, j)\" />\n                  {{ getDisplayValue(option, col) }}\n                </div>\n              </ng-container>\n              <!-- Radio rendering for array (if needed) -->\n              <ng-container *ngSwitchCase=\"'radio'\">\n                <div\n                  *ngFor=\"let option of (col.arrayConfig?.arrayData || getValueFromPath(row, col.key)); let j = index\">\n                  <input type=\"radio\" [name]=\"col.key + '_' + i\" (change)=\"onArrayItemClick(row, col, option, j)\" />\n                  {{ getDisplayValue(option, col) }}\n                </div>\n              </ng-container>\n            </ng-container>\n          </ng-container>\n          <!-- Render array type -->\n          <!-- Delete, edit add child actions -->\n          <!-- example settup\n              \n             actions: [\n            {\n              icon: 'pi pi-pencil',\n              tooltip: 'Edit',\n              action: (data:any) => {\n                console.log('Edit', data);\n              },\n            },\n            {\n              icon: 'pi pi-pencil',\n              tooltip: 'Add Child',\n              action: (data:any) => {\n                console.log('Add Child', data);\n              },\n            },\n            {\n              icon: 'pi pi-trash',\n              tooltip: 'Delete',\n              action: (data:any) => {\n                console.log('Delete', data);\n              },\n            },\n          ],-->\n          <ng-container *ngIf=\"col.type === 'actions'\">\n            <div class=\"flex items-center gap-2\">\n              <ng-container *ngFor=\"let action of col.actions\">\n                <button\n                  [class.disabled]=\"action.disabled || (action.type==tableActionTypes.DELETE && isRowExpandable(row))\"\n                  (click)=\"action.action({target:row,parrent:data,index:i,action});actionEdit(action,i, data,row)\"\n                  class=\"p-2 rounded-full hover:bg-gray-100 link\" [attr.aria-label]=\"action.tooltip\">\n                  <i [ngClass]=\"action.icon\"></i>\n                </button>\n              </ng-container>\n            </div>\n          </ng-container>\n        </ng-template>\n      </td>\n\n      <!-- Expand button at the end if expandable is configured and position is last -->\n      <td *ngIf=\"config?.expandable && config?.expandable?.position === 'last'\" class=\"text-center\">\n        <button [class.disabled]=\"!isRowExpandable(row)\" class=\"p-2 rounded-full hover:bg-gray-100\"\n          (click)=\"toggleRow(i,row)\">\n          <i [ngClass]=\"isRowExpanded(row) ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></i>\n        </button>\n      </td>\n    </tr>\n\n    <!-- Expanded content row -->\n    <tr id=\"left-Padding\" class=\"left-Padding\">\n      <td id=\"left-Padding\" class=\"left-Padding\"\n        [attr.colspan]=\"(config?.columns?.length || 0) + (config?.expandable ? 1 : 0)\">\n        <div class=\" bg-gray-50\">\n          <div [attr.id]=\"row.uniqueId\" #componentContainer>\n          </div>\n        </div>\n      </td>\n\n    </tr>\n\n    <!-- <tr>\n      <td [attr.colspan]=\"(config?.columns?.length || 0) + (config?.expandable ? 1 : 0)\" class=\"p-0\">\n        <div class=\"p-4 bg-gray-50\">\n           <ng-container\n            [ngComponentOutlet]=\"this.expandedRowsComponents[rowIndex].component\"\n            [ngComponentOutletInputs]=\"this.expandedRowsComponents[rowIndex].input\"\n            (ngComponentOutletInitialized)=\"handleExpandedComponentInitialized($event, row)\">\n          </ng-container> \n         \n\n        </div>\n      </td>\n    </tr> -->\n  </ng-template>\n</p-table>","import { Component, Input, TemplateRef, ViewChild, AfterContentInit } from '@angular/core';\n\n@Component({\n  selector: 'universal-accordion-tab',\n  template: `<ng-template><ng-content></ng-content></ng-template>`,\n  standalone: true\n})\nexport class AccordionTabComponent implements AfterContentInit {\n  @Input() header: string = '';\n  @Input() disabled: boolean = false;\n  @Input() headerStyleClass: string = '';\n  @Input() contentStyleClass: string = '';\n  @Input() cache: boolean = true;\n  @Input() selected: boolean = false;\n\n  @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<any>;\n\n  ngAfterContentInit() {\n    // Content is ready\n  }\n}\n","import { Component, Input, Output, EventEmitter, Inject, Optional, ContentChildren, QueryList, AfterContentInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AccordionClasses, defaultClasses } from './classes';\r\nimport { UNI_THEME_CLASSES, UniThemeClasses } from '../../../theme/uni-theme-classes';\r\nimport { AccordionTabComponent } from './accordion-tab.component';\r\n\r\n@Component({\r\n  selector: 'universal-accordion',\r\n  templateUrl: './accordion.template.html',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class AccordionComponent implements AfterContentInit {\r\n  @Input() multiple: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() activeIndex: number | number[] = 0;\r\n  @Input() expandIcon: string = 'pi pi-chevron-down';\r\n  @Input() collapseIcon: string = 'pi pi-chevron-up';\r\n  @Input() styleClass: string = '';\r\n  \r\n  @ContentChildren(AccordionTabComponent) tabs!: QueryList<AccordionTabComponent>;\r\n  \r\n  @Output() tabOpen = new EventEmitter<{ index: number, tab: AccordionTabComponent }>();\r\n  @Output() tabClose = new EventEmitter<{ index: number, tab: AccordionTabComponent }>();\r\n  @Output() activeIndexChange = new EventEmitter<number | number[]>();\r\n  \r\n  classes: AccordionClasses = defaultClasses;\r\n  private _activeIndexes: Set<number> = new Set();\r\n\r\n  constructor(\r\n    @Optional() @Inject(UNI_THEME_CLASSES) private theme?: UniThemeClasses\r\n  ) {\r\n    if (this.theme?.accordion) {\r\n      this.classes = { ...defaultClasses, ...this.theme.accordion };\r\n    }\r\n    this.initializeActiveIndexes();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.initializeActiveIndexes();\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.initializeActiveIndexes();\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    // Initialize after content children are available\r\n    this.initializeActiveIndexes();\r\n  }\r\n\r\n  private initializeActiveIndexes() {\r\n    this._activeIndexes.clear();\r\n    if (Array.isArray(this.activeIndex)) {\r\n      this.activeIndex.forEach(index => this._activeIndexes.add(index));\r\n    } else if (typeof this.activeIndex === 'number') {\r\n      this._activeIndexes.add(this.activeIndex);\r\n    }\r\n  }\r\n\r\n  isTabActive(index: number): boolean {\r\n    return this._activeIndexes.has(index);\r\n  }\r\n\r\n  toggleTab(index: number, tab: AccordionTabComponent) {\r\n    if (tab.disabled || this.disabled) {\r\n      return;\r\n    }\r\n\r\n    const isCurrentlyActive = this.isTabActive(index);\r\n    \r\n    if (this.multiple) {\r\n      // Multiple mode: toggle individual tabs\r\n      if (isCurrentlyActive) {\r\n        this._activeIndexes.delete(index);\r\n        this.tabClose.emit({ index, tab });\r\n      } else {\r\n        this._activeIndexes.add(index);\r\n        this.tabOpen.emit({ index, tab });\r\n      }\r\n    } else {\r\n      // Single mode: only one tab can be active\r\n      if (isCurrentlyActive) {\r\n        this._activeIndexes.clear();\r\n        this.tabClose.emit({ index, tab });\r\n      } else {\r\n        this._activeIndexes.clear();\r\n        this._activeIndexes.add(index);\r\n        this.tabOpen.emit({ index, tab });\r\n      }\r\n    }\r\n\r\n    // Emit the updated active index\r\n    if (this.multiple) {\r\n      this.activeIndexChange.emit(Array.from(this._activeIndexes));\r\n    } else {\r\n      this.activeIndexChange.emit(this._activeIndexes.size > 0 ? Array.from(this._activeIndexes)[0] : -1);\r\n    }\r\n  }\r\n\r\n  getTabClasses(index: number, tab: AccordionTabComponent): string {\r\n    const baseClasses = 'border-b border-gray-200';\r\n    \r\n    if (tab.disabled || this.disabled) {\r\n      return `${baseClasses} ${this.classes.tab.disabled}`;\r\n    }\r\n    \r\n    if (this.isTabActive(index)) {\r\n      return `${baseClasses} ${this.classes.tab.active}`;\r\n    }\r\n    \r\n    return `${baseClasses} ${this.classes.tab.inactive}`;\r\n  }\r\n\r\n  getIconClass(index: number): string {\r\n    const isActive = this.isTabActive(index);\r\n    const iconClass = isActive ? this.collapseIcon : this.expandIcon;\r\n    const positionClass = isActive ? this.classes.icon.collapse : this.classes.icon.expand;\r\n    return `${iconClass} ${positionClass} transition-transform duration-200 ${isActive ? 'rotate-180' : ''}`;\r\n  }\r\n}\r\n","<div [class]=\"classes.container + ' ' + styleClass\">\r\n  <div class=\"accordion-wrapper\">\r\n    <div \r\n      *ngFor=\"let tab of tabs.toArray(); let i = index\" \r\n      class=\"accordion-tab border-b border-gray-200 last:border-b-0\">\r\n      \r\n      <!-- Accordion Header -->\r\n      <button \r\n        type=\"button\"\r\n        class=\"accordion-header w-full px-4 py-3 text-left flex items-center focus:outline-none hover:bg-gray-50 transition-colors duration-200 border-b border-gray-200\"\r\n        [class]=\"classes.header + ' ' + tab.headerStyleClass\"\r\n        [class.cursor-not-allowed]=\"tab.disabled || disabled\"\r\n        [class.text-gray-400]=\"tab.disabled || disabled\"\r\n        [class.text-gray-700]=\"!(tab.disabled || disabled)\"\r\n        [class.hover:bg-transparent]=\"tab.disabled || disabled\"\r\n        [disabled]=\"tab.disabled || disabled\"\r\n        (click)=\"toggleTab(i, tab)\"\r\n        [attr.aria-expanded]=\"isTabActive(i)\"\r\n        [attr.aria-controls]=\"'accordion-content-' + i\">\r\n        \r\n        <i class=\"pi pi-chevron-down mr-2 flex-shrink-0 font-bold transition-transform duration-300 ease-in-out\"\r\n           [class]=\"classes.icon.expand\"\r\n           [class.rotate-180]=\"isTabActive(i)\"\r\n           [class.opacity-50]=\"tab.disabled || disabled\"\r\n           aria-hidden=\"true\"></i>\r\n        \r\n        <span class=\"accordion-header-text leading-6 flex-1\"\r\n              [class]=\"classes.header\">\r\n          {{ tab.header }}\r\n        </span>\r\n      </button>\r\n      \r\n      <!-- Accordion Content -->\r\n      <div \r\n        class=\"accordion-content overflow-hidden transition-all duration-300 ease-in-out\"\r\n        [style.max-height]=\"isTabActive(i) ? 'fit-content' : '0px'\"\r\n        [style.opacity]=\"isTabActive(i) ? '1' : '0'\"\r\n        [id]=\"'accordion-content-' + i\"\r\n        [attr.aria-hidden]=\"!isTabActive(i)\">\r\n        \r\n        <div [class]=\"classes.content + ' ' + tab.contentStyleClass\" \r\n             class=\"transform transition-transform duration-300 ease-in-out  p-[16px]\"\r\n             [class.translate-y-0]=\"isTabActive(i)\"\r\n             [class.-translate-y-2]=\"!isTabActive(i)\">\r\n          \r\n          <!-- Content projection from AccordionTab component -->\r\n          <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","// task.component.ts\r\nimport { Component, Input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CardModule } from 'primeng/card';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n  selector: 'universal-shortcut-widget',\r\n  standalone: true,\r\n  imports: [CardModule, CommonModule, ButtonModule],\r\n  templateUrl: './shortcut.template.html',\r\n})\r\nexport class ShortcutWidget {\r\n  @Input() title: string = '';\r\n  @Input() icon: string = '';\r\n  @Input() link: string = '';\r\n  @Input() target: string = '';\r\n}\r\n","<a [href]=\"link\" [target]=\"target\" class=\"!no-underline\">\r\n  <p-card>\r\n    <ng-template #content>\r\n      <div class=\"flex flex-col items-center\">\r\n        <div><i [class]=\"icon\" class=\"!text-4xl\"></i></div>\r\n        <div>\r\n          <span class=\"block text-muted-color font-medium \">{{ title }}</span>\r\n        </div>\r\n      </div>\r\n    </ng-template>\r\n  </p-card>\r\n</a>","export interface TaskItem {\r\n  title: string; // The label of the menu item\r\n  date?: string; // Optional: For expandable/collapsible menus\r\n  status?: string; // Optional: Nested menu items\r\n}\r\n\r\nexport const Tasks: TaskItem[] = [\r\n  {\r\n    title: 'Darba rīku izveide',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Rēķinu sagatavošana',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Izveidot atvaļinājumu grafiku',\r\n    date: '10.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Darbinieku intervijas',\r\n    date: '15.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Materiālo resursu inventūra',\r\n    date: '17.02.2025',\r\n    status: 'Gaida',\r\n  },{\r\n    title: 'Darba rīku izveide',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Rēķinu sagatavošana',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Izveidot atvaļinājumu grafiku',\r\n    date: '10.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Darbinieku intervijas',\r\n    date: '15.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Materiālo resursu inventūra',\r\n    date: '17.02.2025',\r\n    status: 'Gaida',\r\n  },{\r\n    title: 'Darba rīku izveide',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Rēķinu sagatavošana',\r\n    date: '30.01.2025',\r\n    status: 'Notiek',\r\n  },\r\n  {\r\n    title: 'Izveidot atvaļinājumu grafiku',\r\n    date: '10.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Darbinieku intervijas',\r\n    date: '15.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n  {\r\n    title: 'Materiālo resursu inventūra',\r\n    date: '17.02.2025',\r\n    status: 'Gaida',\r\n  },\r\n];\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CardModule } from 'primeng/card';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\nimport { TaskItem, Tasks } from './table.model';\r\n\r\n@Component({\r\n  selector: 'universal-table-widget',\r\n  standalone: true,\r\n  imports: [CardModule, CommonModule, TableModule, ButtonModule, RippleModule],\r\n  templateUrl: './table.template.html',\r\n})\r\nexport class TableWidget {\r\n  @Input() title: string = '';\r\n  @Input() tasks: TaskItem[] = [];\r\n  // Input to control the number of rows (limit) per page\r\n  @Input() limit: number = 7;\r\n  @Input() enablePaGination: boolean = false;\r\n  // Event for clicking on a task title\r\n  @Output() onClick = new EventEmitter<TaskItem>();\r\n  // Event for page changes in the table pagination\r\n  @Output() pageChange = new EventEmitter<any>();\r\n\r\n  constructor() {\r\n    if (this.tasks.length === 0) {\r\n      this.tasks = [...Tasks];\r\n    }\r\n  }\r\n\r\n  onTaskTitleClick(task: TaskItem, event: Event): void {\r\n    event.preventDefault();\r\n    this.onClick.emit(task);\r\n  }\r\n\r\n  onPageChange(event: any): void {\r\n    this.pageChange.emit(event);\r\n  }\r\n}\r\n","<p-card styleClass=\"mb-5\">\r\n  <div class=\"font-semibold text-xl mb-4\">{{ title }}</div>\r\n  <p-table \r\n    [class]=\"enablePaGination?'':'no-pagination'\"\r\n    [value]=\"tasks\" \r\n    [paginator]=\"true\" \r\n    [rows]=\"limit\" \r\n    (onPage)=\"onPageChange($event)\" \r\n    responsiveLayout=\"scroll\">\r\n    \r\n    <ng-template pTemplate=\"header\">\r\n      <tr>\r\n        <th pSortableColumn=\"title\">\r\n          Nosaukums <p-sortIcon field=\"title\"></p-sortIcon>\r\n        </th>\r\n        <th pSortableColumn=\"date\">\r\n          Datums <p-sortIcon field=\"date\"></p-sortIcon>\r\n        </th>\r\n        <th pSortableColumn=\"status\">\r\n          Statuss <p-sortIcon field=\"statuss\"></p-sortIcon>\r\n        </th>\r\n      </tr>\r\n    </ng-template>\r\n    \r\n    <ng-template pTemplate=\"body\" let-task>\r\n      <tr>\r\n        <td>\r\n          <a class=\"underline text-primary\" (click)=\"onTaskTitleClick(task, $event)\">\r\n            {{ task.title }}\r\n          </a>\r\n        </td>\r\n        <td>{{ task.date }}</td>\r\n        <td>{{ task.status }}</td>\r\n      </tr>\r\n    </ng-template>\r\n    \r\n  </p-table>\r\n</p-card>\r\n","export interface TaskItem {\r\n  title: string; // The label of the menu item\r\n  date?: string; // Optional: For expandable/collapsible menus\r\n  status?: status; // Optional: Nested menu items\r\n}\r\nexport enum status{\r\n   DONE=\"Completed\",\r\n   INPROCESS=\"In Progress\",\r\n   WAITING=\"Pending\",\r\n   CANCELED=\"Canceled\"\r\n}\r\n\r\nexport const Tasks: TaskItem[] = [\r\n  {\r\n    title: 'Create Development Tools',\r\n    date: '01/30/2025',\r\n    status: status.DONE,\r\n  },\r\n  {\r\n    title: 'Invoice Preparation',\r\n    date: '01/30/2025',\r\n    status: status.CANCELED,\r\n  },\r\n  {\r\n    title: 'Create Vacation Schedule',\r\n    date: '02/10/2025',\r\n    status: status.INPROCESS,\r\n  },\r\n  {\r\n    title: 'Employee Interviews',\r\n    date: '02/15/2025',\r\n    status: status.WAITING,\r\n  },\r\n  {\r\n    title: 'Material Resources Inventory',\r\n    date: '02/17/2025',\r\n    status: status.WAITING,\r\n  },\r\n];\r\n","// task.component.ts\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CardModule } from 'primeng/card';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DataViewModule } from 'primeng/dataview';\r\n\r\nimport { status, TaskItem, Tasks } from './list.model';\r\n\r\n@Component({\r\n  selector: 'universal-list-widget',\r\n  standalone: true,\r\n  imports: [\r\n    CardModule,\r\n    CommonModule,\r\n    ButtonModule,\r\n    RippleModule,\r\n    DataViewModule,\r\n  ],\r\n  templateUrl: './list.template.html',\r\n})\r\nexport class ListWidget {\r\n  @Input() title: string = '';\r\n  @Input() tasks: TaskItem[] = [];\r\n\r\n  @Output() onClick = new EventEmitter<TaskItem>();\r\n  @Output() onDelete = new EventEmitter<TaskItem>();\r\n  @Output() onAccept = new EventEmitter<TaskItem>();\r\n\r\n  public status=status\r\n  constructor() {\r\n    if (this.tasks.length == 0) {\r\n      this.tasks = [...Tasks]\r\n    }\r\n  }\r\n\r\n\r\n  onTaskClick(task: TaskItem, event: Event, i: number) {\r\n    // console.log('Task clicked:', task);\r\n    event.preventDefault();\r\n    this.onClick.emit(task);\r\n  }\r\n\r\n  onAcceptClick(task: TaskItem, event: Event, i: number) {\r\n    // console.log('Task accepted:', task);\r\n    task.status=status.DONE\r\n    event.preventDefault();\r\n    this.onAccept.emit(task);\r\n  }\r\n\r\n  onDeleteClick(task: TaskItem, event: Event, i: number) {\r\n    // console.log('Task deleted:', task);\r\n    event.preventDefault();\r\n    task.status=status.CANCELED\r\n    this.onDelete.emit(task);\r\n\r\n    this.tasks.splice(i, 1)\r\n  }\r\n\r\n}\r\n","<p-card styleClass=\"mb-5\">\r\n  <div class=\"font-semibold text-xl mb-4\">{{ title }}</div>\r\n  <p-dataview #dv [value]=\"tasks\">\r\n    <ng-template #list let-items>\r\n      <div class=\"flex flex-col gap-4\">\r\n        <div *ngFor=\"let item of items; let first = first; let i = index;\" class=\"flex flex-row gap-4\">\r\n          <div class=\"flex-1\">\r\n            <div>\r\n              <a class=\"underline text-primary font-semibold\"\r\n                 (click)=\"onTaskClick(item, $event,i)\">\r\n                {{ item.title }}\r\n              </a>\r\n            </div>\r\n            <div>Izveidots: {{ item.date }}</div>\r\n          </div>\r\n          <div class=\"flex-1\">{{ item.status }}</div>\r\n          <div class=\"flex-none justify-end\">\r\n            <div class=\"flex gap-4\">\r\n              <p-button [class.disabled]=\"item.status==status.DONE\"   icon=\"pi pi-check\"\r\n                        severity=\"success\"\r\n                        [rounded]=\"true\"\r\n                        [text]=\"true\"\r\n                        (click)=\"onAcceptClick(item, $event, i)\">\r\n              </p-button>\r\n              <p-button icon=\"pi pi-trash\"\r\n                        severity=\"danger\"\r\n                        [rounded]=\"true\"\r\n                        [text]=\"true\"\r\n                        (click)=\"onDeleteClick(item, $event, i)\">\r\n              </p-button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </ng-template>\r\n  </p-dataview>\r\n</p-card>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\n\r\n@Component({\r\n  selector: 'universal-checkbox-group',\r\n  templateUrl: './checkbox-group.template.html',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    CheckboxComponent\r\n  ]\r\n})\r\nexport class CheckboxGroupComponent {\r\n  @Input() options: { label: string; value: any }[] = [];\r\n  @Input() selectedValues: any[] = [];\r\n  @Output() selectedValuesChange = new EventEmitter<any[]>();\r\n  @Input() disabled: boolean = false;\r\n  @Input() variant: 'filled' | 'outlined' = 'filled';\r\n  @Input() class: string = '';\r\n\r\n  onCheckboxChange(value: any, checked: boolean) {\r\n    let newValues = [...this.selectedValues];\r\n    if (checked) {\r\n      newValues.push(value);\r\n    } else {\r\n      newValues = newValues.filter(v => v !== value);\r\n    }\r\n    this.selectedValues = newValues;\r\n    this.selectedValuesChange.emit(newValues);\r\n  }\r\n}\r\n","<div class=\"flex gap-3\" [class]=\"class\">\r\n  <universal-checkbox\r\n    *ngFor=\"let option of options\"\r\n    [label]=\"option.label\"\r\n    [value]=\"option.value\"\r\n    [checked]=\"selectedValues.includes(option.value)\"\r\n    (checkedChange)=\"onCheckboxChange(option.value, $event)\"\r\n    [disabled]=\"disabled\"\r\n    [variant]=\"variant\"\r\n    [binary]=\"false\">\r\n  </universal-checkbox>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\n\r\n@Component({\r\n  selector: 'universal-color-picker',\r\n  templateUrl: './color-picker.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, ButtonModule, OverlayPanelModule]\r\n})\r\nexport class ColorPickerComponent {\r\n  @Input() value: string = '';\r\n  @Input() colors: string[] = [\r\n    // Theme colors from styles.scss\r\n    '#88ccfa', '#6dc3f1', '#c9e6ff', '#afd0ff', '#72ceff', '#62b0ff', '#3a95e7', // Primary\r\n    '#b7f1ae', '#8ce37d', '#6cbd67', '#c9ffbf', // Success\r\n    '#ffe17b', // Warning\r\n    '#f2a79d', '#ff897d', '#ff5449', '#ffe9e7', // Danger\r\n    '#8292a7', '#ffffff', '#000000' // Neutral\r\n  ];\r\n  @Input() disabled: boolean = false;\r\n  @Input() class?: string;\r\n  \r\n  @Output() valueChange = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n\r\n  selectColor(color: string) {\r\n    this.value = color;\r\n    this.valueChange.emit(color);\r\n    this.change.emit(color);\r\n  }\r\n\r\n  isSelected(color: string): boolean {\r\n    return this.value === color;\r\n  }\r\n}\r\n","<div class=\"color-picker-container\" [class]=\"class\">\r\n  <button\r\n    pButton\r\n    icon=\"pi pi-palette\"\r\n    [rounded]=\"true\"\r\n    [disabled]=\"disabled\"\r\n    (click)=\"op.toggle($event)\"\r\n    [style.background-color]=\"value\"\r\n    [style.color]=\"value ? '#ffffff' : undefined\"\r\n    [style.border-color]=\"value ? 'transparent' : undefined\">\r\n  </button>\r\n\r\n  <p-overlayPanel #op [dismissable]=\"true\" [showCloseIcon]=\"true\">\r\n    <div class=\"color-grid\">\r\n      <div\r\n        *ngFor=\"let color of colors\"\r\n        class=\"color-item border border-gray-400\"\r\n        [style.background-color]=\"color\"\r\n        [class.selected]=\"isSelected(color)\"\r\n        (click)=\"selectColor(color); op.hide()\">\r\n        <span *ngIf=\"isSelected(color)\" class=\"check-icon\">✓</span>\r\n      </div>\r\n    </div>\r\n  </p-overlayPanel>\r\n</div>\r\n\r\n<style>\r\n  .color-picker-container {\r\n    display: inline-block;\r\n  }\r\n\r\n  .color-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(5, 1fr);\r\n    gap: 8px;\r\n    padding: 8px;\r\n  }\r\n\r\n  .color-item {\r\n    width: 40px;\r\n    height: 40px;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    transition: transform 0.2s;\r\n  }\r\n\r\n  .color-item:hover {\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  .color-item.selected {\r\n    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #000000;\r\n  }\r\n\r\n  .check-icon {\r\n    color: white;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .color-code {\r\n    margin-left: 8px;\r\n    font-size: 0.8em;\r\n  }\r\n</style>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n\r\n@Component({\r\n  selector: 'universal-radio-button',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, RadioButtonModule],\r\n  templateUrl: './radio-button.template.html'\r\n})\r\nexport class RadioButtonComponent {\r\n  @Input() name = '';\r\n  @Input() value: any;\r\n  @Input() label = '';\r\n  @Input() disabled = false;\r\n  @Input() variant: 'filled' | 'outlined' = 'outlined';\r\n  @Input() checked = false;\r\n  @Input() isError = false;\r\n  @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n  onCheckedChange(value: boolean) {\r\n    this.checkedChange.emit(value);\r\n  }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n  <p-radioButton\r\n    [name]=\"name\"\r\n    [value]=\"value\"\r\n    [inputId]=\"name\"\r\n    [disabled]=\"disabled\"\r\n    [variant]=\"variant\"\r\n    [(ngModel)]=\"checked\"\r\n    (ngModelChange)=\"onCheckedChange($event)\">\r\n  </p-radioButton>\r\n  <label [for]=\"name\" [class]=\"{'ml-2': true, 'text-red-600': isError}\">{{ label }}</label>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SliderChangeEvent, SliderModule, SliderSlideEndEvent } from 'primeng/slider';\r\n\r\n@Component({\r\n  selector: 'universal-range-slider',\r\n  templateUrl: './range-slider.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, SliderModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => RangeSliderComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class RangeSliderComponent implements ControlValueAccessor {\r\n  private _value: number | number[] = 0;\r\n  \r\n  @Input()\r\n  get value(): number | number[] {\r\n    return this._value;\r\n  }\r\n  set value(val: number | number[]) {\r\n    if (val !== this._value) {\r\n      this._value = val;\r\n      this.valueChange.emit(this._value);\r\n      this.onChange(this._value);\r\n    }\r\n  }\r\n  \r\n  @Input() min: number = 0;\r\n  @Input() max: number = 100;\r\n  @Input() step: number | null = null;\r\n  @Input() range: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n  @Input() class?: string;\r\n  @Input() label?: string;\r\n  @Input() labelPosition: 'top' | 'left' = 'top';\r\n  @Input() required: boolean = false;\r\n  @Input() showMinMaxLabels: boolean = false;\r\n  @Input() showValue: boolean = true;\r\n\r\n  @Output() valueChange = new EventEmitter<number | number[]>();\r\n  @Output() change = new EventEmitter<number | number[]>();\r\n  @Output() slideEnd = new EventEmitter<number | number[]>();\r\n\r\n  // ControlValueAccessor implementation\r\n  onChange: any = () => {};\r\n  onTouched: any = () => {};\r\n\r\n  writeValue(value: number | number[]): void {\r\n    if (value !== undefined) {\r\n      this._value = value;\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onModelChange(value: number | number[]) {\r\n    this.valueChange.emit(value);\r\n    this.onChange(value);\r\n  }\r\n\r\n  onChangeEvent(event: SliderChangeEvent) {\r\n    this.change.emit(this.value);\r\n  }\r\n\r\n  onSlideEnd(event: SliderSlideEndEvent) {\r\n    this.slideEnd.emit(this.value);\r\n    this.onTouched();\r\n  }\r\n\r\n  // Helper methods for template\r\n  get startValue(): number {\r\n    if (Array.isArray(this._value) && this._value.length > 0) {\r\n      return this._value[0];\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  get endValue(): number {\r\n    if (Array.isArray(this._value) && this._value.length > 1) {\r\n      return this._value[1];\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  get displayValue(): string {\r\n    if (this.range) {\r\n      return `${this.startValue} - ${this.endValue}`;\r\n    }\r\n    return `${this._value}`;\r\n  }\r\n}\r\n","<div class=\"flex\" [ngClass]=\"{'flex-col': labelPosition === 'top', 'flex-row': labelPosition === 'left'}\" [class]=\"class || ''\">\r\n  @if (label) {\r\n    <label [for]=\"label\" class=\"font-semibold\" [ngClass]=\"{'pb-1': labelPosition === 'top', 'flex items-center pr-2': labelPosition === 'left'}\">{{ label }}@if (required) {<span class=\"text-red-600 ml-1\">*</span>}</label>\r\n  }\r\n  <div class=\"w-full\">\r\n    @if (showValue) {\r\n      <div class=\"flex justify-between mb-2\">\r\n        <span class=\"text-sm text-gray-700\">\r\n          @if (range) {\r\n            Range: {{ displayValue }}\r\n          } @else {\r\n            Current value: {{ displayValue }}\r\n          }\r\n        </span>\r\n      </div>\r\n    }\r\n    <p-slider\r\n      [(ngModel)]=\"value\"\r\n      [min]=\"min\"\r\n      [max]=\"max\"\r\n      [step]=\"step\"\r\n      [range]=\"range\"\r\n      [disabled]=\"disabled\"\r\n      [orientation]=\"orientation\"\r\n      [style]=\"orientation === 'vertical' ? {'height': '200px'} : {}\"\r\n      (onChange)=\"onChangeEvent($event)\"\r\n      (onSlideEnd)=\"onSlideEnd($event)\">\r\n    </p-slider>\r\n    @if (showMinMaxLabels) {\r\n      <div class=\"flex justify-between mt-1 text-sm text-gray-600\">\r\n        <span>{{ min }}</span>\r\n        <span>{{ max }}</span>\r\n      </div>\r\n    }\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\n\r\n@Component({\r\n  selector: 'universal-select-button',\r\n  templateUrl: './select-button.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule, SelectButtonModule]\r\n})\r\nexport class SelectButtonComponent {\r\n  @Input() value: any;\r\n  @Input() options: any[] = [];\r\n  @Input() optionLabel?: string;\r\n  @Input() optionValue?: string;\r\n  @Input() optionDisabled?: string;\r\n  @Input() multiple: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() class?: string;\r\n\r\n  @Output() valueChange = new EventEmitter<any>();\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  onModelChange(value: any) {\r\n    this.valueChange.emit(value);\r\n  }\r\n\r\n  onChange(event: any) {\r\n    this.change.emit(event.value);\r\n  }\r\n}\r\n","<p-selectButton\r\n  [(ngModel)]=\"value\"\r\n  [options]=\"options\"\r\n  [optionLabel]=\"optionLabel\"\r\n  [optionValue]=\"optionValue\"\r\n  [optionDisabled]=\"optionDisabled\"\r\n  [multiple]=\"multiple\"\r\n  [disabled]=\"disabled\"\r\n  [class]=\"class\"\r\n  (ngModelChange)=\"onModelChange($event)\"\r\n  (onChange)=\"onChange($event)\">\r\n</p-selectButton>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputSwitchModule } from 'primeng/inputswitch';\r\n\r\n@Component({\r\n  selector: 'universal-toggle-switch',\r\n  templateUrl: './toggle-switch.template.html',\r\n  standalone: true,\r\n  imports: [InputSwitchModule, FormsModule]\r\n})\r\nexport class ToggleSwitchComponent {\r\n  @Input() checked: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() class?: string;\r\n  @Input() ariaLabel?: string;\r\n\r\n  @Output() checkedChange = new EventEmitter<boolean>();\r\n  @Output() change = new EventEmitter<boolean>();\r\n\r\n  onModelChange(value: boolean) {\r\n    this.checkedChange.emit(value);\r\n  }\r\n\r\n  onChange(event: any) {\r\n    this.change.emit(event.checked);\r\n  }\r\n}\r\n","<p-inputSwitch\r\n  [(ngModel)]=\"checked\"\r\n  [disabled]=\"disabled\"\r\n  [class]=\"class\"\r\n  [attr.aria-label]=\"ariaLabel\"\r\n  (onChange)=\"onChange($event)\"\r\n  (ngModelChange)=\"onModelChange($event)\">\r\n  <label for=\"toggle-switch\">{{ariaLabel}}</label>\r\n</p-inputSwitch>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeSelectModule } from 'primeng/treeselect';\r\n\r\n@Component({\r\n  selector: 'universal-tree-select',\r\n  templateUrl: './tree-select.template.html',\r\n  standalone: true,\r\n  imports: [FormsModule, TreeSelectModule]\r\n})\r\nexport class TreeSelectComponent {\r\n  @Input() value: any;\r\n  @Input() options: TreeNode[] = [];\r\n  @Input() placeholder?: string;\r\n  @Input() disabled: boolean = false;\r\n  @Input() selectionMode: 'single' | 'multiple' | 'checkbox' = 'single';\r\n  @Input() filter: boolean = false;\r\n  @Input() filterPlaceholder?: string;\r\n  @Input() display: 'comma' | 'chip' = 'comma';\r\n  @Input() class?: string;\r\n\r\n  @Output() valueChange = new EventEmitter<any>();\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  onModelChange(value: any) {\r\n    this.valueChange.emit(value);\r\n  }\r\n\r\n  onChange(event: any) {\r\n    this.change.emit(event.value);\r\n  }\r\n}\r\n","<p-treeSelect\r\n  [(ngModel)]=\"value\"\r\n  [options]=\"options\"\r\n  [placeholder]=\"placeholder\"\r\n  [disabled]=\"disabled\"\r\n  [selectionMode]=\"selectionMode\"\r\n  [filter]=\"filter\"\r\n  [filterPlaceholder]=\"filterPlaceholder\"\r\n  [display]=\"display\"\r\n  [class]=\"class\"\r\n  (ngModelChange)=\"onModelChange($event)\"\r\n  (onChange)=\"onChange($event)\">\r\n</p-treeSelect>\r\n","/*\r\n * Public API Surface of uni-components-library\r\n */\r\nexport * from './lib/imports';\r\nexport * from './lib/theme/preset';\r\nexport * from './lib/stories/blocks/left-menu/left-menu.component';\r\n\r\nexport * from './lib/stories/components/alert/alert.component';\r\nexport * from './lib/stories/components/badge/badge.component'\r\nexport * from './lib/stories/blocks/header-with-menu/header.component';\r\nexport * from './lib/stories/components/icon/icon.component';\r\nexport * from './lib/stories/components/confirm-dialog/confirm-dialog.component';\r\nexport * from './lib/stories/components/breadcrumb/breadcrumb.component';\r\nexport * from './lib/stories/blocks-dynamic/dynamic-table/dynamic-table.component';\r\nexport * from './lib/stories/components/accordion/accordion.component';\r\nexport * from './lib/stories/components/accordion/accordion-tab.component';\r\n\r\n\r\nexport * from './lib/stories/widgets/info-card/info-card.component';\r\nexport * from './lib/stories/widgets/shortcut/shortcut.component';\r\nexport * from './lib/stories/widgets/table/table.component';\r\nexport * from './lib/stories/widgets/list/list.component';\r\n\r\nexport * from './lib/stories/forms/input/input.component';\r\nexport * from './lib/stories/forms/button/button.component';\r\n\r\n\r\n/*\r\n * Public API Surface of numo-ui-web\r\n */\r\n\r\n\r\nexport * from './lib/stories/forms/input/input.component';\r\n\r\n\r\nexport * from './lib/stories/forms/checkbox/checkbox.component';\r\nexport * from './lib/stories/forms/checkbox-group/checkbox-group.component';\r\nexport * from './lib/stories/forms/color-picker/color-picker.component';\r\nexport * from './lib/stories/blocks-dynamic/dynamic-form/dynamic-form.component';\r\nexport * from './lib/stories/forms/file-upload/file-upload.component';\r\nexport * from './lib/stories/forms/radio-button/radio-button.component';\r\nexport * from './lib/stories/forms/radio-button-group/radio-button-group.component';\r\nexport * from './lib/stories/forms/range-slider/range-slider.component';\r\n// export * from './lib/stories/forms/rich-text/rich-text.component';\r\nexport * from './lib/stories/forms/select/select.component';\r\nexport * from './lib/stories/forms/select-button/select-button.component';\r\n// export * from './lib/stories/forms/stepper/stepper.component';\r\nexport * from './lib/stories/forms/textarea/textarea.component';\r\nexport * from './lib/stories/forms/time-picker/time-picker.component';\r\nexport * from './lib/stories/forms/toggle-switch/toggle-switch.component';\r\nexport * from './lib/stories/forms/tree-select/tree-select.component';\r\nexport * from './lib/new/components/select2/select2.component';\r\n\r\n\r\nexport * from './lib/stories/forms/button/button.component';\r\n\r\nexport type { TaskItem } from './lib/stories/widgets/table/table.model';\r\nexport type { BreadcrumbItem, HomeItem } from './lib/stories/components/breadcrumb/breadcrumb.model';\r\nexport type { FormConfig } from './lib/stories/blocks-dynamic/dynamic-form/dynamic-form.component';\r\n\r\n\r\nexport type { UniThemeClasses } from './lib/theme/uni-theme-classes';\r\nexport { UNI_THEME_CLASSES } from './lib/theme/uni-theme-classes';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CLASSES","defaultClasses","AlertClasses","AccordionClasses","BadgeClasses","BreadcrumbClasses","ConfirmDialogClasses","DialogClasses","DividerClasses","IconClasses","MenuClasses","OverlayPanelClasses","PanelMenuClasses","ProgressbarClasses","ScrollPanelClasses","TabViewClasses","ToastClasses","TreeClasses","i3","i2","UserMenuItems","i4","i1","i1.DynamicComponentService","i5","i6","Tasks"],"mappings":"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"}