diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..c1f3022
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,51 @@
+{
+ "root": true,
+ "ignorePatterns": [
+ "projects/**/*"
+ ],
+ "overrides": [
+ {
+ "files": [
+ "*.ts"
+ ],
+ "parserOptions": {
+ "project": [
+ "tsconfig.json"
+ ],
+ "createDefaultProgram": true
+ },
+ "extends": [
+ "plugin:@angular-eslint/recommended",
+ "plugin:@angular-eslint/template/process-inline-templates"
+ ],
+ "rules": {
+ "@angular-eslint/component-selector": [
+ "error",
+ {
+ "prefix": "app",
+ "style": "kebab-case",
+ "type": "element"
+ }
+ ],
+ "@angular-eslint/directive-selector": [
+ "error",
+ {
+ "prefix": "app",
+ "style": "camelCase",
+ "type": "attribute"
+ }
+ ],
+ "@angular-eslint/no-empty-lifecycle-method": "off"
+ }
+ },
+ {
+ "files": [
+ "*.html"
+ ],
+ "extends": [
+ "plugin:@angular-eslint/template/recommended"
+ ],
+ "rules": {}
+ }
+ ]
+}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..d2eca6e
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,36 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ types:
+ - opened
+ - synchronize
+
+jobs:
+ test:
+ name: Lint & Test
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v3
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18
+
+ - name: Install Dependencies
+ run: npm install
+
+ - name: Lint
+ run: npm run lint
+
+ - name: Test
+ run: npm run test -- --watch=false --browsers=ChromeHeadlessCustom
+
+ - name: Test sample app
+ run: npm run test-sample-app -- --watch=false --browsers=ChromeHeadlessCustom
diff --git a/.gitignore b/.gitignore
index b222364..269400a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,7 +39,11 @@ yarn-error.log
testem.log
/typings
.tool-versions
+/.angular/cache
# System Files
.DS_Store
Thumbs.db
+
+# Sample App Documentation
+/src/assets/documentation.md
diff --git a/CONTRIBUTE.md b/CONTRIBUTE.md
new file mode 100644
index 0000000..6e3468e
--- /dev/null
+++ b/CONTRIBUTE.md
@@ -0,0 +1,115 @@
+# Contribute to ngx-tag-commander
+
+We're delighted that you're interested in contributing to ngx-tag-commander! This document is intended to outline the process and guidelines for contributing to this repository. We want to make contributing to this project as easy and transparent as possible.
+
+## Getting Started
+
+1. **Fork the repository**
+
+Start by forking the repository on GitHub. This will create a personal copy for you to work on.
+
+2. **Clone your fork**
+
+Clone your fork to your local machine. Replace `your-username` with your GitHub username.
+
+```bash
+git clone https://github.com/your-username/ngx-tag-commander.git
+```
+
+3. **Set up remote upstream**
+
+Add the original repository as an upstream remote to your local repository.
+
+```bash
+git remote add upstream https://github.com/CommandersAct/ngx-tag-commander.git
+```
+
+4. **Install dependencies**
+
+Navigate to the project directory and install its dependencies.
+
+```bash
+cd ngx-tag-commander
+npm install
+```
+
+## Making Changes
+
+1. **Create a branch**
+
+Create a new branch for your changes.
+
+```bash
+git checkout -b feature/my-new-feature
+```
+
+2. **Make your changes**
+
+Edit, add, or delete files as necessary for your contribution.
+
+3. **Follow the coding standards**
+
+Ensure your code adheres to the coding standards used throughout the project.
+
+4. **Write tests**
+
+If you're adding new functionality, please write tests to accompany it.
+
+5. **Run the tests**
+
+Ensure all tests pass before submitting your changes.
+
+```bash
+npm run test
+```
+
+6. **Document your changes**
+
+Update the documentation to reflect any changes you have made.
+
+7. **Update the Sample App**
+
+Update the sample app found in `src` to reflect any changes you have made. Ensure that it is still running and add new examples if possible to illustrate your changes.
+
+
+## Submitting Changes
+
+1. **Commit your changes**
+
+Commit your changes with a clear and descriptive commit message.
+
+```bash
+git commit -m "Add a brief description of your changes"
+```
+
+2. **Fetch upstream changes**
+
+Fetch any recent changes from the upstream master branch.
+
+```bash
+git fetch upstream
+```
+
+3. **Rebase your branch**
+
+Rebase your branch on top of the upstream master.
+
+```bash
+git rebase upstream/master
+```
+
+4. **Push your changes**
+
+Push your changes to your fork.
+
+```bash
+git push origin feature/my-new-feature
+```
+
+5. **Create a pull request**
+
+Go to your fork on GitHub and create a pull request against the [CommandersAct/ngx-tag-commander](https://github.com/CommandersAct/ngx-tag-commander) 's master branch.
+
+## Reporting Issues
+
+If you find any bugs or have a feature request, please create an issue on GitHub using the issue tracker.
diff --git a/README.md b/README.md
index 6800c4a..5c3ce90 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,26 @@
# ngx-tag-commander
-This service lets you integrate CommandersAct's tag container in your AngularX (12+) applications easily.
-- [Official website](https://www.commandersact.com/fr/produits/tagcommander/)
-
-## Features
+This service lets you integrate CommandersAct's tag container in your Angular applications easily.
+- **Note**: Familiarize yourself with [CommandersAct's tag container's primary documentation](https://doc.commandersact.com/features/sources/sources-catalog/web/containers) before proceeding.
+
+
+## Table of Contents
+- [Features](#features)
+- [Angular Version Compatibility](#angular-version-compatibility)
+- [Installation and Quick Start](#installation-and-quick-start)
+- [Methods](#methods)
+ - [Usage in component](#usage)
+ - [Container Management](#container-management)
+ - [Variable Management](#variable-management)
+ - [Events](#events)
+ - [Reloading Containers](#reloading-containers)
+- [Server-side Rendering (SSR)](#server-side-rendering)
+- [API Documentation](#api-documentation)
+- [Sample App](#sample-app)
+- [Development](#development)
+- [License](#license)
+
+## Features
- Automatic page tracking
- Set & Get Variables
@@ -11,36 +28,49 @@ This service lets you integrate CommandersAct's tag container in your AngularX (
- Event catching
- Multiple containers
-## Angular Version Compatibility
-
-The library uses partial ivy builds to support projects with `angular >= 12`.
-For compatibility with `angular 7` please use `ngx-tag-commander@1.3.1`, in between versions might be working but are not explicitly built for.
+## Angular Version Compatibility
+The following table gives an overview of which version of `ngx-tag-commander` to use depending on your project's Angular version.
+- ✅: supported
+- ⚠️: not explicitly built for but might be working
+- ❌: not supported
+
+| Angular version | `ngx-tag-commander@3.0.0` (current) | `ngx-tag-commander@2.0.0` | `ngx-tag-commander@1.3.1` |
+|---------------------| ---- | ---- | ---- |
+| `17.x.x` | ✅ | ⚠️ | ❌ |
+| `16.x.x` | ✅ | ⚠️ | ❌ |
+| `15.x.x` | ❌ | ✅ | ❌ |
+| `14.x.x ` | ❌ | ✅ | ❌ |
+| `13.x.x` | ❌ | ✅ | ❌ |
+| `12.x.x` | ❌ | ✅ | ❌ |
+| `11.x.x` | ❌ | ❌ | ⚠️ |
+| `10.x.x` | ❌ | ❌ | ⚠️ |
+| `9.x.x` | ❌ | ❌ | ⚠️ |
+| `8.x.x` | ❌ | ❌ | ⚠️ |
+| `7.x.x ` | ❌ | ❌ | ✅ |
+
+## Installation and Quick Start
-## Installation and Quick Start
The quick start is designed to give you a simple, working example for the most common usage scenario. There are numerous other ways to configure and use this library as explained in the documentation.
-### 1- Before installing the plugin
+### 1. Before installing the plugin
-The plugin doesn't replace the standard setup of a container because you may need to use the containers outside of the plugin.
+The plugin doesn't replace the standard setup of a container because you may need to use the containers outside the plugin.
Initialize your datalayer so that it's ready for the container and plugin, without losing any data. Do it as soon as possible on your website like in a `