Bläddra i källkod

Added repeating container switcher, when displaying one container at a time

Richard Knight 6 år sedan
förälder
incheckning
2dfe3e3a85

+ 143 - 151
package-lock.json

@@ -5,26 +5,26 @@
   "requires": true,
   "dependencies": {
     "@angular-devkit/architect": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.2.tgz",
-      "integrity": "sha512-RTwpxc4glRsO6EW50WryZ2UZ+75hABnaRabRp7QsgADJylA10ANX2H3OjhRQQ6nQ3opE3w9GydM+5sHBKy6hPw==",
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.3.tgz",
+      "integrity": "sha512-Y88itM+UZt7ZJqUa9i74SxC08nhqbrYUZLCztxt5LEOyr4umxBxNV4lRyhNW7iED5jFKifgDZ7dNvdS0F18sWw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.2",
+        "@angular-devkit/core": "7.1.3",
         "rxjs": "6.3.3"
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.2.tgz",
-      "integrity": "sha512-pWOyV36GtvRxQmqBES0QtambXDmDH1NGG3jpGgj8CHPPSqi/TkxCQwFzoyYbPIHqylKpYGVGRrxuJ0I82D1jqQ==",
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.3.tgz",
+      "integrity": "sha512-jFsCs4g0LLesd4bzbrwe4X7o38oo/xrLTrVeEuEPXSu5x/qEzWNhPsOAngJnXvcaILXdimXi6xr6DQazHsiuag==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.2",
-        "@angular-devkit/build-optimizer": "0.11.2",
-        "@angular-devkit/build-webpack": "0.11.2",
-        "@angular-devkit/core": "7.1.2",
-        "@ngtools/webpack": "7.1.2",
+        "@angular-devkit/architect": "0.11.3",
+        "@angular-devkit/build-optimizer": "0.11.3",
+        "@angular-devkit/build-webpack": "0.11.3",
+        "@angular-devkit/core": "7.1.3",
+        "@ngtools/webpack": "7.1.3",
         "ajv": "6.5.3",
         "autoprefixer": "9.3.1",
         "circular-dependency-plugin": "5.0.2",
@@ -92,9 +92,9 @@
       }
     },
     "@angular-devkit/build-optimizer": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.2.tgz",
-      "integrity": "sha512-NPNcAe4yxMEWABdI1oqoW7XA8m5O3Z+Zs9xsyBgwCCpFr3ZXiIL0r8+v7qS5UD4Yjsxjx35BJhvuiI+RBmGSfw==",
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.3.tgz",
+      "integrity": "sha512-CcRKITGpw1ALwLlU090ZcV1R18RTT4tCk5lP1abT3Hr+ql41HabS4GfRlCb16+ugpi4TWWibmBj3xehKGQaVYQ==",
       "dev": true,
       "requires": {
         "loader-utils": "1.1.0",
@@ -130,20 +130,20 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.2.tgz",
-      "integrity": "sha512-biKjwoFXazNmgPiFJbXDbIMaZGjAV2VAauV3CWs8xHdIdC1Q2yVxF3I+babvgQnHEQWozykK/DuLoZn4kCzQUQ==",
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.3.tgz",
+      "integrity": "sha512-Sm1WkuY9JKExEkfEd16DKQhq2LLNqiTTQMX9r+FSy0GF2WW/PG21+lj9/Wb00eNSZdNYTYkgxZGHcFtDGjwvMQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.2",
-        "@angular-devkit/core": "7.1.2",
+        "@angular-devkit/architect": "0.11.3",
+        "@angular-devkit/core": "7.1.3",
         "rxjs": "6.3.3"
       }
     },
     "@angular-devkit/core": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.2.tgz",
-      "integrity": "sha512-LyjHGuLnLWrgX7SYDkKmc3eW4H5uuaoC+CXYjRfgx3qundrLfvTCRgNGC6FPjhQNnVXH9qar+j9P1aMmKFb4Lw==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.3.tgz",
+      "integrity": "sha512-pGBInxmuR5DAhZ1RSfIlkv7cdgh3EDNXXea9ZObEuI9MuFsIWUKODT5oKbRrsOWM6IqwNmx68VEW+xQm2DXyJw==",
       "dev": true,
       "requires": {
         "ajv": "6.5.3",
@@ -162,34 +162,34 @@
       }
     },
     "@angular-devkit/schematics": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.2.tgz",
-      "integrity": "sha512-NFhHLYWf9gpGQm0s19lq+nAw3CZ0udBpoBLzCm8Crlmu6+7aAXgw7Fv5P4ukWJ/e1m7NDGVids+B6kBGXaY6Ig==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.3.tgz",
+      "integrity": "sha512-Snmfog/n5k1PWdDaI+Top1F978vlXZFTvxHRPzlMCGhGsY+LMOpeRLVHADI+WP1q1LZ+2BjLELZVA2GP35AH8A==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.2",
+        "@angular-devkit/core": "7.1.3",
         "rxjs": "6.3.3"
       }
     },
     "@angular/animations": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.1.2.tgz",
-      "integrity": "sha512-zCLzPpifD4V9C35+DG75yHiAxZrWmk7n7dudxchKXf/YpgzV1M43lTSxna6YZgMLIXRjilfjfh6jqOOP+PctoQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.1.3.tgz",
+      "integrity": "sha512-l5Dnm1XFrZjkicpcCxwyqIyGflCFlEZJDZj3FCwf/Y8YUHYOlYspPbCSHj8bpPJKS9PVLM77fJCu8AZaam5iJA==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/cli": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.1.2.tgz",
-      "integrity": "sha512-e290s0ONx47QgBw03l0Kq7fIPB77WqEQPM45QEWWbewF2lAFXx54ooQsdgLn+ESk6J0cW7DazRb23CUygZZbBw==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.1.3.tgz",
+      "integrity": "sha512-mf1dBxMm2I3ER4849v5HyoX+IvjOno6/PL6rew1nFDR+KRNl4DU9Aa6jUVzuHgKqlMgu5+LjvPfJDud8lQc9sg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.11.2",
-        "@angular-devkit/core": "7.1.2",
-        "@angular-devkit/schematics": "7.1.2",
-        "@schematics/angular": "7.1.2",
-        "@schematics/update": "0.11.2",
+        "@angular-devkit/architect": "0.11.3",
+        "@angular-devkit/core": "7.1.3",
+        "@angular-devkit/schematics": "7.1.3",
+        "@schematics/angular": "7.1.3",
+        "@schematics/update": "0.11.3",
         "inquirer": "6.2.0",
         "opn": "5.3.0",
         "semver": "5.5.1",
@@ -205,25 +205,25 @@
       }
     },
     "@angular/common": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.1.2.tgz",
-      "integrity": "sha512-Ss9OilnbKpfkkwa1spUUAzgtGgd76j+Cgp1ecBBaueBoHyDZcSwD3Ioe5/91mjGF8i/MmpoBtEmk569fwmb7iQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.1.3.tgz",
+      "integrity": "sha512-4LnvTevDJW9Fmpmg6KeEyYcz8O4pS88nkm8FwKz+bkbFEiPz6tIxzhDlGuCAH0UmU4GojdWKMWhvLLvTEyCMpw==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/compiler": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.1.2.tgz",
-      "integrity": "sha512-ua6Wh+c5XzxAeJT6guwAFYnwa1XzJpncppUrceRXIS9VAn9X7ApxRr45DvbVeYwXBb1iNdHWtZFm1koFVQpydA==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.1.3.tgz",
+      "integrity": "sha512-uOcMyP9UBr7EkBWDMnGe/f3A1OidDt3Mq1TCp/8ETAxjerD7HxPJgdP0psBm85j6S5LorTUIOUm6ETfVP09E7A==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.2.tgz",
-      "integrity": "sha512-u686o7eOPxSokE3l+lpSMs+sGRTLiGBXGsTuNR891XPN8+E5ep7NHgimeLizVXlbwIYZiNtcQ9zRbhEsMI2ErQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.3.tgz",
+      "integrity": "sha512-24r/7+qyXnDNsKWPxOnMECmncqc+Ucvd/clHHmEXX50EJOw8cA9odOJI1LnO+aWcMVRkjTidL6kVlagddkyOMg==",
       "dev": true,
       "requires": {
         "canonical-path": "1.0.0",
@@ -540,55 +540,55 @@
       }
     },
     "@angular/core": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.1.2.tgz",
-      "integrity": "sha512-k3hKz6oj5KAaU/R034flxa73MWoR1SBBZPbpqK5zncIYbZMxvUQDgD3O7SNdQfI9G534SzdJk3AqJNEDTFUyYA==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.1.3.tgz",
+      "integrity": "sha512-Vv2Eolb5fZZZLIyodazDTIH6l3wT0ss7oJq+op0aqfrH43HlZ1LkkoovPskX2w0Om9bzPfvfPz+fWm36WXrFyA==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/forms": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.2.tgz",
-      "integrity": "sha512-L7LtvjcZUf4DjeDKQnxm+AzC9VkmR3I+hnezyvkLT7oUHcHEpYgNtiLmNM4Ir7ZI3zuaSMmHlEBlnDn0YJlcvA==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.3.tgz",
+      "integrity": "sha512-gzXuQAaYQU2Gus8CZCyQtD/mzzxlgHvFtGRRNg9/UksekftVSk7/l+oj57NGMGh/0MF5rpRB3BYATZlF/TGHsw==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/http": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.1.2.tgz",
-      "integrity": "sha512-8wscCWG+Cd+/IKniYrBViMFWFZFNh8eEkmUAucPInwmcSFyY//ZLWd2WJLEqbclAGT7kOkTOdUjJ6eMnnWAFuw==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.1.3.tgz",
+      "integrity": "sha512-6fv/bxX4ZAqEAguEp8xnn759vACiUfFcaa0f8Z8fyGmryNeY1NKGDIhMGewzvGnOFyFaRhUOrnGEgTYDhbgUig==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/language-service": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.1.2.tgz",
-      "integrity": "sha512-0r2smj44/omWIJXLpze6mJAhZ9w+vGF3ZfVKUuXEUym/W7BtoMBrt6UeC3pa9MW+lqxjRklExSh0RiQRoo8d4w==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.1.3.tgz",
+      "integrity": "sha512-Hi4VNObJbSz9OpOjqD/TonfIkwE1jD7PahASuPEnvzARDhGA8IiQP0qwarFMffyCx5SbvdpWLA44aGbrgFI1gQ==",
       "dev": true
     },
     "@angular/platform-browser": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.1.2.tgz",
-      "integrity": "sha512-cxFCqOXfLznHNI3dfnKcSCokbuSrxSLlXdE4uqoZliTRQIC9/ccrxVdx4UbJjtSgWFaNG1ocxH0rckgcUEG/kg==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.1.3.tgz",
+      "integrity": "sha512-cGMPzsrKN6Gz9Ah5Jlp2lWe5Y+k1bCYug8Unnux9BHMpRo++RxYB8rOVK4kpmXQajOh5+NbXDzGEoZwMtlZWYQ==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.1.2.tgz",
-      "integrity": "sha512-DoQ+840d3YSC34NnCVD+NlQOyes56+Re9V62ZViXKSwsWtpqgsYBiUW5yYHCO8bruS+Kn+BGTCK/w7/KEM60tg==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.1.3.tgz",
+      "integrity": "sha512-QjcRuGW3MEqaPrWp/4jxOvYevljb1Yjxo0p8xWbtrvL+YVteEVPDWNk4NtzHhQW9j6NzWEjnV5ocNx9I+anXeg==",
       "requires": {
         "tslib": "^1.9.0"
       }
     },
     "@angular/router": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.1.2.tgz",
-      "integrity": "sha512-Lht4hcbx2hAtUEcJ1YG4Q63bukKrDHxqSnELMYi1/G5y5vH8LWPQX7aoEcOJeaQWQTKroQBAIeprol/h9vkvoQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.1.3.tgz",
+      "integrity": "sha512-vQMUppMmBmUna/sU3tziy9Mqa8HCO/hAp2huTfSA/KF6y9gf1B4J/pISOrHizXL32PisU8Vi0bw+pfIeW/nbQw==",
       "requires": {
         "tslib": "^1.9.0"
       }
@@ -739,12 +739,12 @@
       }
     },
     "@ngtools/webpack": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.2.tgz",
-      "integrity": "sha512-Oc4N5QXh2u2q8OSfLBGcYkZrcvRmzxYRKUq99fO1u4JE4eZ3Pq7jp7X3/caro+9Y8eB2OpveSSC9UvEc0dz+AQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.3.tgz",
+      "integrity": "sha512-WQB4La834DyRjZxT15w9IuwohgOwpJWBI5V6jWl1vBn3/oBUW5sMhq1fx/iclOLJBw8xCOl7Ni57g+H2WlK6Mg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.2",
+        "@angular-devkit/core": "7.1.3",
         "enhanced-resolve": "4.1.0",
         "rxjs": "6.3.3",
         "tree-kill": "1.2.0",
@@ -770,9 +770,9 @@
       }
     },
     "@progress/kendo-angular-dateinputs": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@progress/kendo-angular-dateinputs/-/kendo-angular-dateinputs-3.5.1.tgz",
-      "integrity": "sha512-blB6YpOn3TD5xnbUFbxTomYn7ljuMWIKcv0SiEAC6V5/AeVsBb+Jrsal3t7OYnWkWwyOsWAkTo+OjN5IeV+i+Q==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@progress/kendo-angular-dateinputs/-/kendo-angular-dateinputs-3.5.2.tgz",
+      "integrity": "sha512-T2TNuX0OcSokv234dZAydWSOAP9XB3O9AjJpn7LhZT8V1hanbfGQiL9wCfCPqf0k0F9wPrOSWmHA95S+dRSJAA==",
       "requires": {
         "@progress/kendo-angular-popup": "^2.0.0",
         "@progress/kendo-date-math": "^1.1.0",
@@ -808,9 +808,9 @@
       }
     },
     "@progress/kendo-date-math": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/@progress/kendo-date-math/-/kendo-date-math-1.3.1.tgz",
-      "integrity": "sha512-B9WTWT4KCc1QcW4E9LaT3MQ2HFYFg69VMdRlrN3onbICcxWnbvX/VFLa834hZbM+4ZbKF4kO/mZ5gLqDlWzF6g==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@progress/kendo-date-math/-/kendo-date-math-1.3.2.tgz",
+      "integrity": "sha512-9pISO7y7gdtR4LqiH/9tt5zDETK+m5HwVokAkBtUKTO+rFPPGK7bEQ3wB/WmE2ZGWsLktQxfbVHCLIlKb6K+Ww==",
       "requires": {
         "tslib": "^1.7.0"
       }
@@ -839,24 +839,24 @@
       "integrity": "sha512-FZF6WhrsS1LzO+um0ABsaxTjLYVXebI8BmHtMvL7SLJPG/p9EQ1xN4Z73urzAWTVBRGplaCA8qv2pEEnzNeMYw=="
     },
     "@schematics/angular": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.1.2.tgz",
-      "integrity": "sha512-coypNxjRjCExCbkJ8Vser4iZbdksl3cNqgdokDlEtpXnnph3ZYvNDhDD9TBWYQ+cwDhCHAOzT3U3IjN4R2MCgQ==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.1.3.tgz",
+      "integrity": "sha512-6Wq6vNjGTc0zmudPogTjiegtTUc0pORTCxI39iinUM+5iemMrCLYKJmYLi5mPFU4OG/Q2fnT06A3dYUorhtLkA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.2",
-        "@angular-devkit/schematics": "7.1.2",
+        "@angular-devkit/core": "7.1.3",
+        "@angular-devkit/schematics": "7.1.3",
         "typescript": "3.1.6"
       }
     },
     "@schematics/update": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.11.2.tgz",
-      "integrity": "sha512-dGA2PYnBLWRjVSTrTMPnVzsl5h5ojVcgFTpMke0FmgaJcR/D15FiwSs2LuJrmbb8f4oTAbQe1ON696M9kjWJIQ==",
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.11.3.tgz",
+      "integrity": "sha512-0bGuRZVsmNMF3SFFuhuuZcySImK4gxl+6tdb6r4LPBx5lKM7mIzdUuC0SIn6gArciAeW0GCKYSpwMO15P8zSOA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "7.1.2",
-        "@angular-devkit/schematics": "7.1.2",
+        "@angular-devkit/core": "7.1.3",
+        "@angular-devkit/schematics": "7.1.3",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "1.3.5",
         "pacote": "9.1.1",
@@ -879,9 +879,9 @@
       "integrity": "sha512-aALwrLRyWLo5P6Tk9PJPXpZlsooud/6laMNULffD7cPsgO7LSFOFcCWw+ESSYc7FRu6n70y0+wheGGemA7F9kA=="
     },
     "@types/jasmine": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.1.tgz",
-      "integrity": "sha512-JnKB+cEIFuQZXizZP6N0zxma+JlvowkjefWuL61otVmXN7Ebbs4ka3IbDVIz1pc+TCiT00q925jANz3gQJ9qXw==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.2.tgz",
+      "integrity": "sha512-UvfHixeV1SHl/HgHOL7NWbL7Ye7+zfszMUQFNU9MlOD/9g2yEG/F3XcdFqVM7jjD4MbgTPwYgnQwuaUVgW2YzQ==",
       "dev": true
     },
     "@types/jasminewd2": {
@@ -900,9 +900,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "10.12.12",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz",
-      "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==",
+      "version": "10.12.15",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.15.tgz",
+      "integrity": "sha512-9kROxduaN98QghwwHmxXO2Xz3MaWf+I1sLVAA6KJDF5xix+IyXVhds0MAfdNwtcpSrzhaTsNB0/jnL86fgUhqA==",
       "dev": true
     },
     "@types/q": {
@@ -1205,9 +1205,9 @@
       }
     },
     "ajv-errors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
-      "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
       "dev": true
     },
     "ajv-keywords": {
@@ -1228,9 +1228,9 @@
       "integrity": "sha512-FPC6rjSiunK88Wdu5Dbr/XbOQDiIat87XJVa7ScGbQnjEBASeZS/FhxNgWgq6dp/A0YIKNRpRBTddB4Qq6ftig=="
     },
     "ansi-colors": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.2.tgz",
-      "integrity": "sha512-kJmcp4PrviBBEx95fC3dYRiC/QSN3EBd0GU1XoNEk/IuUa92rsB6o90zP3w5VAyNznR38Vkc9i8vk5zK6T7TxA==",
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
       "dev": true
     },
     "ansi-escapes": {
@@ -1951,14 +1951,14 @@
       }
     },
     "browserslist": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz",
-      "integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.6.tgz",
+      "integrity": "sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30000912",
-        "electron-to-chromium": "^1.3.86",
-        "node-releases": "^1.0.5"
+        "caniuse-lite": "^1.0.30000921",
+        "electron-to-chromium": "^1.3.92",
+        "node-releases": "^1.1.1"
       }
     },
     "browserstack": {
@@ -2108,9 +2108,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30000916",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000916.tgz",
-      "integrity": "sha512-D6J9jloPm2MPkg0PXcODLMQAJKkeixKO9xhqTUMvtd44MtTYMyyDXPQ2Lk9IgBq5FH0frwiPa/N/w8ncQf7kIQ==",
+      "version": "1.0.30000921",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000921.tgz",
+      "integrity": "sha512-Bu09ciy0lMWLgpYC77I0YGuI8eFRBPPzaSOYJK1jTI64txCphYCqnWbxJYjHABYVt/TYX/p3jNjLBR87u1Bfpw==",
       "dev": true
     },
     "canonical-path": {
@@ -3054,9 +3054,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.88",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz",
-      "integrity": "sha512-UPV4NuQMKeUh1S0OWRvwg0PI8ASHN9kBC8yDTk1ROXLC85W5GnhTRu/MZu3Teqx3JjlQYuckuHYXSUSgtb3J+A==",
+      "version": "1.3.92",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.92.tgz",
+      "integrity": "sha512-En051LMzMl3/asMWGZEtU808HOoVWIpmmZx1Ep8N+TT9e7z/X8RcLeBU2kLSNLGQ+5SuKELzMx+MVuTBXk6Q9w==",
       "dev": true
     },
     "elliptic": {
@@ -5655,7 +5655,7 @@
         },
         "resolve": {
           "version": "1.1.7",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+          "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
           "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
           "dev": true
         },
@@ -6695,9 +6695,9 @@
       }
     },
     "minizlib": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.0.tgz",
-      "integrity": "sha512-vQhkoouK/oKRVuFJynustmW3wrqZEXOrfbVVirvOVeglH4TNvIkcqiyojlIbbZYYDJZSbEKEXmDudg+tyRkm6g==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+      "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
       "dev": true,
       "requires": {
         "minipass": "^2.2.1"
@@ -6953,9 +6953,9 @@
       }
     },
     "node-releases": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.0.tgz",
-      "integrity": "sha512-+qV91QMDBvARuPxUEfI/mRF/BY+UAkTIn3pvmvM2iOLIRvv6RNYklFXBgrkky6P1wXUqQW1P3qKlWxxy4JZbfg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.1.tgz",
+      "integrity": "sha512-2UXrBr6gvaebo5TNF84C66qyJJ6r0kxBObgZIDX3D3/mt1ADKiHux3NJPWisq0wxvJJdkjECH+9IIKYViKj71Q==",
       "dev": true,
       "requires": {
         "semver": "^5.3.0"
@@ -7720,7 +7720,7 @@
     },
     "path-browserify": {
       "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
       "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
       "dev": true
     },
@@ -8069,9 +8069,9 @@
       "dev": true
     },
     "psl": {
-      "version": "1.1.29",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
-      "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+      "version": "1.1.31",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+      "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
       "dev": true,
       "optional": true
     },
@@ -8210,7 +8210,7 @@
     },
     "raw-loader": {
       "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+      "resolved": "http://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
       "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
       "dev": true
     },
@@ -9621,7 +9621,7 @@
     },
     "string-width": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
       "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
       "dev": true,
       "requires": {
@@ -10134,7 +10134,7 @@
     },
     "tty-browserify": {
       "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
       "dev": true
     },
@@ -10186,30 +10186,6 @@
       "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==",
       "dev": true
     },
-    "uglify-es": {
-      "version": "3.3.9",
-      "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
-      "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
-      "dev": true,
-      "requires": {
-        "commander": "~2.13.0",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.13.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
-          "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
     "uglify-js": {
       "version": "3.4.9",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
@@ -10246,6 +10222,12 @@
         "worker-farm": "^1.5.2"
       },
       "dependencies": {
+        "commander": {
+          "version": "2.13.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+          "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+          "dev": true
+        },
         "schema-utils": {
           "version": "0.4.7",
           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
@@ -10261,6 +10243,16 @@
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
+        },
+        "uglify-es": {
+          "version": "3.3.9",
+          "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+          "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+          "dev": true,
+          "requires": {
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
+          }
         }
       }
     },
@@ -10507,7 +10499,7 @@
     },
     "vm-browserify": {
       "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+      "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
       "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
       "dev": true,
       "requires": {

+ 16 - 16
package.json

@@ -12,17 +12,17 @@
 	},
 	"private": true,
 	"dependencies": {
-		"@angular/animations": "^7.1.2",
-		"@angular/common": "^7.1.2",
-		"@angular/compiler": "^7.1.2",
-		"@angular/core": "^7.1.2",
-		"@angular/forms": "^7.1.2",
-		"@angular/http": "^7.1.2",
-		"@angular/platform-browser": "^7.1.2",
-		"@angular/platform-browser-dynamic": "^7.1.2",
-		"@angular/router": "^7.1.2",
+		"@angular/animations": "^7.1.3",
+		"@angular/common": "^7.1.3",
+		"@angular/compiler": "^7.1.3",
+		"@angular/core": "^7.1.3",
+		"@angular/forms": "^7.1.3",
+		"@angular/http": "^7.1.3",
+		"@angular/platform-browser": "^7.1.3",
+		"@angular/platform-browser-dynamic": "^7.1.3",
+		"@angular/router": "^7.1.3",
 		"@ng-bootstrap/ng-bootstrap": "^4.0.0",
-		"@progress/kendo-angular-dateinputs": "^3.5.1",
+		"@progress/kendo-angular-dateinputs": "^3.5.2",
 		"@progress/kendo-angular-intl": "^1.6.1",
 		"@progress/kendo-angular-l10n": "^1.3.0",
 		"@progress/kendo-theme-bootstrap": "^2.17.1",
@@ -35,14 +35,14 @@
 		"zone.js": "^0.8.26"
 	},
 	"devDependencies": {
-		"@angular-devkit/build-angular": "~0.11.2",
-		"@angular/cli": "~7.1.2",
-		"@angular/compiler-cli": "^7.1.2",
-		"@angular/language-service": "^7.1.2",
-		"@types/jasmine": "~3.3.1",
+		"@angular-devkit/build-angular": "~0.11.3",
+		"@angular/cli": "~7.1.3",
+		"@angular/compiler-cli": "^7.1.3",
+		"@angular/language-service": "^7.1.3",
+		"@types/jasmine": "~3.3.2",
 		"@types/jasminewd2": "~2.0.6",
 		"@types/lodash": "^4.14.119",
-		"@types/node": "~10.12.12",
+		"@types/node": "~10.12.15",
 		"codelyzer": "^4.5.0",
 		"jasmine-core": "~3.3.0",
 		"jasmine-spec-reporter": "~4.2.1",

+ 14 - 1
src/app/dynaform/dynaform.component.html

@@ -24,6 +24,19 @@
 
 		<ng-template #recursiveDynaform>
 			<ng-container *ngIf="isRepeatingContainer(meta); else container">
+				<div *ngIf="meta.display === 'SINGLE'" class="row dyna-repeating-container-selector">
+					<div class="col-sm-4 text-right">
+						<b>FOCUS &gt;</b>
+					</div>
+					<div class="col-sm-8">
+						<a *ngFor="let container of meta.meta; let i = index"
+							class="btn btn-sm"
+							[ngClass]="container.focussed ? 'btn-primary' : 'btn-outline-primary'"
+							(click)="focusContainer(meta.name, i)">
+							{{ getRCLabel(meta.name, i) }}
+						</a>
+					</div>
+				</div>
 				<div *ngFor="let container of meta.meta; let i = index">
 					<ng-container *ngTemplateOutlet="dynaform; context: getRCTemplateContext(meta.name, i)"></ng-container>
 				</div>
@@ -48,7 +61,7 @@
 	<div *ngIf="meta.label" class="row">
 		<h3 class="col-sm-12 h-dyna" [ngClass]="'h-dyna-' + (path.length + 2)">{{ meta.label }}</h3>
 	</div>
-	<app-dynaform [formGroup]="control" [meta]="meta.meta" [template]="template" (call)="handleCallback($event)"></app-dynaform>
+	<app-dynaform [formGroup]="control" [meta]="meta.meta" [template]="template" [ngClass]="{ 'dyna-hidden': !meta.focussed }" (call)="handleCallback($event)"></app-dynaform>
 </ng-template>
 
 

+ 32 - 9
src/app/dynaform/dynaform.component.ts

@@ -1,6 +1,7 @@
 import { Component, Input, Output, EventEmitter, TemplateRef, Optional, OnInit, ChangeDetectionStrategy } from '@angular/core';
 import { FormControl, FormGroup, FormArray, FormGroupName, AbstractControl, ControlContainer } from '@angular/forms';
 import { SuperForm } from 'angular-super-validator';
+import { createMeta } from '@angular/platform-browser/src/browser/meta';
 
 export interface DynarowContext {
 	control: AbstractControl;
@@ -123,6 +124,14 @@ export class DynaformComponent implements OnInit {
 		return path;
 	}
 
+	isField(meta: StringMap): boolean {
+		return !meta.type.includes('Container');
+	}
+	
+	isRepeatingContainer(meta: StringMap): boolean {
+		return meta.type === 'RepeatingContainer';
+	}
+
 	getTemplateContext(controlName: string): DynarowContext {
 		return {
 			control: this.formGroup.get(controlName),
@@ -130,7 +139,7 @@ export class DynaformComponent implements OnInit {
 		};
 	}
 
-	getRCTemplateContext(repeatingContainerName, index): DynarowContext {
+	getRCTemplateContext(repeatingContainerName: string, index: number): DynarowContext {
 		const repeatingContainerFormArray = this.formGroup.get(repeatingContainerName) as FormArray;
 		const result = {
 			control: repeatingContainerFormArray.at(index),
@@ -139,14 +148,6 @@ export class DynaformComponent implements OnInit {
 		return result;
 	}
 
-	isField(meta: StringMap): boolean {
-		return !meta.type.includes('Container');
-	}
-	
-	isRepeatingContainer(meta: StringMap): boolean {
-		return meta.type === 'RepeatingContainer';
-	}
-
 	getRowClass(control: FormControl, meta: StringMap): string {
 		const fieldTypeClass = meta.type ? meta.type.toLowerCase().replace('component', '') : '';
 		const fieldClass = Array.isArray(meta.class) ? meta.class.join(' ') : meta.class;
@@ -155,6 +156,28 @@ export class DynaformComponent implements OnInit {
 		return `row-${fieldTypeClass}${containerClass}${errorClass}`;
 	}
 
+	getRCLabel(repeatingContainerName: string, index: number): string {
+		// Get the label for a repeating container,
+		// used on buttons to switch between containers (when only one is shown at a time i.e display = 'SINGLE')
+		const rcMeta = this.formMetaData[repeatingContainerName];
+		const primaryField = rcMeta.primaryField;
+		if (primaryField) {
+			// The primaryField has been specified, so return its value
+			const repeatingContainerFormArray = this.formGroup.get(repeatingContainerName) as FormArray;
+			const formGroup = repeatingContainerFormArray.at(index);
+			return formGroup.get(primaryField).value;
+		} else {
+			// Otherwise return the 'button' of the container (in the array of containers)
+			return rcMeta.meta[index].button;
+		}
+	}
+
+	focusContainer(repeatingContainerName: string, index: number): void {
+		// Show a particular container of a Repeating Container group (used when only one is shown at a time i.e display = 'SINGLE')
+		const rcMeta = this.formMetaData[repeatingContainerName];
+		rcMeta.meta = rcMeta.meta.map( (container, i) => ({ ...container, focussed: i === index }) );
+	}
+
 	getValidationFailureMessage(control: FormControl, meta: StringMap) {
 		if (control.errors) {
 			const errKeys = Object.keys(control.errors);

+ 9 - 2
src/app/dynaform/models/field.model.ts

@@ -257,6 +257,8 @@ class Container {
 	label = '';
 	seed: StringMap;
 	template?: TemplateRef<any>;
+	button: string;	
+	focussed: boolean = true;	
 	meta: StringMap; // TODO: Tighten up on type with union type
 	constructor(containerMeta: StringMap) {
 		Object.assign(this, containerMeta);
@@ -280,7 +282,7 @@ class RepeatingContainer {
 	showAddControl:  boolean = true;
 	showDeleteControl: boolean = true;
 	primaryField: string = '';
-	display: string = ''; // Display strategy to use 
+	display: string = 'SINGLE'; // Display strategy to use  - ALL or SINGLE - All at once, or one at a time (with a switcher)
 	constructor(containerMeta: StringMap) {
 		Object.assign(this, containerMeta);
 		if (typeof this.label === 'undefined') {
@@ -289,7 +291,12 @@ class RepeatingContainer {
 		if (!containerMeta.initialRepeat) {
 			this.initialRepeat = containerMeta.meta.length;
 		}
-		this.meta = containerMeta.meta.map((m, i) => new Container({ name: `${this.prefix}${i+1}`, meta: m }));
+		this.meta = containerMeta.meta.map((m, i) => new Container({ 
+			name: `${this.prefix}${i+1}`,
+			meta: m,
+			button: unCamelCase(`${this.prefix}${i+1}`),
+			focussed: this.display === 'SINGLE' ? i === 0 : true
+		}));
 	}
 }
 

+ 16 - 0
src/styles.scss

@@ -94,6 +94,22 @@ div.col-sm-8 {
 	margin-right: 4px;
 }
 
+// ---------------------------------------------------------------------------------------------------------------------
+// Repeating Comtainers (series of buttons alowwing user to focus a repeating container member)
+
+.dyna-repeating-container-selector {
+	a.btn {
+		margin-right: 4px;
+	}
+	.btn-primary {
+		color: white !important;
+	}
+}
+
+.dyna-hidden {
+	display: none;
+}
+
 // ---------------------------------------------------------------------------------------------------------------------
 // Errors