From 54914bf3b009480186a9a21ab2721251203eee62 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Lis?= <llis@si-ecommerce.pl>
Date: Wed, 7 Aug 2024 08:29:01 +0200
Subject: [PATCH] chore: add dist to repo

---
 .gitignore                                    |  10 +-
 angular.json                                  |   3 +
 dist/lib/.npmignore                           |   2 +
 dist/lib/esm2022/angular-datatables.mjs       |   5 +
 dist/lib/esm2022/index.mjs                    |   8 +
 dist/lib/esm2022/public_api.mjs               |  14 ++
 .../src/angular-datatables.directive.mjs      | 141 +++++++++++++
 .../esm2022/src/angular-datatables.module.mjs |  24 +++
 dist/lib/esm2022/src/models/settings.mjs      |   2 +
 dist/lib/fesm2022/angular-datatables.mjs      | 188 ++++++++++++++++++
 dist/lib/fesm2022/angular-datatables.mjs.map  |   1 +
 dist/lib/index.d.ts                           |   7 +
 dist/lib/package.json                         |  52 +++++
 dist/lib/public_api.d.ts                      |  13 ++
 dist/lib/schematics/src/collection.json       |  11 +
 dist/lib/schematics/src/ng-add/index.d.ts     |   3 +
 .../src/ng-add/models/schematics-options.d.ts |   5 +
 .../src/ng-add/models/style-options.d.ts      |  19 ++
 dist/lib/schematics/src/ng-add/schema.json    |  41 ++++
 .../src/ng-add/utils/get-file-content.d.ts    |   2 +
 .../schematics/src/ng-add/utils/index.d.ts    |  17 ++
 .../src/ng-add/utils/ng-module-imports.d.ts   |  12 ++
 .../src/ng-add/utils/project-main-file.d.ts   |  10 +
 .../src/ng-add/utils/project-targets.d.ts     |  10 +
 .../lib/src/angular-datatables.directive.d.ts |  42 ++++
 dist/lib/src/angular-datatables.module.d.ts   |   8 +
 dist/lib/src/models/settings.d.ts             |  25 +++
 27 files changed, 670 insertions(+), 5 deletions(-)
 create mode 100644 dist/lib/.npmignore
 create mode 100644 dist/lib/esm2022/angular-datatables.mjs
 create mode 100644 dist/lib/esm2022/index.mjs
 create mode 100644 dist/lib/esm2022/public_api.mjs
 create mode 100644 dist/lib/esm2022/src/angular-datatables.directive.mjs
 create mode 100644 dist/lib/esm2022/src/angular-datatables.module.mjs
 create mode 100644 dist/lib/esm2022/src/models/settings.mjs
 create mode 100644 dist/lib/fesm2022/angular-datatables.mjs
 create mode 100644 dist/lib/fesm2022/angular-datatables.mjs.map
 create mode 100644 dist/lib/index.d.ts
 create mode 100644 dist/lib/package.json
 create mode 100644 dist/lib/public_api.d.ts
 create mode 100644 dist/lib/schematics/src/collection.json
 create mode 100644 dist/lib/schematics/src/ng-add/index.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/models/schematics-options.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/models/style-options.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/schema.json
 create mode 100644 dist/lib/schematics/src/ng-add/utils/get-file-content.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/utils/index.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/utils/ng-module-imports.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/utils/project-main-file.d.ts
 create mode 100644 dist/lib/schematics/src/ng-add/utils/project-targets.d.ts
 create mode 100644 dist/lib/src/angular-datatables.directive.d.ts
 create mode 100644 dist/lib/src/angular-datatables.module.d.ts
 create mode 100644 dist/lib/src/models/settings.d.ts

diff --git a/.gitignore b/.gitignore
index 58938263c..8d3cfbbbe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,15 +16,15 @@ _temp
 !demo/src/**/*.js
 
 # angular-datatables specific
-*.js.map
-*.d.ts
-*.metadata.json
-index*.js
+# *.js.map
+# *.d.ts
+# *.metadata.json
+# index*.js
 
 # See http://help.github.com/ignore-files/ for more about ignoring files.
 
 # compiled output
-/dist
+# /dist
 /tmp
 /out-tsc
 
diff --git a/angular.json b/angular.json
index 3bee1223b..7122be683 100644
--- a/angular.json
+++ b/angular.json
@@ -186,5 +186,8 @@
     "@schematics/angular:directive": {
       "prefix": "app"
     }
+  },
+  "cli": {
+    "analytics": false
   }
 }
diff --git a/dist/lib/.npmignore b/dist/lib/.npmignore
new file mode 100644
index 000000000..d95335651
--- /dev/null
+++ b/dist/lib/.npmignore
@@ -0,0 +1,2 @@
+# Nested package.json's are only needed for development.
+# **/package.json
\ No newline at end of file
diff --git a/dist/lib/esm2022/angular-datatables.mjs b/dist/lib/esm2022/angular-datatables.mjs
new file mode 100644
index 000000000..0044f8364
--- /dev/null
+++ b/dist/lib/esm2022/angular-datatables.mjs
@@ -0,0 +1,5 @@
+/**
+ * Generated bundle index. Do not edit.
+ */
+export * from './index';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kYXRhdGFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2FuZ3VsYXItZGF0YXRhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
\ No newline at end of file
diff --git a/dist/lib/esm2022/index.mjs b/dist/lib/esm2022/index.mjs
new file mode 100644
index 000000000..ee95353fd
--- /dev/null
+++ b/dist/lib/esm2022/index.mjs
@@ -0,0 +1,8 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+export * from './public_api';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sLWxpbi9hbmd1bGFyLWRhdGF0YWJsZXMvbWFzdGVyL0xJQ0VOU0VcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xyXG4iXX0=
\ No newline at end of file
diff --git a/dist/lib/esm2022/public_api.mjs b/dist/lib/esm2022/public_api.mjs
new file mode 100644
index 000000000..76420fa15
--- /dev/null
+++ b/dist/lib/esm2022/public_api.mjs
@@ -0,0 +1,14 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+/**
+ * @module
+ * @description
+ * Entry point from which you should import all public library APIs.
+ */
+export { DataTableDirective } from './src/angular-datatables.directive';
+export { DataTablesModule } from './src/angular-datatables.module';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2wtbGluL2FuZ3VsYXItZGF0YXRhYmxlcy9tYXN0ZXIvTElDRU5TRVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBFbnRyeSBwb2ludCBmcm9tIHdoaWNoIHlvdSBzaG91bGQgaW1wb3J0IGFsbCBwdWJsaWMgbGlicmFyeSBBUElzLlxyXG4gKi9cclxuZXhwb3J0IHsgRGF0YVRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvYW5ndWxhci1kYXRhdGFibGVzLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7IERhdGFUYWJsZXNNb2R1bGUgfSBmcm9tICcuL3NyYy9hbmd1bGFyLWRhdGF0YWJsZXMubW9kdWxlJztcclxuIl19
\ No newline at end of file
diff --git a/dist/lib/esm2022/src/angular-datatables.directive.mjs b/dist/lib/esm2022/src/angular-datatables.directive.mjs
new file mode 100644
index 000000000..0011dd0f8
--- /dev/null
+++ b/dist/lib/esm2022/src/angular-datatables.directive.mjs
@@ -0,0 +1,141 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+import { Directive, ElementRef, Input, Renderer2, ViewContainerRef } from '@angular/core';
+import { Subject } from 'rxjs';
+import * as i0 from "@angular/core";
+export class DataTableDirective {
+    constructor(el, vcr, renderer) {
+        this.el = el;
+        this.vcr = vcr;
+        this.renderer = renderer;
+        /**
+         * The DataTable option you pass to configure your table.
+         */
+        this.dtOptions = {};
+    }
+    ngOnInit() {
+        if (this.dtTrigger) {
+            this.dtTrigger.subscribe((options) => {
+                this.displayTable(options);
+            });
+        }
+        else {
+            this.displayTable(null);
+        }
+    }
+    ngOnDestroy() {
+        if (this.dtTrigger) {
+            this.dtTrigger.unsubscribe();
+        }
+        if (this.dt) {
+            this.dt.destroy(true);
+        }
+    }
+    displayTable(dtOptions) {
+        // assign new options if provided
+        if (dtOptions) {
+            this.dtOptions = dtOptions;
+        }
+        this.dtInstance = new Promise((resolve, reject) => {
+            Promise.resolve(this.dtOptions).then(resolvedDTOptions => {
+                // validate object
+                const isTableEmpty = Object.keys(resolvedDTOptions).length === 0 && $('tbody tr', this.el.nativeElement).length === 0;
+                if (isTableEmpty) {
+                    reject('Both the table and dtOptions cannot be empty');
+                    return;
+                }
+                // Set a column unique
+                if (resolvedDTOptions.columns) {
+                    resolvedDTOptions.columns.forEach(col => {
+                        if ((col.id ?? '').trim() === '') {
+                            col.id = this.getColumnUniqueId();
+                        }
+                    });
+                }
+                // Using setTimeout as a "hack" to be "part" of NgZone
+                setTimeout(() => {
+                    // Assign DT properties here
+                    let options = {
+                        rowCallback: (row, data, index) => {
+                            if (resolvedDTOptions.columns) {
+                                const columns = resolvedDTOptions.columns;
+                                this.applyNgPipeTransform(row, columns);
+                                this.applyNgRefTemplate(row, columns, data);
+                            }
+                            // run user specified row callback if provided.
+                            if (resolvedDTOptions.rowCallback) {
+                                resolvedDTOptions.rowCallback(row, data, index);
+                            }
+                        }
+                    };
+                    // merge user's config with ours
+                    options = Object.assign({}, resolvedDTOptions, options);
+                    this.dt = $(this.el.nativeElement).DataTable(options);
+                    resolve(this.dt);
+                });
+            });
+        });
+    }
+    applyNgPipeTransform(row, columns) {
+        // Filter columns with pipe declared
+        const colsWithPipe = columns.filter(x => x.ngPipeInstance && !x.ngTemplateRef);
+        colsWithPipe.forEach(el => {
+            const pipe = el.ngPipeInstance;
+            const pipeArgs = el.ngPipeArgs || [];
+            // find index of column using `data` attr
+            const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);
+            // get <td> element which holds data using index
+            const rowFromCol = row.childNodes.item(i);
+            // Transform data with Pipe and PipeArgs
+            const rowVal = $(rowFromCol).text();
+            const rowValAfter = pipe.transform(rowVal, ...pipeArgs);
+            // Apply transformed string to <td>
+            $(rowFromCol).text(rowValAfter);
+        });
+    }
+    applyNgRefTemplate(row, columns, data) {
+        // Filter columns using `ngTemplateRef`
+        const colsWithTemplate = columns.filter(x => x.ngTemplateRef && !x.ngPipeInstance);
+        colsWithTemplate.forEach(el => {
+            const { ref, context } = el.ngTemplateRef;
+            // get <td> element which holds data using index
+            const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);
+            const cellFromIndex = row.childNodes.item(i);
+            // reset cell before applying transform
+            $(cellFromIndex).html('');
+            // render onto DOM
+            // finalize context to be sent to user
+            const _context = Object.assign({}, context, context?.userData, {
+                adtData: data
+            });
+            const instance = this.vcr.createEmbeddedView(ref, _context);
+            this.renderer.appendChild(cellFromIndex, instance.rootNodes[0]);
+        });
+    }
+    getColumnUniqueId() {
+        let result = '';
+        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+        for (let i = 0; i < 6; i++) {
+            const randomIndex = Math.floor(Math.random() * characters.length);
+            result += characters.charAt(randomIndex);
+        }
+        return result.trim();
+    }
+    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTableDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
+    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: DataTableDirective, selector: "[datatable]", inputs: { dtOptions: "dtOptions", dtTrigger: "dtTrigger" }, ngImport: i0 }); }
+}
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTableDirective, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[datatable]'
+                }]
+        }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }], propDecorators: { dtOptions: [{
+                type: Input
+            }], dtTrigger: [{
+                type: Input
+            }] } });
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kYXRhdGFibGVzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9zcmMvYW5ndWxhci1kYXRhdGFibGVzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTy9CLE1BQU0sT0FBTyxrQkFBa0I7SUF5QjdCLFlBQ1UsRUFBYyxFQUNkLEdBQXFCLEVBQ3JCLFFBQW1CO1FBRm5CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBM0I3Qjs7V0FFRztRQUVILGNBQVMsR0FBZ0IsRUFBRSxDQUFDO0lBd0J4QixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FB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LE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDOzhHQW5KVSxrQkFBa0I7a0dBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFIOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtpQkFDeEI7c0lBTUMsU0FBUztzQkFEUixLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sLWxpbi9hbmd1bGFyLWRhdGF0YWJsZXMvbWFzdGVyL0xJQ0VOU0VcclxuICovXHJcblxyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQURUU2V0dGluZ3MsIEFEVENvbHVtbnMgfSBmcm9tICcuL21vZGVscy9zZXR0aW5ncyc7XHJcbmltcG9ydCB7IEFwaSB9IGZyb20gJ2RhdGF0YWJsZXMubmV0JztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2RhdGF0YWJsZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgLyoqXHJcbiAgICogVGhlIERhdGFUYWJsZSBvcHRpb24geW91IHBhc3MgdG8gY29uZmlndXJlIHlvdXIgdGFibGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBkdE9wdGlvbnM6IEFEVFNldHRpbmdzID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgdHJpZ2dlciBpcyB1c2VkIGlmIG9uZSB3YW50cyB0byB0cmlnZ2VyIG1hbnVhbGx5IHRoZSBEVCByZW5kZXJpbmdcclxuICAgKiBVc2VmdWwgd2hlbiByZW5kZXJpbmcgYW5ndWxhciByZW5kZXJlZCBET01cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGR0VHJpZ2dlciE6IFN1YmplY3Q8QURUU2V0dGluZ3M+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgRGF0YVRhYmxlIGluc3RhbmNlIGJ1aWx0IGJ5IHRoZSBqUXVlcnkgbGlicmFyeSBbRGF0YVRhYmxlc10oZGF0YXRhYmxlcy5uZXQpLlxyXG4gICAqXHJcbiAgICogSXQncyBwb3NzaWJsZSB0byBleGVjdXRlIHRoZSBbRGF0YVRhYmxlcyBBUElzXShodHRwczovL2RhdGF0YWJsZXMubmV0L3JlZmVyZW5jZS9hcGkvKSB3aXRoXHJcbiAgICogdGhpcyB2YXJpYWJsZS5cclxuICAgKi9cclxuICBkdEluc3RhbmNlITogUHJvbWlzZTxBcGk+O1xyXG5cclxuICAvLyBPbmx5IHVzZWQgZm9yIGRlc3Ryb3lpbmcgdGhlIHRhYmxlIHdoZW4gZGVzdHJveWluZyB0aGlzIGRpcmVjdGl2ZVxyXG4gIHByaXZhdGUgZHQhOiBBcGk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kdFRyaWdnZXIpIHtcclxuICAgICAgdGhpcy5kdFRyaWdnZXIuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGFibGUob3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNwbGF5VGFibGUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmR0VHJpZ2dlcikge1xyXG4gICAgICB0aGlzLmR0VHJpZ2dlci51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgdGhpcy5kdC5kZXN0cm95KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwbGF5VGFibGUoZHRPcHRpb25zOiBBRFRTZXR0aW5ncyB8IG51bGwpOiB2b2lkIHtcclxuICAgIC8vIGFzc2lnbiBuZXcgb3B0aW9ucyBpZiBwcm92aWRlZFxyXG4gICAgaWYgKGR0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLmR0T3B0aW9ucyA9IGR0T3B0aW9ucztcclxuICAgIH1cclxuICAgIHRoaXMuZHRJbnN0YW5jZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuZHRPcHRpb25zKS50aGVuKHJlc29sdmVkRFRPcHRpb25zID0+IHtcclxuICAgICAgICAvLyB2YWxpZGF0ZSBvYmplY3RcclxuICAgICAgICBjb25zdCBpc1RhYmxlRW1wdHkgPSBPYmplY3Qua2V5cyhyZXNvbHZlZERUT3B0aW9ucykubGVuZ3RoID09PSAwICYmICQoJ3Rib2R5IHRyJywgdGhpcy5lbC5uYXRpdmVFbGVtZW50KS5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgaWYgKGlzVGFibGVFbXB0eSkge1xyXG4gICAgICAgICAgcmVqZWN0KCdCb3RoIHRoZSB0YWJsZSBhbmQgZHRPcHRpb25zIGNhbm5vdCBiZSBlbXB0eScpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGEgY29sdW1uIHVuaXF1ZVxyXG4gICAgICAgIGlmIChyZXNvbHZlZERUT3B0aW9ucy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICByZXNvbHZlZERUT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKChjb2wuaWQgPz8gJycpLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBjb2wuaWQgPSB0aGlzLmdldENvbHVtblVuaXF1ZUlkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXNpbmcgc2V0VGltZW91dCBhcyBhIFwiaGFja1wiIHRvIGJlIFwicGFydFwiIG9mIE5nWm9uZVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQXNzaWduIERUIHByb3BlcnRpZXMgaGVyZVxyXG4gICAgICAgICAgbGV0IG9wdGlvbnM6IEFEVFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICByb3dDYWxsYmFjazogKHJvdywgZGF0YSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzb2x2ZWREVE9wdGlvbnMuY29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHJlc29sdmVkRFRPcHRpb25zLmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TmdQaXBlVHJhbnNmb3JtKHJvdywgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TmdSZWZUZW1wbGF0ZShyb3csIGNvbHVtbnMsIGRhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gcnVuIHVzZXIgc3BlY2lmaWVkIHJvdyBjYWxsYmFjayBpZiBwcm92aWRlZC5cclxuICAgICAgICAgICAgICBpZiAocmVzb2x2ZWREVE9wdGlvbnMucm93Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmVkRFRPcHRpb25zLnJvd0NhbGxiYWNrKHJvdywgZGF0YSwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIC8vIG1lcmdlIHVzZXIncyBjb25maWcgd2l0aCBvdXJzXHJcbiAgICAgICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzb2x2ZWREVE9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5kdCA9ICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5EYXRhVGFibGUob3B0aW9ucyk7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuZHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseU5nUGlwZVRyYW5zZm9ybShyb3c6IE5vZGUsIGNvbHVtbnM6IEFEVENvbHVtbnNbXSk6IHZvaWQge1xyXG4gICAgLy8gRmlsdGVyIGNvbHVtbnMgd2l0aCBwaXBlIGRlY2xhcmVkXHJcbiAgICBjb25zdCBjb2xzV2l0aFBpcGUgPSBjb2x1bW5zLmZpbHRlcih4ID0+IHgubmdQaXBlSW5zdGFuY2UgJiYgIXgubmdUZW1wbGF0ZVJlZik7XHJcbiAgICBjb2xzV2l0aFBpcGUuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgIGNvbnN0IHBpcGUgPSBlbC5uZ1BpcGVJbnN0YW5jZSE7XHJcbiAgICAgIGNvbnN0IHBpcGVBcmdzID0gZWwubmdQaXBlQXJncyB8fCBbXTtcclxuICAgICAgLy8gZmluZCBpbmRleCBvZiBjb2x1bW4gdXNpbmcgYGRhdGFgIGF0dHJcclxuICAgICAgY29uc3QgaSA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlICE9PSBmYWxzZSkuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZWwuaWQpO1xyXG4gICAgICAvLyBnZXQgPHRkPiBlbGVtZW50IHdoaWNoIGhvbGRzIGRhdGEgdXNpbmcgaW5kZXhcclxuICAgICAgY29uc3Qgcm93RnJvbUNvbCA9IHJvdy5jaGlsZE5vZGVzLml0ZW0oaSk7XHJcbiAgICAgIC8vIFRyYW5zZm9ybSBkYXRhIHdpdGggUGlwZSBhbmQgUGlwZUFyZ3NcclxuICAgICAgY29uc3Qgcm93VmFsID0gJChyb3dGcm9tQ29sKS50ZXh0KCk7XHJcbiAgICAgIGNvbnN0IHJvd1ZhbEFmdGVyID0gcGlwZS50cmFuc2Zvcm0ocm93VmFsLCAuLi5waXBlQXJncyk7XHJcbiAgICAgIC8vIEFwcGx5IHRyYW5zZm9ybWVkIHN0cmluZyB0byA8dGQ+XHJcbiAgICAgICQocm93RnJvbUNvbCkudGV4dChyb3dWYWxBZnRlcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlOZ1JlZlRlbXBsYXRlKHJvdzogTm9kZSwgY29sdW1uczogQURUQ29sdW1uc1tdLCBkYXRhOiBPYmplY3QpOiB2b2lkIHtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5zIHVzaW5nIGBuZ1RlbXBsYXRlUmVmYFxyXG4gICAgY29uc3QgY29sc1dpdGhUZW1wbGF0ZSA9IGNvbHVtbnMuZmlsdGVyKHggPT4geC5uZ1RlbXBsYXRlUmVmICYmICF4Lm5nUGlwZUluc3RhbmNlKTtcclxuICAgIGNvbHNXaXRoVGVtcGxhdGUuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgIGNvbnN0IHsgcmVmLCBjb250ZXh0IH0gPSBlbC5uZ1RlbXBsYXRlUmVmITtcclxuICAgICAgLy8gZ2V0IDx0ZD4gZWxlbWVudCB3aGljaCBob2xkcyBkYXRhIHVzaW5nIGluZGV4XHJcbiAgICAgIGNvbnN0IGkgPSBjb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSAhPT0gZmFsc2UpLmZpbmRJbmRleChlID0+IGUuaWQgPT09IGVsLmlkKTtcclxuICAgICAgY29uc3QgY2VsbEZyb21JbmRleCA9IHJvdy5jaGlsZE5vZGVzLml0ZW0oaSk7XHJcbiAgICAgIC8vIHJlc2V0IGNlbGwgYmVmb3JlIGFwcGx5aW5nIHRyYW5zZm9ybVxyXG4gICAgICAkKGNlbGxGcm9tSW5kZXgpLmh0bWwoJycpO1xyXG4gICAgICAvLyByZW5kZXIgb250byBET01cclxuICAgICAgLy8gZmluYWxpemUgY29udGV4dCB0byBiZSBzZW50IHRvIHVzZXJcclxuICAgICAgY29uc3QgX2NvbnRleHQgPSBPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0LCBjb250ZXh0Py51c2VyRGF0YSwge1xyXG4gICAgICAgIGFkdERhdGE6IGRhdGFcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHJlZiwgX2NvbnRleHQpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNlbGxGcm9tSW5kZXgsIGluc3RhbmNlLnJvb3ROb2Rlc1swXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29sdW1uVW5pcXVlSWQoKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
\ No newline at end of file
diff --git a/dist/lib/esm2022/src/angular-datatables.module.mjs b/dist/lib/esm2022/src/angular-datatables.module.mjs
new file mode 100644
index 000000000..3b06a04f7
--- /dev/null
+++ b/dist/lib/esm2022/src/angular-datatables.module.mjs
@@ -0,0 +1,24 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DataTableDirective } from './angular-datatables.directive';
+import * as i0 from "@angular/core";
+export class DataTablesModule {
+    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
+    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, declarations: [DataTableDirective], imports: [CommonModule], exports: [DataTableDirective] }); }
+    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, imports: [CommonModule] }); }
+}
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    declarations: [DataTableDirective],
+                    exports: [DataTableDirective]
+                }]
+        }] });
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kYXRhdGFibGVzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9zcmMvYW5ndWxhci1kYXRhdGFibGVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU9wRSxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFIWCxrQkFBa0IsYUFEdkIsWUFBWSxhQUVaLGtCQUFrQjsrR0FFbEIsZ0JBQWdCLFlBSmhCLFlBQVk7OzJGQUlaLGdCQUFnQjtrQkFMNUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBRSxZQUFZLENBQUU7b0JBQ3pCLFlBQVksRUFBRSxDQUFFLGtCQUFrQixDQUFFO29CQUNwQyxPQUFPLEVBQUUsQ0FBRSxrQkFBa0IsQ0FBRTtpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbC1saW4vYW5ndWxhci1kYXRhdGFibGVzL21hc3Rlci9MSUNFTlNFXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9hbmd1bGFyLWRhdGF0YWJsZXMuZGlyZWN0aXZlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogWyBDb21tb25Nb2R1bGUgXSxcclxuICBkZWNsYXJhdGlvbnM6IFsgRGF0YVRhYmxlRGlyZWN0aXZlIF0sXHJcbiAgZXhwb3J0czogWyBEYXRhVGFibGVEaXJlY3RpdmUgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlc01vZHVsZSB7fVxyXG4iXX0=
\ No newline at end of file
diff --git a/dist/lib/esm2022/src/models/settings.mjs b/dist/lib/esm2022/src/models/settings.mjs
new file mode 100644
index 000000000..3e469f6f5
--- /dev/null
+++ b/dist/lib/esm2022/src/models/settings.mjs
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL21vZGVscy9zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZVRyYW5zZm9ybSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlnLCBDb25maWdDb2x1bW5zIH0gZnJvbSAnZGF0YXRhYmxlcy5uZXQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBRFRTZXR0aW5ncyBleHRlbmRzIENvbmZpZyB7XHJcbiAgY29sdW1ucz86IEFEVENvbHVtbnNbXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEFEVENvbHVtbnMgZXh0ZW5kcyBDb25maWdDb2x1bW5zIHtcclxuICAvKiogRGVmaW5lIHRoZSBjb2x1bW4ncyB1bmlxdWUgaWRlbnRpZmllciAqL1xyXG4gIGlkPzogc3RyaW5nO1xyXG4gIC8qKiBTZXQgaW5zdGFuY2Ugb2YgQW5ndWxhciBwaXBlIHRvIHRyYW5zZm9ybSB0aGUgZGF0YSBvZiBwYXJ0aWN1bGFyIGNvbHVtbiAqL1xyXG4gIG5nUGlwZUluc3RhbmNlPzogUGlwZVRyYW5zZm9ybTtcclxuICAvKiogRGVmaW5lIHRoZSBhcmd1bWVudHMgZm9yIHRoZSB0cmFuZm9ybSBtZXRob2Qgb2YgdGhlIHBpcGUsIHRvIGNoYW5nZSBpdHMgYmVoYXZpb3IgKi9cclxuICBuZ1BpcGVBcmdzPzogYW55W107XHJcbiAgLyoqIFNldCBgVGVtcGxhdGVSZWZgIHRvIHRyYW5zZm9ybSB0aGUgZGF0YSBvZiB0aGlzIGNvbHVtbiAqL1xyXG4gIG5nVGVtcGxhdGVSZWY/OiBBRFRUZW1wbGF0ZVJlZjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBRFRUZW1wbGF0ZVJlZiB7XHJcbiAgLyoqIGBUZW1wbGF0ZVJlZmAgdG8gd29yayB3aXRoICovXHJcbiAgcmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKiAqL1xyXG4gIGNvbnRleHQ/OiBBRFRUZW1wbGF0ZVJlZkNvbnRleHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQURUVGVtcGxhdGVSZWZDb250ZXh0IHtcclxuICBjYXB0dXJlRXZlbnRzOiBGdW5jdGlvbjtcclxuICB1c2VyRGF0YT86IGFueTtcclxufVxyXG4iXX0=
\ No newline at end of file
diff --git a/dist/lib/fesm2022/angular-datatables.mjs b/dist/lib/fesm2022/angular-datatables.mjs
new file mode 100644
index 000000000..89d150bac
--- /dev/null
+++ b/dist/lib/fesm2022/angular-datatables.mjs
@@ -0,0 +1,188 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, NgModule } from '@angular/core';
+import 'rxjs';
+import { CommonModule } from '@angular/common';
+
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+class DataTableDirective {
+    constructor(el, vcr, renderer) {
+        this.el = el;
+        this.vcr = vcr;
+        this.renderer = renderer;
+        /**
+         * The DataTable option you pass to configure your table.
+         */
+        this.dtOptions = {};
+    }
+    ngOnInit() {
+        if (this.dtTrigger) {
+            this.dtTrigger.subscribe((options) => {
+                this.displayTable(options);
+            });
+        }
+        else {
+            this.displayTable(null);
+        }
+    }
+    ngOnDestroy() {
+        if (this.dtTrigger) {
+            this.dtTrigger.unsubscribe();
+        }
+        if (this.dt) {
+            this.dt.destroy(true);
+        }
+    }
+    displayTable(dtOptions) {
+        // assign new options if provided
+        if (dtOptions) {
+            this.dtOptions = dtOptions;
+        }
+        this.dtInstance = new Promise((resolve, reject) => {
+            Promise.resolve(this.dtOptions).then(resolvedDTOptions => {
+                // validate object
+                const isTableEmpty = Object.keys(resolvedDTOptions).length === 0 && $('tbody tr', this.el.nativeElement).length === 0;
+                if (isTableEmpty) {
+                    reject('Both the table and dtOptions cannot be empty');
+                    return;
+                }
+                // Set a column unique
+                if (resolvedDTOptions.columns) {
+                    resolvedDTOptions.columns.forEach(col => {
+                        if ((col.id ?? '').trim() === '') {
+                            col.id = this.getColumnUniqueId();
+                        }
+                    });
+                }
+                // Using setTimeout as a "hack" to be "part" of NgZone
+                setTimeout(() => {
+                    // Assign DT properties here
+                    let options = {
+                        rowCallback: (row, data, index) => {
+                            if (resolvedDTOptions.columns) {
+                                const columns = resolvedDTOptions.columns;
+                                this.applyNgPipeTransform(row, columns);
+                                this.applyNgRefTemplate(row, columns, data);
+                            }
+                            // run user specified row callback if provided.
+                            if (resolvedDTOptions.rowCallback) {
+                                resolvedDTOptions.rowCallback(row, data, index);
+                            }
+                        }
+                    };
+                    // merge user's config with ours
+                    options = Object.assign({}, resolvedDTOptions, options);
+                    this.dt = $(this.el.nativeElement).DataTable(options);
+                    resolve(this.dt);
+                });
+            });
+        });
+    }
+    applyNgPipeTransform(row, columns) {
+        // Filter columns with pipe declared
+        const colsWithPipe = columns.filter(x => x.ngPipeInstance && !x.ngTemplateRef);
+        colsWithPipe.forEach(el => {
+            const pipe = el.ngPipeInstance;
+            const pipeArgs = el.ngPipeArgs || [];
+            // find index of column using `data` attr
+            const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);
+            // get <td> element which holds data using index
+            const rowFromCol = row.childNodes.item(i);
+            // Transform data with Pipe and PipeArgs
+            const rowVal = $(rowFromCol).text();
+            const rowValAfter = pipe.transform(rowVal, ...pipeArgs);
+            // Apply transformed string to <td>
+            $(rowFromCol).text(rowValAfter);
+        });
+    }
+    applyNgRefTemplate(row, columns, data) {
+        // Filter columns using `ngTemplateRef`
+        const colsWithTemplate = columns.filter(x => x.ngTemplateRef && !x.ngPipeInstance);
+        colsWithTemplate.forEach(el => {
+            const { ref, context } = el.ngTemplateRef;
+            // get <td> element which holds data using index
+            const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);
+            const cellFromIndex = row.childNodes.item(i);
+            // reset cell before applying transform
+            $(cellFromIndex).html('');
+            // render onto DOM
+            // finalize context to be sent to user
+            const _context = Object.assign({}, context, context?.userData, {
+                adtData: data
+            });
+            const instance = this.vcr.createEmbeddedView(ref, _context);
+            this.renderer.appendChild(cellFromIndex, instance.rootNodes[0]);
+        });
+    }
+    getColumnUniqueId() {
+        let result = '';
+        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+        for (let i = 0; i < 6; i++) {
+            const randomIndex = Math.floor(Math.random() * characters.length);
+            result += characters.charAt(randomIndex);
+        }
+        return result.trim();
+    }
+    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTableDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
+    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.5", type: DataTableDirective, selector: "[datatable]", inputs: { dtOptions: "dtOptions", dtTrigger: "dtTrigger" }, ngImport: i0 }); }
+}
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTableDirective, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[datatable]'
+                }]
+        }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }], propDecorators: { dtOptions: [{
+                type: Input
+            }], dtTrigger: [{
+                type: Input
+            }] } });
+
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+class DataTablesModule {
+    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
+    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, declarations: [DataTableDirective], imports: [CommonModule], exports: [DataTableDirective] }); }
+    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, imports: [CommonModule] }); }
+}
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataTablesModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    declarations: [DataTableDirective],
+                    exports: [DataTableDirective]
+                }]
+        }] });
+
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+/**
+ * @module
+ * @description
+ * Entry point from which you should import all public library APIs.
+ */
+
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DataTableDirective, DataTablesModule };
+//# sourceMappingURL=angular-datatables.mjs.map
diff --git a/dist/lib/fesm2022/angular-datatables.mjs.map b/dist/lib/fesm2022/angular-datatables.mjs.map
new file mode 100644
index 000000000..37b4523da
--- /dev/null
+++ b/dist/lib/fesm2022/angular-datatables.mjs.map
@@ -0,0 +1 @@
+{"version":3,"file":"angular-datatables.mjs","sources":["../../../lib/src/angular-datatables.directive.ts","../../../lib/src/angular-datatables.module.ts","../../../lib/public_api.ts","../../../lib/index.ts","../../../lib/angular-datatables.ts"],"sourcesContent":["/**\r\n * @license\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\r\n */\r\n\r\nimport { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewContainerRef } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ADTSettings, ADTColumns } from './models/settings';\r\nimport { Api } from 'datatables.net';\r\n\r\n@Directive({\r\n  selector: '[datatable]'\r\n})\r\nexport class DataTableDirective implements OnDestroy, OnInit {\r\n  /**\r\n   * The DataTable option you pass to configure your table.\r\n   */\r\n  @Input()\r\n  dtOptions: ADTSettings = {};\r\n\r\n  /**\r\n   * This trigger is used if one wants to trigger manually the DT rendering\r\n   * Useful when rendering angular rendered DOM\r\n   */\r\n  @Input()\r\n  dtTrigger!: Subject<ADTSettings>;\r\n\r\n  /**\r\n   * The DataTable instance built by the jQuery library [DataTables](datatables.net).\r\n   *\r\n   * It's possible to execute the [DataTables APIs](https://datatables.net/reference/api/) with\r\n   * this variable.\r\n   */\r\n  dtInstance!: Promise<Api>;\r\n\r\n  // Only used for destroying the table when destroying this directive\r\n  private dt!: Api;\r\n\r\n  constructor(\r\n    private el: ElementRef,\r\n    private vcr: ViewContainerRef,\r\n    private renderer: Renderer2\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.dtTrigger) {\r\n      this.dtTrigger.subscribe((options) => {\r\n        this.displayTable(options);\r\n      });\r\n    } else {\r\n      this.displayTable(null);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.dtTrigger) {\r\n      this.dtTrigger.unsubscribe();\r\n    }\r\n    if (this.dt) {\r\n      this.dt.destroy(true);\r\n    }\r\n  }\r\n\r\n  private displayTable(dtOptions: ADTSettings | null): void {\r\n    // assign new options if provided\r\n    if (dtOptions) {\r\n      this.dtOptions = dtOptions;\r\n    }\r\n    this.dtInstance = new Promise((resolve, reject) => {\r\n      Promise.resolve(this.dtOptions).then(resolvedDTOptions => {\r\n        // validate object\r\n        const isTableEmpty = Object.keys(resolvedDTOptions).length === 0 && $('tbody tr', this.el.nativeElement).length === 0;\r\n        if (isTableEmpty) {\r\n          reject('Both the table and dtOptions cannot be empty');\r\n          return;\r\n        }\r\n\r\n        // Set a column unique\r\n        if (resolvedDTOptions.columns) {\r\n          resolvedDTOptions.columns.forEach(col => {\r\n            if ((col.id ?? '').trim() === '') {\r\n              col.id = this.getColumnUniqueId();\r\n            }\r\n          });\r\n        }\r\n\r\n        // Using setTimeout as a \"hack\" to be \"part\" of NgZone\r\n        setTimeout(() => {\r\n          // Assign DT properties here\r\n          let options: ADTSettings = {\r\n            rowCallback: (row, data, index) => {\r\n              if (resolvedDTOptions.columns) {\r\n                const columns = resolvedDTOptions.columns;\r\n                this.applyNgPipeTransform(row, columns);\r\n                this.applyNgRefTemplate(row, columns, data);\r\n              }\r\n\r\n              // run user specified row callback if provided.\r\n              if (resolvedDTOptions.rowCallback) {\r\n                resolvedDTOptions.rowCallback(row, data, index);\r\n              }\r\n            }\r\n          };\r\n          // merge user's config with ours\r\n          options = Object.assign({}, resolvedDTOptions, options);\r\n          this.dt = $(this.el.nativeElement).DataTable(options);\r\n          resolve(this.dt);\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  private applyNgPipeTransform(row: Node, columns: ADTColumns[]): void {\r\n    // Filter columns with pipe declared\r\n    const colsWithPipe = columns.filter(x => x.ngPipeInstance && !x.ngTemplateRef);\r\n    colsWithPipe.forEach(el => {\r\n      const pipe = el.ngPipeInstance!;\r\n      const pipeArgs = el.ngPipeArgs || [];\r\n      // find index of column using `data` attr\r\n      const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);\r\n      // get <td> element which holds data using index\r\n      const rowFromCol = row.childNodes.item(i);\r\n      // Transform data with Pipe and PipeArgs\r\n      const rowVal = $(rowFromCol).text();\r\n      const rowValAfter = pipe.transform(rowVal, ...pipeArgs);\r\n      // Apply transformed string to <td>\r\n      $(rowFromCol).text(rowValAfter);\r\n    });\r\n  }\r\n\r\n  private applyNgRefTemplate(row: Node, columns: ADTColumns[], data: Object): void {\r\n    // Filter columns using `ngTemplateRef`\r\n    const colsWithTemplate = columns.filter(x => x.ngTemplateRef && !x.ngPipeInstance);\r\n    colsWithTemplate.forEach(el => {\r\n      const { ref, context } = el.ngTemplateRef!;\r\n      // get <td> element which holds data using index\r\n      const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);\r\n      const cellFromIndex = row.childNodes.item(i);\r\n      // reset cell before applying transform\r\n      $(cellFromIndex).html('');\r\n      // render onto DOM\r\n      // finalize context to be sent to user\r\n      const _context = Object.assign({}, context, context?.userData, {\r\n        adtData: data\r\n      });\r\n      const instance = this.vcr.createEmbeddedView(ref, _context);\r\n      this.renderer.appendChild(cellFromIndex, instance.rootNodes[0]);\r\n    });\r\n  }\r\n\r\n  private getColumnUniqueId(): string {\r\n    let result = '';\r\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\n    for (let i = 0; i < 6; i++) {\r\n      const randomIndex = Math.floor(Math.random() * characters.length);\r\n      result += characters.charAt(randomIndex);\r\n    }\r\n\r\n    return result.trim();\r\n  }\r\n\r\n}\r\n","/**\r\n * @license\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DataTableDirective } from './angular-datatables.directive';\r\n\r\n@NgModule({\r\n  imports: [ CommonModule ],\r\n  declarations: [ DataTableDirective ],\r\n  exports: [ DataTableDirective ]\r\n})\r\nexport class DataTablesModule {}\r\n","/**\r\n * @license\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\r\n */\r\n\r\n/**\r\n * @module\r\n * @description\r\n * Entry point from which you should import all public library APIs.\r\n */\r\nexport { DataTableDirective } from './src/angular-datatables.directive';\r\nexport { DataTablesModule } from './src/angular-datatables.module';\r\n","/**\r\n * @license\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\r\n */\r\n\r\nexport * from './public_api';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/lib/index.d.ts b/dist/lib/index.d.ts
new file mode 100644
index 000000000..602101bc3
--- /dev/null
+++ b/dist/lib/index.d.ts
@@ -0,0 +1,7 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+export * from './public_api';
diff --git a/dist/lib/package.json b/dist/lib/package.json
new file mode 100644
index 000000000..8b1cec0d0
--- /dev/null
+++ b/dist/lib/package.json
@@ -0,0 +1,52 @@
+{
+  "name": "angular-datatables",
+  "version": "17.1.0",
+  "description": "Angular directive for DataTables",
+  "keywords": [
+    "Angular",
+    "DataTables"
+  ],
+  "author": "Louis LIN <lin.louis@pm.me> (https://l-lin.github.io/)",
+  "contributors": [
+    "Michael Bennett <michael@strukt.org>",
+    "Steven Masala <me@smasalai.com>",
+    "Surya Teja K <shanmukhateja@gmail.com>"
+  ],
+  "schematics": "./schematics/src/collection.json",
+  "license": "MIT",
+  "peerDependencies": {
+    "@angular/common": "^17.3.2",
+    "@angular/core": "^17.3.2",
+    "@angular/platform-browser": "^17.3.2",
+    "datatables.net": "^2.0.3",
+    "datatables.net-dt": "^2.0.3",
+    "jquery": "^3.6.0",
+    "rxjs": "^7.4.0",
+    "zone.js": "~0.14.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/l-lin/angular-datatables.git"
+  },
+  "bugs": {
+    "url": "https://github.com/l-lin/angular-datatables/issues"
+  },
+  "homepage": "https://github.com/l-lin/angular-datatables#readme",
+  "module": "fesm2022/angular-datatables.mjs",
+  "typings": "index.d.ts",
+  "exports": {
+    "./package.json": {
+      "default": "./package.json"
+    },
+    ".": {
+      "types": "./index.d.ts",
+      "esm2022": "./esm2022/angular-datatables.mjs",
+      "esm": "./esm2022/angular-datatables.mjs",
+      "default": "./fesm2022/angular-datatables.mjs"
+    }
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "tslib": "^2.3.0"
+  }
+}
\ No newline at end of file
diff --git a/dist/lib/public_api.d.ts b/dist/lib/public_api.d.ts
new file mode 100644
index 000000000..1438ac2f1
--- /dev/null
+++ b/dist/lib/public_api.d.ts
@@ -0,0 +1,13 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+/**
+ * @module
+ * @description
+ * Entry point from which you should import all public library APIs.
+ */
+export { DataTableDirective } from './src/angular-datatables.directive';
+export { DataTablesModule } from './src/angular-datatables.module';
diff --git a/dist/lib/schematics/src/collection.json b/dist/lib/schematics/src/collection.json
new file mode 100644
index 000000000..fa53e0c1c
--- /dev/null
+++ b/dist/lib/schematics/src/collection.json
@@ -0,0 +1,11 @@
+{
+  "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
+  "schematics": {
+    "ng-add": {
+      "description": "Adds Angular Datatables to the application without affecting any templates",
+      "factory": "./ng-add/index",
+      "schema": "./ng-add/schema.json",
+      "aliases": ["install"]
+    }
+  }
+}
diff --git a/dist/lib/schematics/src/ng-add/index.d.ts b/dist/lib/schematics/src/ng-add/index.d.ts
new file mode 100644
index 000000000..8b79328cb
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/index.d.ts
@@ -0,0 +1,3 @@
+import { Rule } from '@angular-devkit/schematics';
+import { IADTSchematicsOptions } from './models/schematics-options';
+export default function (_options: IADTSchematicsOptions): Rule;
diff --git a/dist/lib/schematics/src/ng-add/models/schematics-options.d.ts b/dist/lib/schematics/src/ng-add/models/schematics-options.d.ts
new file mode 100644
index 000000000..144130e41
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/models/schematics-options.d.ts
@@ -0,0 +1,5 @@
+import { ADTStyleOptions } from "./style-options";
+export interface IADTSchematicsOptions {
+    project: string;
+    style: ADTStyleOptions;
+}
diff --git a/dist/lib/schematics/src/ng-add/models/style-options.d.ts b/dist/lib/schematics/src/ng-add/models/style-options.d.ts
new file mode 100644
index 000000000..54eb7c26f
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/models/style-options.d.ts
@@ -0,0 +1,19 @@
+export declare enum ADTStyleOptions {
+    DT = "dt",
+    BS3 = "bs3",
+    BS4 = "bs4",
+    BS5 = "bs5"
+}
+export declare const ADT_SUPPORTED_STYLES: {
+    style: ADTStyleOptions;
+    packageJson: {
+        version: string;
+        name: string;
+        isDev: boolean;
+    }[];
+    angularJson: {
+        path: string;
+        target: string;
+        fancyName: string;
+    }[];
+}[];
diff --git a/dist/lib/schematics/src/ng-add/schema.json b/dist/lib/schematics/src/ng-add/schema.json
new file mode 100644
index 000000000..8ece47354
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/schema.json
@@ -0,0 +1,41 @@
+{
+  "$schema": "http://json-schema.org/schema",
+  "$id": "angular-datatables-schematic-angular-datatables",
+  "title": "Angular DataTables angular-datatables schematic",
+  "type": "object",
+  "properties": {
+    "project": {
+      "title": "angular-datatables",
+      "type": "string",
+      "description": "The name of the project.",
+      "$default": {
+        "$source": "projectName"
+      }
+    },
+    "style": {
+      "description": "The styling library to use for Datatables.",
+      "type": "string",
+      "default": "dt",
+      "enum": ["dt", "bs3", "bs4", "bs5"],
+      "x-prompt": {
+        "message": "Which styling library would you like to use for DataTables?",
+        "type": "list",
+        "items": [
+          { "value": "dt", "label": "DataTables (Default)" },
+          {
+            "value": "bs3",
+            "label": "Bootstrap 3"
+          },
+          {
+            "value": "bs4",
+            "label": "Bootstrap 4"
+          },
+          {
+            "value": "bs5",
+            "label": "Bootstrap 5"
+          }
+        ]
+      }
+    }
+  }
+}
diff --git a/dist/lib/schematics/src/ng-add/utils/get-file-content.d.ts b/dist/lib/schematics/src/ng-add/utils/get-file-content.d.ts
new file mode 100644
index 000000000..77f34ad41
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/utils/get-file-content.d.ts
@@ -0,0 +1,2 @@
+import { Tree } from "@angular-devkit/schematics";
+export declare function getFileContent(tree: Tree, path: string): string;
diff --git a/dist/lib/schematics/src/ng-add/utils/index.d.ts b/dist/lib/schematics/src/ng-add/utils/index.d.ts
new file mode 100644
index 000000000..b07c0ae78
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/utils/index.d.ts
@@ -0,0 +1,17 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { Tree } from '@angular-devkit/schematics';
+/**
+ * This function has been borrowed from:
+ * https://github.com/valor-software/ngx-bootstrap/tree/development/schematics/src/utils/index.ts
+ *
+ * Note: This function accepts an additional parameter `isDevDependency` so we
+ * can place a given dependency in the correct dependencies array inside package.json
+ */
+export declare function addPackageToPackageJson(host: Tree, pkg: string, version: string, isDevDependency?: boolean): boolean;
+export declare function addAssetToAngularJson(host: Tree, assetType: string, assetPath: string): boolean;
diff --git a/dist/lib/schematics/src/ng-add/utils/ng-module-imports.d.ts b/dist/lib/schematics/src/ng-add/utils/ng-module-imports.d.ts
new file mode 100644
index 000000000..52da4107c
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/utils/ng-module-imports.d.ts
@@ -0,0 +1,12 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { Tree } from '@angular-devkit/schematics';
+/**
+ * Whether the Angular module in the given path imports the specifed module class name.
+ */
+export declare function hasNgModuleImport(tree: Tree, modulePath: string, className: string): boolean;
diff --git a/dist/lib/schematics/src/ng-add/utils/project-main-file.d.ts b/dist/lib/schematics/src/ng-add/utils/project-main-file.d.ts
new file mode 100644
index 000000000..8375563e5
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/utils/project-main-file.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { WorkspaceProject } from '@schematics/angular/utility/workspace-models';
+/** Looks for the main TypeScript file in the given project and returns its path. */
+export declare function getProjectMainFile(project: WorkspaceProject): string;
diff --git a/dist/lib/schematics/src/ng-add/utils/project-targets.d.ts b/dist/lib/schematics/src/ng-add/utils/project-targets.d.ts
new file mode 100644
index 000000000..d9a73fa81
--- /dev/null
+++ b/dist/lib/schematics/src/ng-add/utils/project-targets.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { WorkspaceProject } from '@schematics/angular/utility/workspace-models';
+/** Resolves the architect options for the build target of the given project. */
+export declare function getProjectTargetOptions(project: WorkspaceProject, buildTarget: string): any;
diff --git a/dist/lib/src/angular-datatables.directive.d.ts b/dist/lib/src/angular-datatables.directive.d.ts
new file mode 100644
index 000000000..72ad9fe0e
--- /dev/null
+++ b/dist/lib/src/angular-datatables.directive.d.ts
@@ -0,0 +1,42 @@
+/**
+ * @license
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
+ */
+import { ElementRef, OnDestroy, OnInit, Renderer2, ViewContainerRef } from '@angular/core';
+import { Subject } from 'rxjs';
+import { ADTSettings } from './models/settings';
+import { Api } from 'datatables.net';
+import * as i0 from "@angular/core";
+export declare class DataTableDirective implements OnDestroy, OnInit {
+    private el;
+    private vcr;
+    private renderer;
+    /**
+     * The DataTable option you pass to configure your table.
+     */
+    dtOptions: ADTSettings;
+    /**
+     * This trigger is used if one wants to trigger manually the DT rendering
+     * Useful when rendering angular rendered DOM
+     */
+    dtTrigger: Subject<ADTSettings>;
+    /**
+     * The DataTable instance built by the jQuery library [DataTables](datatables.net).
+     *
+     * It's possible to execute the [DataTables APIs](https://datatables.net/reference/api/) with
+     * this variable.
+     */
+    dtInstance: Promise<Api>;
+    private dt;
+    constructor(el: ElementRef, vcr: ViewContainerRef, renderer: Renderer2);
+    ngOnInit(): void;
+    ngOnDestroy(): void;
+    private displayTable;
+    private applyNgPipeTransform;
+    private applyNgRefTemplate;
+    private getColumnUniqueId;
+    static ɵfac: i0.ɵɵFactoryDeclaration<DataTableDirective, never>;
+    static ɵdir: i0.ɵɵDirectiveDeclaration<DataTableDirective, "[datatable]", never, { "dtOptions": { "alias": "dtOptions"; "required": false; }; "dtTrigger": { "alias": "dtTrigger"; "required": false; }; }, {}, never, never, false, never>;
+}
diff --git a/dist/lib/src/angular-datatables.module.d.ts b/dist/lib/src/angular-datatables.module.d.ts
new file mode 100644
index 000000000..876ca2ea8
--- /dev/null
+++ b/dist/lib/src/angular-datatables.module.d.ts
@@ -0,0 +1,8 @@
+import * as i0 from "@angular/core";
+import * as i1 from "./angular-datatables.directive";
+import * as i2 from "@angular/common";
+export declare class DataTablesModule {
+    static ɵfac: i0.ɵɵFactoryDeclaration<DataTablesModule, never>;
+    static ɵmod: i0.ɵɵNgModuleDeclaration<DataTablesModule, [typeof i1.DataTableDirective], [typeof i2.CommonModule], [typeof i1.DataTableDirective]>;
+    static ɵinj: i0.ɵɵInjectorDeclaration<DataTablesModule>;
+}
diff --git a/dist/lib/src/models/settings.d.ts b/dist/lib/src/models/settings.d.ts
new file mode 100644
index 000000000..0de8fd9e8
--- /dev/null
+++ b/dist/lib/src/models/settings.d.ts
@@ -0,0 +1,25 @@
+import { PipeTransform, TemplateRef } from '@angular/core';
+import { Config, ConfigColumns } from 'datatables.net';
+export interface ADTSettings extends Config {
+    columns?: ADTColumns[];
+}
+export interface ADTColumns extends ConfigColumns {
+    /** Define the column's unique identifier */
+    id?: string;
+    /** Set instance of Angular pipe to transform the data of particular column */
+    ngPipeInstance?: PipeTransform;
+    /** Define the arguments for the tranform method of the pipe, to change its behavior */
+    ngPipeArgs?: any[];
+    /** Set `TemplateRef` to transform the data of this column */
+    ngTemplateRef?: ADTTemplateRef;
+}
+export interface ADTTemplateRef {
+    /** `TemplateRef` to work with */
+    ref: TemplateRef<any>;
+    /** */
+    context?: ADTTemplateRefContext;
+}
+export interface ADTTemplateRefContext {
+    captureEvents: Function;
+    userData?: any;
+}
