{"_id":"@flusys/ng-ui","_rev":"39-51c1743f88bb0ded76bfe79f1cab4303","name":"@flusys/ng-ui","dist-tags":{"rc":"6.0.1","support":"6.1.3","beta":"7.0.0-beta.1","latest":"9.0.1"},"versions":{"6.0.0-beta.1":{"name":"@flusys/ng-ui","version":"6.0.0-beta.1","license":"MIT","_id":"@flusys/ng-ui@6.0.0-beta.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"90889cf1caf4045ebd85c0c0fd637359ff71a2bc","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.0-beta.1.tgz","fileCount":6,"integrity":"sha512-bpoY6rOuuKuziVsW4/oYTdExghQ4LKmiAg+xC9NEd/j7XbU2I3fNlBmTHNdHJ+mVaWdm6wi/1b4qtcu0VrbZhQ==","signatures":[{"sig":"MEUCIQDb/IiWaqFDH1Ik3m4UEsG+AygX5mJ8nnXmH+C8YzpF5gIgXjZckRul2a8csJNGXM7Zf6vGk53oO64/pez1fwPaDdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1848827},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e0b668a9008155dcc113059e8056859e75cd20a8","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.0-beta.1_1783622617881_0.39363373828519","host":"s3://npm-registry-packages-npm-production"}},"6.0.0-beta.2":{"name":"@flusys/ng-ui","version":"6.0.0-beta.2","license":"MIT","_id":"@flusys/ng-ui@6.0.0-beta.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"4cb2081fea48aaa88212a3173f38fe86adc0eeeb","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.0-beta.2.tgz","fileCount":6,"integrity":"sha512-CbRAT9Z0gKNEzBnh3zrvlOjrO986B9hkQyb/6rJkoxDyqZsifURyHChKQUnxGh4rWfLLqA4OZm8GHe3UbL+imA==","signatures":[{"sig":"MEYCIQC9axObPu/lbnLMl57UXrudfWIOt8qn9RnMSAFaAZkx2QIhAKv6m9EIzVUe1RT6zf8WtTcSE5QTkYFQ+5mV7iyHh/+9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1859833},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f7f1cbd8f144332ec1c5d3518bd20f1ef19db70b","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.0-beta.2_1783700433366_0.3894620772816053","host":"s3://npm-registry-packages-npm-production"}},"1.2.0-rc.1":{"name":"@flusys/ng-ui","version":"1.2.0-rc.1","license":"MIT","_id":"@flusys/ng-ui@1.2.0-rc.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"9d359635127a258c6b9863467d23554fd71150e8","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-1.2.0-rc.1.tgz","fileCount":6,"integrity":"sha512-qkO0OIU6t/tQ/L0SyYwd5hPgHOav+8Phs0xfGRp0PPxJ30su8hwbCKnibG3E3QCUggTtwUL28cJeizdZFiTF1Q==","signatures":[{"sig":"MEUCIA1/g4Jg+2Qnc4v2oi4zGfuQEe/KQwf530o78ON7kqi8AiEA6T4woN+7WJ0aiHuSXTmeNzL+fJ6n0yzOxHv+mfpNW78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3624145},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"17c54879ea75fbbda4f41d12f3a23733739bca1a","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_1.2.0-rc.1_1783788824107_0.7541836638656272","host":"s3://npm-registry-packages-npm-production"}},"6.0.0-rc.1":{"name":"@flusys/ng-ui","version":"6.0.0-rc.1","license":"MIT","_id":"@flusys/ng-ui@6.0.0-rc.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"cc7023924c414b9af73c078673a7ab39b2d0eb4c","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.0-rc.1.tgz","fileCount":6,"integrity":"sha512-n64U5A0sSUztAI+sDGh0tHxb0Zoj2GjTyvc86X1lnkeH6wQPGzyEkFQO9+WhgYgByYc+OYG0MIozRodapJvNZQ==","signatures":[{"sig":"MEUCIQDxn7lLpE3FeivcVPwbmddybienInCaDDz+kLiIHZbkDQIgQ+uFQs/O8Caj1otXGwcJB1N/5f6sIczBbXvygBHu+zQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3624145},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"17c54879ea75fbbda4f41d12f3a23733739bca1a","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.0-rc.1_1783789276735_0.5933115694900017","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@flusys/ng-ui","version":"6.0.0","license":"MIT","_id":"@flusys/ng-ui@6.0.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"eba11bf65a5e32469d26407cef189c27a6fa39df","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.0.tgz","fileCount":6,"integrity":"sha512-MGxLw89kpjzLUPaPG0ue/eZL0V0pUhFa/kO1U44uZinekdQwZ+KNMYnwItZCRkqB8yF+NUCtVkSZPxq+dd01pw==","signatures":[{"sig":"MEUCIQChmDXeQY1DDnaJzJH4oP/bcSpw88Wbfqg9Ndt9rlBqXwIgLfzcp2yZ9bJo7m4ldpOr51I91z+/m6e2u8TM578Kur8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3688051},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"23c96bca7d3d0c1bc9ca953b5bbbf265d340299a","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.0_1783862606933_0.03808456971313867","host":"s3://npm-registry-packages-npm-production"}},"6.0.1":{"name":"@flusys/ng-ui","version":"6.0.1","license":"MIT","_id":"@flusys/ng-ui@6.0.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"6dffb9f9c551983e7b1783e4c25337dbe825962d","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.1.tgz","fileCount":6,"integrity":"sha512-kwjQ1hXCep49he/Q7NdhITaI0XXjuQoV1ohwLSDBQbWK5Ykb+SyStcP1wwvmbEUzQfrQPfLakGclvbXOw0U4UA==","signatures":[{"sig":"MEYCIQDIsD+GzWF5tX8DuwJCrWXV1wZZz08MbCJ4X8yzzl5CLAIhAMDwh/MZes68N1WDPY/HRrEq4i5toxYkK/zyvmT3zr30","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3710249},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"597499d0b90c092033168c0db9a079da76c1e36a","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.1_1784300589748_0.7095490699425087","host":"s3://npm-registry-packages-npm-production"}},"6.0.2":{"name":"@flusys/ng-ui","version":"6.0.2","license":"MIT","_id":"@flusys/ng-ui@6.0.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"24aad91ccd0eca080699bef691f1113af578fc90","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.0.2.tgz","fileCount":6,"integrity":"sha512-SjWjkMPXvxEXsHv2MfV9jn+nt0roC+uw/6cmk1Asev4nZ0rvkMGStoykycCUpKZe/Q0SWE7eEkapUXMrZtc+Ng==","signatures":[{"sig":"MEUCIGY8JxDWfy+XU0dmJ5BbTZSZYoPRhpuL29eYqvF7NdhBAiEA3iQHRLC+AGsBhtB/iE5Fch1eJdojDphCMrFaHFf0IHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3710249},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"5ee1f2df4d15a79bf2ed9c2c8dd98a514d77236d","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.0.2_1784556479228_0.35876055787649297","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"@flusys/ng-ui","version":"6.1.0","license":"MIT","_id":"@flusys/ng-ui@6.1.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"8090a6a6918acde8fd2aa40ade69f29119613fb1","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.1.0.tgz","fileCount":6,"integrity":"sha512-09hoTYW3f5hC6CvnPOzJnlSq8ordIjdJfL1jcdt86A+5cXl+xRPDISzpCCuyzk21PMJz0K0NRoVHn/VNUXKfng==","signatures":[{"sig":"MEUCIQD8k2dI5q39LvrGPqROVIwc7BvIItQU/FHaSfOt/bOvfAIgbWYN1F0b/lBtxq+mKqRigJDS5jqv93azfVWg4gt4zxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714660},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3943c361d68b23e4720b73d7de897209c3d2e140","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.1.0_1784695937266_0.6553902176161959","host":"s3://npm-registry-packages-npm-production"}},"6.1.1":{"name":"@flusys/ng-ui","version":"6.1.1","license":"MIT","_id":"@flusys/ng-ui@6.1.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"e700d05a008f01e2d691babd5e57dde7fa5a9dde","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.1.1.tgz","fileCount":6,"integrity":"sha512-fEnNeCsuPEFzcsO2XmYYrV8sZ7kr+j6k15oYXhgYP8QuorOPkH5s+YEhajEnVF6TRF1fHwDljPyJEUyFD3iB7A==","signatures":[{"sig":"MEQCIB1WA7nzqYbk/MX51CB87z8GJP1zyYMuVxc+t4QzXBHnAiApyZZaC4sd5NZzY70nCkdSdCGlo6KWPAvsGdyFVEBV+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714660},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"182ca5782670141f8b1b49424f48fc57bbebc1cb","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.1.1_1784840722416_0.0903646569409553","host":"s3://npm-registry-packages-npm-production"}},"6.1.2":{"name":"@flusys/ng-ui","version":"6.1.2","license":"MIT","_id":"@flusys/ng-ui@6.1.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"a46ae2246dc8b8bf7d893716abd1cf715b468db8","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.1.2.tgz","fileCount":6,"integrity":"sha512-r2mJMMHJflJkooWsCsxEQXPnEkPA59nVNe1ADhXRQ6v40RDdzftX2dujwxWTxv6YMPCaKqYibwUSuOh4S5HYxg==","signatures":[{"sig":"MEUCIDvcqDdefyvhidZtDq7jH/lvyncmVdqZUJ5KfM3/RuIVAiEAqeZb+8z+0D/O0xvZzRYp6RiMTVHY8k6/GPHdx1qzZk0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3715390},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"65df4c0b7e41d2d17f4829de92b27a44ab384946","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.1.2_1784884164731_0.566887376554392","host":"s3://npm-registry-packages-npm-production"}},"6.1.3":{"name":"@flusys/ng-ui","version":"6.1.3","license":"MIT","_id":"@flusys/ng-ui@6.1.3","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"c2c8ef270ae9b15143c30d1540cc64e0a88ee956","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.1.3.tgz","fileCount":6,"integrity":"sha512-Ri3POmN1xz3b9yWNoQnzrM1qpjEo4cyv83B6H+gPdyTefnqR4NjevNQc1nEbeM/mt0olb4a8D1xLB70+Q+v2FA==","signatures":[{"sig":"MEUCIQCVsSqzbHWSEt1RW3l1mKapMqsq0i+WxzYtoy2/qXRkoAIgK4KYQPilaGKDLwpRq8x27Vcl5Omxr2Pm6ffCjemgDPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3715390},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6c71b66816293d9e6af902a2eee0e6f63a110498","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.1.3_1785174153046_0.1254150688410378","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"@flusys/ng-ui","version":"6.2.0","license":"MIT","_id":"@flusys/ng-ui@6.2.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"9f0d73a8246e01023e722563dd611833f9876f5c","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.2.0.tgz","fileCount":6,"integrity":"sha512-T4TysgXVZYsE9zVlYuvDfEyKUx3L74xj6hVA9uSvA9tDpL1GPZr0O6wfFVRZNAmCfsM0Suov5gdMCOq8dVBxPA==","signatures":[{"sig":"MEQCIHd6A/bKr/C+St86u4aV0W4TUgBfh3Um6FS2p3h9TC1DAiAbfj0NrMDr6N8OPFxf3jPnKYvzll08enO4UYe7gkUEVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3716282},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"2b262fc88bb64cab977b6b3a05b77fa3d97e4cb3","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.2.0_1785208260397_0.010423207692921821","host":"s3://npm-registry-packages-npm-production"}},"6.2.1":{"name":"@flusys/ng-ui","version":"6.2.1","license":"MIT","_id":"@flusys/ng-ui@6.2.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"720a7fe27d8f9a9c30e074c5f3c1beb4271abafc","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.2.1.tgz","fileCount":6,"integrity":"sha512-N7zrwAtGkQDMWKrT0jZYg91Y05WbK/XlnQ8xAFJ65sZJuHvctJeDmzEGYOoQpZOOWDlYyu+NCEz3Wnpp3Ghm9A==","signatures":[{"sig":"MEYCIQCWKZIEVk7zECirAeatiGEjsxzaUWV4KGgtwnGbTZ+LngIhAKdp+CSxWZjh/+Nt7cYkwEuX3itBQc5Rzv8sNUuhbYR3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3716912},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"a0d2772dac8594762650741fa7289cb55c416df6","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.2.1_1785388127766_0.7199643340986495","host":"s3://npm-registry-packages-npm-production"}},"6.2.2":{"name":"@flusys/ng-ui","version":"6.2.2","license":"MIT","_id":"@flusys/ng-ui@6.2.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"7467dfff533b002fc4c0e977ff7539394524c222","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.2.2.tgz","fileCount":6,"integrity":"sha512-7JcO4rXnP34rJiXrYg8FDLwHQnzSXCVMqcSkyyPpfmPK52nPXhAsJPeaXtZDejIM/k1e8u/VOkiICsISCOCpkg==","signatures":[{"sig":"MEYCIQDKdLhdNRHrXhNIMFFKfBjmlLgRIrt8Ny92mCxqbPTlMgIhAI0c6GSenTTDAgF+enaSu0uwyj/EN2659AtD/Kjky/zE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3721278},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"78b1708a89b4e698325e0338c850bb8e5038e7a9","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.2.2_1787200200898_0.1420461202156451","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"@flusys/ng-ui","version":"6.3.0","license":"MIT","_id":"@flusys/ng-ui@6.3.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"ec1f8dd5e7e6d9a016d2a30641a26647b0fceb31","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.3.0.tgz","fileCount":6,"integrity":"sha512-BfMJfmyrWzAo38IT/ATfCMc8SU1/rEZSe0ZWAn7pet8nDsOizBhOfZqHEdDLOSEsLbIVAfsBzUS26DerNRJDcQ==","signatures":[{"sig":"MEUCIB/NI8kxpgjwi3P24hIY8rhx63F+QE/p1jvapcjDzvCDAiEAwaJH9ge2zqEkyeTWpQh4IdJ1IR5wrqfC5PLtl032z28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3721278},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3ba640ef443e670deb5d9d208307981994d902f1","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.3.0_1787595683559_0.30576913906559233","host":"s3://npm-registry-packages-npm-production"}},"6.4.0":{"name":"@flusys/ng-ui","version":"6.4.0","license":"MIT","_id":"@flusys/ng-ui@6.4.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"3814a34321e22fb779ec818fc2fb7298d7c12ee0","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.4.0.tgz","fileCount":6,"integrity":"sha512-Nz3dripiBaex4b1Cu5PvPrF/DMDIDJoqE7CPkY0UV6iv7UgMYio0KoF5ct0LOR21ALmCgAHyTz3l8ETTrF9P0g==","signatures":[{"sig":"MEUCIQDgj6U1g6durIKltWQRGpRrG/WA9Jv68/SXZ20snWj01AIgEztAMze6oA3pCekRlxEEwPgaF7eECoHwSVPno4iX0fQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3741447},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"016ed13a4debd3db94c9be9532efa8dc2552c5c2","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.4.0_1788415542698_0.668555098381471","host":"s3://npm-registry-packages-npm-production"}},"6.4.1":{"name":"@flusys/ng-ui","version":"6.4.1","license":"MIT","_id":"@flusys/ng-ui@6.4.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"788aa0ee0f74416bf32f0719b77bb3f4362213be","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-6.4.1.tgz","fileCount":6,"integrity":"sha512-DWjxpDYpbk8gqy8qkPtY673n8AtcehFAWwpmD+dkwYBr9Y4KFo57CXGreEYEfoBK3SvjgjQeMX4hpHySEsl5QA==","signatures":[{"sig":"MEUCIENz7VFdCXTOq/hxln980wvHAyaE1N+jxsBl3Kr5PtYsAiEAwygxTYBbW1yeKZuNHUEjAbf6PKrPI6dnW7gGjZyQoDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDZFOBk5dQg3M5Szrck1qBl4h+KgPL8DAEpZZKjJRlLzQIhAIDkqLT3anbSziUTO5oYDpcZbzoFtPorZlK5L2tXjJgg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3741447},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"b2ccb0c4cc14c803f2343ad095a6e86d2e303425","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_6.4.1_1788451717371_0.12192272072361021","host":"s3://npm-registry-packages-npm-production"}},"7.0.0-beta.1":{"name":"@flusys/ng-ui","version":"7.0.0-beta.1","license":"MIT","_id":"@flusys/ng-ui@7.0.0-beta.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"2eb63f24975cb2eb140abfa6d08be5f4a69d33a0","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-7.0.0-beta.1.tgz","fileCount":6,"integrity":"sha512-olDRh9Ybc4dq72WToox/0T6sJsi1aFM0HGroYIB4FjsO2Dpux+OMmsIw6iAlO/n4JjrC4HsfefVkk4pgRn0SgQ==","signatures":[{"sig":"MEQCIH+FylAKdX8QtUpIZaqeglj28PKMyAT7YudGzP5uyyd2AiBlgLLZbscih2gt5b4vrt+q//6LJqhUWuNN7Yl2mZwLZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHuV5gSNExvdKA7hTI4CMg8AGGMODxjjQvIjE1MH4T9HAiBiqUH/Q+23cUW7mZLxGFfSUOW0DAR2We7wXKcsDgpvgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3741454},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"d8635841374328d986c18249256185377c970019","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_7.0.0-beta.1_1788521772840_0.07007684633496658","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@flusys/ng-ui","version":"7.0.0","license":"MIT","_id":"@flusys/ng-ui@7.0.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"673fc17a46bcc25e2e516f0af4460f52b5e1f1c8","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-7.0.0.tgz","fileCount":6,"integrity":"sha512-al79Ct6OwyFuHuNfF2U5H+47brB1cRZXM2pBB+9sC+dNyDMS0mTYBDh2mJeEi5Po/ANyq6+XQYN38naCAYz84g==","signatures":[{"sig":"MEUCIFjbFfbs/bD0f9JVpx9TPmAYZISZY33+DAlW1QkIOvAtAiEAlHyq8lsi47geiLIMATQDhQrcH9FdGtFO8xHtlNw8TqI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD5npu6xoG0X/b9cLZszZNGmm7Ntb3JOVcJ0rlPQbp7mwIhANLkae//o204ZonpP/Gu4tj98dmTcZocg+qinexTBk7K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3741447},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"ce11d0d1eda3d36875e79d17457c4665d618484d","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_7.0.0_1788537993246_0.4611989792179201","host":"s3://npm-registry-packages-npm-production"}},"7.0.1":{"name":"@flusys/ng-ui","version":"7.0.1","license":"MIT","_id":"@flusys/ng-ui@7.0.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"1668d9dfd6da872f0613051b82f3676c672d0b39","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-7.0.1.tgz","fileCount":6,"integrity":"sha512-5NxP/KfMNtlWzhO7QorAW9re/Cwt20+fu/YCXu4UxILDTBn1MNT5qdtvDp8MTPADWkaw7Rqp/Ikt0fxn3Ul32Q==","signatures":[{"sig":"MEYCIQCn9+rpNMYUq5u8mDVmlp8nHqWoRJ6v/nMyhXreKq2UdgIhAJojE5Go1GnnGqry2j/sT5DxZ/bhHXnTTp/HQf9vh8Ve","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCynaAU28MIaHhMtBmXcLxez9wlI8AtCZz5NTa5ZpE8mQIhALS/Bx7sbpXGvm76/PQqL1YCvCOVZQhbObYZDC8dcQ83","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3738823},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"0031cb144b6521cb6a9f2a0584bfb998c53dd1df","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_7.0.1_1788550163539_0.38332553243019407","host":"s3://npm-registry-packages-npm-production"}},"7.0.2":{"name":"@flusys/ng-ui","version":"7.0.2","license":"MIT","_id":"@flusys/ng-ui@7.0.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"dab5b404bb35cbb27a7f1fca829f94f5729d3d4d","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-7.0.2.tgz","fileCount":6,"integrity":"sha512-oFrR1YOAtxomfDIxws+KXJV3tL9HE88ouaXEjX4gSwEmPscMnucdRYuTGkgVwIaiWJvTktsF63t/DsjhHEHgKA==","signatures":[{"sig":"MEUCIF/ZDFsIQ03ABFQ2U9zjFZi1qywFB4tIKRbDFhe6I5GNAiEAocytBedT9xpzM3RtDWqeCYjv4ySCqpFDXiVdZf70xBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBC3SuYCRipAtagZWPqBDvHd9+NLcPxQhkUvim7fBfQgAiEA/kfbDTuWOGt7biY30QTVCgb+9KrTun1t8HxwYakmuCk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3738823},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f67599310f8dbaf0d57d0c90f02c0fc35236eb02","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_7.0.2_1788589838466_0.40850106864454716","host":"s3://npm-registry-packages-npm-production"}},"7.1.0":{"name":"@flusys/ng-ui","version":"7.1.0","license":"MIT","_id":"@flusys/ng-ui@7.1.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"91c77a980282aa1613313fce922cf29301f370a9","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-7.1.0.tgz","fileCount":6,"integrity":"sha512-P0iet/IdogU0RDfHUnI9SvM5IlJ1H6o0+AMKtxqgarLNCsA+xk2Ecb40aCqen15s3IKqmnGKbMpjNVLtRmmwgQ==","signatures":[{"sig":"MEQCIEO8rQLFfbA3qCi8tpguaLswxMw0rFi+XDLuR4F1JZdeAiBOItQNR+JmNSz3yarhG5nnVBIi07JNkJ6RL9RSYsYS9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAhOdfylLwjp4RN9xJIbHXknEYqDJRau60euObVuaU0PAiAVcWE7UGi5tur8LHu8AeK2RlN5/kCH46BNTSBU5W5IKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3738823},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"1b0b91759bfa3ad7123845198bdd5ad4b6d92bf7","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_7.1.0_1788631081092_0.16221777007799876","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-beta.1":{"name":"@flusys/ng-ui","version":"8.0.0-beta.1","license":"MIT","_id":"@flusys/ng-ui@8.0.0-beta.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"a8e4962d9038a0c266fb34e266c29a7977b6daa3","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.0.0-beta.1.tgz","fileCount":6,"integrity":"sha512-ClCKfvltvY5hDvr5BXqsFlFQxBbJFXz+cfEyiR8ZXkdgrAIjaFrGISux6XgofShA4+rjFanWgDb3aEKPL8r7rg==","signatures":[{"sig":"MEUCIQCUoehV7JnTKEdLsQY7ldbx5m4FhV/cAP0ktknZxSlMXwIgCjqGn13gjcqcHdBgUbwDnZ6BjlrtzOTiCeHrLfpEZ3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC+nZ+oNeDrXdFXwSdBzVraD3q7S1MD7z/0eWInOh440AiBOq67fcXIzx1/0+FtoJBctL+NwPZSWpyyBmQbWPlaqCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714117},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"2a31b9b509fb17cf1b46d79afa0aa31b69ad257b","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.0.0-beta.1_1788804986008_0.9749622126056432","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"@flusys/ng-ui","version":"8.0.0","license":"MIT","_id":"@flusys/ng-ui@8.0.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"103eac5f37683910d45e3ede06cb5031e5a99304","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.0.0.tgz","fileCount":6,"integrity":"sha512-b9iScz8K3/6d+2WVKSQQBwCtreUj/tA4Oyi+JXbmefKBBCz9UgbWfrb5YqhL9PE33c77VqDZk6hHJbDz9z5e6Q==","signatures":[{"sig":"MEUCIB2D+avxFBXQCvS/X6ZNMF+hufAi3Qv5lcezdztLFUaXAiEAoesL/CN2szCtK4gBPDAKK3dxYDwv/Nh5YD3Rh76Mi1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDUhZtd0J3Cs5VIR/LOSaItYVOnhfsNOP0sYVY+3n8BtAIgEjjPJVujiMc9KxyRTlN+hs1VJ4wxqE2e9QKjJZJ9cCs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714306},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"02945afe8d6d65c7a9a89cc4d98fea025de9c4ac","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.0.0_1788859661828_0.720019250914973","host":"s3://npm-registry-packages-npm-production"}},"8.0.1":{"name":"@flusys/ng-ui","version":"8.0.1","license":"MIT","_id":"@flusys/ng-ui@8.0.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"3bd1cc9353b15f599db0677652503b202b6c6451","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.0.1.tgz","fileCount":6,"integrity":"sha512-BoPe03uBl6xU4yKKZQg/N2QH1V/z1L5KuOJrAk1uv2SCJ8YAw0NKTaeyf2xJUWoYxN02zfUHEqpWnOY5pOAG1g==","signatures":[{"sig":"MEUCIGVBy2dSkjEkeiDIjr9cZIV27jBmLuR2NFGK+jOVCqd6AiEAnJQ8FGGUATnI9N9AeW3VoHA9ophD8xjAyBS8Stimq84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEKmsFsktDl02C2YSb/nDl9cwL0lnypwXpFdyIkQ+bn0AiAY5SjIflmU7ovBAKjCcjyLlTYxv+f+9pIaOKb5Fp3lSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3701802},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"de4dd26699cb0ffb137a35d1f6f6a1d24d6f546b","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.0.1_1788885878772_0.5486932037826848","host":"s3://npm-registry-packages-npm-production"}},"8.0.2":{"name":"@flusys/ng-ui","version":"8.0.2","license":"MIT","_id":"@flusys/ng-ui@8.0.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"cfd4ea653aa664b01a7fbf8e22e4730029bce694","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.0.2.tgz","fileCount":6,"integrity":"sha512-G6xdFLOIZ2zuOswNEg5PqDfuGJ0MbnLuWnRxQJzDmlRFnpoBRPm+dMFDUGRO7rAUbQuhS+SRw9SvCrJBaMQSUw==","signatures":[{"sig":"MEUCIQCr5ZRYMeN/2iizPQEPZ4xkgiw6WqC6VLAJk940hB8f+AIgc5qioc7hoxmnPBuMQMS+m256DfAxzJr7jDAUWjN1nM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCY454AgIypeYFKH7wh8IRwAKQfuW5H0kjAWnTbfo6PQwIhAIWPyWNF4/SYWSlyRRdtciQwClfDdhQiAtK+V31ZGNLp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3701802},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f099faaf490fa2a09d42cd86eb432c2ea1a6e877","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.0.2_1788921227353_0.08237917556095264","host":"s3://npm-registry-packages-npm-production"}},"8.0.3":{"name":"@flusys/ng-ui","version":"8.0.3","license":"MIT","_id":"@flusys/ng-ui@8.0.3","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"655b16d87cb680f4c8776460afcea9679a094f71","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.0.3.tgz","fileCount":6,"integrity":"sha512-DM7haN4JsCZy+R2NwhA/zqO5UV8LUPy6XVeUPRBHqoG3VL8ItSDrxSMFXp6dX3Vvis3odTflgXSpcDAQ0aO0jA==","signatures":[{"sig":"MEUCIFeN34FTVPit5F+8ID8Lo4m4RvBSXv86aFbad1HxNLMzAiEAlZKdsax8Kjg+pi5G/pAvz0rJROJuEi/HT9k0rqOF9+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFVUg00N6ouW5F2s2osjWGbJP2IW17viztbv41dLtzdRAiEAxAzdfFuNUaiHORphW2BWcYO2erfZcqR+aKv3Pp9UFYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3701802},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6fbbcb7ceefd4f82c103a44c6c581a6f2309b1b3","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.0.3_1788925278673_0.5075253591655009","host":"s3://npm-registry-packages-npm-production"}},"8.1.0":{"name":"@flusys/ng-ui","version":"8.1.0","license":"MIT","_id":"@flusys/ng-ui@8.1.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"15f766a709f3f48d1c237e762f8cdcc9db785918","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.0.tgz","fileCount":6,"integrity":"sha512-B7dudKuAvMz7kHCXg+7U0BhKZkIBjKHBKdjpBjVFawx9BA//AC4kM/oLMbOCLJgbb5IC09PtS9zkRgVOW46eMw==","signatures":[{"sig":"MEUCICbmOy6ujvj3DdhHJXtCry6Raxj72GzYIJUDVkEbSV/NAiEA0SAbV7iAKKbmp10wBIjsrv42Rnc+e6bw5DpjYYuEcZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDPQTFNCz1+OzD1kK7IKSeX641UNfpQbz60EUEtMFEkIQIhAKGdSZN56bPzljq8T+F3kazoop5YiKBai1LyHH8CUNwg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3702241},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"41957b8de6b091261b7ae6ca1a6429fc039cb779","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.0_1789008422019_0.3088678308448902","host":"s3://npm-registry-packages-npm-production"}},"8.1.1":{"name":"@flusys/ng-ui","version":"8.1.1","license":"MIT","_id":"@flusys/ng-ui@8.1.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"7c9a92b277b530660c11a02413c2733f3cdea8c7","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.1.tgz","fileCount":6,"integrity":"sha512-fmiyq70LbEbyjyClRBcQXT3vk+woTaofbfIUh1O71F121RxSIOJtVA7koZ2EWuV1X7FtymxFn6bU/UIDkyklFQ==","signatures":[{"sig":"MEQCIHzqbQxF+YXOeNhruo3xd8AkkgdECLXKEkXbxkcvHYAiAiByqrXRXTCWC/BYFKTv7iZLveyNgelkpjQGWIXc9IzZ0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBcejFTL5lp3qrG8vFp9EZWFkRTCEED9bxihFT7fdMitAiB04zpn0z65+pamZFRKblRDYkVvlkyf2fYkHlf4hAwR5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3702241},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"624bf5c5d977586389600b6998c7bc1d4b144453","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.1_1789237183366_0.09532660113419","host":"s3://npm-registry-packages-npm-production"}},"8.1.2":{"name":"@flusys/ng-ui","version":"8.1.2","license":"MIT","_id":"@flusys/ng-ui@8.1.2","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"2442029c761ad85d48b9540d44574d983f013323","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.2.tgz","fileCount":6,"integrity":"sha512-fW1DpeJ/WRglG7GzDRz3PdIxXP/xGmwj2VzspQ/OqEbeDtIdWmFoQ3rvUTBNbsEC7sjt1HLbLrdZm5pcmPI8tg==","signatures":[{"sig":"MEUCIQCLQ5CabLeNjtYHtSdzm/d7ZQFAVBjsNuIsa6TvRQETGgIgSlKnNDGct3bLNI4LPgpaMPUDTeXuNh4ZcGuW1iJ75pY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDUtjIwLa1mCr9VpBD1I+rUuXRhBFW1vG8qXjkNNZ9p0QIgVUBloE8HM88zyoSoVOFJMbKu3IBQB4X/M5iVD0OAD0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3702241},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"a287f9aeb0f508546e9ae8e6624e879c7433a0f6","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.2_1789453446294_0.5772610931541484","host":"s3://npm-registry-packages-npm-production"}},"8.1.3":{"name":"@flusys/ng-ui","version":"8.1.3","license":"MIT","_id":"@flusys/ng-ui@8.1.3","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"f32c61862bed6d8cd378808b1aee421d3a56181a","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.3.tgz","fileCount":6,"integrity":"sha512-/yVwaiFJw8NtSH66Qjm5ZAIRq6GT18TeJKLOw/MOHejWikWyR/jkPc+Sw0eB+YVKUTOa+KhQRb7oi6m1Syss1A==","signatures":[{"sig":"MEUCIQCFG5xDW4PeVCl5OpnqBC9sN9qvqKYOdrHF9aP6LqVfrQIgH/7wiFGh7X7rVY7q6nXRtPQ1N07zzj5CW2ICsxqD9TM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCEMVPUdV5st6kCBB1y7xIpIIe5Tf8VUEPHL+s8aw5n7gIgFm++OwlxjwVD5b8vCLlRb6KaUrgGJQcNI9FuzZmuBm4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3714357},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"9d061b121c861bf8d641ac79ae244e61886a09ec","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.3_1789731400031_0.5821973856048441","host":"s3://npm-registry-packages-npm-production"}},"8.1.4":{"name":"@flusys/ng-ui","version":"8.1.4","license":"MIT","_id":"@flusys/ng-ui@8.1.4","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"c624de2f8f3f687b7cb5c29faafab9fc1d56f89c","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.4.tgz","fileCount":6,"integrity":"sha512-RcAOZWN9jDymVWSfAVjnN5kYWZfPuDAw+KnWuPLRkx4kRTU8X8QJKrA/24QlLSQlhsA4PeX7E8tqH6KJ0WPJOg==","signatures":[{"sig":"MEQCIHCx22hiol98w5/qQzp99QwkPuknz2A45wp7OSwnaL/zAiAq5VuQShplsdAZFpAi0v79oqgYutT127ERp/XBKp6uTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAkwl9fi4jZzjY2HsEVaWdEaVXS4ITIKjyyJlfgNu7M5AiA6yiF1jFn+qt9D9mtF6SObQ7XLm+7QmhkUcWpUplfezQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3716330},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"8e606ae4ae1856541acabf329840ce3856355231","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.4_1790138487938_0.23978637513802337","host":"s3://npm-registry-packages-npm-production"}},"8.1.5":{"name":"@flusys/ng-ui","version":"8.1.5","license":"MIT","_id":"@flusys/ng-ui@8.1.5","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"619b580a050eebdfa1af2ec00ec7fb09454376a9","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-8.1.5.tgz","fileCount":6,"integrity":"sha512-eOUEcaPTwunRJ6wsx97sQmZfBv0PvPAz12cmdu8yicl/jozdo+FqtFWhY0H9bkuvL5S2x+oRItdMum0FjiNK0g==","signatures":[{"sig":"MEQCIE6FDhFolQBPGOYq9lmqE6R140R8d6OqrKrSK81IQ9DjAiBR3Jj471iiZU2/rqHPzeo11Rtk63nwl7Od4R8Bl8ngXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDwiBP2WZreY0ZdEbV9MUSn05iwD1CnnV0jy1mFhs+hCQIgUBQ6gFIuSbdOvL4T28KSp5vcWv8Mv3U3fc5iLtQOgDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3716330},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e4166230a0a6d4d10a20f9ded0b0a6e604d7e8aa","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=21.0.0","@angular/forms":">=21.0.0","@angular/common":">=21.0.0","@angular/router":">=21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_8.1.5_1790176529481_0.43148415238082416","host":"s3://npm-registry-packages-npm-production"}},"9.1.0-rc.1":{"name":"@flusys/ng-ui","version":"9.1.0-rc.1","license":"MIT","_id":"@flusys/ng-ui@9.1.0-rc.1","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"eaee8892e7b3ad8e1c1995885f2382293e4953cb","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-9.1.0-rc.1.tgz","fileCount":6,"integrity":"sha512-OeLXSC57e9hmEKCLueAXNDo8eofg9kUq/i5w13tINUXRZaEP9iHWKtheYQzOEd7kYe7lSeKrREaatmcyK4LjoA==","signatures":[{"sig":"MEUCIQDxYI4m4agmzlJ6JZYo2c2AssfT+3f1OVtcSXs5rhhXNAIgVoPLL+yv7fOz1Bo9i90TFe36dWricPWmJtquoAmuP4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCSDLNDGHCnINOREpwsnR5EXuWDbrSt92bE6LYE9UPV/AIgOltFndtKEL+Q7hzWhA/8nP2Sjj8sVrgXKGUoWE/KlRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3777792},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"c30aee74393b9b1da13531cbd706aae8e37c7721","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"deprecated":"Published by mistake. Use 9.0.x","_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.0","chart.js":"^4.5.0","@angular/core":">=22.0.0","@angular/forms":">=22.0.0","@angular/common":">=22.0.0","@angular/router":">=22.0.0","@angular/platform-browser":">=22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_9.1.0-rc.1_1790559671733_0.18727049089101255","host":"s3://npm-registry-packages-npm-production"}},"9.1.0":{"name":"@flusys/ng-ui","version":"9.1.0","license":"MIT","_id":"@flusys/ng-ui@9.1.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"8c3e42d330550ae72ee61c132591331d8067cb1a","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-9.1.0.tgz","fileCount":6,"integrity":"sha512-c1qq5OBpBGESHWy+oynD82mAQoySCrkEbyBMbXIh1NnY4h654h+drYe/SKzpAKUzM0+O14UDINqd+bG9R87mxg==","signatures":[{"sig":"MEQCIAyfkOATwMolbz5IaAQRl/p3TpKmnxRnFruA3zG/+sytAiB+2sRwHNoQmHRbvt8od40hHSJptKjoqmBiUy83ob1VSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBckFm0g3p3c0R0ZdIDB4LqTRp7l50Cn1TF7Cge3cBQWAiEA8e38b62ZFUv08bOEYFcgAxFgeEXOH6ZXtZRMRy1HGLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3777761},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"357781145a06342a653791a5404734bea6d79011","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"deprecated":"Published by mistake. Use 9.0.x","_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.0","chart.js":"^4.5.0","@angular/core":">=22.0.0","@angular/forms":">=22.0.0","@angular/common":">=22.0.0","@angular/router":">=22.0.0","@angular/platform-browser":">=22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_9.1.0_1790568586659_0.776161435074961","host":"s3://npm-registry-packages-npm-production"}},"9.0.0":{"name":"@flusys/ng-ui","version":"9.0.0","license":"MIT","_id":"@flusys/ng-ui@9.0.0","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"dist":{"shasum":"9923c3de055aadd9eddf42f48f0a80b0bb11e278","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-9.0.0.tgz","fileCount":6,"integrity":"sha512-+5YjBB8nFyK+NbcrGt7f9L0X/rp5FO7AvFnbMs9DZZKlAErlJYxjV/Tj9NKPaCixk38hhM3ktCpRaps50RmMSw==","signatures":[{"sig":"MEQCICeM6CE63kE7Ke7ukYARht3eS5m4V3OvfZXCwR7QM9ofAiAJ1uiadAkt8doz2iwNBg4nb+ZwBGqCHUEiqCBPnXSbhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAMAHMeiupiExRqigK8egDtmBYysOYxkDPRpjDHV8jFNAiAErDcUyCNria29O2jFx7OklRRHY7aTCEoGaQ6u7nQTbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3777761},"type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"839cfff053f02b66a5a57e59695bb82235339d4d","typings":"types/flusys-ng-ui.d.ts","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.0","chart.js":"^4.5.0","@angular/core":">=22.0.0","@angular/forms":">=22.0.0","@angular/common":">=22.0.0","@angular/router":">=22.0.0","@angular/platform-browser":">=22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-ui_9.0.0_1790765343677_0.6116327645663022","host":"s3://npm-registry-packages-npm-production"}},"9.0.1":{"_id":"@flusys/ng-ui@9.0.1","dist":{"shasum":"06433befc87f17a879affab65d2a25fd0737ce26","tarball":"https://registry.npmjs.org/@flusys/ng-ui/-/ng-ui-9.0.1.tgz","fileCount":6,"integrity":"sha512-qmU5nqCvJ1tzhPUW8LxFhtgoZv7oVZFPDDwi3PSKW7jzXtZeGLs/XUpoIaY61YS2MxqJj18F+ngpOjAA1tE7UA==","signatures":[{"sig":"MEQCIDCciyfYIDQnpJKlYXNhVD5GRP33YhOekmalFeOO+xGZAiA5RKfby1oDoRT+rS+JVsw+nFCKQ8IS/SX7ZxvBjcPWuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEDj0LViTls6o8IS5ZzExOBWdpRJCl+oSiG5sInGqSDvAiEApt7GpLxXjSGbycPirkNtyA73A3b/US0yUXWffCFhnI8="}],"unpackedSize":3777646},"name":"@flusys/ng-ui","type":"module","module":"fesm2022/flusys-ng-ui.mjs","exports":{".":{"types":"./types/flusys-ng-ui.d.ts","default":"./fesm2022/flusys-ng-ui.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f8ad3379221fc3130b96982f35c939fc9bae9eab","license":"MIT","typings":"types/flusys-ng-ui.d.ts","version":"9.0.1","_npmUser":{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"},"_npmVersion":"11.16.0","description":"FLUSYS native UI component library ","directories":{},"maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0","@lucide/angular":"^1.23.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.0","chart.js":"^4.5.0","@angular/core":">=22.0.0","@angular/forms":">=22.0.0","@angular/common":">=22.0.0","@angular/router":">=22.0.0","@angular/platform-browser":">=22.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ng-ui_9.0.1_1790778009901_0.3193184121333248"}}},"time":{"created":"2026-07-09T18:43:37.769Z","modified":"2026-09-30T14:20:11.069Z","6.0.0-beta.1":"2026-07-09T18:43:38.077Z","6.0.0-beta.2":"2026-07-10T16:20:33.540Z","1.2.0-rc.1":"2026-07-11T16:53:44.318Z","6.0.0-rc.1":"2026-07-11T17:01:16.921Z","6.0.0":"2026-07-12T13:23:27.114Z","6.0.1":"2026-07-17T15:03:09.960Z","6.0.2":"2026-07-20T14:07:59.385Z","6.1.0":"2026-07-22T04:52:17.408Z","6.1.1":"2026-07-23T21:05:22.616Z","6.1.2":"2026-07-24T09:09:24.873Z","6.1.3":"2026-07-27T17:42:33.218Z","6.2.0":"2026-07-28T03:11:00.548Z","6.2.1":"2026-07-30T05:08:47.941Z","6.2.2":"2026-08-20T04:30:01.081Z","6.3.0":"2026-08-24T18:21:23.769Z","6.4.0":"2026-09-03T06:05:42.898Z","6.4.1":"2026-09-03T16:08:37.497Z","7.0.0-beta.1":"2026-09-04T11:36:12.941Z","7.0.0":"2026-09-04T16:06:33.364Z","7.0.1":"2026-09-04T19:29:23.669Z","7.0.2":"2026-09-05T06:30:38.557Z","7.1.0":"2026-09-05T17:58:01.200Z","8.0.0-beta.1":"2026-09-07T18:16:26.143Z","8.0.0":"2026-09-08T09:27:42.007Z","8.0.1":"2026-09-08T16:44:38.894Z","8.0.2":"2026-09-09T02:33:47.490Z","8.0.3":"2026-09-09T03:41:18.773Z","8.1.0":"2026-09-10T02:47:02.109Z","8.1.1":"2026-09-12T18:19:43.525Z","8.1.2":"2026-09-15T06:24:06.399Z","8.1.3":"2026-09-18T11:36:40.142Z","8.1.4":"2026-09-23T04:41:28.057Z","8.1.5":"2026-09-23T15:15:29.639Z","9.1.0-rc.1":"2026-09-28T01:41:11.937Z","9.1.0":"2026-09-28T04:09:46.783Z","9.0.0":"2026-09-30T10:49:03.815Z","9.0.1":"2026-09-30T14:20:09.999Z"},"license":"MIT","description":"FLUSYS native UI component library ","maintainers":[{"name":"sfd.mhrana","email":"sfd.mhrana@gmail.com"}],"readme":"# @flusys/ng-ui\n\nNative Angular 22 UI component library for the FLUSYS platform — signal-based, standalone, zoneless-compatible, and Tailwind-friendly. No PrimeNG dependency; every component below is implemented natively in this package.\n\n[![npm version](https://img.shields.io/npm/v/@flusys/ng-ui.svg)](https://www.npmjs.com/package/@flusys/ng-ui)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n---\n\n## Installation\n\n```bash\nnpm install @flusys/ng-ui @flusys/ng-core\n```\n\nAll components/directives are standalone — import them individually, or import `UiModule` for the full set (useful in non-standalone contexts or quick prototyping).\n\n---\n\n## Setup\n\nRegister the theme initializer once in `app.config.ts`:\n\n```typescript\nimport { ApplicationConfig } from \"@angular/core\";\nimport { provideNgUI } from \"@flusys/ng-ui\";\n\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideNgUI({\n      theme: {\n        preset: { preset: \"violet\", options: { darkModeSelector: \".app-dark\" } },\n      },\n      translation: {\n        accept: \"Yes\",\n        reject: \"No\",\n      },\n    }),\n  ],\n};\n```\n\n`provideNgUI(options?: ProvideNgUIOptions)` registers:\n\n- `NgUIConfig` — holds the translation/localization strings consumed internally by components (dialog buttons, date picker labels, upload labels, etc.). Override via the `translation` option.\n- An `APP_INITIALIZER` that applies the CSS custom-property theme on bootstrap and re-applies dark/light semantics whenever `.app-dark` is toggled on `<html>` (via `MutationObserver`).\n\n`ProvideNgUIOptions`:\n\n```typescript\ninterface ProvideNgUIOptions {\n  theme?: {\n    preset?: ApplyThemeOptions | { preset: ApplyThemeOptions; options: { darkModeSelector?: string } };\n    options?: { darkModeSelector?: string };\n  };\n  translation?: NgUITranslationConfig;\n  ripple?: boolean;\n}\n```\n\nTwo core services are provided at root and used implicitly by `ToastComponent`/`ConfirmDialog`:\n\n```typescript\nimport { MessageService, ConfirmationService } from \"@flusys/ng-ui\";\n\nconst messageService = inject(MessageService);\nmessageService.add({ severity: \"success\", summary: \"Saved\", detail: \"Record updated.\" });\n\nconst confirmationService = inject(ConfirmationService);\nconfirmationService.confirm({\n  message: \"Delete this record?\",\n  header: \"Confirm\",\n  icon: \"alert-triangle\",\n  accept: () => doDelete(),\n});\n```\n\nPlace `<f-toast />` and `<f-confirmdialog />` once near the root of your app shell to render messages/confirmations raised from anywhere via these services.\n\n---\n\n## Theming\n\nTheming is CSS-custom-property based (`--f-*` variables) — no SCSS recompilation needed to switch colors.\n\n### `applyTheme`\n\n```typescript\nimport { applyTheme } from \"@flusys/ng-ui\";\n\napplyTheme({\n  preset: \"Aura\", // 'Aura' | 'Lara' | 'Nora'\n  primary: \"violet\", // any key of PRIMARY_PALETTES, or 'noir'\n  surface: \"slate\", // any key of SURFACE_PALETTES, or null for light/dark default\n  darkTheme: false,\n});\n```\n\nLower-level appliers are also exported for partial updates: `applyPrimaryPalette(palette, isDark?, root?)`, `applySurfacePalette(palette, root?)`, `applyPreset(preset, root?)`, `applyLightSemantics(root?)`, `applyDarkSemantics(root?)`.\n\n### Presets\n\n```typescript\nimport { PRESETS, PRESET_NAMES, AURA_PRESET, LARA_PRESET, NORA_PRESET } from \"@flusys/ng-ui\";\nimport type { PresetName, ThemePreset } from \"@flusys/ng-ui\";\n\nPRESET_NAMES; // ['Aura', 'Lara', 'Nora']\nPRESETS[\"Nora\"]; // ThemePreset — border radius, shadows, focus ring, card + select-button tokens\n```\n\nEach `ThemePreset` is a whole design language, not a palette. It controls the radius scale, border width, shadow scale, transition duration, focus ring, **control density** (field and button padding), button weight and tracking, overlay shape and elevation, card tokens, shell chrome (sidebar / topbar / active menu item), and select-button tokens.\n\n| Preset | Language                                                                                            |\n| ------ | --------------------------------------------------------------------------------------------------- |\n| `Aura` | Soft and elevated — rounded controls, compact rows, diffuse shadows, hairline borders. The default.  |\n| `Lara` | Structural and flat — tighter corners, noticeably taller rows, shadows replaced by linework, bolder type. |\n| `Nora` | Sharp and brutalist — zero radius, 2px borders, no motion, solid highlights, heaviest type.          |\n\nPreset tokens reach the UI through three routes, and a new token should use one of them rather than being read directly in a component:\n\n1. **Tailwind's own scales** — `@theme inline` in `themes/tailwind.scss` maps `--radius-*`, `--shadow-*` and `--default-border-width` onto preset tokens, so every existing `rounded-*`, `shadow-*` and `border` utility in the app is already preset-driven.\n2. **The `f-*` control utilities** — `f-field` / `f-field-sm` / `f-field-lg` / `f-field-compact` / `f-field-shape`, `f-btn` / `f-btn-sm` / `f-btn-lg` / `f-btn-icon*` / `f-btn-round`, and `f-overlay` / `f-overlay-shape`. Form fields and buttons use these instead of fixed padding and radius classes; that is what lets a preset change how dense the UI reads. Never hard-code a control's padding or radius.\n3. **`--f-*` custom properties** — read directly by the layout SCSS for shell chrome. The applier also stamps `data-f-preset=\"<name>\"` on `<html>` for the rare shell rule that has to know the design language as a whole rather than one token's value.\n\n### Palettes\n\n```typescript\nimport { PRIMARY_PALETTES, SURFACE_PALETTES, NOIR_PRIMARY } from \"@flusys/ng-ui\";\nimport type { ColorPalette, SurfacePalette } from \"@flusys/ng-ui\";\n\nPRIMARY_PALETTES[\"emerald\"]; // { '50': '#ecfdf5', ..., '950': '#022c22' }\nSURFACE_PALETTES[\"zinc\"]; // { 0: '#ffffff', '50': ..., '950': '#09090b' }\n```\n\n`PRIMARY_PALETTES` ships all 16 Tailwind color ramps (`emerald`, `green`, `lime`, `orange`, `amber`, `yellow`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`) plus the special `NOIR_PRIMARY` (grayscale primary that maps onto the active surface palette). `SURFACE_PALETTES` ships `slate`, `gray`, `zinc`, `neutral`, `stone`, `soho`, `viva`, `ocean`.\n\n### Bootstrap helper\n\n```typescript\nimport { buildBootstrapPreset } from \"@flusys/ng-ui\";\n\nconst options = buildBootstrapPreset({ preset: \"Aura\", primary: \"violet\", surface: null });\n// Reads `flusys.layout.config` from localStorage when isMemorable !== false\n```\n\n---\n\n## UiModule\n\n```typescript\nimport { UiModule } from \"@flusys/ng-ui\";\n\n@Component({\n  imports: [UiModule],\n  // ...\n})\nexport class SomePage {}\n```\n\n`UiModule` re-exports every component/directive documented below plus `FormsModule`. Prefer importing individual standalone components in new code; `UiModule` exists for bulk-import convenience.\n\n---\n\n## Disabled State\n\nEvery component with a `disabled` input handles it the same way:\n\n- **Form controls** (`select`, `multiselect`, `checkbox`, `radiobutton`, `toggleswitch`, `togglebutton`, `selectbutton`, `password`, `inputnumber`, `inputotp`, `datepicker`, `autocomplete`, `cascadeselect`, `treeselect`, `colorpicker`, `listbox`, `rating`, `knob`, `slider`) expose `isDisabled()`, which combines the `disabled` input with `setDisabledState()`. That covers `[formField]`, `FormControl.disable()` and `[(ngModel)] [disabled]`.\n- **Host clicks are blocked while disabled.** Buttons, `fButton`, split buttons, speed dial, chips, tabs, accordion headers, inplace, file upload, tree, order list, pick list, organization chart and all of the form controls above swallow clicks and middle-clicks in the capture phase, so a consumer's `(click)` or `routerLink` on the host never fires while the component is disabled.\n- **`fButton` on non-button hosts** (e.g. `<a fButton routerLink>`) also drops out of the tab order while disabled or loading, and restores the consumer's own `tabindex` afterwards.\n- **Disabled menu items** in `menu`, `menubar`, `tieredmenu`, `contextmenu`, `megamenu`, `panelmenu` and `breadcrumb` render with no `href`, don't navigate, and don't run `command`.\n\nUse `(onChange)` to react to value changes, not `(click)` on the host: a `<label>` click re-dispatches a second click to the inner input.\n\n---\n\n## Buttons & Actions\n\n### ButtonComponent\n\nStandard button with severity, icon, and loading states. Selector: `f-button`.\n\n```html\n<f-button [label]=\"'shared.save' | translate\" icon=\"check\" severity=\"primary\" [loading]=\"isSaving()\" (onClick)=\"save()\" />\n```\n\nKey inputs: `label`, `icon`, `iconPos`, `severity` (`primary | secondary | success | info | warn | danger | contrast | help`), `disabled`, `loading`, `text`, `link`, `outlined`, `raised`, `rounded`, `fluid`, `size` (`small | large | null`). Output: `onClick`.\n\n### FButtonDirective\n\nAttribute-directive version of the button — apply button styling to a native `<button>` or `<a>`. Selector: `[fButton]`.\n\n```html\n<a fButton severity=\"secondary\" outlined label=\"Cancel\"></a>\n```\n\nKey inputs: `severity`, `text`, `outlined`, `link`, `rounded`, `raised`, `fluid`, `disabled`, `loading`, `size`, `label`, `icon`, `iconPos`, `ariaLabel`, `plain`.\n\n`icon` and `loadingIcon` are Lucide names (same as `ui-icon`); the directive renders a real `ui-icon` before or after the label, and a spinning `loader-circle` while `loading`.\n\n### SplitButtonComponent\n\nPrimary action button with an attached dropdown menu. Selector: `f-splitbutton`.\n\n```html\n<f-splitbutton [label]=\"'shared.export' | translate\" icon=\"download\" [model]=\"exportMenu\" severity=\"primary\" (onClick)=\"exportDefault()\" />\n```\n\nKey inputs: `label`, `icon`, `model` (`MenuItem[]`), `severity`, `disabled`, `loading`, `appendTo`. Outputs: `onClick`, `onDropdownClick`.\n\n### ButtonGroupComponent\n\nGroups adjacent buttons with connected borders via content projection. Selector: `f-buttongroup`.\n\n```html\n<f-buttongroup>\n  <f-button label=\"Left\" />\n  <f-button label=\"Right\" />\n</f-buttongroup>\n```\n\n### SpeedDialComponent\n\nFloating action button that expands into a radial/linear menu. Selector: `f-speeddial`.\n\n```html\n<f-speeddial [model]=\"actions\" icon=\"plus\" direction=\"up\" type=\"linear\" [radius]=\"80\" />\n```\n\nKey inputs: `model` (`MenuItem[]`), `icon`, `direction` (`up | down | left | right`), `rotate`, `type` (`linear | circle`), `radius`.\n\n---\n\n## Form Inputs\n\n### InputTextDirective\n\nApplies text-input styling to native `<input>`. Selector: `[fInputText]`.\n\n```html\n<input fInputText type=\"text\" [invalid]=\"form.controls.name.invalid && form.controls.name.touched\" [placeholder]=\"'form.namePlaceholder' | translate\" />\n```\n\nKey inputs: `invalid`, `touched` (defaults `true`; gates red invalid styling on `invalid && touched`).\n\n### InputPasswordDirective\n\nPassword-input styling with optional native masking. Selector: `[fInputPassword]`.\n\n```html\n<input fInputPassword type=\"password\" [mask]=\"true\" />\n```\n\nKey input: `mask` (default `true`).\n\n### TextareaDirective\n\nApplies textarea styling. Selector: `[fTextarea]`.\n\n```html\n<textarea fTextarea rows=\"4\" [invalid]=\"control.invalid\"></textarea>\n```\n\nKey inputs: `invalid`, `touched`.\n\n### SelectComponent\n\nNative single-select dropdown with filtering. Selector: `f-select`.\n\n```html\n<f-select [options]=\"countries\" optionLabel=\"name\" optionValue=\"code\" [(ngModel)]=\"selectedCountry\" [filter]=\"true\" [placeholder]=\"'form.selectCountry' | translate\" />\n```\n\nKey inputs: `options`, `optionLabel`, `optionValue`, `placeholder`, `disabled`, `filter`, `lazy`, `selectedObject`, `showClear`, `loading`, `invalid`, `touched`, `editable`, `appendTo` (`self | body`). Outputs: `onFilter`, `onChange`, `onShow`, `onHide`, `onBlur`, `onLazyLoad`. Supports `fTemplate=\"selectedItem\"` / `fTemplate=\"item\"` content templates.\n\n**Lazy/search edit forms — `selectedObject`:** when `[lazy]=\"true\"` or `[filter]=\"true\"` is combined with a server-paged/searched `options()` list, the page currently loaded may not contain the option matching the bound value (e.g. editing a record whose selected item isn't in the first lazy page). Pass the full entity being edited via `[selectedObject]` and the component pins it into the option pool (deduped by `optionValue`, only while it actually matches the current value) so the trigger label, checkmark and list row always resolve correctly:\n\n```html\n<f-select [options]=\"users()\" optionLabel=\"name\" optionValue=\"id\" [lazy]=\"true\" (onLazyLoad)=\"loadUsers($event)\" [selectedObject]=\"editingUser()\" [(ngModel)]=\"managerId\" />\n```\n\n### MultiSelectComponent\n\nMulti-value select with chip/comma display. Selector: `f-multiselect`.\n\n```html\n<f-multiselect [options]=\"roles\" optionLabel=\"name\" [(ngModel)]=\"selectedRoles\" display=\"chip\" [showToggleAll]=\"true\" />\n```\n\nKey inputs: `options`, `optionLabel`, `optionValue`, `placeholder`, `filter`, `lazy`, `selectedObjects`, `display` (`comma | chip`), `maxSelectedLabels`, `selectionLimit`, `showToggleAll`, `invalid`, `touched`, `appendTo` (`self | body`).\n\n**Lazy/search edit forms — `selectedObjects`:** same problem as `f-select` but for every currently selected value — pass the full entities (e.g. the record's already-selected roles) via `[selectedObjects]` so chips never silently vanish when the lazy/filtered `options()` page doesn't include them:\n\n```html\n<f-multiselect [options]=\"roles()\" optionLabel=\"name\" optionValue=\"id\" [lazy]=\"true\" (onLazyLoad)=\"loadRoles($event)\" [selectedObjects]=\"editingUser().roles\" [(ngModel)]=\"roleIds\" />\n```\n\n### CheckboxComponent\n\nBinary or value-bound checkbox. Selector: `f-checkbox`.\n\n```html\n<f-checkbox [(checked)]=\"acceptedTerms\" [label]=\"'auth.acceptTerms' | translate\" [binary]=\"true\" />\n```\n\nKey inputs: `label`, `binary`, `disabled`, `invalid`, `indeterminate`, `touched`. Model: `checked`. Outputs: `onChange` (`CheckboxChangeEvent`), `onBlur`.\n\n### ToggleSwitchComponent\n\nOn/off switch with `ControlValueAccessor` support. Selector: `f-toggleswitch`.\n\n```html\n<f-toggleswitch formControlName=\"isActive\" [trueValue]=\"true\" [falseValue]=\"false\" />\n```\n\nKey inputs: `disabled`, `readonly`, `invalid`, `trueValue`, `falseValue`, `ariaLabel`.\n\n### ToggleButtonComponent\n\nTwo-state button toggle with distinct on/off labels and icons. Selector: `f-togglebutton`.\n\n```html\n<f-togglebutton [(ngModel)]=\"isPublic\" [onLabel]=\"'shared.public' | translate\" [offLabel]=\"'shared.private' | translate\" />\n```\n\nKey inputs: `onLabel`, `offLabel`, `onIcon`, `offIcon`, `disabled`, `invalid`.\n\n### SelectButtonComponent\n\nSingle/multi-choice segmented control. Selector: `f-selectbutton`.\n\n```html\n<f-selectbutton [options]=\"viewModes\" optionLabel=\"label\" [(ngModel)]=\"currentView\" />\n```\n\nKey inputs: `options`, `optionLabel`, `optionValue`, `multiple`, `disabled`, `allowEmpty`, `size`. Output: `onChange`.\n\n### PasswordComponent\n\nPassword field with strength feedback and reveal toggle. Selector: `f-password`.\n\n```html\n<f-password [(ngModel)]=\"password\" [feedback]=\"true\" [toggleMask]=\"true\" [placeholder]=\"'auth.passwordPlaceholder' | translate\" />\n```\n\nKey inputs: `toggleMask`, `feedback`, `disabled`, `placeholder`, `invalid`, `touched`. Output: `onBlur`.\n\n### InputNumberComponent\n\nNumeric input with optional increment/decrement buttons, prefix/suffix, and grouping. Selector: `f-inputnumber`.\n\n```html\n<f-inputnumber [(ngModel)]=\"quantity\" [min]=\"0\" [max]=\"100\" [showButtons]=\"true\" suffix=\" kg\" />\n```\n\nKey inputs: `min`, `max`, `step`, `showButtons`, `disabled`, `invalid`, `prefix`, `suffix`, `useGrouping`, `buttonLayout` (`stacked | horizontal`). Output: `onBlur`.\n\n### RadioButtonComponent\n\nSingle radio input within a shared `name` group. Selector: `f-radiobutton`.\n\n```html\n<f-radiobutton name=\"plan\" value=\"pro\" [(ngModel)]=\"selectedPlan\" [label]=\"'billing.proPlan' | translate\" />\n```\n\nKey inputs: `name`, `value`, `label`, `disabled`, `invalid`. Outputs: `onClick` (`RadioButtonClickEvent`), `onBlur`.\n\n### RatingComponent\n\nStar rating input. Selector: `f-rating`.\n\n```html\n<f-rating [(ngModel)]=\"rating\" [stars]=\"5\" [cancel]=\"true\" (onRate)=\"onRatingChange($event)\" />\n```\n\nKey inputs: `stars`, `cancel`, `readonly`, `disabled`, `invalid`, `iconOn`, `iconOff`. Outputs: `onRate`, `onBlur`.\n\n### DatePickerComponent\n\nCalendar/date input with single, range, and multiple selection modes. Selector: `f-datepicker`.\n\n```html\n<f-datepicker [(ngModel)]=\"eventDate\" selectionMode=\"single\" [showIcon]=\"true\" [minDate]=\"today\" [placeholder]=\"'form.selectDate' | translate\" />\n```\n\nKey inputs: `placeholder`, `dateFormat`, `disabled`, `showTime`, `selectionMode` (`single | range | multiple`), `minDate`, `maxDate`, `invalid`, `touched`, `showClear`, `showIcon`, `showButtonBar`, `appendTo`. Output: `onBlur`.\n\n### FileUploadComponent\n\nFile upload with drag-drop, auto-upload, and progress. Selector: `f-fileupload`.\n\n```html\n<f-fileupload accept=\"image/*\" [maxFileSize]=\"2000000\" [multiple]=\"true\" (onSelect)=\"onFilesSelected($event)\" (onError)=\"onUploadError($event)\" />\n```\n\nKey inputs: `name`, `accept`, `multiple`, `auto`, `maxFileSize`, `fileLimit`, `disabled`, `url`, `customUpload`, `mode` (`advanced | basic`). Outputs: `onSelect` (`FileSelectEvent`), `onRemove` (`FileRemoveEvent`), `onClear`, `onError` (`FileErrorEvent[]`).\n\nText inputs (English defaults — bind translated strings): `chooseLabel`, `uploadLabel`, `cancelLabel`, `removeLabel` (per-file remove button's accessible name), `dragDropLabel`, `dragDropHintLabel`.\n\nPass `<ng-template #content>` (or `fTemplate=\"content\"`) to replace the default drop zone and file list in advanced mode. Drag-and-drop still works on the wrapper. Context (`FileUploadContentContext`): `$implicit`/`files`, `items`, `disabled`, `removeFile(file)`, `clear()`.\n\n```html\n<f-fileupload [chooseLabel]=\"'storage.button.choose.file' | translate\">\n  <ng-template #content let-files let-removeFile=\"removeFile\">\n    @for (file of files; track file.name) {\n      <button fButton [text]=\"true\" [ariaLabel]=\"'shared.remove' | translate\" (click)=\"removeFile(file)\">{{ file.name }}</button>\n    }\n  </ng-template>\n</f-fileupload>\n```\n\n### AutoCompleteComponent\n\nType-ahead input backed by an async or static suggestion list. Selector: `f-autocomplete`.\n\n```html\n<f-autocomplete [suggestions]=\"filteredUsers()\" field=\"name\" [(ngModel)]=\"selectedUser\" (completeMethod)=\"search($event.query)\" />\n```\n\nKey inputs: `suggestions`, `field`, `placeholder`, `ariaLabel`, `disabled`, `dropdown`, `forceSelection`, `multiple`, `delay`, `minLength`, `completeOnFocus`, `freeText`, `filterLocally`, `invalid`, `touched`, `appendTo` (`self | body`). Outputs: `completeMethod` (`AutoCompleteCompleteEvent`), `onSelect` (`AutoCompleteSelectEvent`), `onUnselect`, `onClear`, `onChange`.\n\n**Editable combobox (free text + suggestions).** By default only a picked suggestion reaches the model; typed text stays in the input. `freeText` writes every keystroke to the model (single mode), so the value can be anything the user types, with the suggestions as shortcuts. `filterLocally` filters a static `suggestions` list case-insensitively by the typed text, with no `completeMethod` handler needed (grouped lists are filtered per group, empty groups dropped). Focusing the input or pressing the dropdown button shows the full list again. In `freeText` mode the panel stays closed rather than showing the empty message when nothing matches, and clearing sets `''` instead of `null`.\n\n```html\n<f-autocomplete\n  freeText\n  filterLocally\n  completeOnFocus\n  dropdown\n  [minLength]=\"0\"\n  [delay]=\"0\"\n  [suggestions]=\"['input.email', 'loop.item', 'user.id']\"\n  [ariaLabel]=\"'app.field' | translate\"\n  [(ngModel)]=\"path\"\n/>\n```\n\n### ColorPickerComponent\n\nInline or overlay color picker. Selector: `f-colorpicker`.\n\n```html\n<f-colorpicker [(ngModel)]=\"brandColor\" format=\"hex\" [inline]=\"false\" (onChange)=\"onColorChange($event)\" />\n```\n\nKey inputs: `format` (`hex | rgb | hsb`), `inline`, `disabled`, `invalid`. Output: `onChange` (`ColorPickerChangeEvent`).\n\n### ListboxComponent\n\nScrollable option list with optional filter and multi-select. Selector: `f-listbox`.\n\n```html\n<f-listbox [options]=\"statuses\" optionLabel=\"label\" [(ngModel)]=\"selectedStatus\" [filter]=\"true\" />\n```\n\nKey inputs: `options`, `optionLabel`, `optionValue`, `multiple`, `filter`, `filterPlaceholder`, `disabled`, `metaKeySelection`, `emptyMessage`. Output: `onChange` (`ListboxChangeEvent`).\n\n### InputMaskDirective\n\nApplies a slotted input mask to a native `<input>`. Selector: `[fInputMask]`.\n\n```html\n<input fInputMask=\"(999) 999-9999\" slotChar=\"_\" [placeholder]=\"'form.phonePlaceholder' | translate\" />\n```\n\nKey inputs: `fInputMask` (mask pattern), `slotChar`.\n\n### InputOtpComponent\n\nSegmented one-time-passcode input. Selector: `f-inputotp`.\n\n```html\n<f-inputotp [(ngModel)]=\"otpCode\" [length]=\"6\" [integerOnly]=\"true\" [mask]=\"false\" />\n```\n\nKey inputs: `length`, `mask`, `disabled`, `integerOnly`, `invalid`.\n\n### SliderComponent\n\nRange slider input, single or dual-handle. Selector: `f-slider`.\n\n```html\n<f-slider [(ngModel)]=\"priceRange\" [min]=\"0\" [max]=\"1000\" [range]=\"true\" />\n```\n\nKey inputs: `min`, `max`, `step`, `range`, `disabled`.\n\n### KnobComponent\n\nCircular dial numeric input. Selector: `f-knob`.\n\n```html\n<f-knob [(ngModel)]=\"volume\" [min]=\"0\" [max]=\"100\" [size]=\"100\" valueColor=\"var(--f-primary-500)\" />\n```\n\nKey inputs: `size`, `min`, `max`, `step`, `strokeWidth`, `showValue`, `disabled`, `readonly`, `valueColor`, `rangeColor`, `textColor`.\n\n### CascadeSelectComponent\n\nHierarchical dependent-option selector (e.g. country → state → city). Selector: `f-cascadeselect`.\n\n```html\n<f-cascadeselect [options]=\"locations\" optionLabel=\"label\" optionChildren=\"children\" [(ngModel)]=\"selectedLocation\" />\n```\n\nKey inputs: `options`, `optionLabel`, `optionValue`, `optionChildren`, `placeholder`, `disabled`, `invalid`, `touched`, `appendTo` (`self | body`).\n\n### KeyFilterDirective\n\nRestricts keystrokes on a native input to a preset or custom pattern. Selector: `[fKeyFilter]`.\n\n```html\n<input fInputText [fKeyFilter]=\"'num'\" />\n```\n\nKey input: `fKeyFilter` (`'int' | 'pint' | 'num' | 'pnum' | 'money' | 'alpha' | 'alphanum' | 'email' | RegExp | null`).\n\n### TreeSelectComponent\n\nSelect input backed by a hierarchical tree of options. Selector: `f-treeselect`.\n\n```html\n<f-treeselect [options]=\"orgTree\" [(ngModel)]=\"selectedNode\" selectionMode=\"checkbox\" [filter]=\"true\" />\n```\n\nKey inputs: `options` (`TreeNode[]`), `placeholder`, `inputId` (id of the trigger, for `<label for>`), `disabled`, `filter`, `filterBy`, `selectionMode` (`single | multiple | checkbox`), `propagateSelectionDown` / `propagateSelectionUp` (checkbox cascading), `invalid`, `touched`, `appendTo` (`self | body`). A node with `selectable: false` is a heading: clicking it expands or collapses it, and it never becomes part of the value.\n\n### IconFieldComponent / InputIconComponent\n\nPositions an icon inside a text input (search boxes, etc.). Selectors: `f-iconfield`, `f-inputicon`.\n\n```html\n<f-iconfield>\n  <f-inputicon icon=\"search\" />\n  <input fInputText [placeholder]=\"'shared.search' | translate\" />\n</f-iconfield>\n```\n\n`f-inputicon`'s `icon` input renders the icon at a fixed 17px regardless of ambient font-size, so it always aligns with the field — prefer it over projecting a manually-sized `<ui-icon>` as content. Content projection (`<f-inputicon><ui-icon .../></f-inputicon>`) still works for cases needing a non-Lucide icon or custom template.\n\n### FloatLabelComponent\n\nFloats a `<label>` above the input on focus/fill. Selector: `f-floatlabel`.\n\n```html\n<f-floatlabel variant=\"over\">\n  <input fInputText id=\"email\" />\n  <label for=\"email\">{{ 'form.email' | translate }}</label>\n</f-floatlabel>\n```\n\nKey input: `variant` (`over | in | on`).\n\n### IftaLabelComponent\n\n\"In-the-field\" label layout, pairing a persistent inline label with the input. Selector: `f-iftalabel`.\n\n```html\n<f-iftalabel>\n  <input fInputText id=\"username\" />\n  <label for=\"username\">{{ 'form.username' | translate }}</label>\n</f-iftalabel>\n```\n\n### InputGroupComponent / InputGroupAddonComponent\n\nGroups an input with leading/trailing addons (currency symbols, buttons). Selectors: `f-inputgroup`, `f-inputgroupaddon`.\n\n```html\n<f-inputgroup>\n  <f-inputgroupaddon>$</f-inputgroupaddon>\n  <input fInputText type=\"number\" />\n</f-inputgroup>\n```\n\n### FluidComponent\n\nStretches all descendant form controls to full width. Selector: `f-fluid`.\n\n```html\n<f-fluid>\n  <f-select [options]=\"items\" />\n</f-fluid>\n```\n\n---\n\n## Data Display & Tables\n\n### TableComponent\n\nFull-featured data table — sorting, pagination, lazy loading, scrollable body. Selector: `f-table`.\n\n```html\n<f-table [value]=\"rows()\" [lazy]=\"true\" [loading]=\"loading()\" [totalRecords]=\"total()\" [rows]=\"pageSize\" [paginator]=\"true\" (onLazyLoad)=\"loadPage($event)\">\n  <ng-template fTemplate=\"header\">\n    <th fSortableColumn=\"name\">{{ 'shared.name' | translate }} <f-sorticon field=\"name\" /></th>\n  </ng-template>\n  <ng-template fTemplate=\"body\" let-row>\n    <td>{{ row.name }}</td>\n  </ng-template>\n</f-table>\n```\n\nKey inputs: `value`, `lazy`, `loading`, `rows`, `totalRecords`, `rowHover`, `dataKey`, `scrollable`, `paginator`, `first`, `rowsPerPageOptions`, `tableStyle`, `globalFilterFields`. Models: `sortField`, `sortOrder`. Outputs: `onLazyLoad` (`TableLazyLoadEvent`), `onSort` (`TableSortEvent`). Supports `fTemplate=\"header\" | \"body\" | \"emptymessage\"`.\n\n### SortIconComponent / SortableColumnDirective\n\nSort indicator and clickable sortable-column host, used inside `f-table` headers. Selectors: `f-sorticon`, `[fSortableColumn]`.\n\n```html\n<th fSortableColumn=\"createdAt\">{{ 'shared.createdAt' | translate }} <f-sorticon field=\"createdAt\" /></th>\n```\n\nKey input: `fSortableColumn` / `field` — the field name to sort by.\n\n### PaginatorComponent\n\nStandalone pagination control (also used internally by `f-table`/`f-dataview`). Selector: `f-paginator`.\n\n```html\n<f-paginator [first]=\"first\" [rows]=\"10\" [totalRecords]=\"total\" (onPageChange)=\"onPage($event)\" />\n```\n\nKey inputs: `first`, `rows`, `totalRecords`, `rowsPerPageOptions`, `showCurrentPageReport`, `currentPageReportTemplate`. Output: `onPageChange` (`PaginatorState`).\n\n### TreeTableComponent\n\nHierarchical table combining tree expand/collapse with tabular columns. Selector: `f-treetable`.\n\n```html\n<f-treetable [value]=\"orgNodes\" [loading]=\"loading()\" dataKey=\"id\">\n  <ng-template fTemplate=\"header\">\n    <th>{{ 'shared.name' | translate }}</th>\n  </ng-template>\n  <ng-template fTemplate=\"body\" let-rowNode>\n    <td><f-treetabletoggler [rowNode]=\"rowNode\" /> {{ rowNode.node.label }}</td>\n  </ng-template>\n</f-treetable>\n```\n\nKey inputs: `value` (`TreeNode[]`), `loading`, `dataKey`, `scrollable`, `tableStyle`. `TreeTableTogglerComponent` (`f-treetabletoggler`) requires `rowNode: input.required<TreeTableNode>()`. `TreeTableService` exposes an `expanded` signal and `toggle(key, node)` for custom expand/collapse UIs.\n\n### TreeComponent\n\nHierarchical tree view with selection and filtering. Selector: `f-tree`.\n\n```html\n<f-tree [value]=\"categoryTree\" selectionMode=\"checkbox\" [filter]=\"true\" (selectionChange)=\"onSelect($event)\" />\n```\n\nKey inputs: `value` (`TreeNode[]`), `selectionMode` (`single | multiple | checkbox | null`), `filter`, `loading`, `emptyMessage`. Outputs: `selectionChange`, `nodeExpand`, `nodeCollapse`.\n\n### DataViewComponent\n\nList/grid toggleable data view with built-in pagination. Selector: `f-dataview`.\n\n```html\n<f-dataview [value]=\"products()\" [paginator]=\"true\" [rows]=\"12\" [(layout)]=\"viewLayout\" (onPageChange)=\"onPage($event)\">\n  <ng-template let-item>\n    <div>{{ item.name }}</div>\n  </ng-template>\n</f-dataview>\n```\n\nKey inputs: `value`, `showLayoutToggle`, `paginator`, `rows`, `totalRecords`, `first`, `loading`. Model: `layout` (`'list' | 'grid'`). Output: `onPageChange`.\n\n### OrganizationChartComponent\n\nRenders a `TreeNode` hierarchy as a top-down org chart. Selector: `f-organizationchart`.\n\n```html\n<f-organizationchart [value]=\"ceoNode\">\n  <ng-template let-node>{{ node.label }}</ng-template>\n</f-organizationchart>\n```\n\nKey input: `value` (`TreeNode | null`).\n\n### PickListComponent\n\nDual-list source/target transfer control. Selector: `f-picklist`.\n\n```html\n<f-picklist [(source)]=\"available\" [(target)]=\"assigned\" [sourceHeader]=\"'shared.available' | translate\" [targetHeader]=\"'shared.assigned' | translate\" />\n```\n\nKey inputs/models: `source`, `target` (models), `sourceHeader`, `targetHeader`. Outputs: `onMoveToTarget`, `onMoveToSource`.\n\n### OrderListComponent\n\nReorderable single-list control with up/down/top/bottom controls. Selector: `f-orderlist`.\n\n```html\n<f-orderlist [(value)]=\"steps\" [header]=\"'shared.steps' | translate\" (onReorder)=\"onReorder($event)\" />\n```\n\nKey inputs: `value` (model), `header`, `selected` (model). Output: `onReorder`.\n\n### ScrollerComponent\n\nVirtual scroller for large flat lists. Selector: `f-scroller`.\n\n```html\n<f-scroller [items]=\"bigList()\" [itemSize]=\"40\" scrollHeight=\"20rem\">\n  <ng-template let-item>{{ item.label }}</ng-template>\n</f-scroller>\n```\n\nKey inputs: `items`, `itemSize`, `scrollHeight`.\n\n### TimelineComponent\n\nVertical/horizontal timeline of events. Selector: `f-timeline`.\n\n```html\n<f-timeline [value]=\"events()\" align=\"alternate\" layout=\"vertical\">\n  <ng-template let-event>{{ event.status }}</ng-template>\n</f-timeline>\n```\n\nKey inputs: `value`, `align` (`left | right | alternate`), `layout` (`vertical | horizontal`).\n\n### ChartComponent\n\nCanvas-based chart wrapper (bar/line/pie/etc.). Selector: `f-chart`.\n\n```html\n<f-chart type=\"bar\" [data]=\"chartData\" [options]=\"chartOptions\" height=\"300\" />\n```\n\nKey inputs: `type`, `data`, `options`, `width`, `height`.\n\n### MeterGroupComponent\n\nSegmented meter/progress bar for showing proportional values. Selector: `f-metergroup`.\n\n```html\n<f-metergroup [values]=\"[{ label: 'Used', value: 65, color: 'var(--f-primary-500)' }]\" [max]=\"100\" />\n```\n\nKey inputs: `values` (`MeterItem[]`), `min`, `max`.\n\n---\n\n## Overlays & Dialogs\n\n### DialogComponent\n\nModal dialog with header, footer template, and resizing. Selector: `f-dialog`.\n\n```html\n<f-dialog [(visible)]=\"showDialog\" [header]=\"'shared.editUser' | translate\" [modal]=\"true\" [closable]=\"true\">\n  <p>Content</p>\n  <ng-template #footer>\n    <f-button [label]=\"'shared.close' | translate\" (onClick)=\"showDialog.set(false)\" />\n  </ng-template>\n</f-dialog>\n```\n\nKey inputs: `header`, `modal`, `closable`, `dismissableMask`, `resizable`, `style`, `breakpoints`. Model: `visible`. Outputs: `onShow`, `onHide`. Supports `#footer` template ref and `fTemplate` content children.\n\n### DrawerComponent\n\nSlide-in panel from any edge of the viewport. Selector: `f-drawer`.\n\n```html\n<f-drawer [(visible)]=\"showDrawer\" position=\"right\" [header]=\"'shared.filters' | translate\">\n  <p>Filter controls</p>\n</f-drawer>\n```\n\nKey inputs: `header`, `position` (`left | right | top | bottom`), `fullScreen`, `modal`, `closable`, `closeOnEscape`. Model: `visible`. Output: `onHide`.\n\n### PopoverComponent\n\nAnchored overlay panel triggered programmatically. Selector: `f-popover`.\n\n```html\n<f-popover #op [dismissable]=\"true\">\n  <p>Popover content</p>\n</f-popover>\n<f-button label=\"Show\" (onClick)=\"op.toggle($event)\" />\n```\n\nKey input: `dismissable`.\n\n### ConfirmDialog\n\nGlobal confirmation modal driven by `ConfirmationService.confirm()`. Selector: `f-confirmdialog`. Place once in the app shell; supports multiple independent instances via the `key` input matched against `ConfirmationService.confirm({ key })`.\n\n```html\n<f-confirmdialog />\n```\n\n### ConfirmPopupComponent\n\nAnchored (non-modal) confirmation popup, also driven by `ConfirmationService`. Selector: `f-confirmpopup`.\n\n```html\n<f-confirmpopup /> <f-button label=\"Delete\" (onClick)=\"confirmationService.confirm({ target: $event.target, message: 'Sure?', accept: onDelete })\" />\n```\n\nKey input: `key`.\n\n### DynamicDialogComponent / DynamicDialogService\n\nRenders arbitrary components inside a dialog shell opened imperatively. Selector: `f-dynamicdialog`.\n\n```html\n<f-dynamicdialog />\n```\n\n```typescript\nimport { DynamicDialogService, DYNAMIC_DIALOG_DATA, DYNAMIC_DIALOG_REF } from \"@flusys/ng-ui\";\n\nconst dialogService = inject(DynamicDialogService);\nconst ref = dialogService.open(UserFormComponent, { header: \"Edit User\", width: \"32rem\", data: { id: userId } });\nref.onClose.subscribe((result) => reloadList());\n\n// Inside UserFormComponent:\nprivate readonly data = inject(DYNAMIC_DIALOG_DATA);\nprivate readonly ref = inject(DYNAMIC_DIALOG_REF);\nthis.ref.close(updatedUser);\n```\n\n`DynamicDialogConfig`: `header`, `width`, `height`, `closable`, `closeOnEscape`, `dismissableMask`, `footer`, `data`.\n\n### BlockUiComponent\n\nOverlays a blocking mask + spinner over its projected content. Selector: `f-blockui`.\n\n```html\n<f-blockui [blocked]=\"isSaving()\">\n  <form>...</form>\n</f-blockui>\n```\n\nKey inputs: `blocked`, `hasCustomTemplate` (set `true` when projecting a custom `[block-template]` node instead of the default spinner).\n\n### ToastComponent\n\nRenders queued messages from `MessageService`. Selector: `f-toast`.\n\n```html\n<f-toast position=\"top-right\" key=\"main\" />\n```\n\nKey inputs: `key`, `position` (`top-right | top-left | top-center | bottom-right | bottom-left | bottom-center | center`).\n\n---\n\n## Navigation & Menus\n\n### MenuComponent\n\nFlat or popup vertical menu. Selector: `f-menu`.\n\n```html\n<f-menu #menu [model]=\"actions\" [popup]=\"true\" /> <f-button icon=\"ellipsis\" (onClick)=\"menu.toggle($event)\" />\n```\n\nKey inputs: `model` (`MenuItem[]`), `popup`.\n\n### MenubarComponent\n\nHorizontal top-level navigation bar with nested submenus. Selector: `f-menubar`.\n\n```html\n<f-menubar [model]=\"navItems\" />\n```\n\nKey input: `model` (`MenuItem[]`).\n\n### TieredMenuComponent\n\nMulti-level flyout menu (hover/click cascading submenus). Selector: `f-tieredmenu`.\n\n```html\n<f-tieredmenu [model]=\"menuItems\" [popup]=\"false\" />\n```\n\nKey inputs: `model`, `popup`.\n\n### ContextMenuComponent\n\nRight-click context menu bound to a target selector. Selector: `f-contextmenu`.\n\n```html\n<f-contextmenu [model]=\"rowActions\" target=\".table-row\" />\n```\n\nKey inputs: `model`, `target`.\n\n### MegaMenuComponent\n\nMulti-column dropdown navigation (site-wide mega menus). Selector: `f-megamenu`.\n\n```html\n<f-megamenu [model]=\"megaMenuItems\" />\n```\n\nKey input: `model` (`MenuItem[]`, each top item's `items` render as columns).\n\n### PanelMenuComponent\n\nAccordion-style vertical menu with nested expand/collapse. Selector: `f-panelmenu`.\n\n```html\n<f-panelmenu [model]=\"sidebarItems\" [multiple]=\"true\" />\n```\n\nKey inputs: `model`, `multiple` (allow more than one root panel expanded at once, default `true`).\n\n### BreadcrumbComponent\n\nHorizontal breadcrumb trail. Selector: `f-breadcrumb`.\n\n```html\n<f-breadcrumb [model]=\"crumbs\" [home]=\"{ icon: 'home', routerLink: '/' }\" />\n```\n\nKey inputs: `model` (`MenuItem[]`), `home`.\n\n### DockComponent\n\nmacOS-dock-style icon launcher with magnification. Selector: `f-dock`.\n\n```html\n<f-dock [model]=\"appShortcuts\" position=\"bottom\" />\n```\n\nKey inputs: `model` (`MenuItem[]`), `position` (`DockPosition`).\n\n### StepsComponent\n\nLinear step/wizard indicator. Selector: `f-steps`.\n\n```html\n<f-steps [model]=\"wizardSteps\" [activeIndex]=\"currentStep()\" (onActiveIndexChange)=\"currentStep.set($event)\" />\n```\n\nKey inputs: `model` (`StepsMenuItem[]`, alias of `MenuItem[]`), `activeIndex`, `readonly`. Output: `onActiveIndexChange`.\n\n### TabsComponent family\n\nComposable tabs: `TabsComponent` (`f-tabs`), `TabListComponent` (`f-tablist`), `TabComponent` (`f-tab`), `TabPanelsComponent` (`f-tabpanels`), `TabPanelComponent` (`f-tabpanel`).\n\n```html\n<f-tabs [(value)]=\"activeTab\">\n  <f-tablist>\n    <f-tab value=\"general\">{{ 'shared.general' | translate }}</f-tab>\n    <f-tab value=\"security\">{{ 'shared.security' | translate }}</f-tab>\n  </f-tablist>\n  <f-tabpanels>\n    <f-tabpanel value=\"general\">General content</f-tabpanel>\n    <f-tabpanel value=\"security\">Security content</f-tabpanel>\n  </f-tabpanels>\n</f-tabs>\n```\n\n`f-tabs` model: `value`; input `scrollable`; output `onTabChange`. `f-tab` inputs: `value`, `disabled`. `TabsContext` is the internal `@Injectable()` DI context `f-tabs` provides for its children to read active/scrollable state — not instantiated directly by consumers.\n\n---\n\n## Media\n\n### ImageComponent\n\nImage with optional full-screen preview overlay. Selector: `f-image`.\n\n```html\n<f-image [src]=\"avatarUrl()\" [alt]=\"user.name\" [preview]=\"true\" width=\"120\" />\n```\n\nKey inputs: `src`, `alt`, `width`, `height`, `preview`. Outputs: `onShow`, `onHide`.\n\n### GalleriaComponent\n\nImage gallery with thumbnail strip. Selector: `f-galleria`.\n\n```html\n<f-galleria [value]=\"photos\" [showThumbnails]=\"true\" height=\"24rem\" />\n```\n\nKey inputs: `value` (`GalleriaItem[]` — `itemImageSrc`, `thumbnailImageSrc?`, `alt?`), `showThumbnails`, `height`.\n\n### CarouselComponent\n\nSliding item carousel with configurable visible-item count and autoplay. Selector: `f-carousel`.\n\n```html\n<f-carousel [value]=\"banners()\" [numVisible]=\"1\" [autoplayInterval]=\"5000\" (onPage)=\"onPageChange($event)\">\n  <ng-template let-item>{{ item.title }}</ng-template>\n</f-carousel>\n```\n\nKey inputs: `value`, `numVisible`, `showIndicators`, `circular`, `autoplayInterval`. Output: `onPage`.\n\n### ImageCompareComponent\n\nBefore/after image slider comparison. Selector: `f-imagecompare`.\n\n```html\n<f-imagecompare [imageBeforeSrc]=\"before\" [imageAfterSrc]=\"after\" height=\"20rem\" />\n```\n\nKey inputs: `imageBeforeSrc`, `imageAfterSrc`, `altBefore`, `altAfter`, `height`.\n\n### AvatarComponent / AvatarGroupComponent\n\nUser avatar (image, initials, or icon) and stacked group wrapper. Selectors: `f-avatar`, `f-avatar-group`.\n\n```html\n<f-avatar-group>\n  <f-avatar image=\"/user1.png\" shape=\"circle\" size=\"large\" />\n  <f-avatar label=\"JD\" shape=\"circle\" />\n</f-avatar-group>\n```\n\nKey inputs (`f-avatar`): `label`, `icon`, `image`, `shape` (`square | circle`), `size` (`normal | large | xlarge`), `color`, `styleClass`.\n\n---\n\n## Feedback & Status\n\n### TagComponent\n\nSmall inline status label. Selector: `f-tag`.\n\n```html\n<f-tag [value]=\"'shared.active' | translate\" severity=\"success\" icon=\"check\" [rounded]=\"true\" />\n```\n\nKey inputs: `value`, `severity` (`success | info | warn | danger | secondary | contrast | null`), `icon`, `rounded`, `color`.\n\n### BadgeComponent\n\nSmall numeric/status indicator, standalone or attached to an element. Selector: `f-badge`.\n\n```html\n<f-badge [value]=\"unreadCount()\" severity=\"danger\" size=\"small\" />\n```\n\nKey inputs: `value`, `severity` (`BadgeSeverity`), `size` (`small | large | xlarge | null`).\n\n### OverlayBadgeComponent\n\nPositions a badge in the corner of its projected content (e.g. bell icon with unread count). Selector: `f-overlaybadge`.\n\n```html\n<f-overlaybadge [value]=\"notificationCount()\" severity=\"danger\">\n  <ui-icon name=\"bell\" />\n</f-overlaybadge>\n```\n\nKey inputs: `value`, `severity`, `size`.\n\n### MessageComponent\n\nInline severity-styled message banner. Selector: `f-message`.\n\n```html\n<f-message severity=\"warn\" [text]=\"'form.unsavedChanges' | translate\" icon=\"alert-triangle\" />\n```\n\nKey inputs: `severity` (`success | info | warn | error`), `text`, `icon`.\n\n### ProgressbarComponent\n\nHorizontal progress indicator. Selector: `f-progressbar`.\n\n```html\n<f-progressbar [value]=\"uploadProgress()\" mode=\"determinate\" [showValue]=\"true\" />\n```\n\nKey inputs: `value`, `mode` (`determinate | indeterminate`), `showValue`.\n\n### ProgressSpinnerComponent\n\nCircular loading spinner. Selector: `f-progressspinner`.\n\n```html\n<f-progressspinner [size]=\"40\" [strokeWidth]=\"4\" />\n```\n\nKey inputs: `size`, `strokeWidth`.\n\n### SkeletonComponent\n\nLoading placeholder block. Selector: `f-skeleton`.\n\n```html\n<f-skeleton width=\"100%\" height=\"1.5rem\" shape=\"rectangle\" />\n```\n\nKey inputs: `width`, `height`, `borderRadius`, `shape` (`rectangle | circle`).\n\n### ChipComponent\n\nRemovable label chip. Selector: `f-chip`.\n\n```html\n<f-chip [label]=\"tag.name\" [removable]=\"true\" (onRemove)=\"removeTag(tag)\" />\n```\n\nKey inputs: `label`, `icon`, `removable`. Output: `onRemove`.\n\n---\n\n## Layout\n\n### CardComponent\n\nContent card with optional header/footer templates. Selector: `f-card`.\n\n```html\n<f-card [header]=\"'shared.summary' | translate\" styleClass=\"mb-4\">\n  <p>Body content</p>\n  <ng-template #footer><f-button label=\"Details\" text /></ng-template>\n</f-card>\n```\n\nKey inputs: `header`, `subheader`, `styleClass`. Content templates: `#header`, `#footer`.\n\n### PanelComponent\n\nCollapsible titled panel. Selector: `f-panel`.\n\n```html\n<f-panel [header]=\"'shared.advanced' | translate\" [toggleable]=\"true\" [(collapsed)]=\"advancedCollapsed\">\n  <p>Advanced settings</p>\n</f-panel>\n```\n\nKey inputs: `header`, `toggleable`. Model: `collapsed`.\n\n### FieldsetComponent\n\nBordered/legend-labeled grouping, optionally collapsible. Selector: `f-fieldset`.\n\n```html\n<f-fieldset [legend]=\"'shared.contactInfo' | translate\" [toggleable]=\"true\" [(collapsed)]=\"contactCollapsed\">\n  <p>Fields</p>\n</f-fieldset>\n```\n\nKey inputs: `legend`, `toggleable`. Model: `collapsed`.\n\n### AccordionComponent family\n\nComposable accordion: `AccordionComponent` (`f-accordion`), `AccordionPanelComponent` (`f-accordion-panel`), `AccordionHeaderComponent` (`f-accordion-header`), `AccordionContentComponent` (`f-accordion-content`).\n\n```html\n<f-accordion [multiple]=\"false\" [(value)]=\"activePanel\">\n  <f-accordion-panel value=\"0\">\n    <f-accordion-header>{{ 'shared.section1' | translate }}</f-accordion-header>\n    <f-accordion-content>Content 1</f-accordion-content>\n  </f-accordion-panel>\n</f-accordion>\n```\n\n`f-accordion` input: `multiple`; model: `value`; outputs: `onOpen`, `onClose`. `f-accordion-panel` inputs: `value`, `disabled`. `AccordionContext` is the internal `@Injectable()` DI context `f-accordion` provides for its panels — not instantiated directly by consumers.\n\n### SplitterComponent\n\nResizable multi-pane layout via draggable gutters. `SplitterComponent` selector: `f-splitter`; panels use `SplitterPanelComponent`, selector: `f-splitter-panel`.\n\n```html\n<f-splitter layout=\"horizontal\" [panelSizes]=\"[30, 70]\">\n  <f-splitter-panel>Sidebar</f-splitter-panel>\n  <f-splitter-panel>Content</f-splitter-panel>\n</f-splitter>\n```\n\nKey inputs: `layout` (`horizontal | vertical`), `panelSizes`, `minSizes`, `styleClass`.\n\n### ToolbarComponent\n\nHeader/action toolbar with start/center/end projection slots. Selector: `f-toolbar`.\n\n```html\n<f-toolbar>\n  <ng-template fTemplate=\"start\"><h2>{{ 'shared.title' | translate }}</h2></ng-template>\n  <ng-template fTemplate=\"end\"><f-button label=\"New\" /></ng-template>\n</f-toolbar>\n```\n\nKey input: `styleClass`.\n\n### DividerComponent\n\nHorizontal/vertical separator, optionally with centered content/label. Selector: `f-divider`.\n\n```html\n<f-divider layout=\"horizontal\" type=\"dashed\" align=\"center\">{{ 'shared.or' | translate }}</f-divider>\n```\n\nKey inputs: `layout` (`horizontal | vertical`), `type` (`solid | dashed | dotted`), `align` (`left | center | right`).\n\n### ScrollPanelComponent\n\nCustom-styled scrollable container. Selector: `f-scrollpanel`.\n\n```html\n<f-scrollpanel maxHeight=\"20rem\">\n  <p>Long content...</p>\n</f-scrollpanel>\n```\n\nKey inputs: `maxHeight`, `maxWidth`.\n\n### ScrollTopComponent\n\nFloating \"scroll to top\" button, appears after a scroll threshold. Selector: `f-scrolltop`.\n\n```html\n<f-scrolltop [threshold]=\"400\" target=\"window\" [buttonAriaLabel]=\"'shared.scrollToTop' | translate\" />\n```\n\nKey inputs: `threshold`, `behavior` (`ScrollBehavior`), `target` (`window | parent`), `buttonAriaLabel`.\n\n### InplaceComponent\n\nToggles between a display view and an editable/expanded view in place. Selector: `f-inplace`.\n\n```html\n<f-inplace [(active)]=\"isEditing\">\n  <ng-template #display>{{ value() }}</ng-template>\n  <ng-template #content><input fInputText [(ngModel)]=\"value\" /></ng-template>\n</f-inplace>\n```\n\nKey input: `disabled`. Model: `active`. Outputs: `onActivate`, `onDeactivate`.\n\n---\n\n## Directives & Utilities\n\n### TooltipDirective\n\nAttaches a hover/focus tooltip to any element. Selector: `[fTooltip]`.\n\n```html\n<button [fTooltip]=\"'shared.deleteHint' | translate\" tooltipPosition=\"top\"></button>\n```\n\nKey inputs: `fTooltip` (text), `tooltipPosition` (`top | bottom | left | right`), `tooltipStyleClass`, `disabled`, `tooltipEvent` (`hover | focus | both`), `showDelay`, `hideDelay`.\n\n### StyleClassDirective\n\nToggles CSS classes on a target element with enter/leave transition class support (accordion/dropdown-style show/hide). Selector: `[fStyleClass]`.\n\n```html\n<button [fStyleClass]=\"'#panel'\" enterFromClass=\"hidden\" enterActiveClass=\"animate-fade-in\" leaveToClass=\"hidden\"></button>\n```\n\nKey inputs: `fStyleClass` (target selector), `enterFromClass`, `enterActiveClass`, `enterToClass`, `leaveFromClass`, `leaveActiveClass`, `leaveToClass`, `hideOnOutsideClick`, `toggleClass`.\n\n### AnimateOnScrollDirective\n\nAdds an enter animation class when the host scrolls into the viewport. Selector: `[fAnimateOnScroll]`.\n\n```html\n<div fAnimateOnScroll enterClass=\"animate-fade-in\" [once]=\"true\" [threshold]=\"0.15\">Content</div>\n```\n\nKey inputs: `enterClass`, `leaveClass`, `once`, `threshold`.\n\n### AutoFocusDirective\n\nFocuses the host element on init when enabled. Selector: `[fAutoFocus]`.\n\n```html\n<input fInputText [fAutoFocus]=\"true\" />\n```\n\nKey input: `fAutoFocus`.\n\n### RippleDirective\n\nAdds a Material-style ripple feedback effect on click. Selector: `[fRipple]`.\n\n```html\n<button fButton fRipple label=\"Click me\"></button>\n```\n\n`KeyFilterDirective` and `InputMaskDirective` are documented under [Form Inputs](#form-inputs) above.\n\n### FTemplateDirective\n\nMarks an `ng-template` as a named content slot consumed by host components (table headers/body, toolbar start/end, dialog footer, etc.). Selector: `ng-template[fTemplate]`.\n\n```html\n<ng-template fTemplate=\"body\" let-row>{{ row.name }}</ng-template>\n```\n\nKey input: `fTemplate` (slot name).\n\n### UiIconComponent\n\nRenders a Lucide icon by name, with PrimeIcons-style aliases mapped internally for drop-in compatibility. Selector: `ui-icon`.\n\n```html\n<ui-icon name=\"check-circle\" [size]=\"20\" [spin]=\"false\" />\n```\n\nKey inputs: `name`, `size` (unset by default — renders at `1em`, scaling with whatever font-size context, e.g. a Tailwind `text-*` class, surrounds it; pass a number to pin an exact pixel size instead), `spin`, `fill`.\n\n### EditorComponent\n\nRich-text editor with `ControlValueAccessor` support. Selector: `f-editor`.\n\n```html\n<f-editor [(ngModel)]=\"htmlContent\" [placeholder]=\"'form.writeHere' | translate\" />\n```\n\nKey input: `placeholder`.\n\n### TerminalComponent\n\nInteractive command-line-style output panel. Selector: `f-terminal`.\n\n```html\n<f-terminal [welcomeMessage]=\"'Welcome to FLUSYS CLI'\" prompt=\"$\" (onCommand)=\"runCommand($event.command)\" />\n```\n\nKey inputs: `welcomeMessage`, `prompt`, `height`. Output: `onCommand` (`TerminalCommandEvent`).\n\n---\n\n## Interfaces\n\n```typescript\nimport type { MenuItem, MenuItemCommandEvent, TreeNode } from \"@flusys/ng-ui\";\n\ninterface MenuItem {\n  label?: string;\n  icon?: string;\n  command?: (event: MenuItemCommandEvent) => void;\n  url?: string;\n  routerLink?: string | string[];\n  items?: MenuItem[];\n  disabled?: boolean;\n  visible?: boolean;\n  separator?: boolean;\n  selected?: boolean;\n  badge?: string;\n  // ...\n}\n\ninterface TreeNode<T = unknown> {\n  data?: T;\n  children?: TreeNode<T>[];\n  expanded?: boolean;\n  leaf?: boolean;\n  label?: string;\n  icon?: string;\n  key?: string;\n  selectable?: boolean;\n  // ...\n}\n```\n\n`MenuItem` drives every menu-family component (`f-menu`, `f-menubar`, `f-tieredmenu`, `f-contextmenu`, `f-megamenu`, `f-panelmenu`, `f-breadcrumb`, `f-dock`, `f-steps`, `f-speeddial`, `f-splitbutton`). `TreeNode` drives `f-tree`, `f-treeselect`, `f-treetable`, and `f-organizationchart`.\n\n## License\n\nMIT © FLUSYS\n","readmeFilename":"README.md"}