{"version":3,"file":"ng-fusion-ui.mjs","sources":["../../../projects/ng-fusion-ui/src/lib/button/directives/button.directive.ts","../../../projects/ng-fusion-ui/src/lib/button/button.module.ts","../../../projects/ng-fusion-ui/src/lib/icons/icons.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon-registry.service.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.ts","../../../projects/ng-fusion-ui/src/lib/icons/icon.component.html","../../../projects/ng-fusion-ui/src/lib/icons/icon.module.ts","../../../projects/ng-fusion-ui/src/lib/data-table/services/table-utility.service.ts","../../../projects/ng-fusion-ui/src/lib/data-table/services/table-storage.service.ts","../../../projects/ng-fusion-ui/src/lib/data-table/services/table-intl.service.ts","../../../projects/ng-fusion-ui/src/lib/data-table/services/table-edit.service.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table-paginator/table-paginator.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table-paginator/table-paginator.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/directives/body-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-table/directives/expand-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-table/directives/header-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-table/pipes/key-mapping.pipe.ts","../../../projects/ng-fusion-ui/src/lib/data-table/tbody-cell/tbody-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/tbody-cell/tbody-cell.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/directives/popup-template.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table-filter/table-filter.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table-filter/table-filter.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/services/table-sort.service.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table/table.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/table/table.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/thead-cell/thead-cell.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/thead-cell/thead-cell.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/tbody-actions/tbody-actions.component.ts","../../../projects/ng-fusion-ui/src/lib/data-table/tbody-actions/tbody-actions.component.html","../../../projects/ng-fusion-ui/src/lib/data-table/directives/highlight.directive.ts","../../../projects/ng-fusion-ui/src/lib/data-table/data-table.module.ts","../../../projects/ng-fusion-ui/src/lib/tree/tree/tree.component.ts","../../../projects/ng-fusion-ui/src/lib/tree/tree/tree.component.html","../../../projects/ng-fusion-ui/src/lib/tree/tree.module.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/table-expand-row.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/table-no-data.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/table-sidebar.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/click-outside.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/table-cell-context-menu.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/stop-propagation.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/highlight.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/cell/cell.component.ts","../../../projects/ng-fusion-ui/src/lib/table/cell/cell.component.html","../../../projects/ng-fusion-ui/src/lib/table/services/table-intl.service.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/button.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/table-toolbar.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/tooltip.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/table/table.component.ts","../../../projects/ng-fusion-ui/src/lib/table/table/table.component.html","../../../projects/ng-fusion-ui/src/lib/table/directives/column-cell.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/column-header.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/column-header-addon.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/directives/column-actions.directive.ts","../../../projects/ng-fusion-ui/src/lib/table/column/column.component.ts","../../../projects/ng-fusion-ui/src/lib/table/column/column.component.html","../../../projects/ng-fusion-ui/src/lib/table/table.module.ts","../../../projects/ng-fusion-ui/src/lib/table/pipes/highlight.ts","../../../projects/ng-fusion-ui/src/lib/table/helpers/index.ts","../../../projects/ng-fusion-ui/src/public-api.ts","../../../projects/ng-fusion-ui/src/ng-fusion-ui.ts"],"sourcesContent":["import {\r\n  Directive,\r\n  ElementRef,\r\n  Renderer2,\r\n  OnInit,\r\n  booleanAttribute,\r\n  input,\r\n  inject,\r\n} from '@angular/core';\r\n\r\ntype TInput = boolean | string;\r\n\r\n@Directive({\r\n  selector: '[fuButton]',\r\n})\r\nexport class ButtonDirective implements OnInit {\r\n  public variant = input<'filled' | 'outline' | 'text'>('filled');\r\n  public severity = input<'primary' | 'success' | 'warning' | 'danger'>(\r\n    'primary'\r\n  );\r\n\r\n  public iconButton = input<boolean, TInput>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n  public rounded = input<boolean, TInput>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n  public compact = input<boolean, TInput>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n  public raised = input<boolean, TInput>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n\r\n  private el = inject(ElementRef);\r\n  private renderer = inject(Renderer2);\r\n\r\n  public ngOnInit() {\r\n    this.setInitialStyles();\r\n  }\r\n\r\n  private setInitialStyles() {\r\n    this.renderer.addClass(this.el.nativeElement, 'fu-btn');\r\n    this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.variant()}`);\r\n    this.renderer.addClass(this.el.nativeElement, `fu-btn-${this.severity()}`);\r\n\r\n    if (this.iconButton()) {\r\n      this.renderer.setAttribute(this.el.nativeElement, 'icon', 'true');\r\n    }\r\n\r\n    if (this.rounded()) {\r\n      this.renderer.setAttribute(this.el.nativeElement, 'rounded', 'true');\r\n    }\r\n\r\n    if (this.compact()) {\r\n      this.renderer.setAttribute(this.el.nativeElement, 'compact', 'true');\r\n    }\r\n\r\n    if (this.raised()) {\r\n      this.renderer.setAttribute(this.el.nativeElement, 'raised', 'true');\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonDirective } from './directives/button.directive';\r\n\r\n@NgModule({\r\n  imports: [ButtonDirective, CommonModule],\r\n  exports: [ButtonDirective],\r\n})\r\nexport class ButtonModule {}\r\n","export const edit = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4\"/></svg>`;\r\nexport const editOff = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m10 10l-6 6v4h4l6-6m1.99-1.99l2.504-2.504a2.828 2.828 0 1 0-4-4l-2.5 2.5M13.5 6.5l4 4M3 3l18 18\"/></svg>`;\r\nexport const editSave = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 20h4L18.5 9.5a2.828 2.828 0 1 0-4-4L4 16zm9.5-13.5l4 4M15 19l2 2l4-4\"/></svg>`;\r\nexport const trash = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 7h16m-10 4v6m4-6v6M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12M9 7V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/></svg>`;\r\nexport const doubleArrowRight = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m7 7l5 5l-5 5m6-10l5 5l-5 5\"/></svg>`;\r\nexport const doubleArrowLeft = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m11 7l-5 5l5 5m6-10l-5 5l5 5\"/></svg>`;\r\nexport const arrowLeft = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m15 6l-6 6l6 6\"/></svg>`;\r\nexport const arrowRight = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m9 6l6 6l-6 6\"/></svg>`;\r\nexport const sort = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m3 9l4-4l4 4M7 5v14m14-4l-4 4l-4-4m4 4V5\"/></svg>`;\r\nexport const sortAsc = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12\"/></svg>`;\r\nexport const sortDesc = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 6h9m-9 6h7m-7 6h7m4-3l3 3l3-3m-3-9v12\"/></svg>`;\r\nexport const filterRemove = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M13.758 19.414L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m7 8.5l-5-5m0 5l5-5\"/></svg>`;\r\nexport const filterPlus = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m12 20l-3 1v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v3m1 4h6m-3-3v6\"/></svg>`;\r\nexport const filterEdit = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M10.97 20.344L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12v1.5m3.42 2.11a2.1 2.1 0 0 1 2.97 2.97L18 22h-3v-3z\"/></svg>`;\r\nexport const check = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m5 12l5 5L20 7\"/></svg>`;\r\nexport const save = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M21 7v12q0 .825-.587 1.413T19 21H5q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h12zm-2 .85L16.15 5H5v14h14zM12 18q1.25 0 2.125-.875T15 15t-.875-2.125T12 12t-2.125.875T9 15t.875 2.125T12 18m-6-8h9V6H6zM5 7.85V19V5z\"/></svg>`;\r\nexport const search = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5A6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5S14 7.01 14 9.5S11.99 14 9.5 14\" /></svg>`;\r\n\r\nexport const building = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><g fill=\"currentColor\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5z\"/><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3z\"/></g></svg>`;\r\nexport const buildingHand = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><g fill=\"currentColor\"><path d=\"m2 1c0-0.55228 0.44772-1 1-1h10c0.55228 0 1 0.44772 1 1v6.5c0 0.66667-1 0.66667-1 0v-6.5h-10v14h3s2.2783-0.07879 2 1h-5c-0.55228 0-1-0.44772-1-1z\"/><path d=\"M4.5 2a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm-6 3a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm-6 3a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm3 0a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5z\"/><path d=\"m4.0496 13.493v0.43773l4.5597 1.0943 3.9897-0.83169v0.61283h3.4198v-4.8151h-4.5597l-3.5338 1.0068c-0.56996 0.17509-1.0259 0.6566-1.0259 1.1819h-1.1399c-0.96894 0-1.7099 0.56905-1.7099 1.3132m9.6894 0.43773v-3.0641h1.1399v3.0641zm-8.4925-0.61282q0.17099-0.26264 0.51297-0.26264h3.0778c0.28498 0 0.62696-0.04377 0.91194-0.08756l1.3109-0.35018-0.34198-0.83169-1.3679 0.35018c-0.17099 0-1.3109 0.04377-1.3109 0.04377 0-0.17509 0.11399-0.30641 0.34198-0.35018l3.3058-0.963h0.91194v2.4075l-3.9897 0.83169z\" fill=\"currentColor\" stroke-width=\".49949\"/></g></svg>`;\r\nexport const buildingUser = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" ><path d=\"m-12.888 20.361a4.25 4.25 0 0 0-2.1938 0.56919 4.25 4.25 0 0 0-2.1226 3.5432l-0.0024 0.13755 0.0024 0.13755a4.25 4.25 0 1 0 4.3164-4.3875zm0.60951 2.7036h0.62611v2.6657l-2.3076 0.5929-2.6396-0.88936c0-0.1482 0.06709-0.29647 0.16601-0.41503 0.13191-0.11856 0.29543-0.17787 0.4933-0.17787h2.31l0.69252-0.23716-0.09961-0.26562-0.59291 0.20633h-0.92493c-0.09894 0-0.23051-0.05931-0.29646-0.11859-0.06595-0.05928-0.09724-0.14824-0.09724-0.23716 0-0.1482 0.09835-0.26563 0.26325-0.32491zm1.2854 0h1.3186v3.2586h-1.3186z\" stroke-width=\".425\"/><g fill=\"currentColor\"></g><path d=\"m2.0619 18.318a4.9999 4.9999 0 0 0-2.5808 0.66962 4.9999 4.9999 0 0 0-2.4971 4.1684l-0.0028 0.16182 0.0028 0.16183a4.9999 4.9999 0 1 0 5.078-5.1617zm0.71705 3.1807h0.73658v3.1361l-2.7148 0.69752-3.1054-1.0463c0-0.17435 0.07893-0.34878 0.19531-0.48826 0.15518-0.13948 0.34756-0.20926 0.58034-0.20926h2.7175l0.81471-0.27901-0.11719-0.31249-0.69753 0.24274h-1.0881c-0.1164 0-0.27118-0.06977-0.34876-0.13951-0.07759-0.06974-0.1144-0.1744-0.1144-0.27901 0-0.17435 0.1157-0.3125 0.3097-0.38224zm1.5122 0h1.5513v3.8336h-1.5513z\" stroke-width=\".49999\"/><g transform=\"matrix(.86364 0 0 .86364 26.355 .79387)\"><path d=\"m16 10.5c0-3.025-2.475-5.5-5.5-5.5-3.025 0-5.5 2.475-5.5 5.5 0 3.025 2.475 5.5 5.5 5.5 3.025 0 5.5-2.475 5.5-5.5m-3.85-3.025 1.925 1.925-1.925 1.925v-1.375h-2.2v-1.1h2.2zm-3.3 6.05-1.925-1.925 1.925-1.925v1.375h2.2v1.1h-2.2z\" fill=\"currentColor\" stroke-width=\".55\"/></g><path d=\"m38.863 0.91746c0 1.4444-0.6447 2.7386-1.6625 3.61a4.7327 4.7327 0 0 1-3.0875 1.14c-1.1789 0-2.2571-0.42923-3.0875-1.14a4.7414 4.7414 0 0 1-1.6625-3.61c0-2.6233 2.1267-4.75 4.75-4.75s4.75 2.1267 4.75 4.75m-3.0227-1.5114a1.7273 1.7273 0 1 0-3.4545 0 1.7273 1.7273 0 0 0 3.4545 0m1.0795 4.1994v-0.09716a1.7273 1.7273 0 0 0-1.7273-1.7273h-2.1591a1.7273 1.7273 0 0 0-1.7273 1.7273v0.09716q0.13386 0.13948 0.28068 0.26557a3.8691 3.8691 0 0 0 2.5261 0.93273 3.8691 3.8691 0 0 0 2.8068-1.1983\" fill=\"currentColor\" stroke-width=\".43182\"/><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g><path d=\"m11.25 7.3636a3.8864 3.8864 0 0 0-3.8864 3.8864 3.8691 3.8691 0 0 0 0.76561 2.3167 2.1591 2.1591 0 0 1 2.0412-1.4531h2.1591a2.1591 2.1591 0 0 1 2.0412 1.4531 3.8691 3.8691 0 0 0 0.76561-2.3167 3.8864 3.8864 0 0 0-3.8864-3.8864m2.375 6.9631v-0.05398a1.2955 1.2955 0 0 0-1.2955-1.2955h-2.1591a1.2955 1.2955 0 0 0-1.2955 1.2955v0.05398a3.8691 3.8691 0 0 0 2.375 0.80966c0.89473 0 1.7182-0.30227 2.375-0.80966m-7.125-3.0767c0-2.6233 2.1267-4.75 4.75-4.75 2.6233 0 4.75 2.1267 4.75 4.75a4.7414 4.7414 0 0 1-1.6625 3.61 4.7327 4.7327 0 0 1-3.0875 1.14 4.7327 4.7327 0 0 1-3.0875-1.14 4.7414 4.7414 0 0 1-1.6625-3.61m4.75-2.5909a1.0795 1.0795 0 1 0 0 2.1591 1.0795 1.0795 0 0 0 0-2.1591m-1.9432 1.0795a1.9432 1.9432 0 1 1 3.8864 0 1.9432 1.9432 0 0 1-3.8864 0\" stroke-width=\".43182\"/></g></svg>`;\r\nexport const buildingSwap = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" ><path d=\"m-12.888 20.361a4.25 4.25 0 0 0-2.1938 0.56919 4.25 4.25 0 0 0-2.1226 3.5432l-0.0024 0.13755 0.0024 0.13755a4.25 4.25 0 1 0 4.3164-4.3875zm0.60951 2.7036h0.62611v2.6657l-2.3076 0.5929-2.6396-0.88936c0-0.1482 0.06709-0.29647 0.16601-0.41503 0.13191-0.11856 0.29543-0.17787 0.4933-0.17787h2.31l0.69252-0.23716-0.09961-0.26562-0.59291 0.20633h-0.92493c-0.09894 0-0.23051-0.05931-0.29646-0.11859-0.06595-0.05928-0.09724-0.14824-0.09724-0.23716 0-0.1482 0.09835-0.26563 0.26325-0.32491zm1.2854 0h1.3186v3.2586h-1.3186z\" stroke-width=\".425\"/><g fill=\"currentColor\"></g><path d=\"m2.0619 18.318a4.9999 4.9999 0 0 0-2.5808 0.66962 4.9999 4.9999 0 0 0-2.4971 4.1684l-0.0028 0.16182 0.0028 0.16183a4.9999 4.9999 0 1 0 5.078-5.1617zm0.71705 3.1807h0.73658v3.1361l-2.7148 0.69752-3.1054-1.0463c0-0.17435 0.07893-0.34878 0.19531-0.48826 0.15518-0.13948 0.34756-0.20926 0.58034-0.20926h2.7175l0.81471-0.27901-0.11719-0.31249-0.69753 0.24274h-1.0881c-0.1164 0-0.27118-0.06977-0.34876-0.13951-0.07759-0.06974-0.1144-0.1744-0.1144-0.27901 0-0.17435 0.1157-0.3125 0.3097-0.38224zm1.5122 0h1.5513v3.8336h-1.5513z\" stroke-width=\".49999\"/><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g><path d=\"m11.25 6.5c-2.6125 0-4.75 2.1375-4.75 4.75 0 2.6125 2.1375 4.75 4.75 4.75s4.75-2.1375 4.75-4.75c0-2.6125-2.1375-4.75-4.75-4.75m0 8.55c-2.0948 0-3.8-1.7052-3.8-3.8 0-2.0948 1.7052-3.8 3.8-3.8 2.0948 0 3.8 1.7053 3.8 3.8 0 2.0948-1.7052 3.8-3.8 3.8m1.425-6.4125v1.1875h-1.9v0.95h1.9v1.1875l1.6625-1.6625zm-2.85 1.9-1.6625 1.6625 1.6625 1.6625v-1.1875h1.9v-0.95h-1.9z\" fill=\"currentColor\" stroke-width=\".475\"/></svg>`;\r\nexport const buildingBuild = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" ><path d=\"m-12.888 20.361a4.25 4.25 0 0 0-2.1938 0.56919 4.25 4.25 0 0 0-2.1226 3.5432l-0.0024 0.13755 0.0024 0.13755a4.25 4.25 0 1 0 4.3164-4.3875zm0.60951 2.7036h0.62611v2.6657l-2.3076 0.5929-2.6396-0.88936c0-0.1482 0.06709-0.29647 0.16601-0.41503 0.13191-0.11856 0.29543-0.17787 0.4933-0.17787h2.31l0.69252-0.23716-0.09961-0.26562-0.59291 0.20633h-0.92493c-0.09894 0-0.23051-0.05931-0.29646-0.11859-0.06595-0.05928-0.09724-0.14824-0.09724-0.23716 0-0.1482 0.09835-0.26563 0.26325-0.32491zm1.2854 0h1.3186v3.2586h-1.3186z\" stroke-width=\".425\"/><g fill=\"currentColor\"></g><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g><path d=\"m11.25 6.5c2.619 0 4.75 2.131 4.75 4.75 0 2.619-2.131 4.75-4.75 4.75-2.619 0-4.75-2.131-4.75-4.75 0-2.619 2.131-4.75 4.75-4.75m0 0.95001c-2.1028 0-3.8 1.6972-3.8 3.8 0 2.1028 1.6972 3.8 3.8 3.8 2.1028 0 3.8-1.6972 3.8-3.8 0-2.1028-1.6972-3.8-3.8-3.8m0.0204 1.6205c0.3593 0.4672 0.48051 1.0419 0.36538 1.4615q-0.0215 0.10358 1.5192 1.6153 0.5038 0.5038 0 1.0076-0.47417 0.47414-0.94836 0.0558l-1.667-1.5825c-0.41962 0.11514-0.99434-6e-3 -1.4615-0.36537-0.34267-0.45055-0.46084-1.0395-0.36538-1.4615l0.73075 0.73076 0.73076-0.36538 0.36538-0.73076-0.73076-0.73078c0.42209-0.0954 1.011 0.0227 1.4615 0.36538\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke-width=\".022266\"/></svg>`;\r\nexport const buildingGear = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" ><path d=\"m-14.269 23.484a4.75 4.75 0 0 0-2.4518 0.63615 4.75 4.75 0 0 0-2.3723 3.96l-0.0027 0.15374 0.0027 0.15374a4.75 4.75 0 1 0 4.8242-4.9037zm0.68121 3.0217h0.69976v2.9793l-2.5791 0.66266-2.9502-0.99399c0-0.16564 0.07498-0.33135 0.18554-0.46386 0.14743-0.13251 0.33018-0.1988 0.55133-0.1988h2.5817l0.77399-0.26506-0.11133-0.29687-0.66266 0.23061h-1.0337c-0.11058 0-0.25762-0.06629-0.33133-0.13254-0.07371-0.06625-0.10868-0.16568-0.10868-0.26506 0-0.16564 0.10992-0.29688 0.29422-0.36314zm1.4366 0h1.4738v3.642h-1.4738z\" stroke-width=\".475\"/><g fill=\"currentColor\"></g><g transform=\"translate(.11566 1.0024)\"><g transform=\"translate(-.11566 -1.0024)\"><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g></g><path d=\"m14.281 9.329 1.1442 0.18703a0.19356 0.19356 0 0 1 0.16209 0.19119v1.0646a0.19356 0.19356 0 0 1-0.16031 0.19059l-1.1459 0.20128q-0.09915 0.34556-0.27253 0.65966l0.67747 0.9405a0.19356 0.19356 0 0 1-0.02018 0.25056l-0.75288 0.75288a0.19356 0.19356 0 0 1-0.24819 0.02198l-0.95-0.66678a3.2656 3.2656 0 0 1-0.66381 0.27788l-0.20188 1.1406a0.19356 0.19356 0 0 1-0.19119 0.15972h-1.064a0.19297 0.19297 0 0 1-0.19059-0.1615l-0.18941-1.1347a3.2656 3.2656 0 0 1-0.66678-0.27609l-0.94287 0.66084a0.19356 0.19356 0 0 1-0.24819-0.021975l-0.75347-0.75288a0.19594 0.19594 0 0 1-0.020776-0.24938l0.66678-0.93219a3.2656 3.2656 0 0 1-0.27907-0.67034l-1.1287-0.20009a0.19356 0.19356 0 0 1-0.15972-0.19059v-1.0646c0-0.09499 0.06828-0.17575 0.16209-0.19119l1.1287-0.18822q0.10272-0.35031 0.27906-0.66975l-0.65906-0.94169a0.19356 0.19356 0 0 1 0.021975-0.24759l0.75347-0.75228a0.19356 0.19356 0 0 1 0.24938-0.020776l0.93516 0.66797q0.31647-0.17338 0.66559-0.27313l0.18525-1.1341a0.19356 0.19356 0 0 1 0.19119-0.16209h1.0646c0.0944 0 0.17456 0.067688 0.19119 0.16031l0.1995 1.14q0.34734 0.10034 0.665 0.27609l0.93694-0.67391a0.19356 0.19356 0 0 1 0.25056 0.019591l0.75287 0.75288a0.19356 0.19356 0 0 1 0.02137 0.24819l-0.66797 0.95178q0.17219 0.31469 0.27312 0.65906zm-4.503 0.91853a1.3555 1.3555 0 1 0 2.7111 0 1.3555 1.3555 0 0 0-2.7111 0z\" clip-rule=\"evenodd\" fill=\"none\" stroke=\"currentColor\" stroke-width=\".59375\"/></g></svg>`;\r\nexport const buildingGearBuild = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" ><path d=\"m-14.269 23.484a4.75 4.75 0 0 0-2.4518 0.63615 4.75 4.75 0 0 0-2.3723 3.96l-0.0027 0.15374 0.0027 0.15374a4.75 4.75 0 1 0 4.8242-4.9037zm0.68121 3.0217h0.69976v2.9793l-2.5791 0.66266-2.9502-0.99399c0-0.16564 0.07498-0.33135 0.18554-0.46386 0.14743-0.13251 0.33018-0.1988 0.55133-0.1988h2.5817l0.77399-0.26506-0.11133-0.29687-0.66266 0.23061h-1.0337c-0.11058 0-0.25762-0.06629-0.33133-0.13254-0.07371-0.06625-0.10868-0.16568-0.10868-0.26506 0-0.16564 0.10992-0.29688 0.29422-0.36314zm1.4366 0h1.4738v3.642h-1.4738z\" stroke-width=\".475\"/><g fill=\"currentColor\"></g><g transform=\"translate(.11566 1.0024)\"><g transform=\"translate(-.11566 -1.0024)\"><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g></g><path d=\"m14.281 9.329 1.1442 0.18703c0.09357 0.015417 0.16219 0.096356 0.16209 0.19119v1.0646c-4.5e-5 0.09404-0.06767 0.17444-0.16031 0.19059l-1.1459 0.20128c-0.0661 0.23038-0.15694 0.45026-0.27253 0.65966l0.67747 0.9405c0.0558 0.07712 0.04724 0.18337-0.02018 0.25056l-0.75288 0.75288c-0.06639 0.06668-0.17111 0.07595-0.24819 0.02198l-0.95-0.66678c-0.21036 0.1168-0.43298 0.20999-0.66381 0.27788l-0.20188 1.1406c-0.01645 0.09263-0.09711 0.16001-0.19119 0.15972h-1.064c-0.09451 1.02e-4 -0.17518-0.06826-0.19059-0.1615l-0.18941-1.1347c-0.23178-0.067114-0.4554-0.15971-0.66678-0.27609l-0.94287 0.66084c-0.077074 0.05397-0.1818 0.0447-0.24819-0.02197l-0.75347-0.75288c-0.066017-0.0673-0.074746-0.17208-0.020776-0.24938l0.66678-0.93219c-0.11765-0.21238-0.21125-0.43722-0.27907-0.67034l-1.1287-0.20009c-0.092404-0.01641-0.15972-0.096743-0.15972-0.19059v-1.0646c0-0.09499 0.06828-0.17575 0.16209-0.19119l1.1287-0.18822c0.068482-0.23354 0.1615-0.45679 0.27906-0.66975l-0.65906-0.94169c-0.053635-0.076954-0.044375-0.18129 0.021975-0.24759l0.75347-0.75228c0.066872-0.06695 0.17235-0.075737 0.24938-0.020776l0.93516 0.66797c0.21098-0.11558 0.43284-0.20663 0.66559-0.27313l0.18525-1.1341c0.01542-0.093571 0.09635-0.16219 0.19119-0.16209h1.0646c0.0944 0 0.17456 0.067688 0.19119 0.16031l0.1995 1.14c0.23156 0.066893 0.45323 0.15892 0.665 0.27609l0.93694-0.67391c0.07698-0.055954 0.18322-0.047648 0.25056 0.019591l0.75287 0.75288c0.06648 0.066546 0.0755 0.17125 0.02137 0.24819l-0.66797 0.95178c0.11479 0.20979 0.20583 0.42948 0.27312 0.65906z\" clip-rule=\"evenodd\" fill=\"none\" stroke=\"currentColor\" stroke-width=\".59375\"/><path d=\"m10.231 8.372c0.62223 0 1.1267 0.50443 1.1267 1.1267 0 0.11382-0.01688 0.22369-0.04827 0.32727l1.1749 1.1749c0.20741 0.20741 0.20741 0.54369 0 0.7511-0.20741 0.20741-0.5437 0.20741-0.7511 0l-1.1749-1.1749c-0.10357 0.03139-0.21345 0.04827-0.32727 0.04827-0.62223 0-1.1267-0.50442-1.1267-1.1267 0-0.12008 0.01878-0.23577 0.05358-0.34429l0.53294 0.53206 0.52824-0.17593 0.02359-0.023589 0.17608-0.52775-0.53356-0.53309c0.10895-0.035102 0.22516-0.054062 0.34579-0.054062\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke-width=\".008802\"/></g></svg>`;\r\nexport const buildingRemove = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"m-14.269 23.484a4.75 4.75 0 0 0-2.4518 0.63615 4.75 4.75 0 0 0-2.3723 3.96l-0.0027 0.15374 0.0027 0.15374a4.75 4.75 0 1 0 4.8242-4.9037zm0.68121 3.0217h0.69976v2.9793l-2.5791 0.66266-2.9502-0.99399c0-0.16564 0.07498-0.33135 0.18554-0.46386 0.14743-0.13251 0.33018-0.1988 0.55133-0.1988h2.5817l0.77399-0.26506-0.11133-0.29687-0.66266 0.23061h-1.0337c-0.11058 0-0.25762-0.06629-0.33133-0.13254-0.07371-0.06625-0.10868-0.16568-0.10868-0.26506 0-0.16564 0.10992-0.29688 0.29422-0.36314zm1.4366 0h1.4738v3.642h-1.4738z\" stroke-width=\".475\"/><g fill=\"currentColor\"></g><g transform=\"translate(.11566 1.0024)\"><g transform=\"translate(-.11566 -1.0024)\"><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g></g><path d=\"m11.134 14.048c-2.0947 0-3.8-1.7052-3.8-3.8 0-2.0947 1.7052-3.8 3.8-3.8 2.0948 0 3.8 1.7052 3.8 3.8 0 2.0948-1.7052 3.8-3.8 3.8m0-8.55c-2.6267 0-4.75 2.1232-4.75 4.75 0 2.6268 2.1232 4.75 4.75 4.75 2.6268 0 4.75-2.1232 4.75-4.75 0-2.6267-2.1232-4.75-4.75-4.75m1.2302 2.85-1.2302 1.2302-1.2302-1.2302-0.66975 0.66975 1.2302 1.2302-1.2302 1.2302 0.66975 0.66975 1.2302-1.2302 1.2302 1.2302 0.66975-0.66975-1.2302-1.2302 1.2302-1.2302z\" fill=\"currentColor\" stroke-width=\".475\"/></g></svg>`;\r\nexport const buildingAdd = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"m-14.269 23.484a4.75 4.75 0 0 0-2.4518 0.63615 4.75 4.75 0 0 0-2.3723 3.96l-0.0027 0.15374 0.0027 0.15374a4.75 4.75 0 1 0 4.8242-4.9037zm0.68121 3.0217h0.69976v2.9793l-2.5791 0.66266-2.9502-0.99399c0-0.16564 0.07498-0.33135 0.18554-0.46386 0.14743-0.13251 0.33018-0.1988 0.55133-0.1988h2.5817l0.77399-0.26506-0.11133-0.29687-0.66266 0.23061h-1.0337c-0.11058 0-0.25762-0.06629-0.33133-0.13254-0.07371-0.06625-0.10868-0.16568-0.10868-0.26506 0-0.16564 0.10992-0.29688 0.29422-0.36314zm1.4366 0h1.4738v3.642h-1.4738z\" stroke-width=\".475\"/><g fill=\"currentColor\"></g><g transform=\"translate(.11566 1.0024)\"><g transform=\"translate(-.11566 -1.0024)\"><g fill=\"currentColor\"><g fill=\"currentColor\"><path d=\"m3 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h5v-0.62695a5.25 5.25 0 0 1-1.9102-3.1582 0.5 0.5 0 0 0-0.089844 0.28516v2.5h-3v-14h10v5.3008a5.25 5.25 0 0 1 1 0.47852v-5.7793a1 1 0 0 0-1-1z\"/><path d=\"m4.5 2a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h0.66797a5.25 5.25 0 0 1 0.83203-0.49219 0.5 0.5 0 0 0 0-0.0078125v-1a0.5 0.5 0 0 0-0.5-0.5zm3 0a0.5 0.5 0 0 0-0.5 0.5v0.65234a5.25 5.25 0 0 1 1.248-0.15234 5.25 5.25 0 0 1 0.75195 0.054688v-0.55469a0.5 0.5 0 0 0-0.5-0.5zm-6 3a0.5 0.5 0 0 0-0.5 0.5v1a0.5 0.5 0 0 0 0.5 0.5h1a0.5 0.5 0 0 0 0.5-0.5v-1a0.5 0.5 0 0 0-0.5-0.5z\"/></g></g></g><path d=\"m11.134 6.4476c2.0952 0 3.8 1.7048 3.8 3.8 0 2.0952-1.7048 3.8-3.8 3.8-2.0952 0-3.8-1.7048-3.8-3.8 0-2.0952 1.7048-3.8 3.8-3.8m0-0.95c-2.6234 0-4.75 2.1266-4.75 4.75 0 2.6234 2.1266 4.75 4.75 4.75 2.6234 0 4.75-2.1266 4.75-4.75 0-2.6234-2.1266-4.75-4.75-4.75m2.375 4.275h-1.9v-1.9h-0.95v1.9h-1.9v0.95h1.9v1.9h0.95v-1.9h1.9z\" fill=\"currentColor\" stroke-width=\".475\"/></g></svg>`;\r\n\r\nexport const exchange = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m21 9l-4-4v3h-7v2h7v3M7 11l-4 4l4 4v-3h7v-2H7z\"/></svg>`;\r\nexport const exchangeCircle = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M12.005 22.003c-5.523 0-10-4.477-10-10s4.477-10 10-10s10 4.477 10 10s-4.477 10-10 10m0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16m-5-7h9v2h-4v3zm5-4v-3l5 5h-9v-2z\"/></svg>`;\r\nexport const cancel = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M6.758 17.243L12.001 12m5.243-5.243L12 12m0 0L6.758 6.757M12.001 12l5.243 5.243\"/></svg>`;\r\nexport const cancelCircle = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m8.4 17l3.6-3.6l3.6 3.6l1.4-1.4l-3.6-3.6L17 8.4L15.6 7L12 10.6L8.4 7L7 8.4l3.6 3.6L7 15.6zm3.6 5q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8\"/></svg>`;\r\nexport const plus = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 5v14m-7-7h14\"/></svg>`;\r\nexport const plusCircle = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"  d=\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m6 0h6m-3-3v6\"/></svg>`;\r\nexport const eye = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\"><path d=\"M10 12a2 2 0 1 0 4 0a2 2 0 0 0-4 0\" /><path d=\"M21 12q-3.6 6-9 6t-9-6q3.6-6 9-6t9 6\" /></g></svg>`;\r\nexport const chevronRight = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M12 8L5.68 1.68L4 3.35L8.65 8L4 12.65l1.68 1.67z\"/></svg>`;\r\nexport const link = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M17 7h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c1.65 0 3 1.35 3 3s-1.35 3-3 3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c2.76 0 5-2.24 5-5s-2.24-5-5-5m-9 5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1H9c-.55 0-1 .45-1 1m2 3H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h3c.55 0 1-.45 1-1s-.45-1-1-1H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h3c.55 0 1-.45 1-1s-.45-1-1-1\" /></svg>`;\r\nexport const certificate = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"M128 136a8 8 0 0 1-8 8H72a8 8 0 0 1 0-16h48a8 8 0 0 1 8 8m-8-40H72a8 8 0 0 0 0 16h48a8 8 0 0 0 0-16m112 65.47V224a8 8 0 0 1-12 7l-24-13.74L172 231a8 8 0 0 1-12-7v-24H40a16 16 0 0 1-16-16V56a16 16 0 0 1 16-16h176a16 16 0 0 1 16 16v30.53a51.88 51.88 0 0 1 0 74.94M160 184v-22.53A52 52 0 0 1 216 76V56H40v128Zm56-12a51.88 51.88 0 0 1-40 0v38.22l16-9.16a8 8 0 0 1 7.94 0l16 9.16Zm16-48a36 36 0 1 0-36 36a36 36 0 0 0 36-36\" /></svg>`;\r\nexport const elevator = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" d=\"m7 2l4 4H8v4H6V6H3zm10 8l-4-4h3V2h2v4h3zM7 12h10a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2m0 2v6h10v-6z\" /></svg>`;\r\nexport const report = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10 9H6m9.5 2a2.5 2.5 0 1 1 0-5a2.5 2.5 0 0 1 0 5M6 6h3m9 12l-4.5-3l-2.5 2l-5-4\" /><path d=\"M3 20.4V3.6a.6.6 0 0 1 .6-.6h16.8a.6.6 0 0 1 .6.6v16.8a.6.6 0 0 1-.6.6H3.6a.6.6 0 0 1-.6-.6Z\" /></g></svg>`;\r\nexport const templateEdit = `<svg xmlns=\"http://www.w3.org/2000/svg\"  viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 2)\" fill-rule=\"evenodd\" d=\"M10.944 1.25h2.112c1.838 0 3.294 0 4.433.153c1.172.158 2.121.49 2.87 1.238a.75.75 0 0 1-1.06 1.06c-.424-.422-1.004-.676-2.01-.811c-1.027-.138-2.382-.14-4.289-.14h-2c-1.907 0-3.261.002-4.29.14c-1.005.135-1.585.389-2.008.812S4.025 4.705 3.89 5.71c-.138 1.029-.14 2.383-.14 4.29v4c0 1.907.002 3.262.14 4.29c.135 1.005.389 1.585.812 2.008s1.003.677 2.009.812c1.028.138 2.382.14 4.289.14h2c1.907 0 3.262-.002 4.29-.14c1.005-.135 1.585-.389 2.008-.812c.696-.696.907-1.777.943-4.309a.75.75 0 0 1 1.5.022c-.035 2.427-.192 4.158-1.382 5.348c-.749.748-1.698 1.08-2.87 1.238c-1.14.153-2.595.153-4.433.153h-2.112c-1.838 0-3.294 0-4.433-.153c-1.172-.158-2.121-.49-2.87-1.238c-.748-.749-1.08-1.698-1.238-2.87c-.153-1.14-.153-2.595-.153-4.433V9.944c0-1.838 0-3.294.153-4.433c.158-1.172.49-2.121 1.238-2.87c.749-.748 1.698-1.08 2.87-1.238c1.14-.153 2.595-.153 4.433-.153m7.17 5.796a2.716 2.716 0 1 1 3.84 3.84L17.2 15.643a7 7 0 0 1-.63.587q-.346.27-.744.46c-.224.107-.46.185-.806.3l-2.084.695a1.28 1.28 0 0 1-1.62-1.62l.681-2.04l.014-.043c.116-.347.194-.582.301-.806a4 4 0 0 1 .46-.744c.153-.196.328-.371.587-.63l.031-.031zm2.78 1.06a1.216 1.216 0 0 0-1.72 0l-.182.182l.034.107c.094.27.273.63.611.968a2.55 2.55 0 0 0 1.075.645l.182-.182a1.216 1.216 0 0 0 0-1.72m-1.328 3.048a4 4 0 0 1-.99-.73a4 4 0 0 1-.73-.99L14.45 12.83c-.301.301-.407.409-.496.523q-.17.218-.289.467c-.062.131-.111.274-.246.678l-.4 1.2l.283.283l1.2-.4c.404-.135.547-.184.678-.246q.248-.12.467-.289c.114-.089.222-.195.523-.496zM7.25 9A.75.75 0 0 1 8 8.25h6.5a.75.75 0 0 1 0 1.5H8A.75.75 0 0 1 7.25 9m0 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75m0 4a.75.75 0 0 1 .75-.75h1.5a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75\" clip-rule=\"evenodd\" /></svg>`;\r\nexport const draftEdit = `<svg xmlns=\"http://www.w3.org/2000/svg\"  viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 1.5)\" ><path d=\"m18.18 8.04l.463-.464a1.966 1.966 0 1 1 2.781 2.78l-.463.464M18.18 8.04s.058.984.927 1.853s1.854.927 1.854.927M18.18 8.04l-4.26 4.26c-.29.288-.434.433-.558.592q-.22.282-.374.606c-.087.182-.151.375-.28.762l-.413 1.24l-.134.401m8.8-5.081l-4.26 4.26c-.29.29-.434.434-.593.558q-.282.22-.606.374c-.182.087-.375.151-.762.28l-1.24.413l-.401.134m0 0l-.401.134a.53.53 0 0 1-.67-.67l.133-.402m.938.938l-.938-.938\" /><path stroke-linecap=\"round\" d=\"M8 13h2.5M8 9h6.5M8 17h1.5M3 14v-4c0-3.771 0-5.657 1.172-6.828S7.229 2 11 2h2c3.771 0 5.657 0 6.828 1.172M21 14c0 3.771 0 5.657-1.172 6.828m-15.656 0C5.343 22 7.229 22 11 22h2c3.771 0 5.657 0 6.828-1.172m0 0c.944-.943 1.127-2.348 1.163-4.828\" /></g></svg>`;\r\nexport const widgets = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 1.5)\" d=\"M16.65 13L11 7.35l5.65-5.65l5.65 5.65zM3 11V3h8v8zm10 10v-8h8v8zM3 21v-8h8v8z\" /></svg>`;\r\nexport const starOutline = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 1.5)\" d=\"m8.85 16.825l3.15-1.9l3.15 1.925l-.825-3.6l2.775-2.4l-3.65-.325l-1.45-3.4l-1.45 3.375l-3.65.325l2.775 2.425zM5.825 21l1.625-7.025L2 9.25l7.2-.625L12 2l2.8 6.625l7.2.625l-5.45 4.725L18.175 21L12 17.275zM12 12.25\" /></svg>`;\r\nexport const starSolid = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" style=\"stroke-width:var(--fu-icon-stroke-width, 1.5)\" d=\"m5.825 21l1.625-7.025L2 9.25l7.2-.625L12 2l2.8 6.625l7.2.625l-5.45 4.725L18.175 21L12 17.275z\" /></svg>`;\r\n","import { Injectable } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport {\r\n  edit,\r\n  editOff,\r\n  editSave,\r\n  trash,\r\n  doubleArrowLeft,\r\n  doubleArrowRight,\r\n  arrowLeft,\r\n  arrowRight,\r\n  sort,\r\n  sortAsc,\r\n  sortDesc,\r\n  filterRemove,\r\n  filterPlus,\r\n  filterEdit,\r\n  check,\r\n  save,\r\n  exchange,\r\n  exchangeCircle,\r\n  cancel,\r\n  cancelCircle,\r\n  buildingAdd,\r\n  plus,\r\n  plusCircle,\r\n  buildingHand,\r\n  buildingRemove,\r\n  building,\r\n  buildingBuild,\r\n  buildingSwap,\r\n  buildingUser,\r\n  buildingGear,\r\n  buildingGearBuild,\r\n  search,\r\n  eye,\r\n  chevronRight,\r\n  link,\r\n  certificate,\r\n  report,\r\n  elevator,\r\n  templateEdit,\r\n  draftEdit,\r\n  widgets,\r\n  starOutline,\r\n  starSolid,\r\n} from './icons';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class IconRegistryService {\r\n  private icons = new Map<string, SafeHtml>();\r\n\r\n  constructor(private sanitizer: DomSanitizer) {\r\n    this.registerIcon('edit', edit);\r\n    this.registerIcon('editOff', editOff);\r\n    this.registerIcon('editSave', editSave);\r\n    this.registerIcon('trash', trash);\r\n    this.registerIcon('arrowLeft', arrowLeft);\r\n    this.registerIcon('arrowRight', arrowRight);\r\n    this.registerIcon('doubleArrowLeft', doubleArrowLeft);\r\n    this.registerIcon('doubleArrowRight', doubleArrowRight);\r\n    this.registerIcon('sort', sort);\r\n    this.registerIcon('sortAsc', sortAsc);\r\n    this.registerIcon('sortDesc', sortDesc);\r\n    this.registerIcon('filterRemove', filterRemove);\r\n    this.registerIcon('filterPlus', filterPlus);\r\n    this.registerIcon('filterEdit', filterEdit);\r\n    this.registerIcon('check', check);\r\n    this.registerIcon('save', save);\r\n    this.registerIcon('building', building);\r\n    this.registerIcon('buildingHand', buildingHand);\r\n    this.registerIcon('buildingBuild', buildingBuild);\r\n    this.registerIcon('buildingSwap', buildingSwap);\r\n    this.registerIcon('buildingUser', buildingUser);\r\n    this.registerIcon('buildingGear', buildingGear);\r\n    this.registerIcon('buildingGearBuild', buildingGearBuild);\r\n    this.registerIcon('buildingRemove', buildingRemove);\r\n    this.registerIcon('buildingAdd', buildingAdd);\r\n    this.registerIcon('exchange', exchange);\r\n    this.registerIcon('exchangeCircle', exchangeCircle);\r\n    this.registerIcon('cancel', cancel);\r\n    this.registerIcon('cancelCircle', cancelCircle);\r\n    this.registerIcon('plus', plus);\r\n    this.registerIcon('plusCircle', plusCircle);\r\n    this.registerIcon('search', search);\r\n    this.registerIcon('eye', eye);\r\n    this.registerIcon('chevronRight', chevronRight);\r\n    this.registerIcon('link', link);\r\n    this.registerIcon('certificate', certificate);\r\n    this.registerIcon('report', report);\r\n    this.registerIcon('elevator', elevator);\r\n    this.registerIcon('templateEdit', templateEdit);\r\n    this.registerIcon('draftEdit', draftEdit);\r\n    this.registerIcon('widgets', widgets);\r\n    this.registerIcon('starOutline', starOutline);\r\n    this.registerIcon('starSolid', starSolid);\r\n  }\r\n\r\n  public registerIcon(name: IconNames, svg: string): void {\r\n    const safeSvg = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n    this.icons.set(name, safeSvg);\r\n  }\r\n\r\n  public getIcon(name: string): SafeHtml | undefined {\r\n    return this.icons.get(name);\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  input,\r\n  OnChanges,\r\n  OnInit,\r\n  SimpleChanges,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconNames } from './icon-names';\r\n\r\n@Component({\n    selector: 'fu-icon',\n    templateUrl: './icon.component.html',\n    styleUrl: './icon.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\r\nexport class IconComponent implements OnChanges, OnInit {\r\n  public iconName = input.required<IconNames>();\r\n\r\n  public size = input<string>('');\r\n  public strokeWidth = input<string>('');\r\n  public color = input<string>('');\r\n\r\n  @HostBinding('class') get classList() {\r\n    return `fu-icon`;\r\n  }\r\n\r\n  public iconSvg: SafeHtml | undefined;\r\n\r\n  constructor(\r\n    private iconRegistry: IconRegistryService,\r\n    private elementRef: ElementRef\r\n  ) {}\r\n\r\n  public ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['size']) {\r\n      this.setIconSize();\r\n    }\r\n    if (changes['color']) {\r\n      this.setIconColor();\r\n    }\r\n    if (changes['strokeWidth']) {\r\n      this.setIconStrokeWidth();\r\n    }\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.iconSvg = this.iconRegistry.getIcon(this.iconName());\r\n  }\r\n\r\n  private setIconColor(): void {\r\n    this.elementRef.nativeElement.style.removeProperty('color');\r\n\r\n    if (this.color() !== undefined) {\r\n      this.elementRef.nativeElement.style.setProperty('color', this.color());\r\n    }\r\n  }\r\n\r\n  private setIconSize(): void {\r\n    this.elementRef.nativeElement.style.removeProperty('--fu-icon-size');\r\n\r\n    if (this.size() !== undefined) {\r\n      this.elementRef.nativeElement.style.setProperty(\r\n        '--fu-icon-size',\r\n        this.size().toString()\r\n      );\r\n    }\r\n  }\r\n\r\n  private setIconStrokeWidth(): void {\r\n    this.elementRef.nativeElement.style.removeProperty(\r\n      '--fu-icon-stroke-width'\r\n    );\r\n    if (this.strokeWidth() !== undefined) {\r\n      this.elementRef.nativeElement.style.setProperty(\r\n        '--fu-icon-stroke-width',\r\n        this.strokeWidth().toString()\r\n      );\r\n    }\r\n  }\r\n}\r\n","<span [innerHTML]=\"iconSvg\" class=\"fu-icon-container\"></span>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconRegistryService } from './icon-registry.service';\r\nimport { IconComponent } from './icon.component';\r\n\r\n@NgModule({\r\n  declarations: [IconComponent],\r\n  imports: [CommonModule],\r\n  providers: [IconRegistryService],\r\n  exports: [IconComponent],\r\n})\r\nexport class IconModule {}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class TableUtilityService {\r\n  private headerTexts: string[] = [];\r\n\r\n  public headerCount = signal<number>(0);\r\n  public isLoading = signal<boolean>(false);\r\n  public sortCellIndex = signal<number>(-1);\r\n  public expanded = signal<boolean>(false);\r\n\r\n  public setSortCellIndex(index: number): void {\r\n    this.sortCellIndex.set(index);\r\n  }\r\n\r\n  public resetSortCellIndex(): void {\r\n    this.sortCellIndex.set(-1);\r\n  }\r\n\r\n  public setHeaderText(index: number, text: string): void {\r\n    this.headerTexts[index] = text;\r\n  }\r\n\r\n  public getHeaderText(index: number): string | undefined {\r\n    return this.headerTexts[index];\r\n  }\r\n\r\n  public clearHeaderText(): void {\r\n    this.headerTexts = [];\r\n  }\r\n\r\n  public setColumnCount(): void {\r\n    this.headerCount.update(count => count + 1);\r\n  }\r\n\r\n  public resetColumnCount(): void {\r\n    this.headerCount.set(0);\r\n  }\r\n\r\n  public setIsLoading(loading: boolean): void {\r\n    this.isLoading.set(loading);\r\n  }\r\n\r\n  public getExpanded(expanded: boolean): void {\r\n    this.expanded.set(expanded);\r\n  }\r\n}\r\n","import { computed, effect, Injectable, signal } from '@angular/core';\r\nimport { SortDirection } from '../models';\r\n\r\ninterface StorageState {\r\n  currentPage: number;\r\n  pageSize: number;\r\n  sortKey: string | number;\r\n  sortDirection: SortDirection;\r\n  searchText: string;\r\n}\r\n\r\nconst initialState: StorageState = {\r\n  currentPage: 0,\r\n  pageSize: 10,\r\n  sortKey: '',\r\n  sortDirection: '',\r\n  searchText: '',\r\n};\r\n\r\n@Injectable()\r\nexport class TableStorageService {\r\n  private storageState = signal<StorageState>(initialState);\r\n\r\n  public localStorageKey = signal('');\r\n\r\n  public currentPage = computed(() => this.storageState().currentPage);\r\n  public pageSize = computed(() => this.storageState().pageSize);\r\n  public sortKey = computed(() => this.storageState().sortKey);\r\n  public sortDirection = computed(() => this.storageState().sortDirection);\r\n  public searchText = computed(() => this.storageState().searchText);\r\n\r\n  storageStateEffect = effect(() => {\r\n    if (this.localStorageKey()) {\r\n      const state = this.storageState();\r\n      this.updateLocalStorage(state);\r\n    }\r\n  });\r\n\r\n  public setCurrentPage(currentPage: number): void {\r\n    this.storageState.update(state => ({\r\n      ...state,\r\n      currentPage,\r\n    }));\r\n  }\r\n\r\n  public setPageSize(pageSize: number): void {\r\n    this.storageState.update(state => ({\r\n      ...state,\r\n      pageSize,\r\n    }));\r\n  }\r\n\r\n  public setSortKey(sortKey: string | number): void {\r\n    this.storageState.update(state => ({\r\n      ...state,\r\n      sortKey,\r\n    }));\r\n  }\r\n\r\n  public setSortDirection(sortDirection: SortDirection): void {\r\n    this.storageState.update(state => ({\r\n      ...state,\r\n      sortDirection,\r\n    }));\r\n  }\r\n\r\n  public setSearchText(searchText: string): void {\r\n    this.storageState.update(state => ({\r\n      ...state,\r\n      searchText,\r\n    }));\r\n  }\r\n\r\n  public setLocalStorageKey(key: string): void {\r\n    const storedValues = window.localStorage.getItem(key);\r\n\r\n    if (storedValues && key) {\r\n      this.storageState.set(JSON.parse(storedValues));\r\n    }\r\n    this.localStorageKey.set(key);\r\n  }\r\n\r\n  public resetStorageKey(): void {\r\n    this.localStorageKey.set('');\r\n  }\r\n\r\n  public resetState(): void {\r\n    this.storageState.set(initialState);\r\n  }\r\n\r\n  private updateLocalStorage(state: StorageState): void {\r\n    window.localStorage.setItem(this.localStorageKey(), JSON.stringify(state));\r\n  }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class TableIntlService {\r\n  public searchPlaceholder = signal<string>('Search...');\r\n  public pageSizeLabel = signal<string>('Page size');\r\n  public noRecordsText = signal<string>('No records found');\r\n  public noEntriesLabel = signal<string>('No entries');\r\n\r\n  public entriesLabel = (first: number, last: number, total: number) =>\r\n    `${first} to ${last} of ${total} entries`;\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class TableEditService {\r\n  public editIndex = signal<number | null>(null);\r\n  public editValues = signal<{ [key: string]: any }>({});\r\n  public savingIndex = signal<number>(-1);\r\n\r\n  public startEditing(rowIndex: number): void {\r\n    this.editValues.set({});\r\n    this.editIndex.set(rowIndex);\r\n  }\r\n\r\n  public stopEditing(): void {\r\n    this.editIndex.set(null);\r\n  }\r\n\r\n  public updateEditValues(key: string, value: any): void {\r\n    this.editValues.update(values => ({\r\n      ...values,\r\n      [key]: value,\r\n    }));\r\n  }\r\n\r\n  public resetEditValues(): void {\r\n    this.editValues.set({});\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  computed,\r\n  inject,\r\n  input,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { ButtonModule } from '../../button';\r\nimport { IconModule } from '../../icons';\r\nimport { TableIntlService } from '../services/table-intl.service';\r\nimport { TableEditService } from '../services/table-edit.service';\r\n\r\n@Component({\r\n  selector: 'fu-table-paginator',\r\n  imports: [ButtonModule, IconModule],\r\n  templateUrl: './table-paginator.component.html',\r\n  styleUrl: './table-paginator.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TablePaginatorComponent {\r\n  public pageSizeOptions = input<number[]>([]);\r\n  public quickPageJump = input<boolean>(false);\r\n  public dataLenght = input<number>(0);\r\n\r\n  private tableEditService = inject(TableEditService);\r\n  private tableStorageService = inject(TableStorageService);\r\n  private tableIntl = inject(TableIntlService);\r\n\r\n  public pageSizeLabel = this.tableIntl.pageSizeLabel;\r\n  public pageSize = this.tableStorageService.pageSize;\r\n  public currentPage = this.tableStorageService.currentPage;\r\n  public searchText = this.tableStorageService.searchText;\r\n\r\n  private first = computed(() => this.currentPage() * this.pageSize() + 1);\r\n  private last = computed(() =>\r\n    Math.min((this.currentPage() + 1) * this.pageSize(), this.dataLenght())\r\n  );\r\n  public totalPages = computed(() =>\r\n    Math.ceil(this.dataLenght() / this.pageSize())\r\n  );\r\n  public totalItems = computed(() => this.dataLenght());\r\n  public noEntriesLabel = this.tableIntl.noEntriesLabel;\r\n  public entriesLabel = computed(() =>\r\n    this.tableIntl.entriesLabel(this.first(), this.last(), this.totalItems())\r\n  );\r\n\r\n  public goToPage(page: number): void {\r\n    if (page < 0 || page > this.totalPages()) {\r\n      return;\r\n    }\r\n\r\n    this.stopEditing();\r\n    this.tableStorageService.setCurrentPage(page);\r\n  }\r\n\r\n  public changePageSize(event: any): void {\r\n    const pageSize = Number(event.target.value);\r\n    this.tableStorageService.setCurrentPage(0);\r\n    this.tableStorageService.setPageSize(pageSize);\r\n    this.stopEditing();\r\n  }\r\n\r\n  public jumpToPage(input: HTMLInputElement): void {\r\n    const previousValue = this.tableStorageService.currentPage() + 1;\r\n    const inputValue = input.value.trim();\r\n    const value = Number(inputValue);\r\n    const min = Number(input.min);\r\n    const max = Number(input.max);\r\n\r\n    if (isNaN(value) || inputValue !== value.toString()) {\r\n      input.value = previousValue.toString();\r\n      return;\r\n    }\r\n\r\n    if (value < min) {\r\n      input.value = min.toString();\r\n      this.tableStorageService.setCurrentPage(min - 1);\r\n    } else if (value > max) {\r\n      input.value = max.toString();\r\n      this.tableStorageService.setCurrentPage(max - 1);\r\n    } else {\r\n      this.tableStorageService.setCurrentPage(value - 1);\r\n    }\r\n\r\n    this.stopEditing();\r\n  }\r\n\r\n  public adjustWidth(input: HTMLInputElement) {\r\n    input.style.width = this.calculateWidth(input.value) + 'px';\r\n  }\r\n\r\n  public calculateWidth(value: string | number | null | undefined): number {\r\n    if (!value || value.toString().trim() === '') {\r\n      return 24;\r\n    }\r\n\r\n    const length = value.toString().length;\r\n    return length === 1 ? 24 : length === 2 ? 24 : 36;\r\n  }\r\n\r\n  private stopEditing(): void {\r\n    if (this.tableEditService.editIndex() !== null) {\r\n      this.tableEditService.stopEditing();\r\n    }\r\n  }\r\n}\r\n","<div class=\"fu-table-paginator\">\r\n  <div class=\"fu-paginator-page-select\">\r\n    <div class=\"fu-item-count\">\r\n      @if (totalItems() !== 0) {\r\n        {{ entriesLabel() }}\r\n      } @else {\r\n        {{ noEntriesLabel() }}\r\n      }\r\n    </div>\r\n\r\n    <div>\r\n      <span>{{ pageSizeLabel() }}:</span>\r\n      <select class=\"fu-page-size-select\" (change)=\"changePageSize($event)\">\r\n        @for (size of pageSizeOptions(); track $index) {\r\n          <option [value]=\"size\" [selected]=\"size === pageSize()\">\r\n            {{ size }}\r\n          </option>\r\n        }\r\n      </select>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"fu-paginator-controls\">\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      variant=\"text\"\r\n      (click)=\"goToPage(0)\"\r\n      [disabled]=\"currentPage() === 0\"\r\n    >\r\n      <fu-icon size=\"20px\" iconName=\"doubleArrowLeft\" />\r\n    </button>\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      variant=\"text\"\r\n      (click)=\"goToPage(currentPage() - 1)\"\r\n      [disabled]=\"currentPage() === 0\"\r\n    >\r\n      <fu-icon size=\"20px\" iconName=\"arrowLeft\" />\r\n    </button>\r\n\r\n    @if (quickPageJump()) {\r\n      @if (totalPages() === 0) {\r\n        <div class=\"fu-no-pages\">\r\n          <span>-</span><span>/</span><span>-</span>\r\n        </div>\r\n      } @else {\r\n        <div class=\"fu-jump-to-page\">\r\n          <input\r\n            #pageInput\r\n            [min]=\"1\"\r\n            [max]=\"totalPages()\"\r\n            [value]=\"currentPage() + 1\"\r\n            (input)=\"adjustWidth(pageInput)\"\r\n            (change)=\"jumpToPage(pageInput)\"\r\n            [disabled]=\"totalPages() === 0\"\r\n            [style.width.px]=\"calculateWidth(pageInput.value)\"\r\n          />\r\n          <span>/</span>\r\n          <span>{{ totalPages() }}</span>\r\n        </div>\r\n      }\r\n      <!-- <div class=\"fu-jump-to-page\">\r\n        <input\r\n          #pageInput\r\n          [min]=\"1\"\r\n          [max]=\"totalPages()\"\r\n          [value]=\"currentPage() + 1\"\r\n          (input)=\"adjustWidth(pageInput)\"\r\n          (change)=\"jumpToPage(pageInput)\"\r\n          [disabled]=\"totalPages() === 0\"\r\n          [style.width.px]=\"calculateWidth(pageInput.value)\"\r\n        />\r\n        <span>/</span>\r\n        <span>{{ totalPages() }}</span>\r\n      </div> -->\r\n    }\r\n\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      variant=\"text\"\r\n      (click)=\"goToPage(currentPage() + 1)\"\r\n      [disabled]=\"currentPage() + 1 >= totalPages()\"\r\n    >\r\n      <fu-icon size=\"20px\" iconName=\"arrowRight\" />\r\n    </button>\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      variant=\"text\"\r\n      (click)=\"goToPage(totalPages() - 1)\"\r\n      [disabled]=\"currentPage() + 1 >= totalPages()\"\r\n    >\r\n      <fu-icon size=\"20px\" iconName=\"doubleArrowRight\" />\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Directive, input } from '@angular/core';\r\n\r\ntype DataSourceKeys<T> = Record<keyof T, keyof T>;\r\n\r\ninterface BodyTemplateContext<T extends object> {\r\n  $implicit: T;\r\n  index: number;\r\n  keys: DataSourceKeys<T>;\r\n}\r\n\r\n@Directive({\r\n  selector: '[fuBodyTemplate]',\r\n})\r\nexport class BodyTemplateDirective<T extends object> {\r\n  public dataSource = input<T[]>([], { alias: 'fuBodyTemplate' });\r\n\r\n  static ngTemplateContextGuard<TContextItem extends object>(\r\n    dir: BodyTemplateDirective<TContextItem>,\r\n    ctx: unknown\r\n  ): ctx is BodyTemplateContext<TContextItem> {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\ninterface ExpandTemplateContext<T extends object> {\r\n  $implicit: T;\r\n  index: number;\r\n}\r\n\r\n@Directive({\r\n  selector: '[fuExpandTemplate]',\r\n})\r\nexport class ExpandTemplateDirective<T extends object> {\r\n  public dataSource = input<T[] | ''>([], { alias: 'fuExpandTemplate' });\r\n\r\n  static ngTemplateContextGuard<TContextItem extends object>(\r\n    dir: ExpandTemplateDirective<TContextItem>,\r\n    ctx: unknown\r\n  ): ctx is ExpandTemplateContext<TContextItem> {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\ntype DataSourceKeys<T> = Record<keyof T, keyof T>;\r\n\r\ninterface HeaderTemplateContext<T extends object> {\r\n  $implicit: DataSourceKeys<T>;\r\n}\r\n\r\n@Directive({\r\n  selector: '[fuHeaderTemplate]',\r\n})\r\nexport class HeaderTemplateDirective<T extends object> {\r\n  public dataSource = input<T[] | ''>([], { alias: 'fuHeaderTemplate' });\r\n\r\n  static ngTemplateContextGuard<TContextItem extends object>(\r\n    dir: HeaderTemplateDirective<TContextItem>,\r\n    ctx: unknown\r\n  ): ctx is HeaderTemplateContext<TContextItem> {\r\n    return true;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'keyMapping',\r\n})\r\nexport class KeyMappingPipe implements PipeTransform {\r\n  transform(value: object): object {\r\n    if (!value || typeof value !== 'object') {\r\n      return value;\r\n    }\r\n\r\n    const mappedObject: Record<string, string> = {};\r\n    Object.keys(value).forEach(key => {\r\n      mappedObject[key] = key;\r\n    });\r\n\r\n    return mappedObject;\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  computed,\r\n  effect,\r\n  ElementRef,\r\n  inject,\r\n  input,\r\n  OnInit,\r\n  signal,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { TableUtilityService } from '../services/table-utility.service';\r\nimport { TableEditService } from '../services/table-edit.service';\r\nimport { BodyCellValue } from '../models';\r\n\r\n@Component({\r\n  selector: 'fu-tbody-cell',\r\n  templateUrl: './tbody-cell.component.html',\r\n  styleUrl: './tbody-cell.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  host: {\r\n    '[attr.role]': '\"cell\"',\r\n    '[class.sorting]': 'sortCell()',\r\n    '[class.loading]': 'isLoading()',\r\n    '[class.expanded]': '!expanded()',\r\n  },\r\n})\r\nexport class TbodyCellComponent implements OnInit {\r\n  public cellValue = input<BodyCellValue>(undefined);\r\n  public editKey = input<string>('');\r\n\r\n  public headerText = signal<string>('');\r\n  public rowIndex = signal<number>(-1);\r\n\r\n  public cellValueType = computed(() => typeof this.cellValue());\r\n  public isEditing = computed<boolean>(\r\n    () =>\r\n      this.rowIndex() === this.tableEditService.editIndex() && !!this.editKey()\r\n  );\r\n\r\n  private tableStorageService = inject(TableStorageService);\r\n  private tableUtilityService = inject(TableUtilityService);\r\n  private tableEditService = inject(TableEditService);\r\n  private elementRef = inject(ElementRef);\r\n\r\n  public expanded = this.tableUtilityService.expanded;\r\n  public isLoading = this.tableUtilityService.isLoading;\r\n  public searchText = this.tableStorageService.searchText;\r\n  public editIndex = this.tableEditService.editIndex;\r\n  public savingIndex = this.tableEditService.savingIndex;\r\n\r\n  public highLightedText = computed(() => this.highlightText());\r\n  public sortCell = computed(\r\n    () => this.tableUtilityService.sortCellIndex() === this.cellIndex()\r\n  );\r\n  public cellIndex = signal<number>(-2);\r\n\r\n  editSavingEffect = effect(() => {\r\n    if (this.savingIndex() > -1 && !this.isLoading() && this.isEditing()) {\r\n      this.tableEditService.savingIndex.set(-1);\r\n      this.tableEditService.stopEditing();\r\n    }\r\n  });\r\n\r\n  public ngOnInit(): void {\r\n    const rowIndex = this.getRowIndex();\r\n    this.rowIndex.set(rowIndex);\r\n\r\n    const cellIndex = this.getCellIndex();\r\n    this.cellIndex.set(cellIndex);\r\n    this.headerText.set(\r\n      this.tableUtilityService.getHeaderText(cellIndex) || ''\r\n    );\r\n  }\r\n\r\n  public highlightText(): string {\r\n    const cellValue = this.cellValue();\r\n    const searchText = this.searchText();\r\n\r\n    if (!searchText || (!cellValue && cellValue !== 0)) {\r\n      return cellValue as any;\r\n    }\r\n\r\n    const cellValueStr = cellValue.toString();\r\n    const searchTerm = searchText.toString().toLowerCase();\r\n    const regex = new RegExp(`(${searchTerm})`, 'gi');\r\n\r\n    return cellValueStr.replace(regex, '<span class=\"fu-highlight\">$1</span>');\r\n  }\r\n\r\n  public onInputChange(value: any): void {\r\n    this.tableEditService.updateEditValues(this.editKey(), value);\r\n  }\r\n\r\n  private getCellIndex(): number {\r\n    const parent = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n    return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n  }\r\n\r\n  private getRowIndex(): number {\r\n    const element = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n    const parent = element.parentElement;\r\n    if (!parent) return -1;\r\n\r\n    const children = Array.from(parent.children);\r\n    return children.indexOf(element);\r\n  }\r\n}\r\n","<div>\r\n  <span class=\"fu-header-text\">{{ headerText() }}</span>\r\n\r\n  @if ((isLoading() && savingIndex() < 0) || savingIndex() === rowIndex()) {\r\n    <span class=\"fu-skeleton-loader\"></span>\r\n  } @else {\r\n    @if (cellValue() !== undefined) {\r\n      @if (isEditing()) {\r\n        @switch (cellValueType()) {\r\n          @case ('string') {\r\n            <input\r\n              class=\"fu-edit\"\r\n              #editInput\r\n              [value]=\"cellValue()\"\r\n              (input)=\"onInputChange(editInput.value)\"\r\n              (click)=\"$event.stopPropagation()\"\r\n            />\r\n          }\r\n          @case ('number') {\r\n            <input\r\n              class=\"fu-edit\"\r\n              #editInput\r\n              type=\"number\"\r\n              [value]=\"cellValue()\"\r\n              (input)=\"onInputChange(editInput.value)\"\r\n              (click)=\"$event.stopPropagation()\"\r\n            />\r\n          }\r\n          @case ('boolean') {\r\n            <div class=\"fu-checkbox-wrapper\" [class.editing]=\"isEditing()\">\r\n              <input\r\n                type=\"checkbox\"\r\n                class=\"fu-input-checkbox\"\r\n                #editInput\r\n                [id]=\"cellIndex()\"\r\n                [checked]=\"cellValue()\"\r\n                (change)=\"onInputChange(editInput.checked)\"\r\n              />\r\n              <svg><use xlink:href=\"#fu-checkmark\" /></svg>\r\n              <label [for]=\"cellIndex()\"></label>\r\n              <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n                <symbol id=\"fu-checkmark\" viewBox=\"0 0 24 24\">\r\n                  <path\r\n                    stroke-linecap=\"round\"\r\n                    stroke-miterlimit=\"10\"\r\n                    fill=\"none\"\r\n                    d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n                  ></path>\r\n                </symbol>\r\n              </svg>\r\n            </div>\r\n          }\r\n        }\r\n      } @else {\r\n        @switch (cellValueType()) {\r\n          @case ('boolean') {\r\n            <div class=\"fu-checkbox-wrapper fu-checkbox-disabled\">\r\n              <input\r\n                type=\"checkbox\"\r\n                class=\"fu-input-checkbox\"\r\n                disabled\r\n                [checked]=\"cellValue()\"\r\n              />\r\n              <svg><use xlink:href=\"#fu-checkmark\" /></svg>\r\n              <label></label>\r\n              <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n                <symbol id=\"fu-checkmark\" viewBox=\"0 0 24 24\">\r\n                  <path\r\n                    stroke-linecap=\"round\"\r\n                    stroke-miterlimit=\"10\"\r\n                    fill=\"none\"\r\n                    d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n                  ></path>\r\n                </symbol>\r\n              </svg>\r\n            </div>\r\n          }\r\n          @default {\r\n            <span class=\"fu-cell-text\" [innerHTML]=\"highLightedText()\"></span>\r\n          }\r\n        }\r\n      }\r\n    } @else {\r\n      <span class=\"fu-cell-text\" [style.display]=\"'flex'\"> <ng-content /></span>\r\n    }\r\n  }\r\n</div>\r\n","import { Directive, input } from '@angular/core';\r\n\r\ninterface PopupTemplateContext<T extends object> {\r\n  $implicit: T;\r\n  index: number;\r\n}\r\n\r\n@Directive({\r\n  selector: '[fuPopupTemplate]',\r\n})\r\nexport class PopupTemplateDirective<T extends object> {\r\n  public dataSource = input<T[] | ''>([], { alias: 'fuPopupTemplate' });\r\n\r\n  static ngTemplateContextGuard<TContextItem extends object>(\r\n    dir: PopupTemplateDirective<TContextItem>,\r\n    ctx: unknown\r\n  ): ctx is PopupTemplateContext<TContextItem> {\r\n    return true;\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  inject,\r\n  input,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { IconModule } from '../../icons';\r\nimport { ButtonModule } from '../../button';\r\nimport { TableIntlService } from '../services/table-intl.service';\r\nimport { TableEditService } from '../services/table-edit.service';\r\n\r\n@Component({\r\n  selector: 'fu-table-filter',\r\n  templateUrl: './table-filter.component.html',\r\n  styleUrl: './table-filter.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  imports: [IconModule, ButtonModule],\r\n})\r\nexport class TableFilterComponent {\r\n  public title = input<string>();\r\n\r\n  private tableStorageService = inject(TableStorageService);\r\n  private tableEditService = inject(TableEditService);\r\n  private tableIntl = inject(TableIntlService);\r\n\r\n  public placeholder = this.tableIntl.searchPlaceholder;\r\n  public searchText = this.tableStorageService.searchText;\r\n\r\n  public resetSearch(): void {\r\n    this.resetEdit();\r\n    this.tableStorageService.setSearchText('');\r\n    this.tableStorageService.setCurrentPage(0);\r\n  }\r\n\r\n  public searchFilter(text: string) {\r\n    this.resetEdit();\r\n    this.tableStorageService.setSearchText(text);\r\n    this.tableStorageService.setCurrentPage(0);\r\n  }\r\n\r\n  private resetEdit(): void {\r\n    if (this.tableEditService.editIndex() !== null) {\r\n      this.tableEditService.stopEditing();\r\n    }\r\n  }\r\n}\r\n","<div class=\"fu-table-search\" [class.title]=\"title()\">\r\n  @if (title()) {\r\n    <div class=\"fu-table-title\">\r\n      <h3>{{ title() }}</h3>\r\n    </div>\r\n  }\r\n\r\n  <input\r\n    #searchInput\r\n    type=\"text\"\r\n    [placeholder]=\"placeholder()\"\r\n    [value]=\"searchText()\"\r\n    (input)=\"searchFilter(searchInput.value)\"\r\n  />\r\n\r\n  @if (searchText()) {\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      variant=\"text\"\r\n      class=\"fu-table-clear-button\"\r\n      (click)=\"resetSearch()\"\r\n    >\r\n      <fu-icon color=\"gray\" iconName=\"cancel\" />\r\n    </button>\r\n  }\r\n</div>\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { TableStorageService } from './table-storage.service';\r\n\r\n@Injectable()\r\nexport class TableSortService {\r\n  private tableStorageService = inject(TableStorageService);\r\n\r\n  private sortKey = this.tableStorageService.sortKey;\r\n  private sortDirection = this.tableStorageService.sortDirection;\r\n\r\n  public updateSort(column: string | number) {\r\n    const newDirection =\r\n      this.sortKey() === column && this.sortDirection() === 'asc'\r\n        ? 'desc'\r\n        : 'asc';\r\n\r\n    this.tableStorageService.setCurrentPage(0);\r\n    this.tableStorageService.setSortKey(column);\r\n    this.tableStorageService.setSortDirection(newDirection);\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  computed,\r\n  contentChild,\r\n  effect,\r\n  EventEmitter,\r\n  inject,\r\n  input,\r\n  model,\r\n  OnChanges,\r\n  Output,\r\n  output,\r\n  signal,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  untracked,\r\n  ViewEncapsulation,\r\n  DestroyRef,\r\n  ChangeDetectionStrategy,\r\n  HostListener,\r\n  OnInit,\r\n  Injector,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Subject } from 'rxjs';\r\nimport { TableUtilityService } from '../services/table-utility.service';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { TablePaginatorComponent } from '../table-paginator/table-paginator.component';\r\nimport { BodyTemplateDirective } from '../directives/body-template.directive';\r\nimport { ExpandTemplateDirective } from '../directives/expand-template.directive';\r\nimport { HeaderTemplateDirective } from '../directives/header-template.directive';\r\nimport { KeyMappingPipe } from '../pipes/key-mapping.pipe';\r\nimport { ButtonModule } from '../../button';\r\nimport { IconModule } from '../../icons';\r\nimport { TbodyCellComponent } from '../tbody-cell/tbody-cell.component';\r\nimport { PopupTemplateDirective } from '../directives/popup-template.directive';\r\nimport { TableFilterComponent } from '../table-filter/table-filter.component';\r\nimport { TableIntlService } from '../services/table-intl.service';\r\nimport { TableActions, TableLayout } from '../models';\r\nimport { TableSortService } from '../services/table-sort.service';\r\nimport { TableEditService } from '../services/table-edit.service';\r\n\r\n@Component({\r\n  selector: 'fu-table',\r\n  imports: [\r\n    CommonModule,\r\n    ButtonModule,\r\n    IconModule,\r\n    TablePaginatorComponent,\r\n    TableFilterComponent,\r\n    TbodyCellComponent,\r\n    KeyMappingPipe,\r\n  ],\r\n  templateUrl: './table.component.html',\r\n  styleUrl: './table.component.scss',\r\n  providers: [\r\n    TableUtilityService,\r\n    TableStorageService,\r\n    TableSortService,\r\n    TableEditService,\r\n  ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TableComponent<T extends object> implements OnChanges, OnInit {\r\n  public dataSource = input.required<T[]>();\r\n  public localStorageKey = input<string, string>('', {\r\n    transform: val => `fu-table-${val}`,\r\n  });\r\n\r\n  public tableLayout = input<TableLayout>('auto');\r\n  public firstPageOnInit = input<boolean>(false);\r\n  public pageSizeOptions = input<number[]>([10, 15, 20]);\r\n  public isLoading = input<boolean>(false);\r\n  public totalCount = input<number>();\r\n  public serverPagination = input<boolean>(false);\r\n  public stripedRows = input<boolean>(true);\r\n  public expandable = input<boolean>(false);\r\n  public expanded = input<boolean>(false);\r\n  public showFilter = input<boolean>(false);\r\n  public showPaginator = input<boolean>(true);\r\n  public quickPageJump = input<boolean>(true);\r\n  public popupOffset = input<number>(0);\r\n  public tableTitle = input<string>();\r\n  public variant = input<'outlined' | 'raised'>('raised');\r\n  public sideBar = input<boolean>(false);\r\n\r\n  public setsFirstPage$ = input<Subject<void>>();\r\n  public expandIndex = model<number | null>(null);\r\n\r\n  public sidebarTemplate = contentChild<TemplateRef<any>>('sidebarTemplate');\r\n  public noRecordsTemplate =\r\n    contentChild<TemplateRef<any>>('noRecordsTemplate');\r\n  public footerTemplate = contentChild<TemplateRef<any>>('footerTemplate');\r\n  public popupTemplate = contentChild(PopupTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public expandTemplate = contentChild(ExpandTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public bodyTemplate = contentChild.required(BodyTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public headerTemplate = contentChild.required(HeaderTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n\r\n  public isInitLoad = signal<boolean>(true);\r\n  public filteredData = signal<T[]>([]);\r\n  public sortedData = signal<T[]>([]);\r\n\r\n  private destroyRef = inject(DestroyRef);\r\n  private tableIntl = inject(TableIntlService);\r\n  private tableUtilityService = inject(TableUtilityService);\r\n  private tableStorageService = inject(TableStorageService);\r\n  public injector = inject(Injector);\r\n\r\n  public noRecordsText = this.tableIntl.noRecordsText;\r\n  public columnCount = this.tableUtilityService.headerCount;\r\n  public pageSize = this.tableStorageService.pageSize;\r\n  public currentPage = this.tableStorageService.currentPage;\r\n  public searchText = this.tableStorageService.searchText;\r\n\r\n  private sortColumn = this.tableStorageService.sortKey;\r\n  private sortDirection = this.tableStorageService.sortDirection;\r\n\r\n  public totalItems = computed(\r\n    () => this.totalCount() || this.filteredData().length\r\n  );\r\n\r\n  public expandedRowIndex: number | null = null;\r\n  public arrayFromSize = computed(() =>\r\n    Array.from({ length: this.pageSize() })\r\n  );\r\n  public arrayFromCols = computed(() =>\r\n    Array.from({ length: this.expandColumnSpan() })\r\n  );\r\n  public expandColumnSpan = computed(() => {\r\n    if (this.expandable()) {\r\n      return this.columnCount() + 1;\r\n    } else {\r\n      return this.columnCount();\r\n    }\r\n  });\r\n\r\n  public hoveredRow = signal<T | null>(null);\r\n  public popupPosition = signal({ top: 0, left: 0, right: 0 });\r\n  private isMobile = signal<boolean>(false);\r\n  private hidePopupTimeout: ReturnType<typeof setTimeout> | undefined =\r\n    undefined;\r\n  private isPopupReady = computed(\r\n    () => this.popupTemplate() && !this.isMobile() && !this.isLoading()\r\n  );\r\n\r\n  public tableActions = output<TableActions>();\r\n  @Output() public selectRowAction = new EventEmitter<T>();\r\n\r\n  tableActionsEffect = effect(() => {\r\n    if (this.serverPagination()) {\r\n      this.emitTableActions();\r\n    } else {\r\n      this.toggleSort();\r\n    }\r\n  });\r\n\r\n  loadingEffect = effect(() => {\r\n    this.tableUtilityService.setIsLoading(this.isLoading());\r\n    this.watchInitLoad();\r\n\r\n    untracked(() => {\r\n      this.expandedRowIndex = null;\r\n      this.expandIndex.set(null);\r\n    });\r\n  });\r\n\r\n  public ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['localStorageKey']) {\r\n      this.tableStorageService.setLocalStorageKey(this.localStorageKey());\r\n    }\r\n\r\n    if (changes['expanded']) {\r\n      this.tableUtilityService.getExpanded(this.expanded());\r\n    }\r\n\r\n    if (changes['dataSource']) {\r\n      if (this.serverPagination()) {\r\n        this.loadServerData();\r\n      } else {\r\n        this.filteredData.set([...this.dataSource()]);\r\n      }\r\n    }\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.isMobile.set(window.innerWidth < 900);\r\n\r\n    this.setsFirstPage$()\r\n      ?.pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe(() => {\r\n        this.tableStorageService.setCurrentPage(0);\r\n      });\r\n\r\n    if (this.firstPageOnInit()) {\r\n      this.tableStorageService.setCurrentPage(0);\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize') public onResize() {\r\n    const mobile = window.innerWidth < 900;\r\n    this.isMobile.set(mobile);\r\n  }\r\n\r\n  public toggleRow(row: T, index: number = 0): void {\r\n    if (this.isLoading()) return;\r\n    if (this.expandable()) {\r\n      if (this.expandedRowIndex === index) {\r\n        this.expandedRowIndex = null;\r\n      } else {\r\n        this.expandedRowIndex = index;\r\n      }\r\n      return;\r\n    }\r\n\r\n    this.selectRowAction.emit(row);\r\n  }\r\n\r\n  private filterData() {\r\n    const filteredData = this.dataSource().filter(item =>\r\n      Object.values(item).some((value: unknown) => {\r\n        if (typeof value !== 'string' && typeof value !== 'number') {\r\n          return;\r\n        }\r\n\r\n        return value\r\n          .toString()\r\n          .toLowerCase()\r\n          .includes(this.searchText().toLowerCase());\r\n      })\r\n    );\r\n\r\n    this.filteredData.set(filteredData);\r\n  }\r\n\r\n  private sortData() {\r\n    if (!this.sortDirection()) {\r\n      this.filterData();\r\n      return;\r\n    }\r\n\r\n    this.filterData();\r\n\r\n    this.filteredData().sort((a, b) => {\r\n      const valA = a[this.sortColumn() as keyof typeof a];\r\n      const valB = b[this.sortColumn() as keyof typeof b];\r\n\r\n      if (typeof valA === 'number' && typeof valB === 'number') {\r\n        return this.sortDirection() === 'asc' ? valA - valB : valB - valA;\r\n      }\r\n\r\n      return this.sortDirection() === 'asc'\r\n        ? String(valA).localeCompare(String(valB))\r\n        : String(valB).localeCompare(String(valA));\r\n    });\r\n  }\r\n\r\n  private paginateData() {\r\n    this.expandedRowIndex = null;\r\n    this.expandIndex.set(null);\r\n\r\n    const startIndex = this.currentPage() * this.pageSize();\r\n    const endIndex = startIndex + this.pageSize();\r\n    const sortedData = this.filteredData().slice(startIndex, endIndex);\r\n    this.sortedData.set(sortedData);\r\n  }\r\n\r\n  private loadServerData(): void {\r\n    this.sortedData.set([...this.dataSource()]);\r\n  }\r\n\r\n  private watchInitLoad(): void {\r\n    if (this.isInitLoad()) {\r\n      this.isInitLoad.set(this.isLoading());\r\n    }\r\n  }\r\n\r\n  private emitTableActions(): void {\r\n    this.tableActions.emit({\r\n      sortDirection: this.sortDirection(),\r\n      sortKey: this.sortColumn(),\r\n      pageSize: this.pageSize(),\r\n      page: this.currentPage(),\r\n    });\r\n  }\r\n\r\n  private toggleSort(): void {\r\n    this.sortData();\r\n    this.paginateData();\r\n  }\r\n\r\n  public onRowHover(event: MouseEvent, row: T): void {\r\n    if (!this.isPopupReady()) return;\r\n    clearTimeout(this.hidePopupTimeout);\r\n    this.hoveredRow.set(row);\r\n\r\n    const rowElement = (event.target as HTMLElement).closest('tr');\r\n    if (rowElement) {\r\n      const rect = rowElement.getBoundingClientRect();\r\n\r\n      this.popupPosition.set({\r\n        top: rect.top + window.scrollY,\r\n        left: rect.right + window.scrollX,\r\n        right: window.innerWidth - rect.right + this.popupOffset(),\r\n      });\r\n    }\r\n  }\r\n\r\n  public onRowLeave(): void {\r\n    if (!this.isPopupReady()) return;\r\n    this.hidePopupTimeout = setTimeout(() => {\r\n      this.hoveredRow.set(null);\r\n    }, 100);\r\n  }\r\n\r\n  public onPopupHover(): void {\r\n    clearTimeout(this.hidePopupTimeout);\r\n  }\r\n\r\n  public onPopupLeave(): void {\r\n    this.hidePopupTimeout = setTimeout(() => {\r\n      this.hoveredRow.set(null);\r\n    }, 100);\r\n  }\r\n\r\n  public onExpandHover(): void {\r\n    if (!this.isPopupReady()) return;\r\n    this.hoveredRow.set(null);\r\n  }\r\n}\r\n","<div class=\"fu-table-wrapper\" [attr.outlined]=\"variant() === 'outlined'\">\r\n  <!-- Search Filter -->\r\n  @if (showFilter()) {\r\n    <fu-table-filter [title]=\"tableTitle()\" />\r\n  } @else if (tableTitle()) {\r\n    <div style=\"margin-bottom: 12px\">\r\n      <h3>{{ tableTitle() }}</h3>\r\n    </div>\r\n  }\r\n\r\n  <!-- Table -->\r\n  <table [attr.role]=\"'table'\" [style.table-layout]=\"tableLayout()\">\r\n    <thead [attr.role]=\"'rowgroup'\">\r\n      <tr [attr.role]=\"'row'\">\r\n        @if (expandable()) {\r\n          <th class=\"fu-expand-head\"></th>\r\n        }\r\n        <ng-container\r\n          *ngTemplateOutlet=\"\r\n            headerTemplate();\r\n            context: { $implicit: dataSource()[0] | keyMapping }\r\n          \"\r\n        />\r\n      </tr>\r\n    </thead>\r\n\r\n    <tbody [attr.role]=\"'rowgroup'\">\r\n      @if (sideBar()) {\r\n        <div class=\"fu-sidebar\">\r\n          <ng-container *ngTemplateOutlet=\"sidebarTemplate() || null\" />\r\n        </div>\r\n      }\r\n\r\n      @if (isInitLoad()) {\r\n        <ng-container *ngTemplateOutlet=\"initLoadTemplate\" />\r\n      } @else {\r\n        @for (row of sortedData(); track $index; let odd = $odd) {\r\n          <tr\r\n            [attr.outlined]=\"variant() === 'outlined'\"\r\n            [attr.role]=\"'row'\"\r\n            class=\"fu-body-row\"\r\n            [ngClass]=\"{\r\n              striped: stripedRows() && odd,\r\n              hoverable: expandable() || selectRowAction.observed,\r\n            }\"\r\n            (mouseenter)=\"onRowHover($event, row)\"\r\n            (mouseleave)=\"onRowLeave()\"\r\n            (click)=\"toggleRow(row, $index)\"\r\n          >\r\n            @if (expandable()) {\r\n              <td\r\n                class=\"fu-expand-cell\"\r\n                [attr.data-expand]=\"expandedRowIndex === $index\"\r\n              >\r\n                <fu-icon size=\"16px\" iconName=\"chevronRight\" />\r\n              </td>\r\n            }\r\n            <ng-container\r\n              *ngTemplateOutlet=\"\r\n                bodyTemplate();\r\n                context: {\r\n                  $implicit: row,\r\n                  index: $index,\r\n                  keys: row | keyMapping,\r\n                }\r\n              \"\r\n            />\r\n          </tr>\r\n\r\n          @if (\r\n            (expandable() && expandedRowIndex === $index) ||\r\n            expandIndex() === $index ||\r\n            expanded()\r\n          ) {\r\n            <tr\r\n              class=\"fu-expand-row\"\r\n              [ngClass]=\"{\r\n                striped: stripedRows() && odd && expanded(),\r\n              }\"\r\n              [attr.expanded]=\"expanded()\"\r\n              (mouseenter)=\"onExpandHover()\"\r\n            >\r\n              <td [attr.colspan]=\"expandColumnSpan()\">\r\n                @if (isLoading() && expanded()) {\r\n                  <span class=\"fu-skeleton-loader\"></span>\r\n                } @else {\r\n                  <ng-container\r\n                    *ngTemplateOutlet=\"\r\n                      expandTemplate() || null;\r\n                      context: { $implicit: row, index: $index }\r\n                    \"\r\n                  />\r\n                }\r\n              </td>\r\n            </tr>\r\n          }\r\n        } @empty {\r\n          <tr class=\"fu-empty-row\">\r\n            <td [attr.colspan]=\"expandColumnSpan()\">\r\n              <ng-container\r\n                *ngTemplateOutlet=\"\r\n                  noRecordsTemplate() || defaultNoRecordsTemplate\r\n                \"\r\n              />\r\n            </td>\r\n          </tr>\r\n        }\r\n      }\r\n    </tbody>\r\n  </table>\r\n\r\n  @if (footerTemplate()) {\r\n    <div class=\"fu-table-footer\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          footerTemplate() || null;\r\n          context: { $implicit: sortedData() }\r\n        \"\r\n      />\r\n    </div>\r\n  }\r\n\r\n  @if (showPaginator()) {\r\n    <fu-table-paginator\r\n      [dataLenght]=\"totalItems()\"\r\n      [quickPageJump]=\"quickPageJump()\"\r\n      [pageSizeOptions]=\"pageSizeOptions()\"\r\n    />\r\n  }\r\n</div>\r\n\r\n@if (hoveredRow()) {\r\n  <div\r\n    class=\"fu-action-popup\"\r\n    [style.top.px]=\"popupPosition().top\"\r\n    [style.right.px]=\"popupPosition().right\"\r\n    (mouseenter)=\"onPopupHover()\"\r\n    (mouseleave)=\"onPopupLeave()\"\r\n  >\r\n    <ng-container\r\n      *ngTemplateOutlet=\"\r\n        popupTemplate() || null;\r\n        context: { $implicit: hoveredRow() }\r\n      \"\r\n    />\r\n  </div>\r\n}\r\n\r\n<ng-template #defaultNoRecordsTemplate>\r\n  <div class=\"fu-no-records\">\r\n    <svg\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      width=\"24\"\r\n      height=\"24\"\r\n      viewBox=\"0 0 24 24\"\r\n    >\r\n      <path\r\n        fill=\"none\"\r\n        stroke=\"currentColor\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n        stroke-width=\"1.5\"\r\n        d=\"M12 8v4m0 4.01l.01-.011M9 3H4v3m0 5v2m16-2v2M15 3h5v3M9 21H4v-3m11 3h5v-3\"\r\n      />\r\n    </svg>\r\n    <p>{{ noRecordsText() }}</p>\r\n  </div>\r\n</ng-template>\r\n\r\n<ng-template #initLoadTemplate>\r\n  @for (item of arrayFromSize(); track $index) {\r\n    <tr class=\"fu-empty-row\">\r\n      @for (item of arrayFromCols(); track $index) {\r\n        <fu-tbody-cell />\r\n      }\r\n    </tr>\r\n  }\r\n</ng-template>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  effect,\r\n  ElementRef,\r\n  inject,\r\n  input,\r\n  OnInit,\r\n  signal,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { TableSortService } from '../services/table-sort.service';\r\nimport { TableUtilityService } from '../services/table-utility.service';\r\nimport { IconModule } from '../../icons';\r\nimport { CssUnit } from '../models';\r\n\r\n@Component({\r\n  selector: 'fu-thead-cell',\r\n  imports: [CommonModule, IconModule],\r\n  templateUrl: './thead-cell.component.html',\r\n  styleUrl: './thead-cell.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  host: {\r\n    '[attr.role]': '\"columnheader\"',\r\n    '[style.width]': 'width()',\r\n    '[class.sorting]': 'sortKey() !== undefined',\r\n  },\r\n})\r\nexport class TheadCellComponent implements OnInit {\r\n  public headerText = input<string>('');\r\n  public sortKey = input<string | number | undefined>(undefined);\r\n  public width = input<CssUnit>('auto');\r\n\r\n  private tableStorageService = inject(TableStorageService);\r\n  private tableSortService = inject(TableSortService);\r\n  private tableUtilityService = inject(TableUtilityService);\r\n  private elementRef = inject(ElementRef);\r\n\r\n  public sortColumn = this.tableStorageService.sortKey;\r\n  public sortDirection = this.tableStorageService.sortDirection;\r\n\r\n  public cellIndex = signal<number>(-1);\r\n\r\n  initSortEffect = effect(() => {\r\n    this.initSortCell();\r\n  });\r\n\r\n  public ngOnInit(): void {\r\n    const index = this.getIndex();\r\n    this.cellIndex.set(index);\r\n\r\n    this.tableUtilityService.setHeaderText(index, this.headerText());\r\n    this.tableUtilityService.setColumnCount();\r\n  }\r\n\r\n  public toogleSort() {\r\n    this.tableUtilityService.setSortCellIndex(this.cellIndex());\r\n    this.tableSortService.updateSort(this.sortKey()!);\r\n  }\r\n\r\n  private initSortCell(): void {\r\n    if (this.sortColumn() === this.sortKey()) {\r\n      this.tableUtilityService.setSortCellIndex(this.cellIndex());\r\n    }\r\n  }\r\n\r\n  private getIndex(): number {\r\n    const parent = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n    return Array.from(parent.children).indexOf(this.elementRef.nativeElement);\r\n  }\r\n}\r\n","<div\r\n  class=\"fu-header-cell\"\r\n  (click)=\"toogleSort()\"\r\n  [ngClass]=\"{ disabled: !sortKey() }\"\r\n>\r\n  <span class=\"fu-header-text\">{{ headerText() }} </span>\r\n\r\n  @if (sortKey()) {\r\n    @if (sortColumn() === sortKey()) {\r\n      @switch (sortDirection()) {\r\n        @case ('asc') {\r\n          <fu-icon size=\"1rem\" strokeWidth=\"2.5\" iconName=\"sortAsc\" />\r\n        }\r\n        @case ('desc') {\r\n          <fu-icon size=\"1rem\" strokeWidth=\"2.5\" iconName=\"sortDesc\" />\r\n        }\r\n        @default {\r\n          <fu-icon size=\"1rem\" color=\"gray\" iconName=\"sort\" />\r\n        }\r\n      }\r\n    } @else {\r\n      <fu-icon size=\"1rem\" color=\"gray\" iconName=\"sort\" />\r\n    }\r\n  }\r\n\r\n  <span class=\"fu-header-cell-content\">\r\n    <ng-content />\r\n  </span>\r\n</div>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  effect,\r\n  ElementRef,\r\n  EventEmitter,\r\n  inject,\r\n  input,\r\n  OnDestroy,\r\n  Output,\r\n  signal,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { TableUtilityService } from '../services/table-utility.service';\r\nimport { TableEditService } from '../services/table-edit.service';\r\nimport { IconModule } from '../../icons';\r\nimport { ButtonModule } from '../../button';\r\n\r\n@Component({\r\n  selector: 'fu-tbody-actions',\r\n  imports: [IconModule, ButtonModule],\r\n  templateUrl: './tbody-actions.component.html',\r\n  styleUrl: './tbody-actions.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  host: {\r\n    '[attr.role]': '\"cell\"',\r\n  },\r\n})\r\nexport class TbodyActionsComponent<T extends object> implements OnDestroy {\r\n  public editRowData = input<T>();\r\n  public disabled = input<boolean>(false);\r\n\r\n  private tableUtilityService = inject(TableUtilityService);\r\n  private tableEditService = inject(TableEditService);\r\n  private elementRef = inject(ElementRef);\r\n\r\n  public isLoading = this.tableUtilityService.isLoading;\r\n  public editIndex = this.tableEditService.editIndex;\r\n  public rowIndex = signal<number>(-1);\r\n\r\n  @Output() public editSaveAction = new EventEmitter<T>();\r\n  @Output() public deleteAction = new EventEmitter<void>();\r\n\r\n  cancelEditEffect = effect(() => {\r\n    if (\r\n      this.isLoading() &&\r\n      this.editIndex() !== null &&\r\n      this.tableEditService.savingIndex() < 0\r\n    ) {\r\n      this.tableEditService.stopEditing();\r\n    }\r\n  });\r\n\r\n  public startEditing(event: Event): void {\r\n    const rowIndex = this.getRowIndex();\r\n    this.rowIndex.set(rowIndex);\r\n    this.tableEditService.startEditing(rowIndex);\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public cancelEditing(event: Event): void {\r\n    this.tableEditService.stopEditing();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public saveEditing(event: Event): void {\r\n    this.tableEditService.savingIndex.set(this.rowIndex());\r\n\r\n    const editedValues = this.tableEditService.editValues();\r\n    const updatedRow = { ...this.editRowData(), ...editedValues } as T;\r\n\r\n    this.editSaveAction.emit(updatedRow);\r\n\r\n    this.tableEditService.resetEditValues();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public deleteRow(event: Event): void {\r\n    this.deleteAction.emit();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  private getRowIndex(): number {\r\n    const element = this.elementRef.nativeElement.parentElement as HTMLElement;\r\n    const parent = element.parentElement;\r\n    if (!parent) return -1;\r\n\r\n    const children = Array.from(parent.children);\r\n    return children.indexOf(element);\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.tableEditService.stopEditing();\r\n  }\r\n}\r\n","<div class=\"fu-row-actions\" (click)=\"$event.stopPropagation()\">\r\n  @if (editIndex() === rowIndex()) {\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      raised\r\n      variant=\"text\"\r\n      severity=\"warning\"\r\n      [disabled]=\"isLoading() || disabled()\"\r\n      (click)=\"cancelEditing($event)\"\r\n    >\r\n      <fu-icon iconName=\"cancel\" />\r\n    </button>\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      raised\r\n      variant=\"text\"\r\n      severity=\"success\"\r\n      [disabled]=\"isLoading() || disabled()\"\r\n      (click)=\"saveEditing($event)\"\r\n    >\r\n      <fu-icon iconName=\"save\" />\r\n    </button>\r\n  } @else if (editSaveAction.observed) {\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      raised\r\n      variant=\"text\"\r\n      [disabled]=\"isLoading() || disabled()\"\r\n      (click)=\"startEditing($event)\"\r\n    >\r\n      <fu-icon iconName=\"edit\" />\r\n    </button>\r\n  }\r\n  @if (editIndex() !== rowIndex() && deleteAction.observed) {\r\n    <button\r\n      fuButton\r\n      iconButton\r\n      raised\r\n      variant=\"text\"\r\n      severity=\"danger\"\r\n      [disabled]=\"isLoading() || disabled()\"\r\n      (click)=\"deleteRow($event)\"\r\n    >\r\n      <fu-icon iconName=\"trash\" />\r\n    </button>\r\n  }\r\n\r\n  <ng-content />\r\n</div>\r\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { TableStorageService } from '../services/table-storage.service';\r\nimport { BodyCellValue } from '../models';\r\n\r\n@Directive({\r\n  selector: '[fuHighlight]',\r\n})\r\nexport class HighlightDirective {\r\n  public fuHighlight = input<BodyCellValue>('');\r\n\r\n  private storageService = inject(TableStorageService);\r\n  private el = inject(ElementRef);\r\n\r\n  private searchText = this.storageService.searchText;\r\n\r\n  highlightEffect = effect(() => {\r\n    this.highlightText();\r\n  });\r\n\r\n  private highlightText() {\r\n    const value = this.fuHighlight();\r\n    if (!this.searchText() || !value) {\r\n      this.el.nativeElement.innerHTML = value;\r\n      return;\r\n    }\r\n\r\n    const regex = new RegExp(`(${this.searchText()})`, 'gi');\r\n    this.el.nativeElement.innerHTML = `${value}`.replace(\r\n      regex,\r\n      '<span class=\"fu-highlight\">$1</span>'\r\n    );\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { TableComponent } from './table/table.component';\r\nimport { TbodyCellComponent } from './tbody-cell/tbody-cell.component';\r\nimport { TheadCellComponent } from './thead-cell/thead-cell.component';\r\nimport { TbodyActionsComponent } from './tbody-actions/tbody-actions.component';\r\nimport { BodyTemplateDirective } from './directives/body-template.directive';\r\nimport { HeaderTemplateDirective } from './directives/header-template.directive';\r\nimport { ExpandTemplateDirective } from './directives/expand-template.directive';\r\nimport { PopupTemplateDirective } from './directives/popup-template.directive';\r\nimport { HighlightDirective } from './directives/highlight.directive';\r\n\r\n/**\r\n * @deprecated DataTableModule is deprecated and will be removed in v1.\r\n * Please migrate to the new - FuTableModule API.\r\n */\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    TableComponent,\r\n    TbodyCellComponent,\r\n    TheadCellComponent,\r\n    TbodyActionsComponent,\r\n    BodyTemplateDirective,\r\n    HeaderTemplateDirective,\r\n    ExpandTemplateDirective,\r\n    PopupTemplateDirective,\r\n    HighlightDirective,\r\n  ],\r\n  exports: [\r\n    TableComponent,\r\n    TbodyCellComponent,\r\n    TheadCellComponent,\r\n    TbodyActionsComponent,\r\n    BodyTemplateDirective,\r\n    HeaderTemplateDirective,\r\n    ExpandTemplateDirective,\r\n    PopupTemplateDirective,\r\n    HighlightDirective,\r\n  ],\r\n})\r\nexport class DataTableModule {}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n  Component,\r\n  contentChild,\r\n  input,\r\n  output,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { IconModule } from '../../icons';\r\nimport { ButtonModule } from '../../button';\r\nimport { TreeNode } from '../models';\r\n\r\n@Component({\r\n  selector: 'fu-tree',\r\n  imports: [NgTemplateOutlet, ButtonModule, IconModule],\r\n  templateUrl: './tree.component.html',\r\n  styleUrl: './tree.component.scss',\r\n})\r\nexport class TreeComponent {\r\n  public dataSource = input.required<TreeNode[]>();\r\n\r\n  public onExpand = output<TreeNode>();\r\n  public onCollapse = output<TreeNode>();\r\n  public onSelect = output<TreeNode>();\r\n\r\n  public actionTemplate = contentChild<TemplateRef<any>>('actionTemplate');\r\n\r\n  public toggleExpand(event: Event, item: TreeNode) {\r\n    event.stopPropagation();\r\n    item.isExpanded = !item.isExpanded;\r\n\r\n    this.emitEvents(item);\r\n\r\n    if (item.hasChildren && item.children) {\r\n      item.children.forEach(sub => {\r\n        sub.isExpanded = false;\r\n      });\r\n    }\r\n  }\r\n\r\n  public toggleSelect(item: TreeNode) {\r\n    this.onSelect.emit(item);\r\n  }\r\n\r\n  private emitEvents(item: TreeNode) {\r\n    if (item.isExpanded) {\r\n      this.onExpand.emit(item);\r\n    } else {\r\n      this.onCollapse.emit(item);\r\n    }\r\n  }\r\n}\r\n","<div class=\"fu-tree-container\">\r\n  <ul>\r\n    <ng-container\r\n      *ngTemplateOutlet=\"recursiveList; context: { $implicit: dataSource() }\"\r\n    />\r\n  </ul>\r\n</div>\r\n\r\n<ng-template #recursiveList let-items>\r\n  @for (item of items; track $index) {\r\n    <li>\r\n      <div class=\"fu-tree-item\" (click)=\"toggleSelect(item)\">\r\n        @if (item.hasChildren) {\r\n          <button\r\n            fuButton\r\n            variant=\"text\"\r\n            iconButton\r\n            (click)=\"toggleExpand($event, item)\"\r\n          >\r\n            <fu-icon\r\n              size=\"16px\"\r\n              strokeWidth=\"3px\"\r\n              [class.fu-rotate]=\"item.isExpanded\"\r\n              iconName=\"arrowRight\"\r\n            />\r\n          </button>\r\n        }\r\n\r\n        <span\r\n          [style.margin-left]=\"!item.hasChildren ? '40px' : '0'\"\r\n          class=\"fu-tree-item-text\"\r\n          >{{ item.label }}</span\r\n        >\r\n\r\n        <ng-container\r\n          *ngTemplateOutlet=\"\r\n            actionTemplate() || null;\r\n            context: { $implicit: item }\r\n          \"\r\n        />\r\n      </div>\r\n\r\n      @if (item.hasChildren && item.isExpanded) {\r\n        <ul style=\"padding-left: 16px\">\r\n          <ng-container\r\n            *ngTemplateOutlet=\"\r\n              recursiveList;\r\n              context: { $implicit: item.children }\r\n            \"\r\n          />\r\n        </ul>\r\n      }\r\n    </li>\r\n  }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { TreeComponent } from './tree/tree.component';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [TreeComponent],\r\n  exports: [TreeComponent],\r\n})\r\nexport class TreeModule {}\r\n","import { Directive, input } from '@angular/core';\r\n\r\nexport interface FuTableExpandRowTemplateContext<T extends object> {\r\n  /** The current row object */\r\n  $implicit: T;\r\n\r\n  /** Row index in the rendered table */\r\n  index: number;\r\n\r\n  /** Current search term */\r\n  searchTerm: string;\r\n}\r\n\r\n/**\r\n * Defines a custom expand-row template for a `fu-table`.\r\n *\r\n * The template context exposes:\r\n * - `row` – the current row data\r\n * - `index` – row index\r\n * - `searchTerm` – current search term\r\n *\r\n * ## Typing\r\n * To enable strong typing for `row`, provide the table data using `rowOf`.\r\n * This is used only for type inference and does not affect rendering.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuTableExpandRow let-row  let-index=\"index\">\r\n *   {{ row.name }} {{row.age}}\r\n * </ng-template>\r\n * ```\r\n *\r\n * If `rowOf` is omitted, `row` will be typed as `any`.\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuTableExpandRow]',\r\n})\r\nexport class FuTableExpandRowTemplateDirective<T extends object> {\r\n  /**\r\n   * Provides typing context for the expand row template.\r\n   * Used only for type inference – not consumed at runtime.\r\n   */\r\n  public of = input<T[] | null>(null, {\r\n    alias: 'rowOf',\r\n  });\r\n\r\n  static ngTemplateContextGuard<TContext extends object>(\r\n    _dir: FuTableExpandRowTemplateDirective<TContext>,\r\n    ctx: unknown\r\n  ): ctx is FuTableExpandRowTemplateContext<TContext> {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\ninterface FuTableNoDataTemplateContext {}\r\n\r\n/**\r\n * Defines a custom no data template for a `fu-table`.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuTableNoData >\r\n *   no data available\r\n * </ng-template>\r\n * ```\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuTableNoData]',\r\n})\r\nexport class FuTableNoDataTemplateDirective {\r\n  static ngTemplateContextGuard(\r\n    _dir: FuTableNoDataTemplateDirective,\r\n    ctx: unknown\r\n  ): ctx is FuTableNoDataTemplateContext {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\ninterface FuTableSidebarTemplateContext {}\r\n\r\n/**\r\n * Defines a custom sidebar template for a `fu-table`.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuTableSidebar >\r\n *   custom content\r\n * </ng-template>\r\n * ```\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuTableSidebar]',\r\n})\r\nexport class FuTableSidebarTemplateDirective {\r\n  static ngTemplateContextGuard(\r\n    _dir: FuTableSidebarTemplateDirective,\r\n    ctx: unknown\r\n  ): ctx is FuTableSidebarTemplateContext {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[fuClickOutside]',\r\n})\r\nexport class FuClickOutsideDirective {\r\n  public fuClickOutside = output<void>();\r\n\r\n  constructor(private el: ElementRef) {}\r\n\r\n  @HostListener('document:pointerdown', ['$event'])\r\n  onPointerDown(event: PointerEvent) {\r\n    const target = event.target;\r\n\r\n    if (!(target instanceof Node)) return;\r\n\r\n    if (!this.el.nativeElement.contains(target)) {\r\n      this.fuClickOutside.emit();\r\n    }\r\n  }\r\n\r\n  @HostListener('document:keydown.escape')\r\n  onEscape() {\r\n    this.fuClickOutside.emit();\r\n  }\r\n}\r\n","import { CdkContextMenuTrigger } from '@angular/cdk/menu';\r\nimport { Directive, input } from '@angular/core';\r\n\r\nexport interface FuTableCellContextMenuTemplateContext<T extends object> {\r\n  /** The current value of the cell */\r\n  value: unknown;\r\n\r\n  /** The current row object */\r\n  row: T;\r\n\r\n  /** Column index in the rendered table */\r\n  colIndex: number;\r\n\r\n  /** Row index in the rendered table */\r\n  rowIndex: number;\r\n\r\n  /** The context menu trigger */\r\n  trigger: CdkContextMenuTrigger;\r\n}\r\n\r\n/**\r\n * Defines a custom cell context menu template for a `fu-column`.\r\n *\r\n * The template context exposes:\r\n * - `value` – the current cell value\r\n * - `row` – the current row data\r\n * - `colIndex` – column index\r\n * - `rowIndex` – row index\r\n * - `trigger` – the context menu trigger\r\n *\r\n * ## Typing\r\n * To enable strong typing for `row`, provide the table data using `rowOf`.\r\n * This is used only for type inference and does not affect rendering.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuTableCellContextMenu let-row=\"row\" let-colIndex=\"colIndex\">\r\n *   {{ row.name }}\r\n * </ng-template>\r\n * ```\r\n *\r\n * If `rowOf` is omitted, `row` will be typed as `any`.\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuTableCellContextMenu]',\r\n})\r\nexport class FuTableCellContextMenuTemplateDirective<T extends object> {\r\n  /**\r\n   * Provides typing context for the row context menu template.\r\n   * Used only for type inference – not consumed at runtime.\r\n   */\r\n  public of = input<T[] | null>(null, {\r\n    alias: 'rowOf',\r\n  });\r\n\r\n  static ngTemplateContextGuard<TContext extends object>(\r\n    _dir: FuTableCellContextMenuTemplateDirective<TContext>,\r\n    ctx: unknown\r\n  ): ctx is FuTableCellContextMenuTemplateContext<TContext> {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Prevents click handlers from being triggered.\r\n *\r\n * ## Usage\r\n * ```html\r\n * <button fuStopPropagation>Save</button>\r\n *\r\n * <input fuStopPropagation />\r\n *\r\n * <button fuStopPropagation (click)=\"editRow(row)\">✏️</button>\r\n * ```\r\n *\r\n * ## Notes\r\n * - Does **not** call `preventDefault()`\r\n * - Safe to use on form controls\r\n * - Intended for use inside `fu-table` rows\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuStopPropagation]',\r\n  host: {\r\n    '(click)': '$event.stopPropagation()',\r\n    '(mousedown)': '$event.stopPropagation()',\r\n  },\r\n})\r\nexport class FuStopPropagationDirective {}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[fuHighlight]',\r\n})\r\nexport class FuHighlightDirective {\r\n  fuHighlight = input<any>('');\r\n  fuHighlightTerm = input<string>('');\r\n  fuHighlightActive = input<boolean>(false);\r\n\r\n  private el = inject(ElementRef<HTMLElement>);\r\n\r\n  highlightEffect = effect(() => {\r\n    this.highlightText();\r\n  });\r\n\r\n  private highlightText() {\r\n    const value = this.fuHighlight();\r\n    const term = this.fuHighlightTerm();\r\n\r\n    if (!value) {\r\n      this.el.nativeElement.innerHTML = '';\r\n      return;\r\n    }\r\n\r\n    if (!term) {\r\n      this.el.nativeElement.innerHTML = String(value);\r\n      return;\r\n    }\r\n\r\n    const escaped = term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n    const regex = new RegExp(`(${escaped})`, 'gi');\r\n\r\n    this.el.nativeElement.innerHTML = String(value).replace(regex, match =>\r\n      this.fuHighlightActive()\r\n        ? `<mark class=\"fu-search-highlight active\">${match}</mark>`\r\n        : `<mark class=\"fu-search-highlight\">${match}</mark>`\r\n    );\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  computed,\r\n  input,\r\n  linkedSignal,\r\n  model,\r\n  output,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DatePipe } from '@angular/common';\r\nimport { FuStopPropagationDirective } from '../directives/stop-propagation.directive';\r\nimport { FuFieldType } from '../types';\r\nimport { FuHighlightDirective } from '../directives/highlight.directive';\r\n\r\n@Component({\r\n  selector: 'fu-cell',\r\n  imports: [\r\n    FormsModule,\r\n    DatePipe,\r\n    FuStopPropagationDirective,\r\n    FuHighlightDirective,\r\n  ],\r\n  templateUrl: './cell.component.html',\r\n  styleUrl: './cell.component.scss',\r\n})\r\nexport class FuCellComponent {\r\n  public value = model<any>();\r\n\r\n  public id = input<string>();\r\n  public type = input<FuFieldType>();\r\n  public editing = input<boolean>(false);\r\n  public editable = input<boolean>(false);\r\n  public searchTerm = input<string>('');\r\n  public activeMatch = input<boolean>(false);\r\n  public loading = input<boolean>(false);\r\n  public searchable = input<boolean>(false);\r\n\r\n  public valueType = computed(() => {\r\n    return this.type() ?? typeof this.value();\r\n  });\r\n\r\n  public dateValue = linkedSignal(() => {\r\n    if (this.type() === 'date') {\r\n      return this.value().toISOString().slice(0, 10);\r\n    }\r\n  });\r\n\r\n  public cellValueChange = output<any>();\r\n\r\n  public dateChange(event: Event): void {\r\n    const input = event.target as HTMLInputElement;\r\n    const value = input.valueAsDate;\r\n    this.cellValueChange.emit(value);\r\n  }\r\n\r\n  public numberChange(value: number): void {\r\n    this.cellValueChange.emit(value);\r\n  }\r\n\r\n  public booleanChange(value: boolean): void {\r\n    this.cellValueChange.emit(value);\r\n  }\r\n\r\n  public textChange(value: string): void {\r\n    this.cellValueChange.emit(value);\r\n  }\r\n}\r\n","@if (editable() && editing()) {\r\n  @switch (valueType()) {\r\n    @case ('number') {\r\n      <input\r\n        type=\"number\"\r\n        [(ngModel)]=\"value\"\r\n        (ngModelChange)=\"numberChange($event)\"\r\n        fuStopPropagation\r\n      />\r\n    }\r\n\r\n    @case ('boolean') {\r\n      <div class=\"fu-checkbox-wrapper\" [class.editing]=\"editing()\">\r\n        <input\r\n          type=\"checkbox\"\r\n          class=\"fu-input-checkbox\"\r\n          [(ngModel)]=\"value\"\r\n          [id]=\"id()\"\r\n          (ngModelChange)=\"booleanChange($event)\"\r\n        />\r\n        <svg><use xlink:href=\"#fu-checkmark\" /></svg>\r\n        <label [for]=\"id()\"></label>\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n          <symbol id=\"fu-checkmark\" viewBox=\"0 0 24 24\">\r\n            <path\r\n              stroke-linecap=\"round\"\r\n              stroke-miterlimit=\"10\"\r\n              fill=\"none\"\r\n              d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n            ></path>\r\n          </symbol>\r\n        </svg>\r\n      </div>\r\n    }\r\n\r\n    @case ('date') {\r\n      <input\r\n        type=\"date\"\r\n        [(ngModel)]=\"dateValue\"\r\n        (change)=\"dateChange($event)\"\r\n        fuStopPropagation\r\n      />\r\n    }\r\n\r\n    @case ('string') {\r\n      <input\r\n        type=\"text\"\r\n        [(ngModel)]=\"value\"\r\n        (ngModelChange)=\"textChange($event)\"\r\n        fuStopPropagation\r\n      />\r\n    }\r\n\r\n    @case ('text') {\r\n      <input\r\n        type=\"text\"\r\n        [(ngModel)]=\"value\"\r\n        (ngModelChange)=\"textChange($event)\"\r\n        fuStopPropagation\r\n      />\r\n    }\r\n  }\r\n} @else {\r\n  <div>\r\n    @switch (valueType()) {\r\n      @case ('date') {\r\n        <span>{{ value() | date }}</span>\r\n      }\r\n\r\n      @case ('text') {\r\n        <span\r\n          [fuHighlight]=\"value()\"\r\n          [fuHighlightTerm]=\"searchTerm()\"\r\n          [fuHighlightActive]=\"activeMatch()\"\r\n        ></span>\r\n      }\r\n\r\n      @case ('number') {\r\n        <span\r\n          [fuHighlight]=\"value()\"\r\n          [fuHighlightTerm]=\"searchTerm()\"\r\n          [fuHighlightActive]=\"activeMatch()\"\r\n        ></span>\r\n      }\r\n\r\n      @case ('boolean') {\r\n        <div class=\"fu-checkbox-wrapper fu-checkbox-disabled\">\r\n          <input\r\n            type=\"checkbox\"\r\n            class=\"fu-input-checkbox\"\r\n            disabled\r\n            [checked]=\"value()\"\r\n          />\r\n          <svg><use xlink:href=\"#fu-checkmark\" /></svg>\r\n          <label></label>\r\n          <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none\">\r\n            <symbol id=\"fu-checkmark\" viewBox=\"0 0 24 24\">\r\n              <path\r\n                stroke-linecap=\"round\"\r\n                stroke-miterlimit=\"10\"\r\n                fill=\"none\"\r\n                d=\"M22.9 3.7l-15.2 16.6-6.6-7.1\"\r\n              ></path>\r\n            </symbol>\r\n          </svg>\r\n        </div>\r\n      }\r\n\r\n      @default {\r\n        <span\r\n          [fuHighlight]=\"value()\"\r\n          [fuHighlightTerm]=\"searchTerm()\"\r\n          [fuHighlightActive]=\"activeMatch()\"\r\n        ></span>\r\n      }\r\n    }\r\n  </div>\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class FuTableIntlService {\r\n  public searchPlaceholder = signal<string>('Search...');\r\n  public visible = signal<string>('visible');\r\n\r\n  public previous = signal<string>('Previous');\r\n  public next = signal<string>('Next');\r\n\r\n  public noEntries = signal<string>('No entries');\r\n  public noData = signal<string>('No data available');\r\n\r\n  public responsiveLabel = signal<string>('Responsive');\r\n  public scrollableLabel = signal<string>('Scrollable');\r\n  public lockHeaderLabel = signal<string>('Lock header');\r\n  public lockLeftLabel = signal<string>('Lock left column');\r\n  public lockRightLabel = signal<string>('Lock right column');\r\n\r\n  public pageLabel = signal<string>('Page');\r\n  public ofLabel = signal<string>('of');\r\n\r\n  public entriesLabel = (first: number, last: number, total: number) =>\r\n    `${first} to ${last} of ${total} entries`;\r\n}\r\n","import { Directive, HostBinding, input } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'button[fuTButton], a[fuTButton]',\r\n})\r\nexport class FuTButtonDirective {\r\n  public variant = input<'default' | 'icon'>('default');\r\n  public severity = input<'primary' | 'warning' | 'danger' | 'success' | null>(\r\n    null\r\n  );\r\n  public loading = input(false);\r\n  public disabled = input(false);\r\n\r\n  @HostBinding('class')\r\n  get classes() {\r\n    return {\r\n      'fu-button': true,\r\n      [`fu-button--${this.variant()}`]: true,\r\n      [`fu-button--${this.severity()}`]: this.severity(),\r\n      'fu-button--loading': this.loading(),\r\n      'fu-button--disabled': this.disabled(),\r\n    };\r\n  }\r\n\r\n  @HostBinding('attr.disabled')\r\n  get isDisabled() {\r\n    return this.disabled() || this.loading() || null;\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\ninterface FuTableToolbarTemplateContext {}\r\n\r\n/**\r\n * Defines a custom toolbar template for a `fu-table`.\r\n * Template rendered above the table content.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuTableToolbar >\r\n *   <button>Custom Toolbar Button</button>\r\n * </ng-template>\r\n * ```\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuTableToolbar]',\r\n})\r\nexport class FuTableToolbarTemplateDirective {\r\n  static ngTemplateContextGuard(\r\n    _dir: FuTableToolbarTemplateDirective,\r\n    ctx: unknown\r\n  ): ctx is FuTableToolbarTemplateContext {\r\n    return true;\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  OnDestroy,\r\n  Component,\r\n  ChangeDetectionStrategy,\r\n  input,\r\n  model,\r\n  inject,\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\n\r\n@Component({\r\n  selector: 'fu-tooltip',\r\n  styles: [\r\n    `\r\n      .fu-tooltip {\r\n        background: var(--fu-text, #333);\r\n        color: var(--fu-surface, #fff);\r\n        padding: 6px 10px;\r\n        border-radius: 4px;\r\n        font-family: var(--fu-font-family, Arial, sans-serif);\r\n        font-size: 12px;\r\n        letter-spacing: 0.5px;\r\n        white-space: pre-line;\r\n        max-width: 240px;\r\n      }\r\n    `,\r\n  ],\r\n  template: `\r\n    <div class=\"fu-tooltip\">\r\n      {{ text() }}\r\n    </div>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FuTooltipComponent {\r\n  public text = model<string>('');\r\n}\r\n\r\n@Directive({\r\n  selector: '[fuTooltip]',\r\n})\r\nexport class FuTooltipDirective implements OnDestroy {\r\n  public fuTooltip = input<string>('');\r\n\r\n  private overlayRef!: OverlayRef;\r\n\r\n  private overlay = inject(Overlay);\r\n  private elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n  @HostListener('mouseenter')\r\n  show() {\r\n    if (!this.fuTooltip()?.trim()) return;\r\n    if (this.overlayRef) return;\r\n\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .flexibleConnectedTo(this.elementRef)\r\n      .withPositions([\r\n        {\r\n          originX: 'center',\r\n          originY: 'top',\r\n          overlayX: 'center',\r\n          overlayY: 'bottom',\r\n          offsetY: -8,\r\n        },\r\n        // fallback (below)\r\n        {\r\n          originX: 'center',\r\n          originY: 'bottom',\r\n          overlayX: 'center',\r\n          overlayY: 'top',\r\n          offsetY: 8,\r\n        },\r\n      ]);\r\n\r\n    this.overlayRef = this.overlay.create({\r\n      positionStrategy,\r\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n      hasBackdrop: false,\r\n    });\r\n\r\n    const tooltipPortal = new ComponentPortal(FuTooltipComponent);\r\n    const tooltipRef = this.overlayRef.attach(tooltipPortal);\r\n\r\n    tooltipRef.instance.text.set(this.fuTooltip());\r\n  }\r\n\r\n  @HostListener('mouseleave')\r\n  hide() {\r\n    this.overlayRef?.dispose();\r\n    this.overlayRef = undefined!;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.overlayRef?.dispose();\r\n  }\r\n}\r\n","import {\r\n  afterRenderEffect,\r\n  Component,\r\n  computed,\r\n  contentChild,\r\n  ElementRef,\r\n  Injector,\r\n  inject,\r\n  input,\r\n  linkedSignal,\r\n  model,\r\n  output,\r\n  signal,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  viewChild,\r\n  effect,\r\n  untracked,\r\n  HostListener,\r\n} from '@angular/core';\r\nimport {\r\n  CdkDragDrop,\r\n  DragDropModule,\r\n  moveItemInArray,\r\n} from '@angular/cdk/drag-drop';\r\nimport { CdkContextMenuTrigger, CdkMenu } from '@angular/cdk/menu';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FuTableExpandRowTemplateDirective } from '../directives/table-expand-row.directive';\r\nimport { FuTableNoDataTemplateDirective } from '../directives/table-no-data.directive';\r\nimport { FuTableSidebarTemplateDirective } from '../directives/table-sidebar.directive';\r\nimport { FuClickOutsideDirective } from '../directives/click-outside.directive';\r\nimport { FuTableCellContextMenuTemplateDirective } from '../directives/table-cell-context-menu.directive';\r\nimport { FuColumnComponent } from '../column/column.component';\r\nimport { FuCellComponent } from '../cell/cell.component';\r\nimport { FuTableIntlService } from '../services/table-intl.service';\r\nimport { FuTButtonDirective } from '../directives/button.directive';\r\nimport {\r\n  FuColumnConfig,\r\n  FuSortDirection,\r\n  FuTableQuery,\r\n  FuUiConfig,\r\n} from '../types';\r\n\r\nimport { FuTableToolbarTemplateDirective } from '../directives/table-toolbar.directive';\r\nimport { FuTooltipDirective } from '../directives/tooltip.directive';\r\n\r\ninterface SearchMatch {\r\n  rowIndex: number;\r\n  column: FuColumnComponent<any>;\r\n}\r\n\r\ntype SidebarPanel =\r\n  | 'columns' // order, visibility\r\n  | 'layout' // scrolling, sticky header, sticky columns\r\n  | 'custom' // user-provided content\r\n  | null;\r\n\r\ninterface PersistedTableState<T> {\r\n  query: FuTableQuery;\r\n  columns: FuColumnConfig<T>[];\r\n  ui: FuUiConfig;\r\n}\r\n/**\r\n * FuTableComponent\r\n *\r\n * A flexible data table displaying rows of type `T` with features including\r\n * pagination, sorting, column visibility/reordering, inline editing,\r\n * row expansion and optional localStorage persistence.\r\n *\r\n * Basic usage:\r\n * ```html\r\n * <fu-table [dataSource]=\"items\" [paginator]=\"true\" (onQueryChanged)=\"load($event)\">\r\n *   <fu-column field=\"id\" header=\"#\" />\r\n *   <fu-column field=\"name\" header=\"Name\" sortable editable />\r\n *   <fu-column field=\"email\" header=\"Email\" />\r\n * </fu-table>\r\n * ```\r\n *\r\n * See the `FuColumnComponent` for column-level configuration and templating.\r\n *\r\n * @template T - row object type\r\n */\r\n\r\n@Component({\r\n  selector: 'fu-table',\r\n  imports: [\r\n    CommonModule,\r\n    FuCellComponent,\r\n    FormsModule,\r\n    DragDropModule,\r\n    FuClickOutsideDirective,\r\n    FuTooltipDirective,\r\n    CdkContextMenuTrigger,\r\n    FuTButtonDirective,\r\n    CdkMenu,\r\n  ],\r\n  templateUrl: './table.component.html',\r\n  styleUrl: './table.component.scss',\r\n})\r\nexport class FuTableComponent<T extends object> {\r\n  /**\r\n   * The table's data source.\r\n   * Required input that provides the array of objects to display in the fu-table.\r\n   *\r\n   */\r\n  public dataSource = model.required<T[]>();\r\n\r\n  /**\r\n   * Total number of items available for server-side pagination.\r\n   * When this value exceeds `dataSource.length`, fu-table operates in server-side mode\r\n   * and expects the parent to handle pagination, sorting, and filtering.\r\n   *\r\n   * @default 0\r\n   */\r\n  public totalItems = input<number>(0);\r\n  /**\r\n   * Key for persisting table state (pagination, sorting, columns, UI settings) to localStorage.\r\n   * When provided, fu-table will automatically save and restore its state across sessions.\r\n   *\r\n   * @default undefined\r\n   */\r\n  public stateKey = input<string | undefined, string | undefined>(undefined, {\r\n    transform: val => (val ? `fu:table:${val}` : undefined),\r\n  });\r\n\r\n  /**\r\n   * External column visibility configuration.\r\n   * When provided, this overrides the `visible` property on individual column definitions.\r\n   * Useful for programmatically controlling which columns are displayed.\r\n   *\r\n   * @default []\r\n   * @example\r\n   * ```typescript\r\n   * columnsConfig = [\r\n   *   { field: 'name', visible: true },\r\n   *   { field: 'email', visible: false }\r\n   * ];\r\n   * ```\r\n   */\r\n  public columnsConfig = input<FuColumnConfig<T>[]>([]);\r\n  /**\r\n   * Enables the configuration sidebar panel.\r\n   * When true, displays a button to open a sidebar for managing column order,\r\n   * visibility, and layout settings.\r\n   *\r\n   * @default false\r\n   */\r\n  public configPanel = input<boolean>(false);\r\n\r\n  /**\r\n   * Enables the filter/search panel.\r\n   * When true, displays a search input that filters rows based on column values.\r\n   *\r\n   * @default false\r\n   */\r\n  public filterPanel = input<boolean>(false);\r\n\r\n  /**\r\n   * Enables pagination controls.\r\n   * When true, displays page navigation and items-per-page selector.\r\n   *\r\n   * @default true\r\n   */\r\n  public paginator = input<boolean>(true);\r\n\r\n  /**\r\n   * Loading state indicator.\r\n   * When true, displays loading skeletons instead of table data.\r\n   * Useful for showing loading state during async operations.\r\n   *\r\n   * @default false\r\n   */\r\n  public loading = input<boolean>(false);\r\n\r\n  /**\r\n   * Disables pagination controls while keeping them visible.\r\n   * Useful for temporarily preventing pagination interaction during operations.\r\n   *\r\n   * @default false\r\n   */\r\n  public disablePaginator = input<boolean>(false);\r\n\r\n  /**\r\n   * Trigger to reset pagination to first page.\r\n   * When this input value changes, the fu-table resets `pageIndex` to 0\r\n   * and emits a new query event. Useful for resetting pagination after filter changes.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * resetTrigger = 0;\r\n   * onFilterChange() {\r\n   *   this.resetTrigger++;\r\n   * }\r\n   * ```\r\n   * ```html\r\n   * <fu-table [resetQuery]=\"resetTrigger\">\r\n   * ```\r\n   */\r\n  public resetQuery = input<unknown>();\r\n\r\n  /**\r\n   * When true, resets the query page index to 0 on component initialization.\r\n   *\r\n   * @default false\r\n   */\r\n  public resetQueryOnInit = input<boolean>(false);\r\n\r\n  /**\r\n   * Enables responsive mode.\r\n   * When true, fu-table adapts its layout for mobile devices by stacking cell content.\r\n   *\r\n   * @default true\r\n   */\r\n  public responsive = input<boolean>(true);\r\n\r\n  /**\r\n   * Fixed scroll height in vh.\r\n   * When provided, sets a maximum height for the fu-table scroll container.\r\n   * Useful when `scrollable` is true.\r\n   */\r\n  public scrollHeight = input<number>();\r\n\r\n  /**\r\n   * Enables scrollable container with fixed height.\r\n   * When true, the fu-table body becomes scrollable while headers remain fixed.\r\n   *\r\n   * @default true\r\n   */\r\n  public scrollable = input<boolean>(true);\r\n\r\n  /**\r\n   * Makes the header row sticky when scrolling.\r\n   * Requires `scrollable` to be true to take effect.\r\n   *\r\n   * @default false\r\n   */\r\n  public stickyHeader = input<boolean>(false);\r\n\r\n  /**\r\n   * Makes the first column sticky when scrolling horizontally.\r\n   * Useful for keeping identifier columns visible while scrolling.\r\n   *\r\n   * @default false\r\n   */\r\n  public stickyFirstColumn = input<boolean>(false);\r\n\r\n  /**\r\n   * Makes the last column sticky when scrolling horizontally.\r\n   * Useful for keeping action columns visible while scrolling.\r\n   *\r\n   * @default false\r\n   */\r\n  public stickyLastColumn = input<boolean>(false);\r\n\r\n  /**\r\n   * Two-way bound row save state managed via `model`.\r\n   *\r\n   * Use two-way binding from the parent to control and observe the save\r\n   * lifecycle for inline edits: `[(rowState)]=\"rowState\"`.\r\n   * Possible values: `'idle' | 'pending' | 'success' | 'error'`.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <fu-table\r\n   *   [(rowState)]=\"rowState\"\r\n   *   (onRowEditComplete)=\"save($event)\">\r\n   * </fu-table>\r\n   * ```\r\n   * @example\r\n   * ```ts\r\n   *  rowState = signal('idle');\r\n   *\r\n   *  .subscribe({\r\n   *      next: () => this.rowState.set('success'),\r\n   *      error: () => this.rowState.set('error'),\r\n   *  });\r\n   * ```\r\n   */\r\n  public rowState = model<'idle' | 'pending' | 'success' | 'error'>('idle');\r\n\r\n  /**\r\n   * Allows custom CSS classes to be applied to rows.\r\n   */\r\n  public rowClass = input<string | ((row: T, index: number) => string)>();\r\n\r\n  /**\r\n   * Allows inline styles to be applied to rows.\r\n   */\r\n  public rowStyle = input<\r\n    Record<string, string> | ((row: T, index: number) => Record<string, string>)\r\n  >();\r\n\r\n  /**\r\n   * Enables cursor pointer effect on row hover.\r\n   */\r\n  public rowHoverEffect = input<boolean>(false);\r\n\r\n  /**\r\n   * Options for page size selection in the paginator.\r\n   */\r\n  public pageSizeOptions = input<number[]>([5, 10, 15, 20]);\r\n\r\n  /**\r\n   * Initial page size for the paginator.\r\n   */\r\n  public initPageSize = input<number>(10);\r\n\r\n  /**\r\n   * Index of the currently expanded row.\r\n   *\r\n   * Model signal to expand/collapse a row programmatically.\r\n   *\r\n   * @default null\r\n   */\r\n  public expandIndex = model<number | null>(null);\r\n\r\n  public intl = inject(FuTableIntlService);\r\n\r\n  public responsiveConfig = linkedSignal(this.responsive);\r\n  public scrollHeightConfig = linkedSignal(this.scrollHeight);\r\n  public scrollableConfig = linkedSignal(this.scrollable);\r\n  public stickyHeaderConfig = linkedSignal(this.stickyHeader);\r\n  public stickyFirstColumnConfig = linkedSignal(this.stickyFirstColumn);\r\n  public stickyLastColumnConfig = linkedSignal(this.stickyLastColumn);\r\n\r\n  public toolbarTemplate = contentChild(FuTableToolbarTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public sidebarTemplate = contentChild(FuTableSidebarTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public noDataTemplate = contentChild(FuTableNoDataTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public expandRowTemplate = contentChild(FuTableExpandRowTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public cellContextMenuTemplate = contentChild(\r\n    FuTableCellContextMenuTemplateDirective,\r\n    {\r\n      read: TemplateRef,\r\n    }\r\n  );\r\n\r\n  private scrollContainer =\r\n    viewChild<ElementRef<HTMLElement>>('scrollContainer');\r\n\r\n  /**\r\n   * Emitted when the table requests new data (server-side mode).\r\n   * Payload: `FuTableQuery` — `{ pageIndex, pageSize, sortField?, sortDirection? }`.\r\n   */\r\n  public onQueryChanged = output<FuTableQuery>();\r\n\r\n  /**\r\n   * Emitted when an editable cell value changes.\r\n   * Payload: object mapping column field -> new value, e.g. `{ \"user.name\": \"Alice\" }`.\r\n   */\r\n  public onCellEdited = output<Record<string, unknown>>();\r\n\r\n  /**\r\n   * Emitted when columns are reordered or visibility is changed via the UI.\r\n   * Payload: `FuColumnConfig[]` describing current order and visibility.\r\n   */\r\n  public onColReorder = output<FuColumnConfig<T>[]>();\r\n\r\n  /**\r\n   * Emitted when an inline row edit is submitted.\r\n   * Payload: the edited row object of type `T`.\r\n   */\r\n  public onRowEditComplete = output<T>();\r\n\r\n  /**\r\n   * Emitted when a row is clicked/selected.\r\n   * Payload: the clicked row object of type `T`.\r\n   */\r\n  public onRowSelect = output<T>();\r\n\r\n  /**\r\n   * Emitted when a row is deleted.\r\n   * Payload: the deleted row object of type `T`.\r\n   */\r\n  public onRowDelete = output<T>();\r\n\r\n  protected columns = signal<FuColumnComponent<T>[]>([]);\r\n\r\n  protected searchTerm = signal<string>('');\r\n  private originalData = signal<T[]>([]);\r\n\r\n  protected pageIndex = signal<number>(0);\r\n  protected pageSize = linkedSignal<number>(() => this.initPageSize());\r\n\r\n  protected editingRowIndex = signal<number | null>(null);\r\n  protected pendingSaveRowIndex = signal<number | null>(null);\r\n  private originalRowSnapshot = signal<T | null>(null);\r\n\r\n  protected pendingDeleteRowIndex = signal<number | null>(null);\r\n\r\n  protected rowStates = new Map<\r\n    number,\r\n    'idle' | 'pending' | 'success' | 'error'\r\n  >();\r\n\r\n  protected activeMatchIndex = signal<number>(0);\r\n\r\n  protected visibleCount = computed(\r\n    () => this.columns().filter(c => c.visible()).length\r\n  );\r\n  protected initialLoading = computed(\r\n    () => this.loading() && this.dataSource().length === 0\r\n  );\r\n  protected rowsLoading = computed(\r\n    () =>\r\n      this.loading() &&\r\n      this.pendingSaveRowIndex() === null &&\r\n      this.pendingDeleteRowIndex() === null\r\n  );\r\n\r\n  private isServerData = computed<boolean>(\r\n    () => this.totalItems() > this.dataSource().length\r\n  );\r\n  protected entriesLabel = computed<string>(() => {\r\n    const total = this.actualTotalItems();\r\n    if (!total) return this.intl.noEntries();\r\n\r\n    const start = this.pageIndex() * this.pageSize() + 1;\r\n    const end = Math.min((this.pageIndex() + 1) * this.pageSize(), total);\r\n\r\n    return this.intl.entriesLabel(start, end, total);\r\n  });\r\n\r\n  private searchableVisibleColumns = computed(() =>\r\n    this.columns().filter(col => col.searchable() && col.visible())\r\n  );\r\n\r\n  private filteredData = computed(() => {\r\n    const term = this.searchTerm().toLowerCase();\r\n    if (!term) return this.dataSource();\r\n\r\n    const cols = this.searchableVisibleColumns();\r\n\r\n    return this.dataSource().filter(row =>\r\n      cols.some(col => {\r\n        const value = this.getCellValue(row, col.field());\r\n\r\n        return this.toSearchString(value).toLowerCase().includes(term);\r\n      })\r\n    );\r\n  });\r\n\r\n  protected visibleRows = computed(() => {\r\n    const data = this.filteredData();\r\n\r\n    if (this.isServerData()) {\r\n      return data;\r\n    }\r\n\r\n    const start = this.pageIndex() * this.pageSize();\r\n    return data.slice(start, start + this.pageSize());\r\n  });\r\n\r\n  private actualTotalItems = computed(() => {\r\n    if (this.isServerData()) {\r\n      return this.totalItems();\r\n    }\r\n\r\n    return this.filteredData().length;\r\n  });\r\n\r\n  protected skeletonRowCount = computed(() => this.pageSize());\r\n  protected skeletonColumnCount = computed(\r\n    () => this.visibleColumns().length + (this.expandRowTemplate() ? 1 : 0)\r\n  );\r\n  protected totalPages = computed(() =>\r\n    Math.ceil(this.actualTotalItems() / this.pageSize())\r\n  );\r\n  protected visibleColumns = computed(() =>\r\n    this.columns().filter(col => col.visible())\r\n  );\r\n  private activeSort = computed(() => {\r\n    const col = this.columns().find(c => c.sortDirection() !== null);\r\n    if (!col) return null;\r\n\r\n    return {\r\n      field: col.field(),\r\n      sortKey: col.sortField() ?? col.field(),\r\n      direction: col.sortDirection()!,\r\n    };\r\n  });\r\n\r\n  protected searchMatches = computed<SearchMatch[]>(() => {\r\n    const term = this.searchTerm().toLowerCase();\r\n    if (!term) return [];\r\n\r\n    const rows = this.visibleRows();\r\n    const columns = this.searchableVisibleColumns();\r\n\r\n    const matches: SearchMatch[] = [];\r\n\r\n    rows.forEach((row, rowIndex) => {\r\n      columns.forEach(col => {\r\n        const value = this.getCellValue(row, col.field());\r\n\r\n        if (this.toSearchString(value).toLowerCase().includes(term)) {\r\n          matches.push({ rowIndex, column: col });\r\n        }\r\n      });\r\n    });\r\n\r\n    return matches;\r\n  });\r\n\r\n  protected activeSidebarPanel = signal<SidebarPanel>(null);\r\n  protected isSidebarOpen = computed(() => this.activeSidebarPanel() !== null);\r\n  protected isColumnsOpen = computed(\r\n    () => this.activeSidebarPanel() === 'columns'\r\n  );\r\n  protected isLayoutOpen = computed(\r\n    () => this.activeSidebarPanel() === 'layout'\r\n  );\r\n  protected isCustomOpen = computed(\r\n    () => this.activeSidebarPanel() === 'custom'\r\n  );\r\n\r\n  protected searchColTerm = signal<string>('');\r\n  protected filteredColumns = computed(() => {\r\n    const term = this.searchColTerm().toLowerCase().trim();\r\n\r\n    if (!term) return this.columns();\r\n\r\n    return this.columns().filter(\r\n      col =>\r\n        col.description().toLowerCase().includes(term) ||\r\n        col.header().toLowerCase().includes(term)\r\n    );\r\n  });\r\n\r\n  protected filteredHideable = computed(() =>\r\n    this.filteredColumns().filter(c => c.hideable())\r\n  );\r\n\r\n  protected filteredVisibleCount = computed(\r\n    () => this.filteredHideable().filter(c => c.visible()).length\r\n  );\r\n\r\n  protected filteredTotalCount = computed(() => this.filteredHideable().length);\r\n  protected selectAllChecked = computed(\r\n    () =>\r\n      this.filteredTotalCount() > 0 &&\r\n      this.filteredVisibleCount() === this.filteredTotalCount()\r\n  );\r\n\r\n  protected selectAllIndeterminate = computed(\r\n    () =>\r\n      this.filteredVisibleCount() > 0 &&\r\n      this.filteredVisibleCount() < this.filteredTotalCount()\r\n  );\r\n\r\n  // protected rowStylesPerColumn = computed(() => {\r\n  //   const rows = this.visibleRows();\r\n  //   const cols = this.visibleColumns();\r\n  //   const rs = this.rowStyle();\r\n\r\n  //   return rows.map((row, rowIndex) =>\r\n  //     cols.map(col => {\r\n  //       if (col.isAction()) return null;\r\n\r\n  //       return typeof rs === 'function' ? rs(row, rowIndex) : (rs ?? null);\r\n  //     })\r\n  //   );\r\n  // });\r\n\r\n  protected resolvedRowStyles = computed(() => {\r\n    this.editingRowIndex();\r\n    const rows = this.visibleRows();\r\n    const rs = this.rowStyle();\r\n\r\n    return rows.map((row, i) =>\r\n      typeof rs === 'function' ? rs(row, i) : (rs ?? null)\r\n    );\r\n  });\r\n\r\n  protected resolvedRowClasses = computed(() => {\r\n    this.editingRowIndex();\r\n    const rows = this.visibleRows();\r\n    const rc = this.rowClass();\r\n\r\n    if (!rows?.length) return [];\r\n\r\n    return rows.map((row, i) =>\r\n      typeof rc === 'function' ? rc(row, i) : (rc ?? '')\r\n    );\r\n  });\r\n\r\n  protected toggleFilteredSelection(event: any): void {\r\n    const checked = event.target.checked;\r\n    const min = 3;\r\n\r\n    if (checked) {\r\n      // select all filtered\r\n      this.filteredHideable().forEach(col => {\r\n        if (!col.visible()) col.visible.set(true);\r\n      });\r\n    } else {\r\n      // deselect filtered but keep minimum visible\r\n      const visibles = this.visibleColumns();\r\n\r\n      this.filteredHideable()\r\n        .filter(col => col.visible())\r\n        .forEach(col => {\r\n          if (visibles.length > min) {\r\n            col.visible.set(false);\r\n          }\r\n        });\r\n    }\r\n\r\n    this.emitColumns();\r\n  }\r\n\r\n  protected persist = afterRenderEffect(() => {\r\n    this.resetLayoutConfig();\r\n    this.scrollableConfig();\r\n    this.stickyHeaderConfig();\r\n    this.stickyFirstColumnConfig();\r\n    this.stickyLastColumnConfig();\r\n\r\n    this.saveState();\r\n  });\r\n\r\n  protected activeMatchKey = signal<string | null>(null);\r\n  protected matchEffect = effect(() => {\r\n    const match = this.searchMatches()[this.activeMatchIndex()];\r\n    this.activeMatchKey.set(\r\n      match ? `${match.rowIndex}:${match.column.field()}` : null\r\n    );\r\n  });\r\n\r\n  protected editStateEffect = effect(() => {\r\n    if (this.pendingSaveRowIndex() !== null && !this.loading()) {\r\n      this.handleRowSaveResult();\r\n    }\r\n  });\r\n\r\n  private deleteInProgress = signal(false);\r\n  protected deleteRowStateEffect = effect(() => {\r\n    const index = this.pendingDeleteRowIndex();\r\n    const loading = this.loading();\r\n\r\n    if (index == null) return;\r\n\r\n    // mark real delete start\r\n    if (loading && !this.deleteInProgress()) {\r\n      this.deleteInProgress.set(true);\r\n      return;\r\n    }\r\n\r\n    // delete finished\r\n    if (!loading && this.deleteInProgress()) {\r\n      this.handleRowDeleteResult();\r\n    }\r\n  });\r\n\r\n  private hasRun = false;\r\n  protected resetQueryEffect = effect(() => {\r\n    this.resetQuery();\r\n\r\n    const shouldEmit = this.hasRun || this.resetQueryOnInit();\r\n\r\n    this.hasRun = true;\r\n\r\n    if (!shouldEmit) return;\r\n\r\n    untracked(() => {\r\n      this.pageIndex.set(0);\r\n      this.emitTableQuery();\r\n    });\r\n  });\r\n\r\n  private columnsInitialized = false;\r\n  protected columnConfigEffect = effect(() => {\r\n    if (this.columnsConfig().length && !this.columnsInitialized) {\r\n      this.columnsInitialized = true;\r\n      return;\r\n    }\r\n\r\n    untracked(() => {\r\n      this.applyColumnsConfig();\r\n    });\r\n  });\r\n\r\n  constructor(public injector: Injector) {}\r\n\r\n  activeCell: any | null = null;\r\n\r\n  public isMobileScreen = signal<boolean>(window.innerWidth < 900);\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  public onResize(event: any): void {\r\n    const screenWidth = event.target.innerWidth;\r\n    const smallScreen = screenWidth < 900;\r\n\r\n    this.isMobileScreen.set(smallScreen);\r\n  }\r\n\r\n  public ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['dataSource']) {\r\n      this.originalData.set([...this.dataSource()]);\r\n    }\r\n  }\r\n\r\n  public ngAfterContentInit() {\r\n    const persisted = this.loadState();\r\n\r\n    // 1️⃣ restore query\r\n    const query = persisted?.query;\r\n    if (query) {\r\n      this.pageIndex.set(query.pageIndex);\r\n      this.pageSize.set(query.pageSize);\r\n      this.searchTerm.set(query.searchTerm ?? '');\r\n      this.restoreSort(query.sortField, query.sortDirection);\r\n      this.applyClientSort();\r\n    }\r\n\r\n    // 2️⃣ restore columns\r\n    const colsConfig = this.columnsConfig().length\r\n      ? this.columnsConfig()\r\n      : persisted?.columns;\r\n\r\n    if (colsConfig) {\r\n      this.applyColumnsConfig(colsConfig);\r\n    }\r\n\r\n    // 🔑 ui settings\r\n    if (persisted?.ui) {\r\n      this.responsiveConfig.set(persisted.ui.responsive);\r\n      this.scrollableConfig.set(persisted.ui.scrollable);\r\n      this.stickyHeaderConfig.set(persisted.ui.stickyHeader);\r\n      this.stickyFirstColumnConfig.set(persisted.ui.stickyFirstColumn);\r\n      this.stickyLastColumnConfig.set(persisted.ui.stickyLastColumn);\r\n    }\r\n\r\n    this.emitTableQuery(!this.resetQueryOnInit());\r\n  }\r\n\r\n  // protected resolveRowStyle(\r\n  //   row: T,\r\n  //   index: number\r\n  // ): Record<string, string> | null {\r\n  //   const rs = this.rowStyle();\r\n\r\n  //   return typeof rs === 'function' ? rs(row, index) : (rs ?? null);\r\n  // }\r\n\r\n  // protected resolveRowClass(row: T, index: number): string | null {\r\n\r\n  //   const rc = this.rowClass();\r\n  //   return typeof rc === 'function' ? rc(row, index) : (rc ?? null);\r\n  // }\r\n\r\n  private resetLayoutConfig(): void {\r\n    if (this.scrollableConfig() === false) {\r\n      this.scrollableConfig.set(false);\r\n      this.stickyHeaderConfig.set(false);\r\n      this.stickyFirstColumnConfig.set(false);\r\n      this.stickyLastColumnConfig.set(false);\r\n    }\r\n  }\r\n\r\n  private loadState(): PersistedTableState<T> | null {\r\n    if (!this.stateKey()) return null;\r\n\r\n    try {\r\n      const raw = localStorage.getItem(this.stateKey()!);\r\n      return raw ? JSON.parse(raw) : null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private saveState(): void {\r\n    if (!this.stateKey()) return;\r\n\r\n    const state: PersistedTableState<T> = {\r\n      query: {\r\n        pageIndex: this.pageIndex(),\r\n        pageSize: this.pageSize(),\r\n        sortField: this.activeSort()?.field,\r\n        sortDirection: this.activeSort()?.direction,\r\n        searchTerm: this.searchTerm(),\r\n      },\r\n      columns: this.columns().map(col => ({\r\n        field: col.field(),\r\n        visible: col.visible(),\r\n      })),\r\n      ui: {\r\n        responsive: this.responsiveConfig(),\r\n        scrollable: this.scrollableConfig(),\r\n        stickyHeader: this.stickyHeaderConfig(),\r\n        stickyFirstColumn: this.stickyFirstColumnConfig(),\r\n        stickyLastColumn: this.stickyLastColumnConfig(),\r\n      },\r\n    };\r\n\r\n    localStorage.setItem(this.stateKey()!, JSON.stringify(state));\r\n  }\r\n\r\n  protected toggleColumnsPanel() {\r\n    this.activeSidebarPanel.update(p => (p === 'columns' ? null : 'columns'));\r\n  }\r\n\r\n  protected toggleLayoutPanel() {\r\n    this.activeSidebarPanel.update(p => (p === 'layout' ? null : 'layout'));\r\n  }\r\n\r\n  protected toggleCustomPanel() {\r\n    this.activeSidebarPanel.update(p => (p === 'custom' ? null : 'custom'));\r\n  }\r\n\r\n  private applyColumnsConfig(\r\n    config: FuColumnConfig<T>[] = this.columnsConfig()\r\n  ) {\r\n    if (!config.length) return;\r\n\r\n    const byField = new Map(this.columns().map(c => [c.field(), c]));\r\n\r\n    const reordered: FuColumnComponent<T>[] = [];\r\n\r\n    for (const cfg of config) {\r\n      const col = byField.get(cfg.field);\r\n      if (!col) continue;\r\n\r\n      col.visible.set(cfg.visible !== false); // default true\r\n      reordered.push(col);\r\n\r\n      byField.delete(cfg.field);\r\n    }\r\n\r\n    // columns not mentioned in config → visible by default\r\n    for (const col of byField.values()) {\r\n      col.visible.set(true);\r\n      reordered.push(col);\r\n    }\r\n\r\n    this.columns.set(reordered);\r\n    this.saveState();\r\n  }\r\n\r\n  protected startEditRow(index: number, event?: Event) {\r\n    event?.stopPropagation();\r\n    this.resetEditRow();\r\n\r\n    this.editingRowIndex.set(index);\r\n    this.originalRowSnapshot.set(structuredClone(this.visibleRows()[index]));\r\n\r\n    this.rowStates.set(index, 'pending');\r\n  }\r\n\r\n  protected saveEditRow(event?: Event) {\r\n    event?.stopPropagation();\r\n    if (this.editingRowIndex() === null) return;\r\n\r\n    const row = this.visibleRows()[this.editingRowIndex()!];\r\n\r\n    this.pendingSaveRowIndex.set(this.editingRowIndex());\r\n    this.editingRowIndex.set(null);\r\n\r\n    this.onRowEditComplete.emit(row);\r\n  }\r\n\r\n  protected cancelEditRow(event?: Event) {\r\n    event?.stopPropagation();\r\n    if (this.editingRowIndex() === null || !this.originalRowSnapshot()) return;\r\n\r\n    Object.assign(\r\n      this.visibleRows()[this.editingRowIndex()!],\r\n      this.originalRowSnapshot()\r\n    );\r\n\r\n    //     this.filteredData.update(data => {\r\n    //   const copy = [...data];\r\n    //   copy[this.editingRowIndex!] = {\r\n    //     ...copy[this.editingRowIndex!],\r\n    //     ...this.originalRowSnapshot,\r\n    //   };\r\n    //   return copy;\r\n    // });\r\n\r\n    // this.rowStates.set(this.editingRowIndex()!, 'idle');\r\n    this.rowStates.clear();\r\n\r\n    this.editingRowIndex.set(null);\r\n    this.originalRowSnapshot.set(null);\r\n  }\r\n\r\n  private resetEditRow(): void {\r\n    this.expandIndex.set(null);\r\n    if (this.editingRowIndex() === null) return;\r\n    this.pendingSaveRowIndex.set(null);\r\n    this.editingRowIndex.set(null);\r\n    this.originalRowSnapshot.set(null);\r\n    this.rowStates.clear();\r\n  }\r\n\r\n  protected deleteRow(index: number, event?: Event): void {\r\n    event?.stopPropagation();\r\n\r\n    const row = this.visibleRows()[index];\r\n    if (!row) return;\r\n\r\n    this.resetEditRow();\r\n    this.pendingDeleteRowIndex.set(index);\r\n    this.deleteInProgress.set(false);\r\n    this.rowState.set('pending');\r\n\r\n    this.onRowDelete.emit(row);\r\n  }\r\n\r\n  private handleRowDeleteResult() {\r\n    const result = this.rowState();\r\n\r\n    if (this.pendingDeleteRowIndex() === null) return;\r\n\r\n    if (result === 'error') {\r\n      this.rowStates.set(this.pendingDeleteRowIndex()!, 'error');\r\n    } else {\r\n      this.rowStates.clear();\r\n    }\r\n\r\n    this.deleteInProgress.set(false);\r\n    this.pendingDeleteRowIndex.set(null);\r\n    this.rowState.set('idle');\r\n  }\r\n\r\n  private handleRowSaveResult() {\r\n    const result = this.rowState();\r\n\r\n    if (this.pendingSaveRowIndex() === null) return;\r\n\r\n    const row = this.visibleRows()[this.pendingSaveRowIndex()!];\r\n\r\n    if (result === 'success') {\r\n      this.rowStates.set(this.pendingSaveRowIndex()!, 'success');\r\n      this.originalRowSnapshot.set(null);\r\n    } else if (result === 'error') {\r\n      Object.assign(row, this.originalRowSnapshot());\r\n      this.rowStates.set(this.pendingSaveRowIndex()!, 'error');\r\n      this.originalRowSnapshot.set(null);\r\n    } else {\r\n      this.originalRowSnapshot.set(null);\r\n      this.rowStates.clear();\r\n    }\r\n\r\n    this.pendingSaveRowIndex.set(null);\r\n  }\r\n\r\n  protected onRowClick(row: T, event: Event): void {\r\n    event.stopPropagation();\r\n    this.onRowSelect.emit(row);\r\n  }\r\n\r\n  protected onEditAnimationEnd(): void {\r\n    this.rowStates.clear();\r\n    this.rowState.set('idle');\r\n  }\r\n\r\n  protected getCellValue(row: T, field: string): unknown {\r\n    if (!field) return null;\r\n\r\n    return field\r\n      .split('.')\r\n      .reduce<Record<string, any>>((acc, key) => acc?.[key], row);\r\n  }\r\n\r\n  protected toggleExpand(index: number, event?: Event): void {\r\n    event?.stopPropagation();\r\n    this.expandIndex.update(i => (i === index ? null : index));\r\n  }\r\n\r\n  protected onSort(col: FuColumnComponent<T>, event?: Event) {\r\n    event?.stopPropagation();\r\n    this.activeMatchIndex.set(0);\r\n\r\n    if (!col.isSortable()) return;\r\n    col.toggleSort();\r\n\r\n    this.columns.update(cols =>\r\n      cols.map(c => {\r\n        if (c.field() !== col.field()) {\r\n          c.sortDirection.set(null);\r\n        }\r\n        return c;\r\n      })\r\n    );\r\n\r\n    this.pageIndex.set(0);\r\n\r\n    if (this.isServerData()) {\r\n      this.emitTableQuery();\r\n    } else {\r\n      this.applyClientSort();\r\n    }\r\n\r\n    this.resetEditRow();\r\n  }\r\n\r\n  private restoreOriginalOrder() {\r\n    this.dataSource.set([...this.originalData()]);\r\n  }\r\n\r\n  private applyClientSort() {\r\n    const sort = this.activeSort();\r\n\r\n    if (!sort) {\r\n      this.restoreOriginalOrder();\r\n      this.saveState();\r\n      return;\r\n    }\r\n\r\n    const { field, direction } = sort;\r\n    const dir = direction === 'asc' ? 1 : -1;\r\n\r\n    this.dataSource.update(data => {\r\n      const sorted = [...data].sort((a: T, b: T) => {\r\n        const av = this.getCellValue(a, field);\r\n        const bv = this.getCellValue(b, field);\r\n        return this.compareValues(av, bv) * dir;\r\n      });\r\n      return sorted;\r\n    });\r\n\r\n    this.saveState();\r\n  }\r\n\r\n  private compareValues(a: unknown, b: unknown): number {\r\n    if (a == null && b == null) return 0;\r\n    if (a == null) return -1;\r\n    if (b == null) return 1;\r\n\r\n    if (typeof a === 'number' && typeof b === 'number') {\r\n      return a - b;\r\n    }\r\n\r\n    return String(a).localeCompare(String(b));\r\n  }\r\n\r\n  private emitTableQuery(emit: boolean = true) {\r\n    if (!emit) return;\r\n    this.onQueryChanged.emit({\r\n      pageIndex: this.pageIndex(),\r\n      pageSize: this.pageSize(),\r\n      sortField: this.activeSort()?.sortKey,\r\n      sortDirection: this.activeSort()?.direction,\r\n    });\r\n\r\n    this.saveState();\r\n  }\r\n\r\n  public registerColumn(col: FuColumnComponent<T>) {\r\n    this.columns.update(cols => [...cols, col]);\r\n  }\r\n\r\n  private setCellValue(row: T, field: string, value: unknown): void {\r\n    const keys = field.split('.');\r\n    const lastKey = keys.pop()!;\r\n\r\n    const target = keys.reduce<Record<string, any>>((acc, key) => {\r\n      acc[key] ??= {};\r\n      return acc[key];\r\n    }, row);\r\n\r\n    target[lastKey] = value;\r\n  }\r\n\r\n  protected onCellChange(row: T, col: FuColumnComponent<T>, value: unknown) {\r\n    this.setCellValue(row, col.field(), value);\r\n\r\n    this.onCellEdited.emit({ [col.field()]: value });\r\n  }\r\n\r\n  private toSearchString(value: unknown): string {\r\n    if (value == null) return '';\r\n\r\n    if (Array.isArray(value)) {\r\n      return value.map(v => this.toSearchString(v)).join(' ');\r\n    }\r\n\r\n    if (typeof value === 'object') {\r\n      return Object.values(value)\r\n        .map(v => this.toSearchString(v))\r\n        .join(' ');\r\n    }\r\n\r\n    return String(value);\r\n  }\r\n\r\n  protected onSearch(value: string) {\r\n    this.searchTerm.set(value.toLowerCase());\r\n    this.activeMatchIndex.set(0);\r\n    this.pageIndex.set(0);\r\n\r\n    this.saveState();\r\n    this.resetEditRow();\r\n  }\r\n\r\n  protected nextMatch() {\r\n    if (!this.searchMatches().length) return;\r\n\r\n    this.activeMatchIndex.set(\r\n      (this.activeMatchIndex() + 1) % this.searchMatches().length\r\n    );\r\n\r\n    this.scrollToActiveMatch();\r\n  }\r\n\r\n  protected prevMatch() {\r\n    if (!this.searchMatches().length) return;\r\n\r\n    this.activeMatchIndex.set(\r\n      (this.activeMatchIndex() - 1 + this.searchMatches().length) %\r\n        this.searchMatches().length\r\n    );\r\n\r\n    this.scrollToActiveMatch();\r\n  }\r\n\r\n  protected scrollToActiveMatch() {\r\n    const match = this.searchMatches()[this.activeMatchIndex()];\r\n    if (!match) return;\r\n\r\n    const row = this.scrollContainer()?.nativeElement.querySelector(\r\n      `tr[data-row-index=\"${match.rowIndex}\"]`\r\n    ) as HTMLElement | null;\r\n\r\n    row?.scrollIntoView({\r\n      behavior: 'smooth',\r\n      block: 'center',\r\n    });\r\n  }\r\n\r\n  protected nextPage() {\r\n    if (this.pageIndex() < this.totalPages() - 1) {\r\n      this.pageIndex.update(val => val + 1);\r\n      this.emitTableQuery();\r\n      this.resetEditRow();\r\n    }\r\n  }\r\n\r\n  protected prevPage() {\r\n    if (this.pageIndex() > 0) {\r\n      this.pageIndex.update(v => v - 1);\r\n      this.emitTableQuery();\r\n      this.resetEditRow();\r\n    }\r\n  }\r\n\r\n  public jumpToPage(input: HTMLInputElement): void {\r\n    const previousValue = this.pageIndex() + 1;\r\n    const inputValue = input.value.trim();\r\n    const value = Number(inputValue);\r\n    const min = Number(input.min);\r\n    const max = Number(input.max);\r\n\r\n    if (isNaN(value) || inputValue !== value.toString()) {\r\n      input.value = previousValue.toString();\r\n      return;\r\n    }\r\n\r\n    if (value < min) {\r\n      input.value = min.toString();\r\n      this.pageIndex.set(min - 1);\r\n    } else if (value > max) {\r\n      input.value = max.toString();\r\n      this.pageIndex.set(max - 1);\r\n    } else {\r\n      this.pageIndex.set(value - 1);\r\n    }\r\n\r\n    this.emitTableQuery();\r\n    this.resetEditRow();\r\n  }\r\n\r\n  public adjustWidth(input: HTMLInputElement) {\r\n    input.style.width = this.calculateWidth(input.value) + 'px';\r\n  }\r\n\r\n  public calculateWidth(value: string | number | null | undefined): number {\r\n    if (!value || value.toString().trim() === '') {\r\n      return 28;\r\n    }\r\n\r\n    const length = value.toString().length;\r\n    return length === 1 ? 28 : length === 2 ? 28 : 36;\r\n  }\r\n\r\n  protected onPageSizeChange(size: number) {\r\n    this.pageSize.set(Number(size));\r\n    this.pageIndex.set(0);\r\n    this.emitTableQuery();\r\n    this.resetEditRow();\r\n  }\r\n\r\n  protected toggleVisibility(col: FuColumnComponent<T>) {\r\n    if (!col.hideable()) return;\r\n\r\n    if (this.visibleCount() === 3 && col.visible()) return;\r\n\r\n    col.visible.update(val => !val);\r\n    this.emitColumns();\r\n  }\r\n\r\n  protected drop(event: CdkDragDrop<FuColumnComponent<T>[]>) {\r\n    const prevIndex = event.previousIndex;\r\n    const currIndex = event.currentIndex;\r\n\r\n    const filtered = [...this.filteredColumns()]; // visible list\r\n    // guard\r\n    if (\r\n      prevIndex < 0 ||\r\n      currIndex < 0 ||\r\n      prevIndex >= filtered.length ||\r\n      currIndex >= filtered.length\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    // reorder the filtered copy according to user action\r\n    moveItemInArray(filtered, prevIndex, currIndex);\r\n\r\n    // build a new full array: replace each filtered item in the full array\r\n    const full = [...this.columns()];\r\n    const newFull: FuColumnComponent<T>[] = [];\r\n    // pointer for walking over filtered items in their new order\r\n    let fPtr = 0;\r\n    const filteredIds = new Set(filtered.map(f => f.field()));\r\n\r\n    for (const item of full) {\r\n      if (filteredIds.has(item.field())) {\r\n        // take next element from reordered filtered\r\n        newFull.push(filtered[fPtr]);\r\n        fPtr++;\r\n      } else {\r\n        // keep original items (not part of filtered) in their original relative positions\r\n        newFull.push(item);\r\n      }\r\n    }\r\n\r\n    // in case filtered items were all removed from full (edge-case), append remaining filtered\r\n    while (fPtr < filtered.length) {\r\n      newFull.push(filtered[fPtr++]);\r\n    }\r\n\r\n    // persist and emit\r\n    this.columns.set(newFull);\r\n    this.emitColumns();\r\n  }\r\n\r\n  private emitColumns() {\r\n    this.saveState();\r\n    this.onColReorder.emit(\r\n      this.columns().map(c => ({\r\n        field: c.field(),\r\n        visible: c.visible(),\r\n      }))\r\n    );\r\n  }\r\n\r\n  private restoreSort(\r\n    sortField?: string | number,\r\n    sortDirection?: FuSortDirection\r\n  ) {\r\n    this.columns.update(cols =>\r\n      cols.map(col => {\r\n        col.sortDirection.set(\r\n          col.field() === sortField ? (sortDirection ?? null) : null\r\n        );\r\n        return col;\r\n      })\r\n    );\r\n  }\r\n}\r\n","<div class=\"fu-new-table-wrapper\">\r\n  @if (filterPanel()) {\r\n    <div class=\"fu-search\">\r\n      <input\r\n        type=\"search\"\r\n        [placeholder]=\"intl.searchPlaceholder()\"\r\n        [value]=\"searchTerm()\"\r\n        (input)=\"onSearch($any($event.target).value)\"\r\n      />\r\n      <div class=\"fu-search-nav\">\r\n        <button fuTButton (click)=\"prevMatch()\">\r\n          {{ intl.previous() }}\r\n        </button>\r\n        <button fuTButton (click)=\"nextMatch()\">\r\n          {{ intl.next() }}\r\n        </button>\r\n        @if (searchMatches().length > 0) {\r\n          <span class=\"fu-match-counter\">\r\n            {{ activeMatchIndex() + 1 }} / {{ searchMatches().length }}\r\n          </span>\r\n        }\r\n      </div>\r\n    </div>\r\n  }\r\n\r\n  @if (toolbarTemplate()) {\r\n    <div class=\"fu-table-toolbar\">\r\n      <ng-container [ngTemplateOutlet]=\"toolbarTemplate()!\" />\r\n    </div>\r\n  }\r\n\r\n  <div\r\n    class=\"fu-table-layout\"\r\n    [class.fu-with-sidebar]=\"configPanel() || sidebarTemplate()\"\r\n  >\r\n    <div\r\n      #scrollContainer\r\n      class=\"fu-table-scroll\"\r\n      [class.fu-scrollable]=\"scrollableConfig()\"\r\n      [style.max-height.vh]=\"scrollHeightConfig()\"\r\n    >\r\n      <table\r\n        class=\"fu-table\"\r\n        [class.fu-table--responsive]=\"responsiveConfig()\"\r\n        [class.fu-table-scrollable]=\"scrollableConfig()\"\r\n        [class.fu-sticky-header]=\"stickyHeaderConfig()\"\r\n        [class.fu-sticky-first]=\"stickyFirstColumnConfig()\"\r\n        [class.fu-sticky-last]=\"stickyLastColumnConfig()\"\r\n        [class.fu-has-overlay]=\"isSidebarOpen()\"\r\n      >\r\n        <thead>\r\n          <tr>\r\n            @if (expandRowTemplate()) {\r\n              <th class=\"fu-expand-header\"></th>\r\n            }\r\n            <!--  -->\r\n            @for (col of visibleColumns(); track $index) {\r\n              <th\r\n                (click)=\"onSort(col, $event)\"\r\n                [class.fu-sortable]=\"col.isSortable()\"\r\n                [style.width]=\"col.width()\"\r\n              >\r\n                <div class=\"fu-th-content\">\r\n                  @if (col.columnHeaderTemplate()) {\r\n                    <ng-container\r\n                      [ngTemplateOutlet]=\"col.columnHeaderTemplate()!\"\r\n                      [ngTemplateOutletContext]=\"{ index: $index }\"\r\n                    />\r\n                    @if (col.isSortable()) {\r\n                      <ng-container\r\n                        [ngTemplateOutlet]=\"defaultSortIcon\"\r\n                        [ngTemplateOutletContext]=\"{\r\n                          $implicit: col.sortDirection(),\r\n                        }\"\r\n                      />\r\n                    }\r\n                  } @else {\r\n                    <span class=\"fu-header-main\">\r\n                      <span\r\n                        class=\"fu-header-txt\"\r\n                        [class.has-desc]=\"!!col.description()\"\r\n                        [fuTooltip]=\"col.description() || ''\"\r\n                      >\r\n                        {{ col.header() }}\r\n                      </span>\r\n\r\n                      @if (col.isSortable()) {\r\n                        <ng-container\r\n                          [ngTemplateOutlet]=\"defaultSortIcon\"\r\n                          [ngTemplateOutletContext]=\"{\r\n                            $implicit: col.sortDirection(),\r\n                          }\"\r\n                        />\r\n                      }\r\n                    </span>\r\n                  }\r\n                  <!--  -->\r\n                  @if (col.columnHeaderAddonTemplate()) {\r\n                    <span class=\"fu-header-addon\">\r\n                      <ng-container\r\n                        [ngTemplateOutlet]=\"col.columnHeaderAddonTemplate()!\"\r\n                        [ngTemplateOutletContext]=\"{ index: $index }\"\r\n                      />\r\n                    </span>\r\n                  }\r\n                </div>\r\n              </th>\r\n            }\r\n          </tr>\r\n        </thead>\r\n\r\n        <tbody>\r\n          @if (initialLoading()) {\r\n            <ng-container [ngTemplateOutlet]=\"initialLoadingTemplate\" />\r\n          } @else {\r\n            <!--  -->\r\n            @for (row of visibleRows(); let rowIndex = $index; track rowIndex) {\r\n              @if (rowsLoading()) {\r\n                <ng-container [ngTemplateOutlet]=\"loadingTemplate\" />\r\n              } @else {\r\n                <tr\r\n                  [class.fu-cell-success]=\"\r\n                    rowStates.get(rowIndex) === 'success' && !loading()\r\n                  \"\r\n                  [class.fu-cell-error]=\"\r\n                    rowStates.get(rowIndex) === 'error' && !loading()\r\n                  \"\r\n                  [class.fu-row-expanded]=\"expandIndex() === rowIndex\"\r\n                  [class.fu-cursor-pointer]=\"rowHoverEffect()\"\r\n                  [attr.data-row-index]=\"rowIndex\"\r\n                  [class]=\"resolvedRowClasses()[rowIndex]\"\r\n                  (animationend)=\"onEditAnimationEnd()\"\r\n                  (click)=\"onRowClick(row, $event)\"\r\n                >\r\n                  @if (\r\n                    (expandRowTemplate() && !isMobileScreen()) ||\r\n                    (expandRowTemplate() &&\r\n                      isMobileScreen() &&\r\n                      !responsiveConfig())\r\n                  ) {\r\n                    <td\r\n                      class=\"fu-expand-cell\"\r\n                      [style]=\"resolvedRowStyles()[rowIndex]\"\r\n                      [attr.data-expand]=\"expandIndex() === rowIndex\"\r\n                      (click)=\"toggleExpand(rowIndex, $event)\"\r\n                    >\r\n                      <span class=\"fu-icon\">\r\n                        <svg\r\n                          xmlns=\"http://www.w3.org/2000/svg\"\r\n                          width=\"24\"\r\n                          height=\"24\"\r\n                          viewBox=\"0 0 24 24\"\r\n                        >\r\n                          <path\r\n                            fill=\"currentColor\"\r\n                            d=\"M10 6L8.59 7.41L13.17 12l-4.58 4.59L10 18l6-6z\"\r\n                          />\r\n                        </svg>\r\n                      </span>\r\n                    </td>\r\n                  }\r\n                  <!--  -->\r\n                  @for (\r\n                    col of visibleColumns();\r\n                    let colIndex = $index;\r\n                    track colIndex\r\n                  ) {\r\n                    @let isMatch =\r\n                      activeMatchKey() === rowIndex + ':' + col.field();\r\n                    @let cellValue = col.accessor(row);\r\n\r\n                    @if (pendingDeleteRowIndex() === rowIndex && loading()) {\r\n                      <td>\r\n                        <div class=\"fu-skeleton-cell\"></div>\r\n                      </td>\r\n                    } @else {\r\n                      <td\r\n                        #contextTrigger=\"cdkContextMenuTriggerFor\"\r\n                        [cdkContextMenuTriggerFor]=\"cellContextMenu\"\r\n                        [cdkContextMenuTriggerData]=\"{\r\n                          value: cellValue,\r\n                          row,\r\n                          colIndex: colIndex,\r\n                          rowIndex: rowIndex,\r\n                          trigger: contextTrigger,\r\n                        }\"\r\n                        [cdkContextMenuDisabled]=\"!cellContextMenuTemplate()\"\r\n                        (cdkContextMenuOpened)=\"\r\n                          activeCell = col.field() + '-' + rowIndex\r\n                        \"\r\n                        (cdkContextMenuClosed)=\"activeCell = null\"\r\n                        [class.fu-context-open]=\"\r\n                          activeCell === col.field() + '-' + rowIndex\r\n                        \"\r\n                        [class.fu-cell-pending]=\"\r\n                          pendingSaveRowIndex() === rowIndex && loading()\r\n                        \"\r\n                        [class.fu-cell-editing]=\"editingRowIndex() === rowIndex\"\r\n                        [class.fu-cell-sorting]=\"\r\n                          col.isSortable() && col.sortDirection() !== null\r\n                        \"\r\n                        [class.fu-active-match]=\"isMatch\"\r\n                        [style]=\"\r\n                          col.isAction() ? null : resolvedRowStyles()[rowIndex]\r\n                        \"\r\n                      >\r\n                        <div class=\"fu-header-text\">\r\n                          {{ col.description() || col.header() }}\r\n                        </div>\r\n\r\n                        @if (col.columnCellTemplate()) {\r\n                          <ng-container\r\n                            [ngTemplateOutlet]=\"col.columnCellTemplate()!\"\r\n                            [ngTemplateOutletContext]=\"{\r\n                              $implicit: cellValue,\r\n                              row: row,\r\n                              index: rowIndex,\r\n                              searchTerm: searchTerm(),\r\n                              searchable: col.searchable(),\r\n                              activeMatch: isMatch,\r\n                            }\"\r\n                            }\r\n                          />\r\n                        } @else if (col.columnActionsTemplate()) {\r\n                          <ng-container\r\n                            [ngTemplateOutlet]=\"col.columnActionsTemplate()!\"\r\n                            [ngTemplateOutletContext]=\"{\r\n                              row: row,\r\n                              index: rowIndex,\r\n                              editing: editingRowIndex() === rowIndex,\r\n                              expanded: expandIndex() === rowIndex,\r\n                              startEdit: startEditRow.bind(this),\r\n                              saveEdit: saveEditRow.bind(this),\r\n                              cancelEdit: cancelEditRow.bind(this),\r\n                              toggleExpand: toggleExpand.bind(this),\r\n                              deleteRow: deleteRow.bind(this),\r\n                            }\"\r\n                            }\r\n                          />\r\n                        } @else {\r\n                          <fu-cell\r\n                            [id]=\"'cell-' + rowIndex + '-' + colIndex\"\r\n                            [type]=\"col.type()\"\r\n                            [searchTerm]=\"searchTerm()\"\r\n                            [editable]=\"col.editable()\"\r\n                            [searchable]=\"col.searchable()\"\r\n                            [value]=\"cellValue\"\r\n                            [activeMatch]=\"isMatch\"\r\n                            [editing]=\"editingRowIndex() === rowIndex\"\r\n                            (cellValueChange)=\"onCellChange(row, col, $event)\"\r\n                          />\r\n                        }\r\n                      </td>\r\n                    }\r\n                  }\r\n                </tr>\r\n              }\r\n\r\n              @if (\r\n                expandRowTemplate() && isMobileScreen() && responsiveConfig()\r\n              ) {\r\n                <td\r\n                  class=\"fu-expand-cell\"\r\n                  [style]=\"resolvedRowStyles()[rowIndex]\"\r\n                  [attr.data-expand]=\"expandIndex() === rowIndex\"\r\n                  (click)=\"toggleExpand(rowIndex, $event)\"\r\n                >\r\n                  <span class=\"fu-icon\">\r\n                    <svg\r\n                      xmlns=\"http://www.w3.org/2000/svg\"\r\n                      width=\"24\"\r\n                      height=\"24\"\r\n                      viewBox=\"0 0 24 24\"\r\n                    >\r\n                      <path\r\n                        fill=\"currentColor\"\r\n                        d=\"M10 6L8.59 7.41L13.17 12l-4.58 4.59L10 18l6-6z\"\r\n                      />\r\n                    </svg>\r\n                  </span>\r\n                </td>\r\n              }\r\n\r\n              @if (expandIndex() === rowIndex) {\r\n                <tr>\r\n                  <td [attr.colspan]=\"columns().length + 1\">\r\n                    <ng-container\r\n                      [ngTemplateOutlet]=\"expandRowTemplate()!\"\r\n                      [ngTemplateOutletContext]=\"{\r\n                        $implicit: row,\r\n                        index: rowIndex,\r\n                        searchTerm: searchTerm(),\r\n                      }\"\r\n                    />\r\n                  </td>\r\n                </tr>\r\n              }\r\n            } @empty {\r\n              <tr class=\"fu-no-data-row\">\r\n                <td [attr.colspan]=\"columns().length + 1\">\r\n                  <ng-container\r\n                    [ngTemplateOutlet]=\"noDataTemplate() ?? defaultNoData\"\r\n                  />\r\n                </td>\r\n              </tr>\r\n            }\r\n          }\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n\r\n    @if (configPanel() || sidebarTemplate()) {\r\n      <div\r\n        class=\"fu-sidebar\"\r\n        [class.fu-open]=\"isSidebarOpen()\"\r\n        (fuClickOutside)=\"activeSidebarPanel.set(null)\"\r\n      >\r\n        @if (isSidebarOpen()) {\r\n          <!-- Sidebar content -->\r\n          <div class=\"fu-content\">\r\n            @if (isColumnsOpen()) {\r\n              <ng-container [ngTemplateOutlet]=\"defaultSidebar\" />\r\n            } @else if (isLayoutOpen()) {\r\n              <ng-container [ngTemplateOutlet]=\"configSidebar\" />\r\n            } @else if (isCustomOpen()) {\r\n              <ng-container [ngTemplateOutlet]=\"sidebarTemplate()!\" />\r\n            }\r\n          </div>\r\n        }\r\n\r\n        <div class=\"fu-handle\">\r\n          @if (configPanel()) {\r\n            <button\r\n              fuTButton\r\n              variant=\"icon\"\r\n              [severity]=\"isColumnsOpen() ? 'primary' : null\"\r\n              (click)=\"toggleColumnsPanel()\"\r\n            >\r\n              <svg\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"24\"\r\n                height=\"24\"\r\n                viewBox=\"0 0 24 24\"\r\n              >\r\n                <path\r\n                  fill=\"currentColor\"\r\n                  d=\"M3.25 3a.75.75 0 0 0 0 1.5h.5C4.44 4.5 5 5.06 5 5.75v12.5c0 .69-.56 1.25-1.25 1.25h-.5a.75.75 0 0 0 0 1.5h.5a2.75 2.75 0 0 0 2.75-2.75V5.75A2.75 2.75 0 0 0 3.75 3zm7.5 0A2.75 2.75 0 0 0 8 5.75v12.5A2.75 2.75 0 0 0 10.75 21h.415l.356-1.423l.02-.077h-.791c-.69 0-1.25-.56-1.25-1.25V5.75c0-.69.56-1.25 1.25-1.25h2.5c.69 0 1.25.56 1.25 1.25v10.105l1.5-1.5V5.75A2.75 2.75 0 0 0 13.25 3zM19 11.483q-.325.198-.607.48l-.893.892V5.75A2.75 2.75 0 0 1 20.25 3h.5a.75.75 0 0 1 0 1.5h-.5c-.69 0-1.25.56-1.25 1.25zm.1 1.186l-5.903 5.903a2.7 2.7 0 0 0-.706 1.247l-.458 1.831a1.087 1.087 0 0 0 1.319 1.318l1.83-.457a2.7 2.7 0 0 0 1.248-.707l5.902-5.902A2.286 2.286 0 0 0 19.1 12.67\"\r\n                />\r\n              </svg>\r\n            </button>\r\n            <button\r\n              fuTButton\r\n              variant=\"icon\"\r\n              [severity]=\"isLayoutOpen() ? 'primary' : null\"\r\n              (click)=\"toggleLayoutPanel()\"\r\n            >\r\n              <svg\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"24\"\r\n                height=\"24\"\r\n                viewBox=\"0 0 24 24\"\r\n              >\r\n                <path\r\n                  fill=\"currentColor\"\r\n                  d=\"M21 13.1c-.1 0-.3.1-.4.2l-1 1l2.1 2.1l1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8l-6.1 6V23h2.1l6.1-6.1zM21 3h-8v6h8zm-2 4h-4V5h4zm-6 11.06V11h8v.1c-.76 0-1.43.4-1.81.79L18.07 13H15v3.07zM11 3H3v10h8zm-2 8H5V5h4zm2 9.06V15H3v6h8zM9 19H5v-2h4z\"\r\n                />\r\n              </svg>\r\n            </button>\r\n          }\r\n          @if (sidebarTemplate()) {\r\n            <button\r\n              fuTButton\r\n              variant=\"icon\"\r\n              [severity]=\"isCustomOpen() ? 'primary' : null\"\r\n              (click)=\"toggleCustomPanel()\"\r\n            >\r\n              <svg\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"24\"\r\n                height=\"24\"\r\n                viewBox=\"0 0 24 24\"\r\n              >\r\n                <path\r\n                  fill=\"currentColor\"\r\n                  d=\"M12 16c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2M6 16c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m12 12c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2m0-6c1.1 0 2 .9 2 2s-.9 2-2 2s-2-.9-2-2s.9-2 2-2\"\r\n                />\r\n              </svg>\r\n            </button>\r\n          }\r\n        </div>\r\n      </div>\r\n    }\r\n  </div>\r\n\r\n  @if (paginator()) {\r\n    <div class=\"fu-paginator\">\r\n      <div class=\"fu-paginator-entries\">\r\n        {{ entriesLabel() }}\r\n      </div>\r\n\r\n      <button\r\n        fuTButton\r\n        variant=\"icon\"\r\n        (click)=\"prevPage()\"\r\n        [disabled]=\"pageIndex() === 0 || disablePaginator()\"\r\n      >\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          width=\"24\"\r\n          height=\"24\"\r\n          viewBox=\"0 0 24 24\"\r\n        >\r\n          <path\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n            stroke-width=\"1.5\"\r\n            d=\"m14 7l-5 5l5 5\"\r\n          />\r\n        </svg>\r\n      </button>\r\n\r\n      <div class=\"fu-page-info\">\r\n        {{ intl.pageLabel() }}\r\n\r\n        <input\r\n          class=\"fu-page-jump\"\r\n          #pageInput\r\n          [min]=\"1\"\r\n          [max]=\"totalPages()\"\r\n          [value]=\"pageIndex() + 1\"\r\n          (input)=\"adjustWidth(pageInput)\"\r\n          (change)=\"jumpToPage(pageInput)\"\r\n          [disabled]=\"totalPages() === 0\"\r\n          [style.width.px]=\"calculateWidth(pageInput.value)\"\r\n        />\r\n        <span [style.margin-left.px]=\"4\">/</span>\r\n        <span [style.margin-left.px]=\"4\">{{ totalPages() }}</span>\r\n      </div>\r\n\r\n      <button\r\n        fuTButton\r\n        variant=\"icon\"\r\n        (click)=\"nextPage()\"\r\n        [disabled]=\"pageIndex() >= totalPages() - 1 || disablePaginator()\"\r\n      >\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          width=\"24\"\r\n          height=\"24\"\r\n          viewBox=\"0 0 24 24\"\r\n        >\r\n          <path\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n            stroke-width=\"1.5\"\r\n            d=\"m10 17l5-5l-5-5\"\r\n          />\r\n        </svg>\r\n      </button>\r\n\r\n      <select [(ngModel)]=\"pageSize\" (ngModelChange)=\"onPageSizeChange($event)\">\r\n        @for (size of pageSizeOptions(); track size) {\r\n          <option class=\"fu-option\" [value]=\"size\">{{ size }}</option>\r\n        }\r\n      </select>\r\n    </div>\r\n  }\r\n</div>\r\n\r\n<ng-template\r\n  #cellContextMenu\r\n  let-value=\"value\"\r\n  let-row=\"row\"\r\n  let-colIndex=\"colIndex\"\r\n  let-rowIndex=\"rowIndex\"\r\n  let-trigger=\"trigger\"\r\n>\r\n  <div cdkMenu class=\"fu-context-menu\">\r\n    <ng-container\r\n      *ngTemplateOutlet=\"\r\n        cellContextMenuTemplate()!;\r\n        context: { value, row, colIndex, rowIndex, trigger }\r\n      \"\r\n    />\r\n  </div>\r\n</ng-template>\r\n\r\n<ng-template #initialLoadingTemplate>\r\n  @for (\r\n    i of [].constructor(skeletonRowCount());\r\n    let rowIndex = $index;\r\n    track rowIndex\r\n  ) {\r\n    <tr class=\"fu-skeleton-row\">\r\n      @for (\r\n        j of [].constructor(skeletonColumnCount());\r\n        let colIndex = $index;\r\n        track colIndex\r\n      ) {\r\n        <td>\r\n          <div class=\"fu-skeleton-cell\"></div>\r\n        </td>\r\n      }\r\n    </tr>\r\n  }\r\n</ng-template>\r\n\r\n<ng-template #loadingTemplate>\r\n  <tr class=\"fu-skeleton-row\">\r\n    @for (\r\n      j of [].constructor(skeletonColumnCount());\r\n      let colIndex = $index;\r\n      track colIndex\r\n    ) {\r\n      <td>\r\n        <div class=\"fu-skeleton-cell\"></div>\r\n      </td>\r\n    }\r\n  </tr>\r\n</ng-template>\r\n\r\n<ng-template #defaultSortIcon let-direction>\r\n  <span class=\"fu-sort-icon\">\r\n    @if (!direction) {\r\n      <svg\r\n        class=\"fu-sort-icon-default\"\r\n        xmlns=\"http://www.w3.org/2000/svg\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n        viewBox=\"0 0 24 24\"\r\n      >\r\n        <path\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          stroke-width=\"2\"\r\n          d=\"m3 9l4-4l4 4M7 5v14m14-4l-4 4l-4-4m4 4V5\"\r\n        />\r\n      </svg>\r\n    }\r\n\r\n    @if (direction === 'asc') {\r\n      <svg\r\n        class=\"fu-sort-icon-active\"\r\n        xmlns=\"http://www.w3.org/2000/svg\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n        viewBox=\"0 0 24 24\"\r\n      >\r\n        <path\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          stroke-width=\"2\"\r\n          d=\"M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12\"\r\n        />\r\n      </svg>\r\n    }\r\n\r\n    @if (direction === 'desc') {\r\n      <svg\r\n        class=\"fu-sort-icon-active\"\r\n        xmlns=\"http://www.w3.org/2000/svg\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n        viewBox=\"0 0 24 24\"\r\n      >\r\n        <path\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          stroke-width=\"2\"\r\n          d=\"M4 6h9m-9 6h7m-7 6h7m4-3l3 3l3-3m-3-9v12\"\r\n        />\r\n      </svg>\r\n    }\r\n  </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultNoData>\r\n  <div class=\"fu-no-data-default\">{{ intl.noData() }}</div>\r\n</ng-template>\r\n\r\n<ng-template #configSidebar>\r\n  <div class=\"fu-config-sidebar\">\r\n    <div class=\"fu-config-item\">\r\n      <label for=\"responsive\">{{ intl.responsiveLabel() }}</label>\r\n      <input id=\"responsive\" type=\"checkbox\" [(ngModel)]=\"responsiveConfig\" />\r\n    </div>\r\n\r\n    <div class=\"fu-config-item\">\r\n      <label for=\"scrollable\">{{ intl.scrollableLabel() }}</label>\r\n      <input id=\"scrollable\" type=\"checkbox\" [(ngModel)]=\"scrollableConfig\" />\r\n    </div>\r\n\r\n    @if (scrollHeight()) {\r\n      <div class=\"fu-config-item\">\r\n        <label for=\"stickyHeader\">{{ intl.lockHeaderLabel() }}</label>\r\n        <input\r\n          id=\"stickyHeader\"\r\n          type=\"checkbox\"\r\n          [(ngModel)]=\"stickyHeaderConfig\"\r\n          [disabled]=\"!scrollableConfig()\"\r\n        />\r\n      </div>\r\n    }\r\n\r\n    <div class=\"fu-config-item\">\r\n      <label for=\"stickyFirstColumn\">{{ intl.lockLeftLabel() }}</label>\r\n      <input\r\n        id=\"stickyFirstColumn\"\r\n        type=\"checkbox\"\r\n        [(ngModel)]=\"stickyFirstColumnConfig\"\r\n        [disabled]=\"!scrollableConfig()\"\r\n      />\r\n    </div>\r\n\r\n    <div class=\"fu-config-item\">\r\n      <label for=\"stickyLastColumn\">{{ intl.lockRightLabel() }}</label>\r\n      <input\r\n        id=\"stickyLastColumn\"\r\n        type=\"checkbox\"\r\n        [(ngModel)]=\"stickyLastColumnConfig\"\r\n        [disabled]=\"!scrollableConfig()\"\r\n      />\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSidebar>\r\n  <div class=\"fu-columns-panel\">\r\n    <div class=\"fu-column-search\">\r\n      <input\r\n        class=\"fu-column-search-input\"\r\n        type=\"text\"\r\n        [placeholder]=\"intl.searchPlaceholder()\"\r\n        [(ngModel)]=\"searchColTerm\"\r\n      />\r\n\r\n      <input\r\n        type=\"checkbox\"\r\n        [checked]=\"selectAllChecked()\"\r\n        [indeterminate]=\"selectAllIndeterminate()\"\r\n        (change)=\"toggleFilteredSelection($event)\"\r\n        [disabled]=\"filteredTotalCount() === 0\"\r\n        [style.marginRight.px]=\"8\"\r\n      />\r\n    </div>\r\n\r\n    <div\r\n      class=\"fu-drag-lock fu-drag-list\"\r\n      cdkDropList\r\n      cdkDropListOrientation=\"vertical\"\r\n      (cdkDropListDropped)=\"drop($event)\"\r\n    >\r\n      @for (col of filteredColumns(); track col.field(); let odd = $odd) {\r\n        <div\r\n          class=\"fu-column-item\"\r\n          cdkDrag\r\n          cdkDragLockAxis=\"y\"\r\n          cdkDragBoundary=\".fu-drag-lock\"\r\n          [cdkDragDisabled]=\"!col.reorderable()\"\r\n        >\r\n          <span\r\n            class=\"fu-drag-handle\"\r\n            cdkDragHandle\r\n            [style.color]=\"!col.reorderable() ? 'gray' : 'inherit'\"\r\n            [style.cursor]=\"!col.reorderable() ? 'not-allowed' : 'grab'\"\r\n            >☰</span\r\n          >\r\n\r\n          @if (col.description()) {\r\n            <div class=\"fu-column-item-label\">\r\n              <span class=\"fu-label\">{{ col.header() }}</span>\r\n              <span class=\"fu-sub-label\">{{ col.description() }}</span>\r\n            </div>\r\n          } @else {\r\n            <div class=\"fu-column-default\">\r\n              <span class=\"fu-label\" [style.min-height.px]=\"16\">{{\r\n                col.header()\r\n              }}</span>\r\n            </div>\r\n          }\r\n\r\n          <input\r\n            type=\"checkbox\"\r\n            [checked]=\"col.visible()\"\r\n            [disabled]=\"\r\n              !col.hideable() || (visibleCount() === 3 && col.visible())\r\n            \"\r\n            (change)=\"toggleVisibility(col)\"\r\n          />\r\n\r\n          <ng-template cdkDragPreview>\r\n            <div class=\"fu-drag-preview\">\r\n              <svg\r\n                class=\"fu-drag-icon\"\r\n                width=\"16px\"\r\n                height=\"16px\"\r\n                fill=\"currentColor\"\r\n                viewBox=\"0 0 25 25\"\r\n              >\r\n                <path\r\n                  d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\"\r\n                ></path>\r\n              </svg>\r\n              <div class=\"fu-drag-label\">{{ col.header() }}</div>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      }\r\n    </div>\r\n\r\n    <div class=\"fu-column-meta\">\r\n      {{ filteredVisibleCount() }} / {{ filteredTotalCount() }}\r\n      {{ intl.visible() }}\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import { Directive, input } from '@angular/core';\r\n\r\nexport interface FuColumnCellTemplateContext<T extends object> {\r\n  /** The current value of the cell */\r\n  $implicit: unknown;\r\n  \r\n  /** The current row object */\r\n  row: T;\r\n\r\n  /** Row index in the rendered table */\r\n  index: number;\r\n\r\n  /** Current search term */\r\n  searchTerm: string;\r\n\r\n  /** Whether this cell matches the active search match */\r\n  activeMatch: boolean;\r\n}\r\n\r\n/**\r\n * Defines a custom cell template for a `fu-column`.\r\n *\r\n * The template context exposes:\r\n * - `value` – the current cell value\r\n * - `row` – the current row data\r\n * - `index` – row index\r\n * - `searchTerm` – current search term\r\n * - `activeMatch` – whether this cell matches the active search match\r\n *\r\n * ## Typing\r\n * To enable strong typing for `row`, provide the table data using `rowOf`.\r\n * This is used only for type inference and does not affect rendering.\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuColumnCell let-value let-row=\"row\" let-index=\"index\">\r\n *   {{ value }}\r\n * </ng-template>\r\n * ```\r\n *\r\n * If `rowOf` is omitted, `row` will be typed as `any`.\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuColumnCell]',\r\n})\r\nexport class FuColumnCellTemplateDirective<T extends object> {\r\n  /**\r\n   * Provides typing context for the column cell template.\r\n   * Used only for type inference – not consumed at runtime.\r\n   */\r\n  public of = input<T[] | null>(null, {\r\n    alias: 'rowOf',\r\n  });\r\n\r\n  static ngTemplateContextGuard<TContext extends object>(\r\n    _dir: FuColumnCellTemplateDirective<TContext>,\r\n    ctx: unknown,\r\n  ): ctx is FuColumnCellTemplateContext<TContext> {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\nexport interface FuColumnHeaderTemplateContext {\r\n  /** Column index in the rendered table */\r\n  index: number;\r\n}\r\n\r\n/**\r\n * Defines a custom header template for a `fu-column` header.\r\n *\r\n * Fully replaces default header content for a `fu-column` header.\r\n *\r\n * The template context exposes:\r\n * - `index` – current column index\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuColumnHeader let-index=\"index\">\r\n *   {{ index }}\r\n * </ng-template>\r\n * ```\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuColumnHeader]',\r\n})\r\nexport class FuColumnHeaderTemplateDirective {\r\n  static ngTemplateContextGuard(\r\n    _dir: FuColumnHeaderTemplateDirective,\r\n    ctx: unknown\r\n  ): ctx is FuColumnHeaderTemplateContext {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\nexport interface FuColumnHeaderAddonTemplateContext {\r\n  /** Column index in the rendered table */\r\n  index: number;\r\n}\r\n\r\n/**\r\n * Defines a custom header addon template for a `fu-column` header.\r\n *\r\n * Adds content to right side in default header for a `fu-column` header.\r\n *\r\n * The template context exposes:\r\n * - `index` – current column index\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-template fuColumnHeaderAddon let-index=\"index\">\r\n *   {{ index }}\r\n * </ng-template>\r\n * ```\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuColumnHeaderAddon]',\r\n})\r\nexport class FuColumnHeaderAddonTemplateDirective {\r\n  static ngTemplateContextGuard(\r\n    _dir: FuColumnHeaderAddonTemplateDirective,\r\n    ctx: unknown\r\n  ): ctx is FuColumnHeaderAddonTemplateContext {\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\nexport interface FuColumnActionsTemplateContext<T extends object> {\r\n  /** The current row object */\r\n  row: T;\r\n\r\n  /** Row index in the rendered table */\r\n  index: number;\r\n\r\n  /** Whether the row is in edit mode */\r\n  editing: boolean;\r\n\r\n  /** Whether the row is in expanded state */\r\n  expanded: boolean;\r\n\r\n  /** Start editing the row at the given index */\r\n  startEdit: (index: number, event?: Event) => void;\r\n\r\n  /** Save edits for the current row */\r\n  saveEdit: (event?: Event) => void;\r\n\r\n  /** Cancel edits and restore previous values */\r\n  cancelEdit: (event?: Event) => void;\r\n\r\n  /** Deletes the row at the given index */\r\n  deleteRow: (index: number, event?: Event) => void;\r\n\r\n  /** Expands additional row below the current row */\r\n  toggleExpand: (index: number, event?: Event) => void;\r\n}\r\n\r\n/**\r\n * Defines a custom action template for a `fu-column`.\r\n *\r\n * This template is intended for rendering row-level actions\r\n * such as edit, save, cancel, or expand controls.\r\n *\r\n * The template context exposes:\r\n * - `row` – the current row data\r\n * - `index` – row index\r\n * - `editing` – whether the row is currently in edit mode\r\n * - `startEdit`, `saveEdit`, `cancelEdit` – row edit helpers\r\n * - `toggleExpand` – expands or collapses the row\r\n * - `deleteRow` – triggers onRowDelete event for the current row\r\n *\r\n * ## Event handling\r\n * If your table listens to row click events, interactive elements\r\n * inside this template should pass `$event` to helpers in order to\r\n * stop event propagation:\r\n *\r\n * ```html\r\n * <button (click)=\"startEdit(index, $event)\">Edit</button>\r\n * ```\r\n *\r\n * ## Typing\r\n * To enable strong typing for `row`, provide the table data using `rowOf`.\r\n * This input is used only for type inference and does not affect rendering.\r\n *\r\n * ## Usage\r\n * ```html\r\n * <ng-template fuColumnActions let-index=\"index\" let-startEdit=\"startEdit\">\r\n *   <button (click)=\"startEdit(index, $event)\">✏️</button>\r\n * </ng-template>\r\n * ```\r\n *\r\n *  * If `rowOf` is omitted, `row` will be typed as `any`.\r\n */\r\n\r\n@Directive({\r\n  selector: '[fuColumnActions]',\r\n})\r\nexport class FuColumnActionsTemplateDirective<T extends object> {\r\n  /**\r\n   * Provides typing context for the column cell template.\r\n   * Used only for type inference – not consumed at runtime.\r\n   */\r\n  public of = input<T[] | null>(null, {\r\n    alias: 'rowOf',\r\n  });\r\n\r\n  static ngTemplateContextGuard<TContext extends object>(\r\n    _dir: FuColumnActionsTemplateDirective<TContext>,\r\n    ctx: unknown\r\n  ): ctx is FuColumnActionsTemplateContext<TContext> {\r\n    return true;\r\n  }\r\n}\r\n","import {\r\n  booleanAttribute,\r\n  Component,\r\n  computed,\r\n  contentChild,\r\n  input,\r\n  model,\r\n  OnInit,\r\n  signal,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { FuColumnCellTemplateDirective } from '../directives/column-cell.directive';\r\nimport { FuColumnHeaderTemplateDirective } from '../directives/column-header.directive';\r\nimport { FuColumnHeaderAddonTemplateDirective } from '../directives/column-header-addon.directive';\r\nimport { FuColumnActionsTemplateDirective } from '../directives/column-actions.directive';\r\nimport { FuTableComponent } from '../table/table.component';\r\nimport { FuFieldType, FuSortDirection } from '../types';\r\nimport { FieldPath } from '../helpers';\r\n\r\n/**\r\n * Defines a column for use inside a `fu-table`.\r\n *\r\n * A `fu-column` describes how a single field of the row data is displayed,\r\n * sorted, edited, and configured.\r\n *\r\n * Columns can optionally provide custom templates for:\r\n * - header content\r\n * - header addon content\r\n * - data cell rendering\r\n * - row actions (edit, save, expand, etc.)\r\n *\r\n * Example:\r\n * ```html\r\n * <fu-table [data]=\"users\">\r\n *   <fu-column field=\"name\" header=\"Name\" sortable editable />\r\n *\r\n *   <fu-column field=\"age\" header=\"Age\">\r\n *     <ng-template fuColumnCell let-value>\r\n *       {{ value }} years\r\n *     </ng-template>\r\n *   </fu-column>\r\n * </fu-table>\r\n * ```\r\n *\r\n * ## Visibility\r\n * The column visibility can be controlled in two ways:\r\n * - via the `visible` input on the column\r\n * - via `ColumnConfig` provided to `fu-table`\r\n *\r\n * If `ColumnConfig` is provided, it takes precedence over the column's\r\n * `visible` input.\r\n */\r\n\r\n@Component({\r\n  selector: 'fu-column',\r\n  imports: [],\r\n  templateUrl: './column.component.html',\r\n  styleUrl: './column.component.scss',\r\n})\r\nexport class FuColumnComponent<T extends object> implements OnInit {\r\n  /** Text displayed in the column header. */\r\n  public header = input<string>('');\r\n\r\n  /**\r\n   * Optional descriptive text shown in the column configuration panel.\r\n   * (drag & drop / visibility settings).\r\n   *\r\n   * Also used as tooltip text for the column header in the table.\r\n   */\r\n  public description = input<string>('');\r\n\r\n  /**\r\n   * Path to the value in the row object used by this column.\r\n   *\r\n   * Supports dot-notation for nested values (e.g. `address.city`).\r\n   */\r\n  public field = input.required<FieldPath<T>>();\r\n  /**\r\n   * Control type used when the column is editable.\r\n   *\r\n   * If not provided, the control type is inferred from the cell value\r\n   * using `typeof` (e.g. `string`, `number`, `boolean`).\r\n   *\r\n   * ⚠️ Note: Date values cannot be reliably inferred from the value.\r\n   *\r\n   * ⚠️ When editing date fields, it is recommended to explicitly set `type=\"date\"`.\r\n   *\r\n   * The control type determines which editor is rendered for the cell.\r\n   */\r\n  public type = input<FuFieldType>();\r\n  /**\r\n   * CSS width of the column (e.g. `120px`, `20%`, `auto`).\r\n   * Defaults to `auto`.\r\n   */\r\n  public width = input<string>('auto');\r\n  /**\r\n   * Whether the column can be sorted.\r\n   *\r\n   * When enabled, clicking the column header toggles sort direction.\r\n   *\r\n   * Does not need to be set if `sortField` is provided.\r\n   */\r\n  public sortable = input<boolean, unknown>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n  /**\r\n   * Optional backend sort key.\r\n   *\r\n   * When provided, this value is emitted in sort queries instead of `field`.\r\n   * Useful when the backend expects enum values, aliases, or different field names.\r\n   *\r\n   * If omitted, `field` is used.\r\n   */\r\n  public sortField = input<string | number | null>(null);\r\n  /**\r\n   * Whether cells in this column can be edited.\r\n   *\r\n   * Editing behavior depends on the configured control type and templates.\r\n   */\r\n  public editable = input<boolean, unknown>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n  /**\r\n   * Whether the column can be hidden via table configuration UI\r\n   * (e.g. sidebar or column visibility controls).\r\n   */\r\n  public hideable = input<boolean>(true);\r\n  /**\r\n   * Whether the column can be reordered via drag-and-drop\r\n   * or other column reordering mechanisms.\r\n   */\r\n  public reorderable = input<boolean>(true);\r\n  /**\r\n   * Whether the column is searchable for local filtering.\r\n   *\r\n   * When enabled, the table's search functionality includes this column\r\n   * when filtering rows based on the search term.\r\n   */\r\n  public searchable = input<boolean>(true);\r\n  /**\r\n   * Controls whether the column is initially visible.\r\n   *\r\n   * Note:\r\n   * If `ColumnConfig` is provided to `fu-table`, the visibility defined\r\n   * there takes precedence over this value.\r\n   */\r\n  public visible = model<boolean>(true);\r\n  /**\r\n   * Marks the column as an action column.\r\n   *\r\n   * Action columns typically contain interactive elements such as buttons or links.\r\n   *\r\n   * These columns are excluded from row-level styling (e.g. rowClass, rowStyle).\r\n   *\r\n   * * Defaults to `false`.\r\n   */\r\n  public isAction = input<boolean, unknown>(false, {\r\n    transform: booleanAttribute,\r\n  });\r\n\r\n  public isSortable = computed(() => {\r\n    return this.sortable() || this.sortField() !== null;\r\n  });\r\n\r\n  public sortDirection = signal<FuSortDirection>(null);\r\n\r\n  public columnCellTemplate = contentChild(FuColumnCellTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public columnHeaderAddonTemplate = contentChild(\r\n    FuColumnHeaderAddonTemplateDirective,\r\n    {\r\n      read: TemplateRef,\r\n    }\r\n  );\r\n  public columnHeaderTemplate = contentChild(FuColumnHeaderTemplateDirective, {\r\n    read: TemplateRef,\r\n  });\r\n  public columnActionsTemplate = contentChild(\r\n    FuColumnActionsTemplateDirective,\r\n    {\r\n      read: TemplateRef,\r\n    }\r\n  );\r\n\r\n  public accessor: (row: T) => any;\r\n\r\n  constructor(table: FuTableComponent<T>) {\r\n    table.registerColumn(this);\r\n  }\r\n\r\n  public ngOnInit() {\r\n    this.accessor = this.buildAccessor(this.field());\r\n  }\r\n\r\n  public toggleSort() {\r\n    const current = this.sortDirection();\r\n    this.sortDirection.set(\r\n      current === 'asc' ? 'desc' : current === 'desc' ? null : 'asc'\r\n    );\r\n  }\r\n\r\n  private buildAccessor(path: FieldPath<T>) {\r\n    const keys = path.split('.');\r\n    return (row: any) => {\r\n      let v = row;\r\n      for (const k of keys) {\r\n        v = v?.[k];\r\n        if (v == null) return null;\r\n      }\r\n      return v;\r\n    };\r\n  }\r\n}\r\n","\r\n","import { NgModule } from '@angular/core';\r\nimport { FuTableComponent } from './table/table.component';\r\nimport { FuColumnComponent } from './column/column.component';\r\nimport { FuColumnCellTemplateDirective } from './directives/column-cell.directive';\r\nimport { FuColumnActionsTemplateDirective } from './directives/column-actions.directive';\r\nimport { FuColumnHeaderTemplateDirective } from './directives/column-header.directive';\r\nimport { FuColumnHeaderAddonTemplateDirective } from './directives/column-header-addon.directive';\r\nimport { FuTableNoDataTemplateDirective } from './directives/table-no-data.directive';\r\nimport { FuTableSidebarTemplateDirective } from './directives/table-sidebar.directive';\r\nimport { FuTButtonDirective } from './directives/button.directive';\r\nimport { FuTableToolbarTemplateDirective } from './directives/table-toolbar.directive';\r\nimport { FuTableCellContextMenuTemplateDirective } from './directives/table-cell-context-menu.directive';\r\nimport { FuTableExpandRowTemplateDirective } from './directives/table-expand-row.directive';\r\nimport { FuHighlightDirective } from './directives/highlight.directive';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    FuTableComponent,\r\n    FuColumnComponent,\r\n    FuColumnCellTemplateDirective,\r\n    FuColumnActionsTemplateDirective,\r\n    FuColumnHeaderTemplateDirective,\r\n    FuColumnHeaderAddonTemplateDirective,\r\n    FuTableCellContextMenuTemplateDirective,\r\n    FuTableExpandRowTemplateDirective,\r\n    FuTableNoDataTemplateDirective,\r\n    FuTableSidebarTemplateDirective,\r\n    FuTableToolbarTemplateDirective,\r\n    FuTButtonDirective,\r\n    FuHighlightDirective,\r\n  ],\r\n  exports: [\r\n    FuTableComponent,\r\n    FuColumnComponent,\r\n    FuColumnCellTemplateDirective,\r\n    FuColumnActionsTemplateDirective,\r\n    FuColumnHeaderTemplateDirective,\r\n    FuColumnHeaderAddonTemplateDirective,\r\n    FuTableCellContextMenuTemplateDirective,\r\n    FuTableExpandRowTemplateDirective,\r\n    FuTableNoDataTemplateDirective,\r\n    FuTableSidebarTemplateDirective,\r\n    FuTableToolbarTemplateDirective,\r\n    FuTButtonDirective,\r\n    FuHighlightDirective,\r\n  ],\r\n})\r\nexport class FuTableModule {}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Highlights occurrences of a search term inside a string by wrapping matches\r\n * in a `<mark>` element.\r\n *\r\n * This pipe is primarily intended for use with table cells and search results.\r\n * It returns an HTML string and is typically used together with `[innerHTML]`.\r\n *\r\n * ## Parameters\r\n * - `value` – the text value to highlight\r\n * - `term` – the search term to highlight\r\n * - `active` (optional) – whether the match should be marked as the active match\r\n *\r\n * If `term` is empty or `value` is `null`/`undefined`, the original value is\r\n * returned as a string.\r\n *\r\n * Special characters in the search term are safely escaped.\r\n *\r\n * ## Usage\r\n * ```html\r\n * <span\r\n *   [innerHTML]=\"value | fuHighlight : searchTerm : isActive\"\r\n * ></span>\r\n * ```\r\n *\r\n * ## Styling\r\n * The pipe adds the following CSS classes:\r\n * - `search-highlight` – applied to all matches\r\n * - `search-highlight active` – applied when `active` is `true`\r\n *\r\n * Example:\r\n * ```css\r\n * .search-highlight {\r\n *   background-color: var(--fu-search-highlight-bg);\r\n * }\r\n *\r\n * .search-highlight.active {\r\n *   background-color: var(--fu-search-highlight-active-bg);\r\n * }\r\n * ```\r\n *\r\n * ## Notes\r\n * - This pipe returns **HTML**, not plain text.\r\n * - Always bind using `[innerHTML]`.\r\n * - The pipe is stateless and does not manage search state internally.\r\n */\r\n\r\n@Pipe({ name: 'fuHighlight' })\r\nexport class FuHighlightPipe implements PipeTransform {\r\n  /**\r\n   * Highlights occurrences of `term` in `value` by wrapping them in `<mark>`.\r\n   *\r\n   * @param value Text to transform\r\n   * @param term Search term to highlight\r\n   * @param active Whether the match is the active one\r\n   * @returns HTML string with highlighted matches\r\n   */\r\n  transform(value: any, term: string, active = false): string {\r\n    if (!term || value == null) {\r\n      return String(value ?? '');\r\n    }\r\n\r\n    const escaped = term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n    const regex = new RegExp(`(${escaped})`, 'gi');\r\n\r\n    return String(value).replace(regex, match =>\r\n      active\r\n        ? `<mark class=\"search-highlight active\">${match}</mark>`\r\n        : `<mark class=\"search-highlight\">${match}</mark>`\r\n    );\r\n  }\r\n}\r\n","type Primitive =\r\n  | string\r\n  | number\r\n  | boolean\r\n  | bigint\r\n  | symbol\r\n  | null\r\n  | undefined\r\n  | Date;\r\n\r\nexport type FieldPath<T> = {\r\n  [K in keyof T & string]: T[K] extends Primitive | Array<any>\r\n    ? K\r\n    : `${K}.${FieldPath<T[K]>}`;\r\n}[keyof T & string];\r\n\r\n/**\r\n * Creates a row class resolver that maps a row's field value to a CSS class name.\r\n *\r\n * Use this helper to easily produce a function you can pass to the table's\r\n * `rowClass` input. The returned resolver reads the specified `field` from the\r\n * row object, stringifies it, looks it up in `map` and returns the matching\r\n * class name or the provided `fallback`.\r\n *\r\n * Notes:\r\n * - The function performs a direct property access: `(row as any)[field]`.\r\n * - Map keys are matched against the stringified field value (numbers/booleans\r\n *   are converted to strings).\r\n * - If the field is nested (e.g. `user.name`) use `rowClassByPath` instead.\r\n * - CSS classes returned by the resolver must be defined in the consumer\r\n *   application's styles — the library does not inject those rules.\r\n *\r\n * Example:\r\n * ```ts\r\n * // rows: Array<{ sex: 'male'|'female' }>\r\n * rowClass = rowClassByField('sex', {\r\n *   female: 'row-female',\r\n *   male: 'row-male'\r\n * }, '');\r\n * ```\r\n *\r\n * @param field Property name on the row objects to check\r\n * @param map Mapping from stringified field values to CSS class names\r\n * @param fallback Optional fallback class when no mapping matches (default: '')\r\n * @returns A function `(row: T) => string` that resolves the class name\r\n */\r\n\r\nexport function rowClassByField<T extends object>(\r\n  field: keyof T & string,\r\n  map: Record<string, string>,\r\n  fallback = ''\r\n): (row: T) => string {\r\n  return (row: T) => {\r\n    const value = String((row as any)[field]);\r\n    return map[value] ?? fallback;\r\n  };\r\n}\r\n\r\n/**\r\n * Creates a row class resolver that reads a nested field (dot-path) from a row\r\n * object and maps its stringified value to a CSS class name.\r\n *\r\n * This helper is useful when the value you want to base row styling on lives\r\n * on a nested property (for example `user.status` or `address.country.code`).\r\n * The `path` supports simple dot-notation and is resolved with a safe reduce\r\n * (it will tolerate missing intermediate objects).\r\n *\r\n * Behavior notes:\r\n * - The resolved field value is converted to a string and matched against the\r\n *   provided `map` keys.\r\n * - If no mapping matches, the `fallback` value is returned (defaults to `''`).\r\n * - The returned CSS class must be defined by the consumer application — the\r\n *   library does not provide styling for custom class names.\r\n *\r\n * Example (rows where `sex` is a nested property):\r\n * ```ts\r\n * // rows: Array<{ user: { sex: 'male'|'female' } }>\r\n * rowClass = rowClassByPath('user.sex', {\r\n *   female: 'row-female',\r\n *   male: 'row-male'\r\n * }, '');\r\n * ```\r\n *\r\n * @param path Dot-separated path to the property on the row objects\r\n * @param map Mapping from stringified values to CSS class names\r\n * @param fallback Optional fallback class when no mapping matches (default: '')\r\n * @returns A function `(row: T) => string` that resolves the class name\r\n */\r\nexport function rowClassByPath<T extends object>(\r\n  path: FieldPath<T>,\r\n  map: Record<string, string>,\r\n  fallback = ''\r\n): (row: T) => string {\r\n  return (row: T) => {\r\n    const value = path.split('.').reduce<any>((acc, key) => acc?.[key], row);\r\n    return map[String(value)] ?? fallback;\r\n  };\r\n}\r\n\r\n/**\r\n * Creates a strongly typed field path factory for a specific row type.\r\n *\r\n * This helper is used to create type-safe string paths that reference\r\n * properties of a data model (including nested properties), while\r\n * keeping the runtime value a simple string.\r\n *\r\n * It improves developer experience by:\r\n * - validating field paths at compile time\r\n * - preventing typos in nested property paths\r\n * - keeping IDE autocompletion and hover information clean\r\n *\r\n * ## Usage\r\n * ```ts\r\n * const fieldOf = fieldPathOf<Person>();\r\n *\r\n * const name = fieldOf('name');           // ✅ valid\r\n * const city = fieldOf('address.city');   // ✅ valid\r\n * const wrong = fieldOf('address.cito');  // ❌ compile-time error\r\n * ```\r\n *\r\n * The returned value is a string at runtime and can be safely used for:\r\n * - column definitions\r\n * - sorting and filtering\r\n * - backend queries\r\n *\r\n * @typeParam T The row data type used to validate field paths.\r\n */\r\nexport function fieldPathOf<T>() {\r\n  return <P extends string & FieldPath<T>>(path: P) => path;\r\n}\r\n","/*\r\n * Public API Surface of ng-fusion-ui\r\n */\r\n\r\nexport * from './lib/button/index';\r\nexport * from './lib/icons/index';\r\nexport * from './lib/data-table/index';\r\nexport * from './lib/tree/index';\r\nexport * from './lib/table/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconRegistryService","i2.IconComponent","i2.ButtonDirective","i1","i1.FuTableComponent"],"mappings":"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"}