{"_id":"@dwtechs/ngx-crud-builder","_rev":"14-f0e21a75082de11d816b34e426dc27a3","name":"@dwtechs/ngx-crud-builder","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.0","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.0","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://ngx-crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-crud-builder/issues"},"dist":{"shasum":"ee994103d4622bd563753e974ed354ceda2a284e","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.0.tgz","fileCount":6,"integrity":"sha512-+jzAi1Zv+ofOQlxMOpFmgHICGkiENz8w0CI1oZAjY/V+pgPoJj4mYER4BoY475z8gzHea6/HwkPfzN7nU3mpMg==","signatures":[{"sig":"MEQCIGI/Cqpv4z9uhYUvAmnQH9uRY0dsa3ylLYPRm+ts35N4AiAyRUqxrA0wZvKa742/N+yAkzp1Y8dRAV46DQprhgEstQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1807265},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"d335b1cbce95a3ef7987c97c43e7eca7c3fa0fae","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-crud-builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.0_1784036479820_0.2051473257631513","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.1","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.1","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://ngx-crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-crud-builder/issues"},"dist":{"shasum":"2636c2f5d85bc643e13f06cd29caea052a6b9cab","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.1.tgz","fileCount":6,"integrity":"sha512-Bbd72xdUXBxDzqFnzgfoYi8zctS3W5ZhEr62bnmwwy8+cUnoRO1PJIxbBmuoGwG7DcM0GF4X+4kNcn2UYibvrA==","signatures":[{"sig":"MEUCIQCn0YsM1OfvSdw0S8gnagxlscA2e8IO2rJ4yunNvZVCKAIgb+Hk1L0cti6OmMOIdHJyKHvwgWkPZDQgPsAzVDMwLNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2085954},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"7f5dccd2d4d1b447197c95bfa3a63cbe23a6dc8f","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-crud-builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.1_1784041057065_0.26510449843180695","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.2","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.2","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://ngx-crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-crud-builder/issues"},"dist":{"shasum":"fd040e005c27973f22826772990fcce0592972ee","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.2.tgz","fileCount":6,"integrity":"sha512-49TENEn0FfqwgPeBaAhp6kFAH5RfFztIU2FOqaz3rt6VkfbtXwwtSTTW383TedAS0F8miAQV8GDYhGFe8BQqbQ==","signatures":[{"sig":"MEUCIQCyN7LIdEjkgGpUhPW2TJIyffXmX6P51mA7VMTUZsZxgAIgGC1e5Bl73H2xPnq/KIxNb/CvUXHWXGylDsDpZq4XFcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1810844},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"d8bafd6b66ed4f4c272abfef76b70e3531977973","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-crud-builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.2_1784069735332_0.23388781257183444","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.3","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.3","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://ngx-crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-crud-builder/issues"},"dist":{"shasum":"59e63737dbe000a862d5e142dca4aed2d97e87e4","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.3.tgz","fileCount":6,"integrity":"sha512-RcEqm/XVnJqrZXWhTsYw6lhU6ovd2RB4ZaoeuSuEq3SAZC3Cupxh2K+QcZBZl5h/NodRnLDM+PdVgZu6z7ePnw==","signatures":[{"sig":"MEQCIEWhLTN/AwXcW9oWXMBv99vgpyd1uKrK786tkOo3iNyWAiACsAZnb6/5FfNWGQnKhnpt6IYMPz4snYOcEHYK2xRHXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2095070},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"639ecd9db6c24eca86ed7b9fc4816726d9496805","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-crud-builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.3_1784189739769_0.7851455866292794","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.4","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.4","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"5a53a828ebc58244c59bf86008d6e0143f0a07af","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.4.tgz","fileCount":3,"integrity":"sha512-P8hEmMS5fLAKJfssUf8DRfngx0fMk2WsKb7STgezDtX0RJFme8jbnldsAiN2y9pfVr0Xcd6MDk7REczSOnhdcg==","signatures":[{"sig":"MEUCIBRYaLZ8cvelXmeKmGnD46WPyT/bAIjE2Q7yZv31wawqAiEA+PdSxjyzU0zMav+JP6K/HMJm13SbPnIK6NQO98N2+HM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23145},"gitHead":"a3647aeb758814fdf7e3601588d3469066abd0e5","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.4_1784365712303_0.1436662176809973","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.5","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.5","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"c90bd7c9f505980b98c5a27fbb87277871b10206","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.5.tgz","fileCount":6,"integrity":"sha512-1UqQdqlTMGOONq/LLIp7ST04VQ5u0RKD4Ok2sCNinVazMu4bY1+7YW2BSLrLIs4NSlMpMLVqF0x7akuzJaOUaQ==","signatures":[{"sig":"MEYCIQDPeptAkNTW8DfibymGr3D/Txw/2zvSoZwJwzyMp/di4AIhAMUabImfIinYxbC5eDPtKspfjsP6tFCyyzDmc4c5fe9w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833387},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"a3647aeb758814fdf7e3601588d3469066abd0e5","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.5_1784366706693_0.017145368174852127","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.6","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.6","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"85ad2604f7214ffee7964088b2ea127317124957","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.6.tgz","fileCount":6,"integrity":"sha512-3cC155VECe5HwO/5KTsM2zyMcQbhJnn6t9CQ65GoehQku1IJ5kl+bi02YaqaqtYdkUz5v8xWtKebAtx82R7XcQ==","signatures":[{"sig":"MEUCIFsXago9L7MVL8V26CQL8u/xqNI/KuA02nmems70kJ1UAiEAmYvaSwj5aVSvH+f6F3JWfgn9WIqKE+WXGqY1FzlSMEc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1836170},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"35a71595a517cbb17358b8474b2f8edaaa435900","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.6_1784413427495_0.18382033579023815","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.7","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.7","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"5d994db16ba207f8820dbadcbb4d4faf1d259711","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.7.tgz","fileCount":6,"integrity":"sha512-Hi/VovFO2+dP7g+pVPjskGNdWJYvQactwfeFjJZCWkv/3WmbNigAL7d+hoToddkwLjuFyNttU7MBxS6BjU/COQ==","signatures":[{"sig":"MEQCIBX19pJ9qhixo+b9oxwRn+CyHmHJ4GmhgFsNR8ortCo4AiBe98Boo0C4gGZXPpT7N7uUkSS2gc/QL49bt8sAd7zmlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1837183},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"5a8ef595c7c507af1cacf501109ece6cc07eedbc","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.7_1784490091382_0.6241646656495545","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.8","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.8","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"e15a146438bc06d558a657fec14712c1dcc1bbfe","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.8.tgz","fileCount":5,"integrity":"sha512-9ELIqcZmjdyox5Wat7nWLQMvhH3hKYk3yRhFHnofxSaiswQoBjNU/FbfMBfYaLQSlJoaLDJuYybhsKeGk/muwQ==","signatures":[{"sig":"MEQCIAtFCoMdcskjWVBsVqqd0KlDQIBH0nP4lAcEvVQIuHfjAiAaEPLjhY7MFnKuUi5B11CCa1NSGeFR2LWlJ/tFMpWn0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1564718},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"0e070cdc36a6e3dfba40d12e84754516127ff868","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.8_1785598459245_0.6429859268224942","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@dwtechs/ngx-crud-builder","version":"0.1.9","keywords":["angular","crud","table","form","primeng","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.1.9","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"0d7fb24ea276c66d4fbba7c3c511a9df5508f20f","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.1.9.tgz","fileCount":5,"integrity":"sha512-yshEqs0hUJJkhYpzRJYlvdliazBFNwxaGkQQ8cewggFh+ro8kfUEE2VobI+Lr8ykSW+8HiZgagydMCX6NLIszQ==","signatures":[{"sig":"MEUCIQDpzX+aKoPNPBq2iSMuzu73lVDBQaKUmyxOALGT+En4PwIgZQCmm2SGTD6y2cLfp91M4d1uHTiWr7QHSgjaBt5I/ZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1565066},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6cc89a0886aa2ade91fba7577740a32d98b109ae","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","primeng":"^21.0.0","file-saver":"^2.0.5","primeicons":"^7.0.0","@angular/core":"^21.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^21.0.0","@angular/common":"^21.0.0","@angular/router":"^21.0.0","@primeng/themes":"^21.0.0","@primeuix/themes":"^2.0.3","@angular/localize":"^21.0.0","@dwtechs/checkard":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.1.9_1786135002796_0.19740320450965787","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dwtechs/ngx-crud-builder","version":"0.2.0","keywords":["angular","crud","table","form","optimus-ui","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.2.0","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"c9708be25ada2cd1c32b22c14d750d779ad744a2","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.2.0.tgz","fileCount":5,"integrity":"sha512-eUcey5DHLraGMfpEsfBylA/L8sgfsDMJQGOuSEJvXfLdIkwISj49jciIlOBj/XoRgFMjuAocuvuaSKdBCzHCZQ==","signatures":[{"sig":"MEUCIHVH7YjG7mcyV3woiUJ4YKqq1k8hA0ox2rOznIl4e6tmAiEAuRW9vf6ubJiVWul+7PvXBLnWQ36acUGo0Knh+fa/UzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1765749},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"605e7ec437f596e2755c2cab73f8078f77728243","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","file-saver":"^2.0.5","@angular/cdk":"^22.0.0","@angular/core":"^22.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^22.0.0","@angular/common":"^22.0.0","@angular/router":"^22.0.0","@angular/localize":"^22.0.0","@angular/material":"^22.0.0","@dwtechs/checkard":"^3.6.1","@openng/optimus-ui":"^2.0.0-rc.0","@angular/animations":"^22.0.0"},"peerDependenciesMeta":{"@angular/material":{"optional":true},"@angular/animations":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.2.0_1786456083037_0.27483135595388775","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dwtechs/ngx-crud-builder","version":"0.3.0","keywords":["angular","crud","table","form","optimus-ui","data-table","reactive-forms"],"author":{"name":"DWTechs"},"license":"MIT","_id":"@dwtechs/ngx-crud-builder@0.3.0","maintainers":[{"name":"dwtechs","email":"ludoclub@hotmail.com"}],"homepage":"https://crud-builder.estellepicq.com/","bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"dist":{"shasum":"f452e5038150e54ec9224a8f29328f7cd1e65d06","tarball":"https://registry.npmjs.org/@dwtechs/ngx-crud-builder/-/ngx-crud-builder-0.3.0.tgz","fileCount":8,"integrity":"sha512-m/gHX1Mrgo3sZGr9lQBlLx3wazr1is5u+nYh/jb1SZN6T7+9DzOt5RzxG+MAp8oPKdPBDLMvBcDVPcvPy8DNhQ==","signatures":[{"sig":"MEUCID0fLc5MEQZG1yrfTNNSKFRiXNA5IGQKEmzbZLA9LDrJAiEAhwXm5e4NSKo5cCSRxKRqB4iBUumGw7FkdS6iJCKTd8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1789097},"type":"module","module":"fesm2022/dwtechs-ngx-crud-builder.mjs","exports":{".":{"types":"./types/dwtechs-ngx-crud-builder.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder.mjs"},"./material":{"types":"./types/dwtechs-ngx-crud-builder-material.d.ts","default":"./fesm2022/dwtechs-ngx-crud-builder-material.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"259a85dc706e968cb651dd8c7dbc3c0f1e411c37","typings":"types/dwtechs-ngx-crud-builder.d.ts","_npmUser":{"name":"dwtechs","email":"ludoclub@hotmail.com"},"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"_npmVersion":"10.9.8","description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","quill":"^2.0.3","exceljs":"^4.4.0","file-saver":"^2.0.5","@angular/cdk":"^22.0.0","@angular/core":"^22.0.0","@dwtechs/csvx":"^0.3.1","@angular/forms":"^22.0.0","@angular/common":"^22.0.0","@angular/router":"^22.0.0","@angular/localize":"^22.0.0","@angular/material":"^22.0.0","@dwtechs/checkard":"^3.6.1","@openng/optimus-ui":"2.0.1","@angular/animations":"^22.0.0"},"peerDependenciesMeta":{"@angular/material":{"optional":true},"@angular/animations":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ngx-crud-builder_0.3.0_1787581700410_0.52183646279514","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-07-14T13:41:19.669Z","modified":"2026-09-12T06:29:30.702Z","0.1.0":"2026-07-14T13:41:19.966Z","0.1.1":"2026-07-14T14:57:37.311Z","0.1.2":"2026-07-14T22:55:35.561Z","0.1.3":"2026-07-16T08:15:39.965Z","0.1.4":"2026-07-18T09:08:32.418Z","0.1.5":"2026-07-18T09:25:06.878Z","0.1.6":"2026-07-18T22:23:47.665Z","0.1.7":"2026-07-19T19:41:31.592Z","0.1.8":"2026-08-01T15:34:19.377Z","0.1.9":"2026-08-07T20:36:43.016Z","0.2.0":"2026-08-11T13:48:03.185Z","0.3.0":"2026-08-24T14:28:20.603Z"},"bugs":{"url":"https://github.com/DWTechs/ngx-CRUD-Builder/issues"},"author":{"name":"DWTechs"},"license":"MIT","homepage":"https://crud-builder.estellepicq.com/","keywords":["angular","crud","table","form","optimus-ui","data-table","reactive-forms"],"repository":{"url":"git+https://github.com/DWTechs/ngx-CRUD-Builder.git","type":"git"},"description":"An Angular component library providing a full CRUD experience: dynamic reactive forms, configurable data tables, edition dialogs, column management, export, history, and more.","maintainers":[{"email":"ludoclub@hotmail.com","name":"lcluber_alten"},{"email":"ludovic.cluber@gmail.com","name":"lcluber"}],"readme":"# @dwtechs/ngx-crud-builder\n\nAn Angular component library for building dynamic forms and data tables with minimal configuration. It provides a declarative approach to creating CRUD interfaces with validation, dialogs, export, history, and column management.\n\n**[View the live demo](https://crud-builder-12c1d.web.app)**\n\n> **Compatibility:** requires Angular **^22.0** and `@openng/optimus-ui` **^2.0.0-rc.0**. The library version tracks Angular's major version — use the matching major.\n\n## UI adapters — Optimus UI, Material or Native?\n\nThe library renders two independent things, each with its own adapter: the **form fields** (inputs, selects, dates...) and the **table shell** (rows, sorting, pagination...). Pick **one** adapter and use it for both — don't mix, e.g. an Optimus UI form with a Material table. Use `provideCrudRenderer('optimus-ui')` to provide both at once, or `provideMaterialCrudRenderer()` (from the separate `@dwtechs/ngx-crud-builder/material` entry point) for Material. Use `provideFormFieldRenderer(adapter)` / `provideTableRenderer('optimus-ui')` individually only if you don't render a `<tbl-table>` (e.g. `provideFormFieldRenderer('native')` for a lighter, Optimus UI-free form).\n\n> ⚠️ **Optimus UI is always required as a peer dependency today**, whichever adapter you choose for forms or tables. `ConfirmService`, `SnackbarService`, the confirm dialog, toast, and the table toolbar (export, column management, refresh) are still built with Optimus UI components. Choosing `'material'` or `'native'` only changes how form controls and/or table rows are rendered — it does not remove the Optimus UI dependency.\n\n> ℹ️ **Angular Material is opt-in.** Its providers, `provideMaterialFormFieldRenderer()` / `provideMaterialTableRenderer()` / `provideMaterialCrudRenderer()`, live in the separate `@dwtechs/ngx-crud-builder/material` entry point (not the root `@dwtechs/ngx-crud-builder` import). `@angular/material` and `@angular/animations` are declared as **optional** peer dependencies and are only ever resolved by apps that actually import that entry point.\n\n| Adapter | Form fields | Table shell |\n|---|---|---|\n| `'optimus-ui'` | Full support — float labels, icon fields, all control types | Full-featured: sorting, filtering, lazy loading, column resizing, state persistence |\n| Material (`@dwtechs/ngx-crud-builder/material`) | Full support for most control types (requires `@angular/material` + `@angular/animations`, a date adapter, and `provideAnimationsAsync()`) | Minimal shell — data display and pagination only, **non-lazy mode only** (`lazy: false`). No filtering, sorting, column resizing or state persistence yet |\n| `'native'` | Plain HTML controls, no extra dependency, lightest bundle. Covers all control types but is experimental — styling and edge cases are incomplete | **No shell available yet** — using `<tbl-table>` without a table renderer provided throws a `NullInjectorError` at runtime |\n\nUse `provideFormFieldRenderer('native')` on its own only if you don't use `<tbl-table>` — there is currently no `'native'` table shell, so it can't be combined with `provideTableRenderer` or `provideCrudRenderer`.\n\n## Highlights\n\n- Dynamic form generation with 15+ input types and built-in validation\n- Advanced data tables with filtering, pagination, selection, preferences, and export\n- CRUD operations with HTTP integration, archive/restore, and history tracking\n- Customization support for actions, dialogs, labels, and access control\n\n## Demo application\n\nThe demo app showcases the library through a form builder, a table playground, and a full end-to-end example.\n\n- `/` — interactive form demo\n- `/table` — table configuration playground\n- `/full-example` — realistic IT request workflow combining forms, tables, access control, and saved views\n\n## Requirements\n\n- Angular ≥ 22\n- `@openng/optimus-ui` ≥ 2.0.0-rc.0 — **always required**, regardless of the form/table adapter you pick (see [UI adapters](#ui-adapters--optimus-ui-material-or-native))\n- `@angular/material` + `@angular/animations` ≥ 22 — only if you import `@dwtechs/ngx-crud-builder/material` (i.e. use `provideMaterialFormFieldRenderer()` and/or `provideMaterialTableRenderer()`)\n\n## Installation\n\n```bash\nnpm install @dwtechs/ngx-crud-builder\n```\n\n## Quick start\n\n### 1. Add the required providers\n\nEvery app using this library needs, **regardless of the adapter chosen**:\n\n| Provider | Why |\n|---|---|\n| `provideOptimus({ theme: ... })` | Optimus UI theme, used by the toolbar/dialogs/toast even with Material or `'native'` form fields |\n| `provideFormFieldRenderer(adapter)` | **Required** to render form fields — throws `NullInjectorError` if omitted |\n| `provideTableRenderer('optimus-ui')` | **Required** if you use `<tbl-table>` — throws `NullInjectorError` if omitted (no shell exists for `'native'`, see [UI adapters](#ui-adapters--optimus-ui-material-or-native)) |\n\n`provideCrudRenderer('optimus-ui')` is a shortcut that calls both `provideFormFieldRenderer('optimus-ui')` and `provideTableRenderer('optimus-ui')`, so forms and tables stay visually consistent. For Angular Material, use `provideMaterialCrudRenderer()` from the separate `@dwtechs/ngx-crud-builder/material` entry point instead.\n\n```typescript\n// app.config.ts\nimport { ApplicationConfig } from '@angular/core';\nimport { provideOptimus } from '@openng/optimus-ui/config';\nimport { definePreset } from '@openng/optimus-ui-themes';\nimport Aura from '@openng/optimus-ui-themes/aura';\nimport { provideCrudLabels } from '@dwtechs/ngx-crud-builder';\n\nconst MyPreset = definePreset(Aura, {\n  semantic: {\n    primary: { /* your brand colours */ },\n  },\n});\n\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideRouter(routes),\n    provideOptimus({\n      theme: { preset: MyPreset },\n    }),\n    // required – picks the adapter for both form fields and the table shell\n    ...provideCrudRenderer('optimus-ui'), // see \"UI adapters\" above for the Material equivalent\n    // optional – defaults to French\n    provideCrudLabels({ /* your overrides */ }),\n  ],\n};\n```\n\n> For Angular Material, replace `...provideCrudRenderer('optimus-ui')` with `...provideMaterialCrudRenderer()` (imported from `@dwtechs/ngx-crud-builder/material`). It additionally requires `provideAnimationsAsync()` (or `provideNoopAnimations()`) and a date adapter such as `provideNativeDateAdapter()` from `@angular/material/core`.\n\n### 2. Add the components\n\n```typescript\n// my-page.component.ts\nimport { TableComponent } from '@dwtechs/ngx-crud-builder';\n\n@Component({\n  selector: 'app-my-page',\n  imports: [TableComponent],\n  template: `\n    <tbl-table\n      [config]=\"config\"\n      [httpCalls]=\"httpCalls\"\n      [entityFactory]=\"factory\"\n      entityId=\"users\"\n      tableTitle=\"Users\">\n    </tbl-table>\n  `,\n})\nexport class MyPageComponent {\n  config: CrudItemOptions[] = [ /* ... */ ];\n  httpCalls = { get: ..., create: ..., update: ..., archive: ... };\n  factory = () => ({ id: null, name: '' });\n}\n```\n\n---\n\n## Configuration tokens\n\n### `APP_CONFIG`\n\nProvides application-level metadata used internally (local storage key prefixes, API prefix, etc.). All fields have sensible defaults so this token is **optional**.\n\n```typescript\nimport { APP_CONFIG } from '@dwtechs/ngx-crud-builder';\n\n{ provide: APP_CONFIG, useValue: {\n  title: 'My App',\n  appKey: 'my_app',           // prefix for localStorage keys\n  storageKeys: {\n    TABLE_CONFIG: 'my_app_tableConfig',\n  },\n  apiPrefix: '/api/',         // default: '/api/'\n}}\n```\n\n### `ACL_ADAPTER`\n\nControls which CRUD operations (create / update / archive / restore) are available based on a `functionalityKey`. The default grants all permissions. Override it to plug in your own access-control service.\n\n```typescript\nimport { ACL_ADAPTER, AclAdapter, CallsPermissions } from '@dwtechs/ngx-crud-builder';\n\n@Injectable({ providedIn: 'root' })\nexport class AclService implements AclAdapter {\n  permissionsFor(functionality: string | undefined): CallsPermissions {\n    // return permissions based on user roles / feature flags\n    return {\n      canCreate: this.userHasRole('EDITOR'),\n      canUpdate: this.userHasRole('EDITOR'),\n      canArchive: this.userHasRole('ADMIN'),\n      canRestore: this.userHasRole('ADMIN'),\n    };\n  }\n}\n\n// app.config.ts\n{ provide: ACL_ADAPTER, useExisting: AclService }\n```\n\n> When no `ACL_ADAPTER` is provided, all four operations are enabled for every table.\n\n### `provideFormFieldRenderer(adapter)`\n\n**Required** when using `FormComponent` or any form-bearing component (e.g. the table's edition dialog). Omitting it throws a `NullInjectorError` at runtime.\n\nChoose the adapter that matches your UI stack:\n\n| Value | Description |\n|---|---|\n| `'optimus-ui'` | Optimus UI controls — float labels, icon fields, full styling support |\n| `'native'` | Plain HTML controls — no Optimus UI dependency, lighter bundle, experimental |\n\n> For Angular Material controls, use `provideMaterialFormFieldRenderer()` from the separate `@dwtechs/ngx-crud-builder/material` entry point instead — it requires `@angular/material`, `@angular/animations`, `provideAnimationsAsync()` and a date adapter. A few control types (color, files, picklist, table, custom, wysiwyg) have no Material equivalent yet.\n\n```typescript\nimport { provideFormFieldRenderer } from '@dwtechs/ngx-crud-builder';\n\n// app.config.ts\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideFormFieldRenderer('optimus-ui'), // spread: returns Provider[]\n  ],\n};\n```\n\n### `provideTableRenderer(adapter)`\n\n**Required** when using `TableComponent`. Omitting it throws a `NullInjectorError` at runtime.\n\nProvides the table shell (rows, columns, sorting, filtering, pagination, column resizing).\n\n| Value | Description |\n|---|---|\n| `'optimus-ui'` | Full-featured Optimus UI table (`p-table`) — sorting, filtering, lazy loading, column resizing, state persistence |\n\n> For Angular Material, use `provideMaterialTableRenderer()` from the separate `@dwtechs/ngx-crud-builder/material` entry point instead — a minimal Angular Material table (`mat-table`), **non-lazy mode only** (`lazy = false`); no filtering, sorting, column resizing or state persistence yet.\n\n```typescript\nimport { provideTableRenderer } from '@dwtechs/ngx-crud-builder';\n\n// app.config.ts\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideTableRenderer('optimus-ui'),\n  ],\n};\n```\n\n### `provideCrudRenderer(adapter)`\n\nConvenience helper that provides both the form field renderer and the table renderer for the same adapter in one call, so the form controls and the table shell stay visually consistent. Only accepts `'optimus-ui'`, since `provideTableRenderer` has no native shell yet. For Angular Material, use `provideMaterialCrudRenderer()` from `@dwtechs/ngx-crud-builder/material` instead.\n\n```typescript\nimport { provideCrudRenderer } from '@dwtechs/ngx-crud-builder';\n\n// app.config.ts\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    ...provideCrudRenderer('optimus-ui'), // equivalent to provideFormFieldRenderer('optimus-ui') + provideTableRenderer('optimus-ui')\n  ],\n};\n```\n\n> If you only need to swap the form controls (e.g. to `'native'`) while keeping the Optimus UI table, call `provideFormFieldRenderer(adapter)` directly instead of `provideCrudRenderer`.\n\n### `@dwtechs/ngx-crud-builder/material` — Angular Material adapter\n\nA separate secondary entry point that provides the Material equivalents of the three functions above. It is kept apart from the root entry point so `@angular/material` and `@angular/animations` are only ever resolved by apps that actually import it — they stay genuinely optional otherwise.\n\n| Function | Equivalent to |\n|---|---|\n| `provideMaterialFormFieldRenderer()` | `provideFormFieldRenderer('material')` |\n| `provideMaterialTableRenderer()` | `provideTableRenderer('material')` |\n| `provideMaterialCrudRenderer()` | `provideCrudRenderer('material')` (both of the above combined) |\n\n```typescript\nimport { provideMaterialCrudRenderer } from '@dwtechs/ngx-crud-builder/material';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n// app.config.ts\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    ...provideMaterialCrudRenderer(),\n    provideAnimationsAsync(),\n    provideNativeDateAdapter(),\n  ],\n};\n```\n\n### `APP_FORM_CONFIG`\n\nRegisters application-level custom validation error messages that are merged with the library's built-in messages (and with field-level `customErrorMessages`). Use this for app-specific validators shared across all forms.\n\n```typescript\nimport { APP_FORM_CONFIG } from '@dwtechs/ngx-crud-builder';\n\n{ provide: APP_FORM_CONFIG, useValue: {\n  customErrorMessages: {\n    // key = validator error key, value = message shown to the user\n    unsafeWords: 'The text contains forbidden words: {words}',\n    minDate: 'The date must be at least {days} day(s) from today',\n  },\n}}\n```\n\n> Message templates may include `{placeholder}` tokens that are interpolated at runtime by the validator.\n\n### `LOCALE_ID` (Angular standard)\n\nSet Angular's locale to match the language of your `CRUD_LABELS` override. This affects date/number formatting in Optimus UI controls.\n\n```typescript\nimport { LOCALE_ID } from '@angular/core';\nimport { registerLocaleData } from '@angular/common';\nimport localeEn from '@angular/common/locales/en';\n\nregisterLocaleData(localeEn, 'en');\n\n// app.config.ts\n{ provide: LOCALE_ID, useValue: 'en' }\n```\n\n### Complete `app.config.ts` example\n\n```typescript\nimport { ApplicationConfig, LOCALE_ID } from '@angular/core';\nimport { registerLocaleData } from '@angular/common';\nimport localeFr from '@angular/common/locales/fr';\nimport { provideRouter } from '@angular/router';\nimport { provideOptimus } from '@openng/optimus-ui/config';\nimport { definePreset } from '@openng/optimus-ui-themes';\nimport Aura from '@openng/optimus-ui-themes/aura';\nimport {\n  ACL_ADAPTER,\n  APP_CONFIG,\n  APP_FORM_CONFIG,\n  provideCrudLabels,\n  provideCrudRenderer,\n} from '@dwtechs/crud-builder';\nimport { AclService } from './acl.service';\nimport { routes } from './app.routes';\n\nconst MyPreset = definePreset(Aura, {\n  semantic: { primary: { /* brand colours */ } },\n});\n\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideRouter(routes),\n    provideOptimus({ theme: { preset: MyPreset } }),\n    { provide: LOCALE_ID, useValue: 'fr' },\n    { provide: APP_CONFIG, useValue: {\n        title: 'My App',\n        appKey: 'my_app',\n        storageKeys: { TABLE_CONFIG: 'my_app_tableConfig' },\n        apiPrefix: '/api/',\n    }},\n    { provide: ACL_ADAPTER, useExisting: AclService },\n    { provide: APP_FORM_CONFIG, useValue: {\n        customErrorMessages: {\n          unsafeWords: 'Texte non autorisé : {words}',\n        },\n    }},\n    ...provideCrudRenderer('optimus-ui'),\n    provideCrudLabels({ /* label overrides */ }),\n  ],\n};\n\nregisterLocaleData(localeFr, 'fr');\n```\n\n---\n\n## Internationalisation (i18n)\n\nThe library ships with **French default labels**. No `$localize` / Angular i18n pipeline is required. All UI strings are provided through a single `CRUD_LABELS` injection token and overridden per-application with `provideCrudLabels()`.\n\n### `provideCrudLabels(overrides)`\n\nCall this function once in your `ApplicationConfig` (or in any component/route `providers` array for a scoped override). Pass only the sections you want to change — the rest falls back to the French defaults automatically.\n\n```typescript\nimport { provideCrudLabels } from '@dwtechs/ngx-crud-builder';\n\nprovideCrudLabels({\n  toolbar: {\n    export: 'Export data',\n    configureColumns: 'Configure columns',\n    refresh: 'Refresh',\n  },\n  form: {\n    reset: 'Reset',\n    submit: 'Save',\n  },\n  validators: {\n    required: 'This field is required',\n    emailInvalid: 'Invalid email address',\n    minlength: 'Minimum {requiredLength} characters required',\n    maxlength: 'Maximum {requiredLength} characters allowed',\n    min: 'Value must be ≥ {min}',\n    max: 'Value must be ≤ {max}',\n    invalid: 'Invalid value',\n    unknownValue: 'Please select one of the suggested values',\n    maxFileSize: 'File exceeds the maximum allowed size',\n  },\n})\n```\n\n### Available label sections\n\n| Section | Applies to |\n|---|---|\n| `toolbar` | Table toolbar buttons (export, refresh, configure columns) |\n| `exportDialog` | Export dialog (header, format choices, data scope) |\n| `columnsDialog` | Column management dialog |\n| `columnsViews` | Saved column views panel |\n| `tableActions` | Row action button tooltips (edit, delete) |\n| `tableRegular` | Pagination report (`currentPageReport(first, last, total)`) |\n| `table` | Confirmation dialogs, export error toast, default view name |\n| `tableControl` | Inline table control inside forms |\n| `history` | Audit / history panel column headers |\n| `editionDialog` | Edition dialog header and action buttons |\n| `archivedConfig` | Archive status filter and label |\n| `form` | Form action buttons (reset, submit) and empty state |\n| `arrayElement` | Delete button in array sub-forms |\n| `dateControl` | Date picker overlay buttons |\n| `richTextEditor` | Rich text editor action label |\n| `fileUpload` | File upload control labels and messages |\n| `autocomplete` | \"Create new option\" entry label |\n| `picklist` | Picklist source/target column headers |\n| `validators` | Form validation error messages |\n| `patterns` | Regex pattern validation messages |\n| `download` | Info message when printing a non-PDF file |\n\n### Function-valued labels\n\nSome labels are functions to allow runtime interpolation:\n\n```typescript\nprovideCrudLabels({\n  table: {\n    deleteConfirmationMultiple: (count) =>\n      `Are you sure you want to archive these ${count} items?`,\n    restoreConfirmationMultiple: (count) =>\n      `Are you sure you want to restore these ${count} items?`,\n  },\n  tableRegular: {\n    currentPageReport: (first, last, total) =>\n      `Showing ${first} to ${last} of ${total} entries`,\n  },\n  fileUpload: {\n    maxFileSizeExceeded: (fileName, maxFileSize) =>\n      `\"${fileName}\" exceeds the ${maxFileSize}-byte limit.`,\n  },\n})\n```\n\n### Full English override\n\n```typescript\nprovideCrudLabels({\n  toolbar: {\n    export: 'Export data',\n    configureColumns: 'Configure columns',\n    refresh: 'Refresh',\n  },\n  exportDialog: {\n    header: 'Export data',\n    chooseFormat: 'Choose format',\n    chooseData: 'Which data?',\n    all: 'All',\n    selection: 'Selection',\n    cancel: 'Cancel',\n    export: 'Export',\n  },\n  columnsDialog: { header: 'Column management', cancel: 'Cancel', save: 'Save' },\n  columnsViews: {\n    title: 'Views',\n    add: 'Add',\n    delete: 'Delete',\n    rename: 'Rename',\n    validate: 'Apply',\n    cancel: 'Cancel',\n    deleteConfirmation: 'Are you sure you want to delete this view?',\n  },\n  tableActions: { edit: 'Edit', delete: 'Delete' },\n  tableRegular: {\n    currentPageReport: (first, last, total) =>\n      `Showing ${first} to ${last} of ${total} entries`,\n  },\n  table: {\n    exportFailedTitle: 'Export failed',\n    exportFailedDetail: 'An error occurred while exporting data.',\n    deleteConfirmationSingle: 'Are you sure you want to archive this item?',\n    deleteConfirmationMultiple: (count) =>\n      `Are you sure you want to archive these ${count} items?`,\n    restoreConfirmationSingle: 'Are you sure you want to restore this item?',\n    restoreConfirmationMultiple: (count) =>\n      `Are you sure you want to restore these ${count} items?`,\n    confirmationHeader: 'Confirmation',\n    confirmationCancel: 'Cancel',\n    confirmationConfirm: 'Confirm',\n    defaultViewName: 'Default',\n  },\n  tableControl: {\n    add: 'Add',\n    delete: 'Delete',\n    noData: 'No data',\n    actionsColumnHeader: 'Actions',\n    multiselectValidate: 'Apply',\n    multiselectUnsavedChanges: 'Remember to save your changes',\n  },\n  history: {\n    restore: 'Restore',\n    updatedAt: 'Updated at',\n    updatedBy: 'Updated by',\n    property: 'Property',\n    value: 'Value',\n    previousValue: 'Previous value',\n  },\n  editionDialog: {\n    historyHeader: 'Change history',\n    archive: 'Archive',\n    modeCreate: 'Create',\n    modeConsult: 'View',\n    modeEdit: 'Edit',\n    cancel: 'Cancel',\n    close: 'Close',\n  },\n  archivedConfig: {\n    label: 'Archived',\n    labelAt: 'Archived on',\n    archived: 'Archived',\n    active: 'Active',\n  },\n  form: { reset: 'Reset', submit: 'Submit', noFields: 'No fields available' },\n  arrayElement: { delete: 'Remove' },\n  dateControl: { close: 'Close', clear: 'Clear', today: 'Today', validate: 'Apply' },\n  richTextEditor: { editHtml: 'Edit HTML' },\n  fileUpload: {\n    chooseFile: 'Choose a file',\n    dragDropLabel: 'Drag & drop files here, or click to select',\n    uploadedFilesTitle: 'Uploaded files',\n    canAddMore: 'You can add multiple files.',\n    cannotAddMore:\n      'Only one file allowed. Remove the current file to upload a new one.',\n    maxFileSizeExceeded: (fileName, maxFileSize) =>\n      `\"${fileName}\" exceeds the ${maxFileSize}-byte limit.`,\n  },\n  autocomplete: { newOption: '(new)' },\n  picklist: { sourceHeader: 'Available', targetHeader: 'Selected' },\n  validators: {\n    required: 'This field is required',\n    invalid: 'Invalid value',\n    unknownValue: 'Please select one of the suggested values',\n    emailInvalid: 'Invalid email address',\n    minlength: 'Minimum {requiredLength} characters required',\n    maxlength: 'Maximum {requiredLength} characters allowed',\n    min: 'Value must be ≥ {min}',\n    max: 'Value must be ≤ {max}',\n    maxFileSize: 'File exceeds the maximum allowed size',\n  },\n  patterns: {\n    nameWithDashes: 'Allowed: letters, spaces and hyphens',\n    lettersWithSpaces: 'Allowed: letters and spaces',\n    lettersWithoutSpaces: 'Allowed: letters only',\n    alphanumericalWithSpaces: 'Allowed: letters, digits and spaces',\n    alphanumerical: 'Allowed: letters and digits',\n    onlyCaps: 'Allowed: uppercase letters and digits',\n    integer: 'An integer is required',\n    phoneNumber: 'Invalid phone number format',\n    withExtension: 'A file extension is required',\n  },\n  download: {\n    noPdfPrintWarning:\n      'The file is not a PDF; printing is not available. It will be downloaded instead.',\n  },\n})\n```\n\n---\n\n## Building\n\n```bash\nnpm run build:lib\n```\n\nOutput is placed in `dist/ngx-crud-builder/`.\n\n## Running unit tests\n\n```bash\nnpm test\n```\n\n## Further documentation\n\n- [FormComponent](src/crud/core/doc/form.component.md)\n- [TableComponent](src/crud/core/doc/table.component.md)\n- [Column options](src/crud/core/doc/column-options.md)\n- [Control options](src/crud/core/doc/control-options.documentation.md)\n\n","readmeFilename":"README.md"}