diff --git a/samples/react-calendar/.gitignore b/samples/react-calendar/.gitignore index b19bbe123..9673fc180 100644 --- a/samples/react-calendar/.gitignore +++ b/samples/react-calendar/.gitignore @@ -11,7 +11,7 @@ dist lib solution temp -*.sppkg +#*.sppkg # Coverage directory used by tools like istanbul coverage diff --git a/samples/react-calendar/.yo-rc.json b/samples/react-calendar/.yo-rc.json index 72f67669a..4f01d013a 100644 --- a/samples/react-calendar/.yo-rc.json +++ b/samples/react-calendar/.yo-rc.json @@ -22,11 +22,11 @@ "framework": "react", "plusBeta": true, "isCreatingSolution": true, - "version": "1.8.0", + "version": "1.8.2", "libraryName": "react-calendar", "libraryId": "3a13208b-3874-4036-9262-4edd22e88187", "packageManager": "npm", "isDomainIsolated": false, "componentType": "webpart" } -} \ No newline at end of file +} diff --git a/samples/react-calendar/README.md b/samples/react-calendar/README.md index ef7316034..9153ebac2 100644 --- a/samples/react-calendar/README.md +++ b/samples/react-calendar/README.md @@ -1,29 +1,43 @@ # React Calendar ## Summary -This Web Part allows you to manage events in a calendar. +This Web Part allows you to manage events in a calendar. Uses a list of existing calendars on any website. The location and name of the list and the dates of the events to be displayed are defined in the properties of the web part. -The Events are created in Site TimeZone, defined in site Regional Settings. - Each category has its own color that is generated in the load. The Web Part checks the user's permissions for the View, Add, Edit, and Delete events. -The Web Part does not show recurring events, I will work on it soon. ## -![callendar](/samples/react-calendar/assets/animatevideo.gif) +![callendar](/samples/react-calendar/assets/animatevideo.gif) + + +## +![callendar](/samples/react-calendar/assets/weekly_moderncalendar.gif) + +## +![callendar](/samples/react-calendar/assets/modercalendar_monthly.gif) + +## +![callendar](/samples/react-calendar/assets/moderncalendar_yearly.gif) + + ## Web Part - Screenshots -![callendar](/samples/react-calendar//assets/screen1.png) + +![callendar](/samples/react-calendar/assets/calendar_teams.jpg) + +![callendar](/samples/react-calendar/assets/calendar_teams2.jpg) + +![callendar](/samples/react-calendar/assets/screen1.png) -![callendar](/samples/react-calendar/assets/screen1.0.jpg) +![callendar](/samples/react-calendar/assets/screen1.0.png) ![callendar](/samples/react-calendar/assets/screen1.1.png) @@ -35,10 +49,10 @@ The Web Part does not show recurring events, I will work on it soon. ![callendar](/samples/react-calendar/assets/screen1.3.png) -![callendar](/samples/react-calendar//assets/screen1.4.png) +![callendar](/samples/react-calendar/assets/screen1.4.png) -![callendar](/samples/react-calendar//assets/screen2.png) +![callendar](/samples/react-calendar/assets/screen2.png) @@ -46,47 +60,45 @@ The Web Part does not show recurring events, I will work on it soon. -![callendar](/samples/react-calendar//assets/screen4.png) +![callendar](/samples/react-calendar/assets/screen4.png) ![callendar](/samples/react-calendar/assets/screen5.png) -![callendar](/samples/react-calendar//assets/screen6.png) +![callendar](/samples/react-calendar/assets/screen6.png) -![callendar](/samples/react-calendar//assets/screen7.png) +![callendar](/samples/react-calendar/assets/screen7.png) ![callendar](/samples/react-calendar/assets/screen8.png) -![callendar](/samples/react-calendar//assets/screen9.png) +![callendar](/samples/react-calendar/assets/screen9.png) ## - ## Used SharePoint Framework Version -![drop](https://img.shields.io/badge/version-GA-green.svg) +![drop](https://img.shields.io/badge/version-1.8.2-green.svg) ## Applies to * [SharePoint Framework](https:/dev.office.com/sharepoint) * [Office 365 tenant](https://dev.office.com/sharepoint/docs/spfx/set-up-your-development-environment) -> Update accordingly as needed. ## WebPart Properties Property |Type|Required| comments --------------------|----|--------|---------- Site Url of Calendar List | Text| yes| -Calendar list| Text| yes| this is filled with all list of type "event list" created +Calendar list| Choice/Dropdown | yes| this is filled with all list of type "event list" created Start Date | Date | yes | Event Date End Date| Date| yes | Event Date @@ -103,6 +115,7 @@ Calendar Web Part|João Mendes Version|Date|Comments -------|----|-------- 1.0.0|April 25, 2019|Initial release +1.0.1|June 10, 2019|update add recurrence events ## Disclaimer **THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** @@ -122,4 +135,4 @@ Version|Date|Comments - + diff --git a/samples/react-calendar/assets/calendar_teams.jpg b/samples/react-calendar/assets/calendar_teams.jpg new file mode 100644 index 000000000..5001813cb Binary files /dev/null and b/samples/react-calendar/assets/calendar_teams.jpg differ diff --git a/samples/react-calendar/assets/calendar_teams2.jpg b/samples/react-calendar/assets/calendar_teams2.jpg new file mode 100644 index 000000000..54ffc8995 Binary files /dev/null and b/samples/react-calendar/assets/calendar_teams2.jpg differ diff --git a/samples/react-calendar/assets/modercalendar_monthly.gif b/samples/react-calendar/assets/modercalendar_monthly.gif new file mode 100644 index 000000000..059b4f705 Binary files /dev/null and b/samples/react-calendar/assets/modercalendar_monthly.gif differ diff --git a/samples/react-calendar/assets/moderncalendar_yearly.gif b/samples/react-calendar/assets/moderncalendar_yearly.gif new file mode 100644 index 000000000..9726cc5bb Binary files /dev/null and b/samples/react-calendar/assets/moderncalendar_yearly.gif differ diff --git a/samples/react-calendar/assets/screen1.0.png b/samples/react-calendar/assets/screen1.0.png new file mode 100644 index 000000000..943818cef Binary files /dev/null and b/samples/react-calendar/assets/screen1.0.png differ diff --git a/samples/react-calendar/assets/weekly_moderncalendar.gif b/samples/react-calendar/assets/weekly_moderncalendar.gif new file mode 100644 index 000000000..094da7d02 Binary files /dev/null and b/samples/react-calendar/assets/weekly_moderncalendar.gif differ diff --git a/samples/react-calendar/config/config.json b/samples/react-calendar/config/config.json index 642ab4041..2acf37ba9 100644 --- a/samples/react-calendar/config/config.json +++ b/samples/react-calendar/config/config.json @@ -8,6 +8,7 @@ "entrypoint": "./lib/webparts/calendar/CalendarWebPart.js", "manifest": "./src/webparts/calendar/CalendarWebPart.manifest.json" } + ] } }, @@ -17,4 +18,4 @@ "ControlStrings": "node_modules/@pnp/spfx-controls-react/lib/loc/{locale}.js", "PropertyControlStrings": "node_modules/@pnp/spfx-property-controls/lib/loc/{locale}.js" } -} \ No newline at end of file +} diff --git a/samples/react-calendar/package-lock.json b/samples/react-calendar/package-lock.json index 83682f902..ecda0185a 100644 --- a/samples/react-calendar/package-lock.json +++ b/samples/react-calendar/package-lock.json @@ -1,6 +1,6 @@ { "name": "react-calendar", - "version": "0.0.1", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -249,33 +249,44 @@ } }, "@microsoft/api-extractor": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.0.12.tgz", - "integrity": "sha512-sLPF9DmH8Y/lXkWd9mjEm6gB2OY9CLTMCfoK9HbXbwE4Tv6fdL9Km9IwRG4E4ED6AqrFg1jypTorTqG/s1njyQ==", + "version": "7.0.42", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.0.42.tgz", + "integrity": "sha512-7W6NZV+HdoaEjBlzIZ8084TsEJ0lj6t0CE2uwB4IILo+b5CpOndhkBUQt0uAqKYQHRS6DrJwqFzB4PkhcOquMg==", "dev": true, "requires": { - "@microsoft/node-core-library": "3.9.0", + "@microsoft/api-extractor-model": "7.0.28", + "@microsoft/node-core-library": "3.13.0", "@microsoft/ts-command-line": "4.2.3", - "@microsoft/tsdoc": "0.12.4", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", + "@microsoft/tsdoc": "0.12.9", "colors": "~1.2.1", "lodash": "~4.17.5", "resolve": "1.8.1", - "typescript": "~3.1.6", - "z-schema": "~3.18.3" + "source-map": "~0.6.1", + "typescript": "~3.4.3" }, "dependencies": { + "@microsoft/tsdoc": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.9.tgz", + "integrity": "sha512-sDhulvuVk65eMppYOE6fr6mMI6RUqs53KUg9deYzNCBpP+2FhR0OFB5innEfdtSedk0LK+1Ppu6MxkfiNjS/Cw==", + "dev": true + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "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 + }, "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", "dev": true } } @@ -284,49 +295,28 @@ "version": "7.0.28", "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.0.28.tgz", "integrity": "sha512-kZJaWwdu3z5A1DugJpOZ9dI5+DjIEhqQJwHn2/kLTpsKT7gOyqNRbGHlDGG8xSiJ6/m994+cwh3qSGYDC17dtw==", + "dev": true, "requires": { "@microsoft/node-core-library": "3.13.0", "@microsoft/tsdoc": "0.12.8", "@types/node": "8.5.8" - }, - "dependencies": { - "@microsoft/node-core-library": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.13.0.tgz", - "integrity": "sha512-mnsL/1ikVWHl8sPNssavaAgtUaIM3hkQ8zeySuApU5dNmsMPzovJPfx9m5JGiMvs1v5QNAIVeiS9jnWwe/7anw==", - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - }, - "@microsoft/tsdoc": { - "version": "0.12.8", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.8.tgz", - "integrity": "sha512-0smzAmVIUCsssAqDSPn9AfOPKUobq2WXMygbzC5JNswAJOs4uJK6DTZgfnHC8QLE2q374sPNwWU5D5LuoAJQSA==" - } } }, "@microsoft/decorators": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/decorators/-/decorators-1.8.0-plusbeta.tgz", - "integrity": "sha512-oVQldo05HJ320/Xg0J2FhH4qu5OMvDXS3MekVDRH5gTtM0eS7SaaSD8QW4Er2gqo7Ff2eLnXbLwG+/PLLZEUCg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/decorators/-/decorators-1.8.2.tgz", + "integrity": "sha512-1tWDtxh6Mks5JjqI2yRPBD3ZaOT1DhDh6+Z/Lj1LWA+OU4CnIkl2P3uGkiKhchXlgHBeKUidFGRVrv0parfTRQ==", "requires": { "tslib": "~1.9.3" } }, "@microsoft/gulp-core-build": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.9.7.tgz", - "integrity": "sha512-Lv4zEXn1MgTxj+NkvMpgO1GqvmbF3yW5OXLuwrVZIIXKsl5Rb/R8P725NIUo5EC/loUhZGvLuUNGxIzAl4WUWA==", + "version": "3.9.26", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.9.26.tgz", + "integrity": "sha512-GdLRARlD/t6KStdmA8D6+NwSd8SgtuRDq9m3RU3zBVXrwSgaQkPls6TYBDBusluVBxPJmMIL56/7pn8ZbpPprg==", "dev": true, "requires": { - "@microsoft/node-core-library": "3.10.0", + "@microsoft/node-core-library": "3.13.0", "@types/assertion-error": "1.0.30", "@types/chai": "3.4.34", "@types/chalk": "0.4.31", @@ -366,22 +356,6 @@ "z-schema": "~3.18.3" }, "dependencies": { - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - }, "@types/mocha": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", @@ -980,6 +954,52 @@ "postcss-modules": "~1.3.1" }, "dependencies": { + "@microsoft/gulp-core-build": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.9.7.tgz", + "integrity": "sha512-Lv4zEXn1MgTxj+NkvMpgO1GqvmbF3yW5OXLuwrVZIIXKsl5Rb/R8P725NIUo5EC/loUhZGvLuUNGxIzAl4WUWA==", + "dev": true, + "requires": { + "@microsoft/node-core-library": "3.10.0", + "@types/assertion-error": "1.0.30", + "@types/chai": "3.4.34", + "@types/chalk": "0.4.31", + "@types/gulp": "3.8.32", + "@types/mocha": "5.2.5", + "@types/node": "8.5.8", + "@types/node-notifier": "0.0.28", + "@types/orchestrator": "0.0.30", + "@types/q": "0.0.32", + "@types/semver": "5.3.33", + "@types/through2": "2.0.32", + "@types/vinyl": "1.2.30", + "@types/yargs": "0.0.34", + "colors": "~1.2.1", + "del": "^2.2.2", + "end-of-stream": "~1.1.0", + "glob-escape": "~0.0.1", + "globby": "~5.0.0", + "gulp": "~3.9.1", + "gulp-flatten": "~0.2.0", + "gulp-if": "^2.0.1", + "jest": "~23.6.0", + "jest-cli": "~22.4.3", + "jest-environment-jsdom": "~22.4.3", + "jest-resolve": "~22.4.3", + "jsdom": "~11.11.0", + "lodash.merge": "~4.3.2", + "merge2": "~1.0.2", + "node-notifier": "~5.0.2", + "object-assign": "~4.1.0", + "orchestrator": "~0.3.8", + "pretty-hrtime": "~1.0.2", + "semver": "~5.3.0", + "through2": "~2.0.1", + "vinyl": "~2.2.0", + "yargs": "~4.6.0", + "z-schema": "~3.18.3" + } + }, "@microsoft/load-themed-styles": { "version": "1.8.59", "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.8.59.tgz", @@ -1002,137 +1022,126 @@ "z-schema": "~3.18.3" } }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "@microsoft/gulp-core-build-serve": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-serve/-/gulp-core-build-serve-3.3.4.tgz", - "integrity": "sha512-yLdf+AFMNE7hityTDSdzcQ45mIlxhR6B9soLzjVKwt4wqrOjJ9gHfyssr/7pmO9atnGQ4hmO+jSmir8/+h1XMA==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.9.7", - "@microsoft/node-core-library": "3.10.0", - "@types/node": "8.5.8", - "colors": "~1.2.1", - "deasync": "~0.1.7", - "express": "~4.16.2", - "gulp": "~3.9.1", - "gulp-connect": "~5.5.0", - "gulp-open": "~3.0.1", - "node-forge": "~0.7.1", - "sudo": "~1.0.3" - }, - "dependencies": { - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - } - } - }, - "@microsoft/gulp-core-build-typescript": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-typescript/-/gulp-core-build-typescript-8.0.4.tgz", - "integrity": "sha512-Zi2xXg3/kklOopUVKbbhzybrQzM6q82N0KoU/kYOxoHVUsrOuNIAykdEY7LoiA4gT6NF6U8Qd0zXnDFbtRAnUQ==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.9.7", - "@microsoft/node-core-library": "3.10.0", - "@microsoft/rush-stack-compiler-3.2": "0.2.3", - "@types/node": "8.5.8", - "decomment": "~0.9.1", - "glob": "~7.0.5", - "glob-escape": "~0.0.1", - "resolve": "1.8.1" - }, - "dependencies": { - "@microsoft/api-extractor": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.0.18.tgz", - "integrity": "sha512-puQisjyoYK1A0I8DqyBoLPV9noyFUlxTE3WsjhgJw//TrmegGHYmsRlD3rnHeXcKPM1F7sd/VKJXeXC3IPTf2Q==", - "dev": true, - "requires": { - "@microsoft/node-core-library": "3.10.0", - "@microsoft/ts-command-line": "4.2.3", - "@microsoft/tsdoc": "0.12.5", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "lodash": "~4.17.5", - "resolve": "1.8.1", - "typescript": "~3.1.6", - "z-schema": "~3.18.3" - }, - "dependencies": { - "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", - "dev": true - } - } - }, - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - }, - "@microsoft/rush-stack-compiler-3.2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-3.2/-/rush-stack-compiler-3.2-0.2.3.tgz", - "integrity": "sha512-DV3BON3G3SJJOQVINbZkP8za1YbNENpefM7mH5ZWixaPeIJRvVf1nrzU1r1rtyfr7SSIgjWiu+9Cm6CjpLuE5w==", - "dev": true, - "requires": { - "@microsoft/api-extractor": "7.0.18", - "@microsoft/node-core-library": "3.10.0", - "@types/node": "8.5.8", - "tslint": "~5.12.1", - "tslint-microsoft-contrib": "~5.2.1", - "typescript": "~3.2.4" - } - }, - "@microsoft/tsdoc": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.5.tgz", - "integrity": "sha512-xEAyvLXo4Cter/b0EMCWUZTgXOfLOPJ/Xr52WdjVclPx9eDmNTGFtZl8Pn/nqSnZsQBNcHL0eHk/YyRyyXXpiQ==", + "@types/mocha": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", + "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", "dev": true }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "babel-jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", + "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.4.4" + } + }, + "babel-plugin-jest-hoist": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", + "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", + "dev": true + }, + "babel-preset-jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", + "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^22.4.4", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expect": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "glob": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", @@ -1147,36 +1156,150 @@ "path-is-absolute": "^1.0.0" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "is-extglob": "^1.0.0" + } + }, + "jest-changed-files": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", + "dev": true, + "requires": { + "throat": "^4.0.0" + } + }, + "jest-cli": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz", + "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.2.0", + "jest-config": "^22.4.4", + "jest-environment-jsdom": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^22.4.2", + "jest-message-util": "^22.4.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.4.4", + "jest-runtime": "^22.4.4", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "jest-worker": "^22.2.2", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^10.0.3" }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + } + } + }, + "jest-config": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", + "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^22.4.4", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "pretty-format": "^22.4.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1189,21 +1312,396 @@ } } }, - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + } + }, + "jest-docblock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-environment-node": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "dev": true, + "requires": { + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" + } + }, + "jest-haste-map": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", + "dev": true, + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.4.3", + "jest-serializer": "^22.4.3", + "jest-worker": "^22.4.3", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + } + }, + "jest-jasmine2": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", + "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.0", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "source-map-support": "^0.5.0" + } + }, + "jest-leak-detector": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", + "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", + "dev": true, + "requires": { + "pretty-format": "^22.4.3" + } + }, + "jest-matcher-utils": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + } + }, + "jest-message-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", "dev": true + }, + "jest-regex-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "dev": true + }, + "jest-resolve-dependencies": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", + "dev": true, + "requires": { + "jest-regex-util": "^22.4.3" + } + }, + "jest-runner": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz", + "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==", + "dev": true, + "requires": { + "exit": "^0.1.2", + "jest-config": "^22.4.4", + "jest-docblock": "^22.4.0", + "jest-haste-map": "^22.4.2", + "jest-jasmine2": "^22.4.4", + "jest-leak-detector": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-runtime": "^22.4.4", + "jest-util": "^22.4.1", + "jest-worker": "^22.2.2", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz", + "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^22.4.4", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.4.4", + "jest-haste-map": "^22.4.2", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" + }, + "dependencies": { + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + } + } + }, + "jest-serializer": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", + "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", + "dev": true + }, + "jest-snapshot": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.4.3" + } + }, + "jest-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.4.3", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0" + } + }, + "jest-validate": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", + "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-config": "^22.4.4", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^22.4.0" + } + }, + "jest-worker": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "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 + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "@microsoft/gulp-core-build-serve": { + "version": "3.3.29", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-serve/-/gulp-core-build-serve-3.3.29.tgz", + "integrity": "sha512-TD6G1Mj7mYQD0LET9/96XABRqeqC+Nr+SrxNH1uWGG4ffV4hBnZEbECH+BeeT0tdnpocF1pDVoym8ZQ7LU95Qw==", + "dev": true, + "requires": { + "@microsoft/gulp-core-build": "3.9.26", + "@microsoft/node-core-library": "3.13.0", + "@types/node": "8.5.8", + "colors": "~1.2.1", + "deasync": "~0.1.7", + "express": "~4.16.2", + "gulp": "~3.9.1", + "gulp-connect": "~5.5.0", + "gulp-open": "~3.0.1", + "node-forge": "~0.7.1", + "sudo": "~1.0.3" + } + }, + "@microsoft/gulp-core-build-typescript": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-typescript/-/gulp-core-build-typescript-8.1.5.tgz", + "integrity": "sha512-nHhvEaO5v/HidGut42lXflv9eeaDWmPJp76TIx41qEbyqRTPsRvbZVpQJ2avOCZrrLv4hUZNr24+wcghjQ0XkA==", + "dev": true, + "requires": { + "@microsoft/gulp-core-build": "3.9.26", + "@microsoft/node-core-library": "3.13.0", + "@types/node": "8.5.8", + "decomment": "~0.9.1", + "glob": "~7.0.5", + "glob-escape": "~0.0.1", + "resolve": "1.8.1" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } } } }, "@microsoft/gulp-core-build-webpack": { - "version": "3.4.71", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-webpack/-/gulp-core-build-webpack-3.4.71.tgz", - "integrity": "sha512-KStBu8ulEOYELqg4AJuzsBA2xvE2JOADKfqo8Kq+7oZjcOugKSW2m1eOpyfcCRGxAt53C/06uaz+8ZgaJyLfMQ==", + "version": "3.4.96", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-webpack/-/gulp-core-build-webpack-3.4.96.tgz", + "integrity": "sha512-y4SvyAjXOU1Y4DAlCfN0k2o7mYpt25yx41pELHUpLy4OLRoq3+HrvAbscKnG3KueiPu9GwV62dTDgin2Qu3ebQ==", "dev": true, "requires": { - "@microsoft/gulp-core-build": "3.9.7", + "@microsoft/gulp-core-build": "3.9.26", "@types/gulp": "3.8.32", "@types/node": "8.5.8", "colors": "~1.2.1", @@ -1415,9 +1913,9 @@ "integrity": "sha512-ocE95XMd7YGTkzEZpTE9uKcnRE6iEYoo89H9xbnn/xEWeTvLPdg0Ix1L2D1jRNsDZYyvNiSDu+PBG4wMEawyUg==" }, "@microsoft/loader-cased-file": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/loader-cased-file/-/loader-cased-file-1.8.0-plusbeta.tgz", - "integrity": "sha512-337dUj6JqtTefsk9QTPRmHS+QZSSWET9HuJySqK6bPDWiOrdJ9QgwL7+d1ZnMIfxPAV4PBns/DBGb+wNskOEjA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/loader-cased-file/-/loader-cased-file-1.8.2.tgz", + "integrity": "sha512-yMsWqgkICwMjqDvuEXM6ANDJCcaL7iQE5So2115MSBKpkHuKNAzL8KC/jG0ko8duO9M908/UuxTrpK+XiejfqA==", "dev": true, "requires": { "@types/lodash": "4.14.117", @@ -1490,9 +1988,9 @@ "integrity": "sha512-Mxu5H+69F8T5NzV4+U8FkTvpIYYWHsmRZzfAuOlIO0zJJGlVyRIVqpq4NmOdUXGC00vZ73ONgCuzuaksxqDm/Q==" }, "@microsoft/node-core-library": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.9.0.tgz", - "integrity": "sha512-zmP6zNddcIrRXbg8NX9oHX2iCBLU9hZF/+7GeUi3hLbp13xMDHfdT4KepoT+8ZMOMZzRF1lcqiTiVy24VYvCEg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.13.0.tgz", + "integrity": "sha512-mnsL/1ikVWHl8sPNssavaAgtUaIM3hkQ8zeySuApU5dNmsMPzovJPfx9m5JGiMvs1v5QNAIVeiS9jnWwe/7anw==", "dev": true, "requires": { "@types/fs-extra": "5.0.4", @@ -1506,9 +2004,9 @@ } }, "@microsoft/office-ui-fabric-react-bundle": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/office-ui-fabric-react-bundle/-/office-ui-fabric-react-bundle-1.8.0-plusbeta.tgz", - "integrity": "sha512-3sJbIiu2IFBsYtEoylUquScXyPwlMBClVz1dsiVUCpEkB8S6rnSBLNPXhWmQmq5ztSym48E/ps5qXFpFSjJsYA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/office-ui-fabric-react-bundle/-/office-ui-fabric-react-bundle-1.8.2.tgz", + "integrity": "sha512-KQ07naCdJXW6nquDDEP/ydb8SHoFj1Kcsldj5qREcdJIZfUkrlxXRpFlgJoVKdPF3sYomDSssTCQf8pmy0uicA==", "requires": { "@types/react": "16.4.2", "@types/webpack-env": "1.13.1", @@ -1646,18 +2144,18 @@ "dev": true }, "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "wordwrap": { @@ -1674,79 +2172,20 @@ } } }, - "@microsoft/rush-stack-compiler-2.7": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-2.7/-/rush-stack-compiler-2.7-0.4.0.tgz", - "integrity": "sha512-dhgpP/T1oR5IfAHuDccM5QyQngmGxcTB10kWLkBzPA/vrdga41avgezNUy7kWTHghAsQG08eGYWeW3S2nyueUQ==", + "@microsoft/rush-stack-compiler-2.9": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-2.9/-/rush-stack-compiler-2.9-0.7.7.tgz", + "integrity": "sha512-hhtSK+aQWGEkGucHf7fJx+5aokc9SAPL2+Jo5Nj4vPRGfEuuWFYrIxLk0EpHJtloosgk3ViLWnFl5vKXN+9yMA==", "dev": true, "requires": { - "@microsoft/api-extractor": "7.0.12", - "@microsoft/node-core-library": "3.9.0", - "@types/node": "8.5.8", - "tslint": "~5.11.0", - "tslint-microsoft-contrib": "~5.2.1", - "typescript": "~2.7.2" - }, - "dependencies": { - "typescript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", - "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", - "dev": true - } - } - }, - "@microsoft/rush-stack-compiler-3.2": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-3.2/-/rush-stack-compiler-3.2-0.3.6.tgz", - "integrity": "sha512-lYBwE5Hd8kwsg7agMRoOvOVZEhJZmgPfm/O7gRzcTMIklG+jhD+O4/RfxeeUWzzqJbwlc4xidhugP9XlcU3aeQ==", - "requires": { - "@microsoft/api-extractor": "7.0.41", + "@microsoft/api-extractor": "7.0.42", "@microsoft/node-core-library": "3.13.0", "@types/node": "8.5.8", "tslint": "~5.12.1", "tslint-microsoft-contrib": "~5.2.1", - "typescript": "~3.2.4" + "typescript": "~2.9.2" }, "dependencies": { - "@microsoft/api-extractor": { - "version": "7.0.41", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.0.41.tgz", - "integrity": "sha512-dO3qyQKKgKhZVDA6lJkyTBeV6qa6vbhES3I0dTJEtg6FA/UsLjvidgBbeRwlNIq4u+38xbhq+L7Qb6O7teVQDw==", - "requires": { - "@microsoft/api-extractor-model": "7.0.28", - "@microsoft/node-core-library": "3.13.0", - "@microsoft/ts-command-line": "4.2.3", - "@microsoft/tsdoc": "0.12.9", - "colors": "~1.2.1", - "lodash": "~4.17.5", - "resolve": "1.8.1", - "source-map": "~0.6.1", - "typescript": "~3.4.3" - }, - "dependencies": { - "typescript": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", - "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==" - } - } - }, - "@microsoft/node-core-library": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.13.0.tgz", - "integrity": "sha512-mnsL/1ikVWHl8sPNssavaAgtUaIM3hkQ8zeySuApU5dNmsMPzovJPfx9m5JGiMvs1v5QNAIVeiS9jnWwe/7anw==", - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - }, "@microsoft/tsdoc": { "version": "0.12.9", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.9.tgz", @@ -1762,29 +2201,93 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + } + } + }, + "@microsoft/rush-stack-compiler-3.2": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-3.2/-/rush-stack-compiler-3.2-0.3.17.tgz", + "integrity": "sha512-fNlta04f/3QBjWe2zqkQEqJVDfkmELEnDvdDVm9xWdnDoFI2mHYjBGGNRV1DndfYmgnIt0uLX5nPMKcT0bHQwQ==", + "dev": true, + "requires": { + "@microsoft/api-extractor": "7.1.8", + "@microsoft/node-core-library": "3.13.0", + "@types/node": "8.5.8", + "tslint": "~5.12.1", + "tslint-microsoft-contrib": "~5.2.1", + "typescript": "~3.2.4" + }, + "dependencies": { + "@microsoft/api-extractor": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.1.8.tgz", + "integrity": "sha512-7fcGbnOp7bmQe4p1b123K6gJ/qyaLWhufSt5OF3DMMK1JbmdfEGWf7AwyFFSS4QQzPvSxqs8Woehye4Ytf1uAA==", + "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "@microsoft/api-extractor-model": "7.1.3", + "@microsoft/node-core-library": "3.13.0", + "@microsoft/ts-command-line": "4.2.5", + "@microsoft/tsdoc": "0.12.9", + "colors": "~1.2.1", + "lodash": "~4.17.5", + "resolve": "1.8.1", + "source-map": "~0.6.1", + "typescript": "~3.4.3" + }, + "dependencies": { + "typescript": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "dev": true + } } }, - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==" + "@microsoft/api-extractor-model": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.1.3.tgz", + "integrity": "sha512-DjagaoMFY1XyLjjo/x4lp7LoyjyMg4ntDY5+RE8g2zvt61m2dKm9CtxW0lxaQI4Xilw+n+Z4exjcGaQJeRcMyw==", + "dev": true, + "requires": { + "@microsoft/node-core-library": "3.13.0", + "@microsoft/tsdoc": "0.12.9", + "@types/node": "8.5.8" + } + }, + "@microsoft/ts-command-line": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@microsoft/ts-command-line/-/ts-command-line-4.2.5.tgz", + "integrity": "sha512-QyTfbfpx6o+1cnjx5GubqKSRMDxBBMXABSa8wmqRa/A1K99FEBZfLIO6GmaY0s7rNYEchfR1VcVS/hV2VW+6hw==", + "dev": true, + "requires": { + "@types/argparse": "1.0.33", + "@types/node": "8.5.8", + "argparse": "~1.0.9", + "colors": "~1.2.1" + } + }, + "@microsoft/tsdoc": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.9.tgz", + "integrity": "sha512-sDhulvuVk65eMppYOE6fr6mMI6RUqs53KUg9deYzNCBpP+2FhR0OFB5innEfdtSedk0LK+1Ppu6MxkfiNjS/Cw==", + "dev": true + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "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 } } }, @@ -1826,36 +2329,36 @@ } }, "@microsoft/sp-application-base": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-application-base/-/sp-application-base-1.8.0-plusbeta.tgz", - "integrity": "sha512-sCLDiSYjw8EafEYdCGtwogykBDkf+O/fbMjcwMWOrMrMScg3Y38H4j6K36M2mUOF9dTpHXFg6EQdwU98L9ZHgw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-application-base/-/sp-application-base-1.8.2.tgz", + "integrity": "sha512-kpsp4Hby6nIPVR9QnHWZqF5QMV7lsYHaIkgg/NDLv4BDaIvvR9YnPAPeXas0Z6I6ovIwzo/o5WbTelTac/K4rw==", "dev": true, "requires": { - "@microsoft/decorators": "1.8.0-plusbeta", - "@microsoft/sp-component-base": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-extension-base": "1.8.0-plusbeta", - "@microsoft/sp-http": "1.8.0-plusbeta", - "@microsoft/sp-loader": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-odata-types": "1.8.0-plusbeta", - "@microsoft/sp-page-context": "1.8.0-plusbeta", + "@microsoft/decorators": "1.8.2", + "@microsoft/sp-component-base": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-extension-base": "1.8.2", + "@microsoft/sp-http": "1.8.2", + "@microsoft/sp-loader": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-odata-types": "1.8.2", + "@microsoft/sp-page-context": "1.8.2", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1", "tslib": "~1.9.3" } }, "@microsoft/sp-build-common": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-common/-/sp-build-common-1.8.0-plusbeta.tgz", - "integrity": "sha512-KDPXx9y0eQk2bwwlyX6oD+2wjRl88ic7mFRqaVLaOgqP+UuplGAoaKfmSNFMKXS+KYv95pFx4R05pvKfsMGT/A==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-build-common/-/sp-build-common-1.8.2.tgz", + "integrity": "sha512-ta6slcsMf62pdt50D9J2bnDaYi5XQcwpadGr/cN6Nl2mXWpSF+MvL2cch54vcohnFRWDQ6QwmLuuKpqGtU4TUA==", "dev": true, "requires": { - "@microsoft/gulp-core-build": "3.9.7", - "@microsoft/gulp-core-build-typescript": "8.0.4", - "@microsoft/sp-tslint-rules": "1.8.0-plusbeta", + "@microsoft/gulp-core-build": "3.9.26", + "@microsoft/gulp-core-build-typescript": "8.1.5", + "@microsoft/sp-tslint-rules": "1.8.2", "@types/yargs": "0.0.35", "gulp": "~3.9.1", "semver": "~5.2.0", @@ -1877,21 +2380,21 @@ } }, "@microsoft/sp-build-core-tasks": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-core-tasks/-/sp-build-core-tasks-1.8.0-plusbeta.tgz", - "integrity": "sha512-WA04USz8glfDAQz/LSqWQAATui1UNdzhkrD2emYaIO/IFnkoEY3RMKrB9JgkFqWPA5609hSaWXoWDb7LKxV7/A==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-build-core-tasks/-/sp-build-core-tasks-1.8.2.tgz", + "integrity": "sha512-0rVg8N5XCbpM2Fefqx+5ZhiRm8l2xZLXctR0Z43aYXX5VKChVtuwv6lDf9xgDBvSudA5yOAT4dNDtEZ+XKitLA==", "dev": true, "requires": { - "@microsoft/gulp-core-build": "3.9.7", - "@microsoft/gulp-core-build-serve": "3.3.4", - "@microsoft/gulp-core-build-webpack": "3.4.71", + "@microsoft/gulp-core-build": "3.9.26", + "@microsoft/gulp-core-build-serve": "3.3.29", + "@microsoft/gulp-core-build-webpack": "3.4.96", "@microsoft/load-themed-styles": "1.8.62", - "@microsoft/loader-cased-file": "1.8.0-plusbeta", + "@microsoft/loader-cased-file": "1.8.2", "@microsoft/loader-load-themed-styles": "1.7.127", - "@microsoft/node-core-library": "3.10.0", + "@microsoft/node-core-library": "3.13.0", "@microsoft/rush-lib": "5.5.2", "@microsoft/set-webpack-public-path-plugin": "2.1.78", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", + "@microsoft/sp-module-interfaces": "1.8.2", "@types/finalhandler": "0.0.31", "@types/fs-extra": "5.0.1", "@types/glob": "5.0.30", @@ -1927,7 +2430,7 @@ "source-map-loader": "~0.2.4", "through2": "~2.0.1", "uuid": "~3.1.0", - "webpack": "~3.6.0", + "webpack": "~3.12.0", "webpack-stream": "~4.0.0", "xml": "~1.0.1" }, @@ -1938,44 +2441,6 @@ "integrity": "sha512-T9yplfIBWV6R5n0y9TuAnF8og7lUTFRqiOD/F8y3J4ziAkg3RD2Gih7p0TdTD4vmqbFJOpuuXMNMpERFFMgvvg==", "dev": true }, - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - }, - "dependencies": { - "@types/fs-extra": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", - "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, "@types/fs-extra": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz", @@ -2104,6 +2569,14 @@ "on-finished": "~2.3.0", "range-parser": "~1.0.3", "statuses": "~1.2.1" + }, + "dependencies": { + "statuses": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", + "dev": true + } } }, "serve-static": { @@ -2117,12 +2590,6 @@ "send": "0.13.2" } }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", - "dev": true - }, "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", @@ -2132,28 +2599,28 @@ } }, "@microsoft/sp-build-web": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-web/-/sp-build-web-1.8.0-plusbeta.tgz", - "integrity": "sha512-dyNcwcOIGZsT8hD/SPJ+xk8MEEwqvGumQx++l03LYbtzyBX7NhQqsqr51SPycmmjQBrrYaLo0I9C+cPQdnpqfw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-build-web/-/sp-build-web-1.8.2.tgz", + "integrity": "sha512-icdm8kHrVqTh9tWZHvxVTnCzPRpkduHi73Bm31ADoBYfquqD5Q1+pqU5t9GOYWMoKFFkrQt4rmkMXf4B5VbPyQ==", "dev": true, "requires": { - "@microsoft/gulp-core-build": "3.9.7", + "@microsoft/gulp-core-build": "3.9.26", "@microsoft/gulp-core-build-sass": "4.6.2", - "@microsoft/gulp-core-build-serve": "3.3.4", - "@microsoft/gulp-core-build-typescript": "8.0.4", - "@microsoft/gulp-core-build-webpack": "3.4.71", - "@microsoft/sp-build-common": "1.8.0-plusbeta", - "@microsoft/sp-build-core-tasks": "1.8.0-plusbeta", + "@microsoft/gulp-core-build-serve": "3.3.29", + "@microsoft/gulp-core-build-typescript": "8.1.5", + "@microsoft/gulp-core-build-webpack": "3.4.96", + "@microsoft/sp-build-common": "1.8.2", + "@microsoft/sp-build-core-tasks": "1.8.2", "@types/webpack": "4.4.0", "gulp": "~3.9.1", - "webpack": "~3.6.0", + "webpack": "~3.12.0", "yargs": "~4.6.0" } }, "@microsoft/sp-client-preview": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-client-preview/-/sp-client-preview-1.8.0-plusbeta.tgz", - "integrity": "sha512-HGc6AShDoafGHeTbfll/KzHkx4YjtsgOlsSvGRHKIfrMXdSfBc9hYEkXEYqTrWIAbTlNr4lpCG9BPPeSTqctlA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-client-preview/-/sp-client-preview-1.8.2.tgz", + "integrity": "sha512-4QEeRfYvDnrtdAShIHKMK3Dv5tHK34AqsRldV6lScb7WMNTOHQF74pPvWX+AO1vV4EqZYpyHukLdhLgZ/m+/xg==", "dev": true, "requires": { "@types/webpack-env": "1.13.1", @@ -2161,102 +2628,102 @@ } }, "@microsoft/sp-component-base": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-component-base/-/sp-component-base-1.8.0-plusbeta.tgz", - "integrity": "sha512-2AQNzkXtBH2HhV1+0Z9VW43mkqYUEngFaWB2qGSIXMArSehTnqEjmd/iyPAdDD4KGR3pc0mCtgvjSCaRCGnBJA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-component-base/-/sp-component-base-1.8.2.tgz", + "integrity": "sha512-8v7YOYgolyMuBzFrdMvLIalXTpBt4REvy//csoAsDudshjKI0trBDLcjaryjnshz33bzcLvaZArsfRXl3C4pEw==", "requires": { - "@microsoft/decorators": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-dynamic-data": "1.8.0-plusbeta", - "@microsoft/sp-http": "1.8.0-plusbeta", - "@microsoft/sp-loader": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-page-context": "1.8.0-plusbeta", + "@microsoft/decorators": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-dynamic-data": "1.8.2", + "@microsoft/sp-http": "1.8.2", + "@microsoft/sp-loader": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-page-context": "1.8.2", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1" } }, "@microsoft/sp-core-library": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-core-library/-/sp-core-library-1.8.0-plusbeta.tgz", - "integrity": "sha512-pgchHdDEt+h5SaFhp5k57/KjnCVDR/CNtq80T8GLpNxxCUJn7xTiYQG8Rd6WGTRnGsQ7uKv7trFYccMJDh9Rmw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-core-library/-/sp-core-library-1.8.2.tgz", + "integrity": "sha512-RW06oLu7sdMjq6vNtTFhvsQ7R7Ix5oJZqefC2J7p23yBWNNatmcwaBqM01SVdAsHd1coKwq3eU/0YMhzuaxKQw==", "requires": { - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1" } }, "@microsoft/sp-diagnostics": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-diagnostics/-/sp-diagnostics-1.8.0-plusbeta.tgz", - "integrity": "sha512-OotdoPSyTktMsi90D8cLv/zMDXWrupqpSx7C0eOgj1apNwOD2vhoEUGG6wKK1kIevEYObKsnr4+nNvGyqSJiOQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-diagnostics/-/sp-diagnostics-1.8.2.tgz", + "integrity": "sha512-l7qRUQduWG9waFgIP08E922PY+ea7xa2HZiEUDA6pdSOXbci2R9uo3fgL2Un5e63ZPKa5E1/0jtm1+xtgQkutA==", "requires": { - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta" + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2" } }, "@microsoft/sp-dynamic-data": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-dynamic-data/-/sp-dynamic-data-1.8.0-plusbeta.tgz", - "integrity": "sha512-fDLk3RVeex3bMOBJUgllEQBN1tG+1PqZFXDU3fHbjSPdJLchffsfJ8S7j5eFZxWi3FjmXSnuP+vJp2L0CVXSqA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-dynamic-data/-/sp-dynamic-data-1.8.2.tgz", + "integrity": "sha512-oC4220aH1ooU+VU9ADgnEeZ6YmWZfqvFaFG5vd2EL3jzTYiIxGLvBZOfDGKnsgmaDoWC7lXIYncoG0Os3rh/6w==", "requires": { - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", "@types/webpack-env": "1.13.1", "tslib": "~1.9.3" } }, "@microsoft/sp-extension-base": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-extension-base/-/sp-extension-base-1.8.0-plusbeta.tgz", - "integrity": "sha512-yQZNMid4Soy4Ht3Ni3F1OJOVr7pYZ5TV//ICHvDu04kPM3kOd4Yo61wBLHSX0qc0UIz8ifon306hcc9eUw38ag==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-extension-base/-/sp-extension-base-1.8.2.tgz", + "integrity": "sha512-kBoV6fIhM25ORZM5iA+HTiFX5jm5oLaue8nHnyYCFyATy14wSSG9i47OF3OxMsATY4qMaQ8W2YQIaWu3Sdnhvw==", "dev": true, "requires": { - "@microsoft/decorators": "1.8.0-plusbeta", - "@microsoft/sp-component-base": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-http": "1.8.0-plusbeta", - "@microsoft/sp-loader": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-page-context": "1.8.0-plusbeta", + "@microsoft/decorators": "1.8.2", + "@microsoft/sp-component-base": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-http": "1.8.2", + "@microsoft/sp-loader": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-page-context": "1.8.2", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1" } }, "@microsoft/sp-http": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http/-/sp-http-1.8.0-plusbeta.tgz", - "integrity": "sha512-qlGiYhXvkkpHhPBfuGiXIVyRJr7QJhGn+R8KEnAnCNV9o3WsEyENy7fARZSpfSSvq9Qcoo04MERwpHqGUrro5g==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-http/-/sp-http-1.8.2.tgz", + "integrity": "sha512-lTVQ6oI1yjc4M0yeyQHrivy+6SNp1q4xUQ3skBWY25b55zPIJHH3m/nOvHy2q44b9eWurdjq7bS1T19lrf7+LQ==", "requires": { "@microsoft/microsoft-graph-client": "~1.1.0", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", "@types/adal-angular": "1.0.1", "adal-angular": "1.0.16", "tslib": "~1.9.3" } }, "@microsoft/sp-loader": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-loader/-/sp-loader-1.8.0-plusbeta.tgz", - "integrity": "sha512-auZs961VIN/d8nlELKRaOQyRrScJvXAQHPcXSGoEL8hJ+0XrJaBf/0+3GY+l0LxJl0wxK+6PYEIHNoagDEOSSA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-loader/-/sp-loader-1.8.2.tgz", + "integrity": "sha512-Q1LKFV8jOqWV6451dpDFwyaMK2Hw4X+tcnX5hFqltL1O1r/rD2P7PJkLi8lpL8sqWJ9JhTDDY8+pWD1YYC6W6A==", "requires": { - "@microsoft/office-ui-fabric-react-bundle": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-dynamic-data": "1.8.0-plusbeta", - "@microsoft/sp-http": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-odata-types": "1.8.0-plusbeta", - "@microsoft/sp-page-context": "1.8.0-plusbeta", - "@microsoft/sp-polyfills": "1.8.0-plusbeta", + "@microsoft/office-ui-fabric-react-bundle": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-dynamic-data": "1.8.2", + "@microsoft/sp-http": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-odata-types": "1.8.2", + "@microsoft/sp-page-context": "1.8.2", + "@microsoft/sp-polyfills": "1.8.2", "@types/es6-promise": "0.0.33", "@types/node": "8.5.8", "@types/react": "16.4.2", @@ -2279,6 +2746,15 @@ "csstype": "^2.2.0" } }, + "@types/react-dom": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", + "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, "@uifabric/utilities": { "version": "6.29.4", "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.29.4.tgz", @@ -2293,9 +2769,9 @@ } }, "@microsoft/sp-lodash-subset": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-lodash-subset/-/sp-lodash-subset-1.8.0-plusbeta.tgz", - "integrity": "sha512-voePV5xTuJ8fg3s19nYS4p6fACgjISik9OsDLneSFs07GfGPc5ubCv1DT5JSzZK+e8Yf7uadAu1HSNJck4bzEQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-lodash-subset/-/sp-lodash-subset-1.8.2.tgz", + "integrity": "sha512-PTJuBAqqgxJ6xo8OQWS4sTPOyzgXzPyT60BTHyZJd8ozDoeo3lrTssmXgOaAygMUE+VglyoH7YRNAv+fg/tOgQ==", "requires": { "@types/lodash": "4.14.117", "@types/webpack-env": "1.13.1", @@ -2303,9 +2779,9 @@ } }, "@microsoft/sp-module-interfaces": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.8.0-plusbeta.tgz", - "integrity": "sha512-eywo2iKXZe5CIShW0TCUxh2f9IIOUwQi44If1pWqjdIZGBdVMEGcCuUVvvjHVnTKD20BEAMPovH1k3F6NxXNkA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.8.2.tgz", + "integrity": "sha512-vuwmEHZ1dP9Q5/irqpTJynkHmyxP2vfn05Bdehzd/ktlvf4CtUjgVIRXuOCPufGe5fvr96IMKLlhOzifS5sUBw==", "requires": { "@types/node": "8.5.8", "@types/z-schema": "3.16.31", @@ -2313,17 +2789,17 @@ } }, "@microsoft/sp-odata-types": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-odata-types/-/sp-odata-types-1.8.0-plusbeta.tgz", - "integrity": "sha512-tcygDbP7N1BVxzY5ROxSNdOUJqDwFMm9GAdepL6r0NcbxpVAEK87qABICSP96NZ2ByAUFl9uaHGBci6kZxL4Vw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-odata-types/-/sp-odata-types-1.8.2.tgz", + "integrity": "sha512-reRLI23NHfUwJAcQmTGl3z80ncqRlW6YSs8OoZFkIEsYsnuv7P+xwJnhH+4im8ywJ+3ESEOZj6ZtdrvUM9PcmA==", "requires": { "tslib": "~1.9.3" } }, "@microsoft/sp-office-ui-fabric-core": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-office-ui-fabric-core/-/sp-office-ui-fabric-core-1.8.0-plusbeta.tgz", - "integrity": "sha512-g25croinfugXXa6smys4DdyLhxvNxC1quta8mBybGGVUS55FApW5gJolkpHpZ+NB8HhAGe0eJ9slFyfl5uVt9A==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-office-ui-fabric-core/-/sp-office-ui-fabric-core-1.8.2.tgz", + "integrity": "sha512-+ICblmOfG66yx78CpJjRog+pseTmLsdwhbex+sjIhaxJrJS2VYgotjjO9efyTbK6I/7unkPi8KfIVHsd5j0xVA==", "requires": { "@types/webpack-env": "1.13.1", "office-ui-fabric-core": "9.6.1-fluent2", @@ -2331,24 +2807,24 @@ } }, "@microsoft/sp-page-context": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-page-context/-/sp-page-context-1.8.0-plusbeta.tgz", - "integrity": "sha512-W2+vWJs0Xxtu2CNlNN/epi1RUHbttiCix3hoGLc69n38JrSB0UHkwjuxCnhdervg6MfpiMdS7EhrKRAjYlPg0w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-page-context/-/sp-page-context-1.8.2.tgz", + "integrity": "sha512-TkVV/h5XEJUfGH/80y0YPD3jWEli8V3Z+Xsnub0ZjC5lU492J1JLFDeNMqIlG25vhIeL+V+Le9hxU9cTNW4hsA==", "requires": { - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-dynamic-data": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-odata-types": "1.8.0-plusbeta", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-dynamic-data": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-odata-types": "1.8.2", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1", "tslib": "~1.9.3" } }, "@microsoft/sp-polyfills": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-polyfills/-/sp-polyfills-1.8.0-plusbeta.tgz", - "integrity": "sha512-z0FDYSNvE3HbyplGBaa3s7YABuBVGHOV3scsyqlGbfsP6kAx1QLxccBIaXqkWMhTYhjuULQZLnKhkrL0c0/Qig==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-polyfills/-/sp-polyfills-1.8.2.tgz", + "integrity": "sha512-0Zl7ipeFws2PJYbtVQ0UMWzBExZuH5qQZuzf25KXmYsQd8tgMNBI3C1OCnTqbTYVx8LhdJtlf5y5D1mYLV4Raw==", "requires": { "@types/webpack-env": "1.13.1", "es6-collections": "0.5.6", @@ -2371,17 +2847,17 @@ } }, "@microsoft/sp-property-pane": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-property-pane/-/sp-property-pane-1.8.0-plusbeta.tgz", - "integrity": "sha512-WOlsO5QSXHGsn+rT0iUWpbG1jbD/xIJsRD9gtxWI1NX7DWdTO4zKFtcLSa2wmrkSY3hq37S7T1XLdM8fDUD2Nw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-property-pane/-/sp-property-pane-1.8.2.tgz", + "integrity": "sha512-XGHxlx4vyQIA9TeeYB38OQcHQ+ehn/SWVMS6HM+hJmjdCRWFjHIpCYamvuWyrL8hkOFLvvv7w8mPt23aLjSTag==", "requires": { - "@microsoft/decorators": "1.8.0-plusbeta", - "@microsoft/office-ui-fabric-react-bundle": "1.8.0-plusbeta", - "@microsoft/sp-component-base": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-dynamic-data": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", + "@microsoft/decorators": "1.8.2", + "@microsoft/office-ui-fabric-react-bundle": "1.8.2", + "@microsoft/sp-component-base": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-dynamic-data": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", "@types/es6-promise": "0.0.33", "@types/react": "16.4.2", "@types/react-dom": "16.0.5", @@ -2399,127 +2875,50 @@ "requires": { "csstype": "^2.2.0" } + }, + "@types/react-dom": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", + "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, + "@uifabric/utilities": { + "version": "6.29.4", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.29.4.tgz", + "integrity": "sha512-ESyMQfJrIGy1uM0HQApW0gvKpQCZBWLLoQTGZIq8Z4ZcTUEYN4Te+6oImtn0dxI1CIK6fbQNtLvZb5fX82+jMA==", + "requires": { + "@uifabric/merge-styles": ">=6.15.2 <7.0.0", + "@uifabric/set-version": ">=1.1.3 <2.0.0", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" } } }, "@microsoft/sp-tslint-rules": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-tslint-rules/-/sp-tslint-rules-1.8.0-plusbeta.tgz", - "integrity": "sha512-hg5bl5GtgAE4EU456L0BpqP49IoMXOx6cVMRpfYtRYgk+64AGSl3YDFaUGHdIwJ5Y/iC+Eg27P5eEg84nepv5w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-tslint-rules/-/sp-tslint-rules-1.8.2.tgz", + "integrity": "sha512-GYvZYBmrlfQpqVG5fELU2rMK+ucxzBA/aaZVzMhxEwMaSi/vgtiZ+vDb/SmigalPQ+JKP3DQJ0si3xkIiD3ayQ==", "dev": true, "requires": { - "@microsoft/rush-stack-compiler-3.2": "0.2.3", "tslint": "~5.9.1", "tslint-microsoft-contrib": "~5.2.1", - "tsutils": "~2.11.2", - "typescript": "~2.9.2" + "tsutils": "~2.11.2" }, "dependencies": { - "@microsoft/api-extractor": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.0.18.tgz", - "integrity": "sha512-puQisjyoYK1A0I8DqyBoLPV9noyFUlxTE3WsjhgJw//TrmegGHYmsRlD3rnHeXcKPM1F7sd/VKJXeXC3IPTf2Q==", - "dev": true, - "requires": { - "@microsoft/node-core-library": "3.10.0", - "@microsoft/ts-command-line": "4.2.3", - "@microsoft/tsdoc": "0.12.5", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "lodash": "~4.17.5", - "resolve": "1.8.1", - "typescript": "~3.1.6", - "z-schema": "~3.18.3" - }, - "dependencies": { - "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", - "dev": true - } - } - }, - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - } - }, - "@microsoft/rush-stack-compiler-3.2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-3.2/-/rush-stack-compiler-3.2-0.2.3.tgz", - "integrity": "sha512-DV3BON3G3SJJOQVINbZkP8za1YbNENpefM7mH5ZWixaPeIJRvVf1nrzU1r1rtyfr7SSIgjWiu+9Cm6CjpLuE5w==", - "dev": true, - "requires": { - "@microsoft/api-extractor": "7.0.18", - "@microsoft/node-core-library": "3.10.0", - "@types/node": "8.5.8", - "tslint": "~5.12.1", - "tslint-microsoft-contrib": "~5.2.1", - "typescript": "~3.2.4" - }, - "dependencies": { - "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true - } - } - }, - "@microsoft/tsdoc": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.5.tgz", - "integrity": "sha512-xEAyvLXo4Cter/b0EMCWUZTgXOfLOPJ/Xr52WdjVclPx9eDmNTGFtZl8Pn/nqSnZsQBNcHL0eHk/YyRyyXXpiQ==", - "dev": true - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, "tslint": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", @@ -2559,32 +2958,26 @@ "requires": { "tslib": "^1.7.1" } - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true } } }, "@microsoft/sp-webpart-base": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-base/-/sp-webpart-base-1.8.0-plusbeta.tgz", - "integrity": "sha512-RPCiz2GAcqPKaC66xN8kinaOv7APasNDaLd/y+kkGfekvB94AOYHLDNZE+nJSxlMgkmYEeJyhhxf1NvBhsX/oQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-base/-/sp-webpart-base-1.8.2.tgz", + "integrity": "sha512-6dj0pd1iNHsxyRG4+ORyItVd/lqbSuXi473kO2nuOzdHW+LqWwriXq5qaWq2tJ9eEJRu9J+ONqhU4rEL99GdMg==", "requires": { - "@microsoft/decorators": "1.8.0-plusbeta", + "@microsoft/decorators": "1.8.2", "@microsoft/load-themed-styles": "1.8.62", - "@microsoft/sp-component-base": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-diagnostics": "1.8.0-plusbeta", - "@microsoft/sp-dynamic-data": "1.8.0-plusbeta", - "@microsoft/sp-http": "1.8.0-plusbeta", - "@microsoft/sp-loader": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-page-context": "1.8.0-plusbeta", - "@microsoft/sp-property-pane": "1.8.0-plusbeta", + "@microsoft/sp-component-base": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-diagnostics": "1.8.2", + "@microsoft/sp-dynamic-data": "1.8.2", + "@microsoft/sp-http": "1.8.2", + "@microsoft/sp-loader": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-page-context": "1.8.2", + "@microsoft/sp-property-pane": "1.8.2", "@microsoft/teams-js": "1.4.1", "@types/es6-promise": "0.0.33", "@types/webpack-env": "1.13.1", @@ -2596,27 +2989,65 @@ "version": "1.8.62", "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.8.62.tgz", "integrity": "sha512-T9yplfIBWV6R5n0y9TuAnF8og7lUTFRqiOD/F8y3J4ziAkg3RD2Gih7p0TdTD4vmqbFJOpuuXMNMpERFFMgvvg==" + }, + "@types/react": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.2.tgz", + "integrity": "sha512-oVcVteCDNiVc/fkDjowRfAZQDEOR76j3CJ3FvwXNvfV6zJguhghy1lMgpAzYox+9AZsWch+JPV6Imml3wvIUeg==", + "requires": { + "csstype": "^2.2.0" + } + }, + "@types/react-dom": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", + "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, + "@uifabric/utilities": { + "version": "6.29.4", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.29.4.tgz", + "integrity": "sha512-ESyMQfJrIGy1uM0HQApW0gvKpQCZBWLLoQTGZIq8Z4ZcTUEYN4Te+6oImtn0dxI1CIK6fbQNtLvZb5fX82+jMA==", + "requires": { + "@uifabric/merge-styles": ">=6.15.2 <7.0.0", + "@uifabric/set-version": ">=1.1.3 <2.0.0", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" } } }, "@microsoft/sp-webpart-workbench": { - "version": "1.8.0-plusbeta", - "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-workbench/-/sp-webpart-workbench-1.8.0-plusbeta.tgz", - "integrity": "sha512-TpUxTaNa9j5UpKXSRK8n4/Vs+9qARv0SJ8osDMt/ZMtGtljZFNuafPUci2ldCOhIuuaQPL5hKoB8gURMjIIrwg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-workbench/-/sp-webpart-workbench-1.8.2.tgz", + "integrity": "sha512-+GKibJjmgdkguG2eKNIDIxyIj4BQpJtpROkAF4+r6Uoe1jOeDhdjtMEaVyZD26jITNXT9wK11ZmLkIsJOFR/sw==", "dev": true, "requires": { - "@microsoft/gulp-core-build-serve": "3.3.4", - "@microsoft/node-core-library": "3.10.0", - "@microsoft/office-ui-fabric-react-bundle": "1.8.0-plusbeta", - "@microsoft/sp-application-base": "1.8.0-plusbeta", - "@microsoft/sp-build-core-tasks": "1.8.0-plusbeta", - "@microsoft/sp-client-preview": "1.8.0-plusbeta", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-loader": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-property-pane": "1.8.0-plusbeta", - "@microsoft/sp-webpart-base": "1.8.0-plusbeta", + "@microsoft/gulp-core-build-serve": "3.3.29", + "@microsoft/node-core-library": "3.13.0", + "@microsoft/office-ui-fabric-react-bundle": "1.8.2", + "@microsoft/sp-application-base": "1.8.2", + "@microsoft/sp-build-core-tasks": "1.8.2", + "@microsoft/sp-client-preview": "1.8.2", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-loader": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-property-pane": "1.8.2", + "@microsoft/sp-webpart-base": "1.8.2", "@types/es6-promise": "0.0.33", "@types/fs-extra": "5.0.1", "@types/react": "16.4.2", @@ -2631,44 +3062,6 @@ "tslib": "~1.9.3" }, "dependencies": { - "@microsoft/node-core-library": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@microsoft/node-core-library/-/node-core-library-3.10.0.tgz", - "integrity": "sha512-1SbU+XNYAabhV9noGXHtsUVPc5ELV+oEuJQtZQoCncbOd6WAMeTgB1xFwh96hmdEXyKQyML/pnByiKocmh/nbQ==", - "dev": true, - "requires": { - "@types/fs-extra": "5.0.4", - "@types/jju": "~1.4.0", - "@types/node": "8.5.8", - "@types/z-schema": "3.16.31", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "jju": "~1.4.0", - "z-schema": "~3.18.3" - }, - "dependencies": { - "@types/fs-extra": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", - "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, "@types/fs-extra": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz", @@ -2687,6 +3080,16 @@ "csstype": "^2.2.0" } }, + "@types/react-dom": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", + "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, "fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", @@ -2730,6 +3133,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/@microsoft/ts-command-line/-/ts-command-line-4.2.3.tgz", "integrity": "sha512-SIs4q7RcG7efBbh5Ffrf6V4jVLxWihD4NDRY3+gPiOG8CYawBzE22tTEloZ1yj/FBvBZQkQ0GYwXoPhn6ElYXA==", + "dev": true, "requires": { "@types/argparse": "1.0.33", "@types/node": "8.5.8", @@ -2738,9 +3142,9 @@ } }, "@microsoft/tsdoc": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.4.tgz", - "integrity": "sha512-nQZVQg3fXygj+9JT/FSPZOz3vqAIVAAR3ZuAuUdU4DSM/ubJq5lbl1hpLtl+REFmEq1rkvDmmPoJAbSoqjcmZQ==", + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.8.tgz", + "integrity": "sha512-0smzAmVIUCsssAqDSPn9AfOPKUobq2WXMygbzC5JNswAJOs4uJK6DTZgfnHC8QLE2q374sPNwWU5D5LuoAJQSA==", "dev": true }, "@mrmlnc/readdir-enhanced": { @@ -3072,9 +3476,9 @@ }, "dependencies": { "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==", + "version": "10.14.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.8.tgz", + "integrity": "sha512-I4+DbJEhLEg4/vIy/2gkWDvXBOOtPKV9EnLhYjMoqxcRW+TTZtUftkHktz/a8suoD5mUL7m6ReLrkPvSsCQQmw==", "dev": true }, "normalize-path": { @@ -3097,9 +3501,9 @@ }, "dependencies": { "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==", + "version": "10.14.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.8.tgz", + "integrity": "sha512-I4+DbJEhLEg4/vIy/2gkWDvXBOOtPKV9EnLhYjMoqxcRW+TTZtUftkHktz/a8suoD5mUL7m6ReLrkPvSsCQQmw==", "dev": true } } @@ -3130,7 +3534,8 @@ "@types/argparse": { "version": "1.0.33", "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.33.tgz", - "integrity": "sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ==" + "integrity": "sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ==", + "dev": true }, "@types/assertion-error": { "version": "1.0.30", @@ -3225,9 +3630,9 @@ "dev": true }, "@types/express-serve-static-core": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.2.tgz", - "integrity": "sha512-qgc8tjnDrc789rAQed8NoiFLV5VGcItA4yWNFphqGU0RcuuQngD00g3LHhWIK3HQ2XeDgVCmlNPDlqi3fWBHnQ==", + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz", + "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==", "dev": true, "requires": { "@types/node": "*", @@ -3247,6 +3652,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", + "dev": true, "requires": { "@types/node": "*" } @@ -3308,7 +3714,8 @@ "@types/jju": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@types/jju/-/jju-1.4.1.tgz", - "integrity": "sha512-LFt+YA7Lv2IZROMwokZKiPNORAV5N3huMs3IKnzlE430HWhWYZ8b+78HiwJXJJP1V2IEjinyJURuRJfGoaFSIA==" + "integrity": "sha512-LFt+YA7Lv2IZROMwokZKiPNORAV5N3huMs3IKnzlE430HWhWYZ8b+78HiwJXJJP1V2IEjinyJURuRJfGoaFSIA==", + "dev": true }, "@types/jquery": { "version": "3.3.29", @@ -3429,11 +3836,10 @@ } }, "@types/react-dom": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", - "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.0.tgz", + "integrity": "sha512-Jp4ufcEEjVJEB0OHq2MCZcE1u3KYUKO6WnSuiU/tZeYeiZxUoQavfa/TZeiIT+1XoN6l0lQVNM30VINZFDeolQ==", "requires": { - "@types/node": "*", "@types/react": "*" } }, @@ -3746,6 +4152,15 @@ "@types/webpack": "*" } }, + "@types/xml2js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha512-O6Xgai01b9PB3IGA0lRIp1Ex3JBcxGDhdO0n3NIIpCyDOAjxcIGQFmkvgJpP8anTrthxOUQjBfLdRRi0Zn/TXA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-0.0.34.tgz", @@ -3757,6 +4172,202 @@ "resolved": "https://registry.npmjs.org/@types/z-schema/-/z-schema-3.16.31.tgz", "integrity": "sha1-LrHQCl5Ow/pYx2r94S4YK2bcXBw=" }, + "@uifabric/fluent-theme": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@uifabric/fluent-theme/-/fluent-theme-0.16.7.tgz", + "integrity": "sha512-b38g0xl/+a6pjQx5lVOQRsAT6OlBXXel3a95mQ2Xa8dac77tiZv/x6QDLzNqN36L5O0HdQPRrqyPZ2o94xRvYQ==", + "requires": { + "@uifabric/merge-styles": "^6.17.0", + "@uifabric/set-version": "^1.1.3", + "@uifabric/styling": "^6.47.0", + "@uifabric/variants": "^6.14.1", + "office-ui-fabric-react": "^6.174.0", + "tslib": "^1.7.1" + }, + "dependencies": { + "@uifabric/foundation": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-0.7.6.tgz", + "integrity": "sha512-3CGViA4aCjnCq3P+9S/HuuI44mGOgZVA9DDOhiht1JLk3z2NiXcmdGoEoJUj84Wck3yT0n34tD8AL1PreuFHMQ==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "@uifabric/styling": "^6.47.6", + "@uifabric/utilities": "^6.38.3", + "tslib": "^1.7.1" + }, + "dependencies": { + "@uifabric/merge-styles": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-6.18.0.tgz", + "integrity": "sha512-ja2jyFfDiiDe9/Fa2cqSjZmr4yGcVIuJ6E9fWSNutjn49xs+apkIn2xDSF15zuGwFXKcibrwhdRM1vnLz8NAZg==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "tslib": "^1.7.1" + } + }, + "@uifabric/styling": { + "version": "6.48.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-6.48.0.tgz", + "integrity": "sha512-nNL703X5IS0hAmt+j9pjFv9R2v9ayO7vfGM0HNuHsavpkFX6M9xwqPZn3d707UuKTsU6NK3nMnJm/JT1ldA+EA==", + "requires": { + "@microsoft/load-themed-styles": "^1.7.13", + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "@uifabric/utilities": "^6.40.0", + "tslib": "^1.7.1" + } + }, + "@uifabric/utilities": { + "version": "6.40.1", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.40.1.tgz", + "integrity": "sha512-JXUxRzzr22xlmQM8+V3Co7azglZTUYOg6FggTrbDhJqvfMxHm1IXFgYh0C+X9ttn2AinWX/s9zsVhxLOJzyLVg==", + "requires": { + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + } + } + }, + "@uifabric/icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-6.5.2.tgz", + "integrity": "sha512-YgKNXqBRX/MJeqoPwN2n2IHyCckAgVeFKFfmO4PX6P8lcR2CJIDh967y4QybfTnO752QYh0fN07zOG7bOa9/uw==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "@uifabric/styling": "^6.47.6", + "tslib": "^1.7.1" + }, + "dependencies": { + "@uifabric/merge-styles": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-6.18.0.tgz", + "integrity": "sha512-ja2jyFfDiiDe9/Fa2cqSjZmr4yGcVIuJ6E9fWSNutjn49xs+apkIn2xDSF15zuGwFXKcibrwhdRM1vnLz8NAZg==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "tslib": "^1.7.1" + } + }, + "@uifabric/styling": { + "version": "6.48.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-6.48.0.tgz", + "integrity": "sha512-nNL703X5IS0hAmt+j9pjFv9R2v9ayO7vfGM0HNuHsavpkFX6M9xwqPZn3d707UuKTsU6NK3nMnJm/JT1ldA+EA==", + "requires": { + "@microsoft/load-themed-styles": "^1.7.13", + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "@uifabric/utilities": "^6.40.0", + "tslib": "^1.7.1" + } + }, + "@uifabric/utilities": { + "version": "6.40.1", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.40.1.tgz", + "integrity": "sha512-JXUxRzzr22xlmQM8+V3Co7azglZTUYOg6FggTrbDhJqvfMxHm1IXFgYh0C+X9ttn2AinWX/s9zsVhxLOJzyLVg==", + "requires": { + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + } + } + }, + "@uifabric/merge-styles": { + "version": "6.17.1", + "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-6.17.1.tgz", + "integrity": "sha512-3stMnzsOTjqmEqka2V1MnfxlhDuyVyqQ8c9CCNReHCywau5pdtmFX+8l7jNhnP5/fK954WgrKKnAp/0WlusCBg==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "tslib": "^1.7.1" + } + }, + "@uifabric/styling": { + "version": "6.47.3", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-6.47.3.tgz", + "integrity": "sha512-foah0s/C1FEwApKUcWUhivIZz+H5A7auAyQMjOwOVwwXuDFnFZg+MiN8TqjnlrZUmg/x4ZO2oCk5uCCI2JCz/A==", + "requires": { + "@microsoft/load-themed-styles": "^1.7.13", + "@uifabric/merge-styles": "^6.17.1", + "@uifabric/set-version": "^1.1.3", + "@uifabric/utilities": "^6.38.1", + "tslib": "^1.7.1" + } + }, + "@uifabric/utilities": { + "version": "6.38.1", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.38.1.tgz", + "integrity": "sha512-+XYisDDfVpGuujK6GaREqYwAmd7CUTDc1/ElYHPZvm5CgXLoPSM8SWKmgQTUVUSzpwd8oIynTCWtW7PgjZGCUQ==", + "requires": { + "@uifabric/merge-styles": "^6.17.1", + "@uifabric/set-version": "^1.1.3", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + }, + "@uifabric/variants": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/@uifabric/variants/-/variants-6.14.1.tgz", + "integrity": "sha512-BrqVwd7FWdCFlGqN/2CpACkRU1aet6Vw+4zSXqDVoYUOGyDfZNU2kcP+hE/NJwWBn2S6V0fYauMp+S72E/OgwA==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "office-ui-fabric-react": "^6.164.1", + "tslib": "^1.7.1" + } + }, + "office-ui-fabric-react": { + "version": "6.189.2", + "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-6.189.2.tgz", + "integrity": "sha512-1Y111Ip78u7aCbmyRTucRldY4lYwRPkxhFL+y1rgQC4TivB2FmoHN6eSA1nAA59Ix4k2etM0UCzh7MdC1SbP5Q==", + "requires": { + "@microsoft/load-themed-styles": "^1.7.13", + "@uifabric/foundation": "^0.7.6", + "@uifabric/icons": "^6.5.2", + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "@uifabric/styling": "^6.48.0", + "@uifabric/utilities": "^6.40.1", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + }, + "dependencies": { + "@uifabric/merge-styles": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-6.18.0.tgz", + "integrity": "sha512-ja2jyFfDiiDe9/Fa2cqSjZmr4yGcVIuJ6E9fWSNutjn49xs+apkIn2xDSF15zuGwFXKcibrwhdRM1vnLz8NAZg==", + "requires": { + "@uifabric/set-version": "^1.1.3", + "tslib": "^1.7.1" + } + }, + "@uifabric/styling": { + "version": "6.48.0", + "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-6.48.0.tgz", + "integrity": "sha512-nNL703X5IS0hAmt+j9pjFv9R2v9ayO7vfGM0HNuHsavpkFX6M9xwqPZn3d707UuKTsU6NK3nMnJm/JT1ldA+EA==", + "requires": { + "@microsoft/load-themed-styles": "^1.7.13", + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "@uifabric/utilities": "^6.40.0", + "tslib": "^1.7.1" + } + }, + "@uifabric/utilities": { + "version": "6.40.1", + "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-6.40.1.tgz", + "integrity": "sha512-JXUxRzzr22xlmQM8+V3Co7azglZTUYOg6FggTrbDhJqvfMxHm1IXFgYh0C+X9ttn2AinWX/s9zsVhxLOJzyLVg==", + "requires": { + "@uifabric/merge-styles": "^6.18.0", + "@uifabric/set-version": "^1.1.3", + "prop-types": "^15.5.10", + "tslib": "^1.7.1" + } + } + } + } + } + }, "@uifabric/foundation": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-0.7.4.tgz", @@ -3874,8 +4485,7 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.5", @@ -3940,9 +4550,9 @@ "integrity": "sha1-4rwxvHEqr/ugU6pN1GvITrXSCQ8=" }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -3970,7 +4580,6 @@ "version": "5.2.5", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.5.tgz", "integrity": "sha1-tjcjTT4mdetfefxlIkKoU6SMtJ8=", - "dev": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -3981,14 +4590,12 @@ "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" } } }, @@ -4029,8 +4636,7 @@ "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-colors": { "version": "1.1.0", @@ -4041,6 +4647,14 @@ "ansi-wrap": "^0.1.0" } }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -4051,7 +4665,14 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", "requires": { "ansi-wrap": "0.1.0" } @@ -4069,8 +4690,7 @@ "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" }, "any-promise": { "version": "1.3.0", @@ -4100,8 +4720,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "archy": { "version": "1.0.0", @@ -4113,7 +4732,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -4122,14 +4740,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4144,7 +4760,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -4155,6 +4770,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -4168,8 +4784,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", @@ -4198,8 +4813,7 @@ "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-flatten": { "version": "1.1.1", @@ -4270,7 +4884,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -4287,11 +4900,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -4315,8 +4929,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assign-symbols": { "version": "1.0.0", @@ -4354,16 +4967,15 @@ } }, "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, "async-limiter": { "version": "1.0.0", @@ -4374,8 +4986,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -4400,14 +5011,12 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "azure-storage": { "version": "2.8.3", @@ -4470,11 +5079,26 @@ "util-deprecate": "~1.0.1" } }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, "validator": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==", "dev": true + }, + "xml2js": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", + "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", + "dev": true, + "requires": { + "sax": "0.5.x" + } } } }, @@ -4482,6 +5106,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", @@ -4492,6 +5117,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -4503,7 +5129,8 @@ "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true } } }, @@ -4768,7 +5395,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -4819,7 +5445,6 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, "requires": { "inherits": "~2.0.0" } @@ -5084,7 +5709,8 @@ "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", @@ -5171,7 +5797,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -5180,8 +5805,7 @@ "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" } } }, @@ -5210,9 +5834,9 @@ } }, "caniuse-db": { - "version": "1.0.30000957", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000957.tgz", - "integrity": "sha512-13rVZZO/75kPKJhJsi86lPUme7zlvfGDnnvSYx3TA+kYQxLtGywth5+81pyVZDjUfYyzatwA/yjv6DNsh66gmQ==", + "version": "1.0.30000974", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000974.tgz", + "integrity": "sha512-zeXkn1hbjMvXdadcyUELZnGu7OjlW3HK0956DWczM7ZJqGV4jFaPi8CidB8QiAj5xl5O9I+f7j9F0AFmXmGTpg==", "dev": true }, "caniuse-lite": { @@ -5233,8 +5857,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "ccount": { "version": "1.0.3", @@ -5256,6 +5879,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5266,6 +5890,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -5274,6 +5899,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -5281,12 +5907,14 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -5381,9 +6009,9 @@ } }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -5606,9 +6234,9 @@ "dev": true }, "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -5657,8 +6285,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "coa": { "version": "1.0.4", @@ -5672,8 +6299,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collapse-white-space": { "version": "1.0.4", @@ -5737,8 +6363,7 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, "colormin": { "version": "1.1.2", @@ -5791,13 +6416,13 @@ "colors": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "dev": true }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -5819,36 +6444,42 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" }, "dependencies": { "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } @@ -5871,8 +6502,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "constants-browserify": { "version": "1.0.0", @@ -5928,8 +6558,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { "version": "5.2.0", @@ -6462,7 +7091,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, "requires": { "array-find-index": "^1.0.1" } @@ -6480,7 +7108,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -6548,9 +7175,9 @@ "dev": true }, "deasync": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.14.tgz", - "integrity": "sha512-wN8sIuEqIwyQh72AG7oY6YQODCxIp1eXzEZlZznBuwDF8Q03Tdy9QNp1BNZXeadXoklNrw+Ip1fch+KXo/+ASw==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.15.tgz", + "integrity": "sha512-pxMaCYu8cQIbGkA4Y1R0PLSooPIpH1WgFBLeJ+zLxQgHfkZG86ViJSmZmONSjZJ/R3NjwkMcIWZAzpLB2G9/CA==", "dev": true, "requires": { "bindings": "~1.2.1", @@ -6575,8 +7202,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decamelize-keys": { "version": "1.1.0", @@ -6718,14 +7344,12 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.2", @@ -6789,7 +7413,8 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", @@ -6999,7 +7624,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -7178,7 +7802,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" }, @@ -7186,8 +7809,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" } } }, @@ -7217,9 +7839,9 @@ } }, "es5-ext": { - "version": "0.10.49", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", - "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", "dev": true, "requires": { "es6-iterator": "~2.0.3", @@ -7305,14 +7927,14 @@ } }, "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, "requires": { "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, @@ -7370,7 +7992,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esrecurse": { "version": "4.2.1", @@ -7390,7 +8013,8 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -7660,8 +8284,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -7763,14 +8386,12 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, "requires": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -7781,8 +8402,7 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { "version": "2.2.6", @@ -7839,8 +8459,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -8108,8 +8727,7 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-stream": { "version": "0.0.4", @@ -8121,7 +8739,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -8159,6 +8776,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -8166,9 +8784,9 @@ } }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -8180,14 +8798,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -8265,12 +8883,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -8441,24 +9059,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -8486,13 +9104,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -8631,7 +9249,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -8731,7 +9349,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -8760,7 +9377,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -8776,7 +9392,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8785,7 +9400,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8815,14 +9429,12 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" }, "get-stream": { "version": "3.0.0", @@ -8840,7 +9452,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -9279,13 +9890,15 @@ "on-finished": "~2.3.0", "range-parser": "~1.0.3", "statuses": "~1.2.1" + }, + "dependencies": { + "statuses": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", + "dev": true + } } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", - "dev": true } } }, @@ -9331,6 +9944,75 @@ "through2": "^2.0.1" } }, + "gulp-plumber": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz", + "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==", + "requires": { + "chalk": "^1.1.3", + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2", + "through2": "^2.0.3" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + } + } + } + }, "gulp-replace": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.5.4.tgz", @@ -9534,14 +10216,12 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -9551,7 +10231,6 @@ "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -9587,7 +10266,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-gulplog": { "version": "0.1.0", @@ -9607,8 +10287,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", @@ -9707,8 +10386,7 @@ "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "html-comment-regex": { "version": "1.1.2", @@ -9882,7 +10560,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -9915,9 +10592,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -10034,14 +10711,12 @@ "in-publish": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, "requires": { "repeating": "^2.0.0" } @@ -10157,8 +10832,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ipaddr.js": { "version": "1.8.0", @@ -10353,7 +11027,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -10361,8 +11034,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-generator-fn": { "version": "1.0.0", @@ -10542,8 +11214,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unc-path": { "version": "1.0.0", @@ -10557,8 +11228,7 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-whitespace-character": { "version": "1.0.2", @@ -10593,8 +11263,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -10614,8 +11283,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { "version": "1.3.7", @@ -11856,7 +12524,8 @@ "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true }, "jquery": { "version": "3.4.0", @@ -11866,8 +12535,7 @@ "js-base64": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" }, "js-tokens": { "version": "4.0.0", @@ -11878,6 +12546,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -11886,8 +12555,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdom": { "version": "11.11.0", @@ -11981,20 +12649,17 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, "requires": { "jsonify": "~0.0.0" } @@ -12002,8 +12667,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { "version": "0.5.1", @@ -12015,6 +12679,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -12022,8 +12687,7 @@ "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jsonparse": { "version": "1.2.0", @@ -12035,7 +12699,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -12106,7 +12769,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -12167,7 +12829,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -12180,7 +12841,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -12289,8 +12949,7 @@ "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" }, "lodash.camelcase": { "version": "4.3.0", @@ -12307,8 +12966,7 @@ "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.escape": { "version": "3.2.0", @@ -12392,8 +13050,7 @@ "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==" }, "lodash.rest": { "version": "4.0.5", @@ -12485,7 +13142,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -12530,8 +13186,7 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "map-stream": { "version": "0.0.7", @@ -12664,7 +13319,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, "requires": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -12783,14 +13437,12 @@ "mime-db": { "version": "1.38.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" }, "mime-types": { "version": "2.1.22", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "dev": true, "requires": { "mime-db": "~1.38.0" } @@ -12824,8 +13476,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minimist-options": { "version": "3.0.2", @@ -12889,7 +13540,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -12897,8 +13547,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -12916,14 +13565,6 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, - "moment-timezone": { - "version": "0.5.25", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.25.tgz", - "integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==", - "requires": { - "moment": ">= 2.9.0" - } - }, "moo": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", @@ -12965,8 +13606,7 @@ "nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" }, "nanomatch": { "version": "1.2.13", @@ -13076,7 +13716,6 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, "requires": { "fstream": "^1.0.0", "glob": "^7.0.3", @@ -13095,8 +13734,7 @@ "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" } } }, @@ -13211,7 +13849,6 @@ "version": "4.9.3", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", - "dev": true, "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -13238,7 +13875,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -13251,7 +13887,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -13261,7 +13896,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, "requires": { "globule": "^1.0.0" } @@ -13270,7 +13904,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, "requires": { "glob": "~7.1.1", "lodash": "~4.17.10", @@ -13281,7 +13914,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, "requires": { "ajv": "^5.1.0", "har-schema": "^2.0.0" @@ -13290,14 +13922,12 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -13306,20 +13936,17 @@ "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "request": { "version": "2.87.0", "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.6.0", @@ -13347,7 +13974,6 @@ "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, "requires": { "punycode": "^1.4.1" } @@ -13367,7 +13993,6 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, "requires": { "abbrev": "1" } @@ -13376,7 +14001,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -13388,7 +14012,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -13453,7 +14076,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -13479,8 +14101,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { "version": "2.1.3", @@ -13491,8 +14112,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -13815,8 +14435,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "2.1.0", @@ -13832,14 +14451,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -13977,7 +14594,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -13985,8 +14601,7 @@ "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" }, "parse-passwd": { "version": "1.0.0", @@ -14077,7 +14692,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -14109,8 +14723,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pidof": { "version": "1.0.2", @@ -14121,20 +14734,17 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -16213,8 +16823,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise": { "version": "7.3.1", @@ -16293,14 +16902,12 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { "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 + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, "public-encrypt": { "version": "4.0.3", @@ -16319,8 +16926,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -16331,8 +16937,7 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "4.3.4", @@ -16646,7 +17251,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -16657,7 +17261,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -16667,7 +17270,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -16677,7 +17279,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -16793,7 +17394,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -16990,7 +17590,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "^1.0.0" } @@ -17048,7 +17647,6 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -17075,14 +17673,12 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -17121,14 +17717,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "requirejs": { "version": "2.1.20", @@ -17139,6 +17733,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, "requires": { "path-parse": "^1.0.5" } @@ -17203,7 +17798,6 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -17244,9 +17838,9 @@ } }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17255,8 +17849,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -17293,7 +17886,6 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", @@ -17304,14 +17896,12 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -17322,7 +17912,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -17331,7 +17920,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, "requires": { "lcid": "^1.0.0" } @@ -17340,7 +17928,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -17350,14 +17937,12 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, "yargs": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -17378,18 +17963,21 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, "requires": { "camelcase": "^3.0.0" } } } }, + "sass-test.sh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sass-test.sh/-/sass-test.sh-1.4.0.tgz", + "integrity": "sha1-Jp1CXqVbQL6RaPTKpJLwK/c/6uY=" + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { "version": "0.12.0", @@ -17428,7 +18016,6 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, "requires": { "js-base64": "^2.1.8", "source-map": "^0.4.2" @@ -17438,7 +18025,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -17507,8 +18093,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.0", @@ -17584,8 +18169,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-swizzle": { "version": "0.2.2", @@ -17848,7 +18432,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -17857,14 +18440,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -17873,8 +18454,7 @@ "spdx-license-ids": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "specificity": { "version": "0.4.1", @@ -17882,6 +18462,16 @@ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true }, + "spfx-uifabric-themes": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/spfx-uifabric-themes/-/spfx-uifabric-themes-0.6.0.tgz", + "integrity": "sha512-tcFLUaP1LWL1g5ni/U0LcJWfAGihD7uPvUJCHq6KycsS/GlLmmI06LpMVXlWk7OJdpcsrOPsO1fYuIWtqO27PA==", + "requires": { + "gulp-plumber": "^1.2.0", + "node-sass": "^4.9.3", + "sass-test.sh": "^1.4.0" + } + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -17912,13 +18502,13 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -17974,7 +18564,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, "requires": { "readable-stream": "^2.0.1" }, @@ -17982,14 +18571,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18004,7 +18591,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -18169,7 +18755,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -18178,14 +18763,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -18238,7 +18821,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, "requires": { "get-stdin": "^4.0.1" } @@ -18811,7 +19393,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", @@ -18974,7 +19555,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -18983,14 +19563,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19005,7 +19583,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -19030,8 +19607,7 @@ "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, "timers-browserify": { "version": "2.0.10", @@ -19239,8 +19815,7 @@ "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "trim-right": { "version": "1.0.1", @@ -19264,7 +19839,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, "requires": { "glob": "^7.1.2" } @@ -19312,9 +19886,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", + "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -19335,6 +19909,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", + "dev": true, "requires": { "tsutils": "^2.27.2 <2.29.0" }, @@ -19343,6 +19918,7 @@ "version": "2.28.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", + "dev": true, "requires": { "tslib": "^1.8.1" } @@ -19353,6 +19929,7 @@ "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, "requires": { "tslib": "^1.8.1" } @@ -19367,7 +19944,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -19375,8 +19951,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -19654,7 +20229,8 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "unpipe": { "version": "1.0.0", @@ -19724,7 +20300,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -19777,8 +20352,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -19799,8 +20373,7 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8flags": { "version": "2.1.1", @@ -19815,7 +20388,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -19842,16 +20414,15 @@ "dev": true }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", "dev": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -20060,15 +20631,15 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "webpack": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.6.0.tgz", - "integrity": "sha512-OsHT3D0W0KmPPh60tC7asNnOmST6bKTiR90UyEdT9QYoaJ4OYN4Gg7WK1k3VxHK07ZoiYWPsKvlS/gAjwL/vRA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", "dev": true, "requires": { "acorn": "^5.0.0", "acorn-dynamic-import": "^2.0.0", - "ajv": "^5.1.5", - "ajv-keywords": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", "async": "^2.1.2", "enhanced-resolve": "^3.4.0", "escope": "^3.6.0", @@ -20089,11 +20660,17 @@ "yargs": "^8.0.2" }, "dependencies": { - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, "big.js": { "version": "5.2.2", @@ -20396,7 +20973,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -20411,7 +20987,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -20432,7 +21007,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -20442,7 +21016,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -20451,7 +21024,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -20514,19 +21086,18 @@ "dev": true }, "xml2js": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", - "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", - "dev": true, + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "requires": { - "sax": "0.5.x" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" }, "dependencies": { - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" } } }, @@ -20539,20 +21110,17 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "4.6.0", diff --git a/samples/react-calendar/package.json b/samples/react-calendar/package.json index ad8cec1b8..7a5080875 100644 --- a/samples/react-calendar/package.json +++ b/samples/react-calendar/package.json @@ -1,6 +1,6 @@ { "name": "react-calendar", - "version": "1.0.0", + "version": "1.0.1", "private": true, "engines": { "node": ">=0.10.0" @@ -14,12 +14,11 @@ "test:watch": "./node_modules/.bin/jest --config ./config/jest.config.json --watchAll" }, "dependencies": { - "@microsoft/rush-stack-compiler-3.2": "^0.3.6", - "@microsoft/sp-core-library": "1.8.0-plusbeta", - "@microsoft/sp-lodash-subset": "1.8.0-plusbeta", - "@microsoft/sp-office-ui-fabric-core": "1.8.0-plusbeta", - "@microsoft/sp-property-pane": "1.8.0-plusbeta", - "@microsoft/sp-webpart-base": "1.8.0-plusbeta", + "@microsoft/sp-core-library": "1.8.2", + "@microsoft/sp-lodash-subset": "1.8.2", + "@microsoft/sp-office-ui-fabric-core": "1.8.2", + "@microsoft/sp-property-pane": "1.8.2", + "@microsoft/sp-webpart-base": "1.8.2", "@pnp/pnpjs": "^1.3.0", "@pnp/spfx-controls-react": "1.12.0", "@pnp/spfx-property-controls": "1.14.1", @@ -29,32 +28,37 @@ "@types/jquery": "^3.3.29", "@types/react": "16.7.22", "@types/react-big-calendar": "^0.20.13", - "@types/react-dom": "16.0.5", + "@types/react-dom": "16.8.0", "@types/webpack-env": "1.13.1", + "@uifabric/fluent-theme": "^0.16.7", "draft-js": "^0.10.5", "draftjs-to-html": "^0.8.4", "globalize": "^1.4.2", "immutable": "^4.0.0-rc.12", "jquery": "^3.3.1", "moment": "^2.24.0", - "moment-timezone": "^0.5.25", + "office-ui-fabric-react": "6.143.0", "react": "16.7.0", "react-big-calendar": "^0.20.4", "react-dom": "16.7.0", "react-draft-wysiwyg": "^1.13.2", - "typescript": "^3.2.4" + "spfx-uifabric-themes": "^0.6.0", + "typescript": "^3.2.4", + "xml2js": "^0.4.19" }, "resolutions": { - "@types/react": "16.4.2" + "@types/react": "16.7.22" }, "devDependencies": { - "@microsoft/rush-stack-compiler-2.7": "0.4.0", - "@microsoft/sp-build-web": "1.8.0-plusbeta", - "@microsoft/sp-module-interfaces": "1.8.0-plusbeta", - "@microsoft/sp-tslint-rules": "1.8.0-plusbeta", - "@microsoft/sp-webpart-workbench": "1.8.0-plusbeta", + "@microsoft/rush-stack-compiler-2.9": "0.7.7", + "@microsoft/rush-stack-compiler-3.2": "0.3.17", + "@microsoft/sp-build-web": "1.8.2", + "@microsoft/sp-module-interfaces": "1.8.2", + "@microsoft/sp-tslint-rules": "1.8.2", + "@microsoft/sp-webpart-workbench": "1.8.2", "@types/chai": "3.4.34", "@types/mocha": "2.2.38", + "@types/xml2js": "^0.4.4", "@voitanos/jest-preset-spfx-react16": "^1.1.0", "ajv": "~5.2.2", "gulp": "~3.9.1", diff --git a/samples/react-calendar/src/controls/Event/Event.module.scss b/samples/react-calendar/src/controls/Event/Event.module.scss index 6da5fdc38..2c7248288 100644 --- a/samples/react-calendar/src/controls/Event/Event.module.scss +++ b/samples/react-calendar/src/controls/Event/Event.module.scss @@ -15,7 +15,6 @@ .description:hover { border-color: rgb( 51, 51, 51 ); } - .calendar { .container { max-width: 100%; @@ -23,13 +22,11 @@ height: 600px; margin: 0px auto; } - .eventTitle { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } - .row { @include ms-Grid-row; @include ms-fontColor-white; @@ -37,7 +34,6 @@ padding: 20px; border-style: solid; } - .column { @include ms-Grid-col; @include ms-lg10; @@ -45,22 +41,18 @@ @include ms-xlPush2; @include ms-lgPush1; } - .title { @include ms-font-xl; @include ms-fontColor-white; } - .subTitle { @include ms-font-l; @include ms-fontColor-white; } - .description { @include ms-font-l; @include ms-fontColor-white; } - .button { // Our button text-decoration: none; @@ -84,6 +76,7 @@ cursor: pointer; display: inline-block; padding: 0 16px; + } .label { font-weight: $ms-font-weight-semibold; @@ -94,5 +87,4 @@ vertical-align: top; display: inline-block; } - } } diff --git a/samples/react-calendar/src/controls/Event/IEventState.ts b/samples/react-calendar/src/controls/Event/IEventState.ts index dc446518e..6e3bc4477 100644 --- a/samples/react-calendar/src/controls/Event/IEventState.ts +++ b/samples/react-calendar/src/controls/Event/IEventState.ts @@ -25,4 +25,8 @@ export interface IEventState { userPermissions?: IUserPermissions; isloading:boolean; siteRegionalSettings: any; + recurrenceSeriesEdited?:boolean; + showRecurrenceSeriesInfo:boolean; + newRecurrenceEvent:boolean; + recurrenceAction:string; } diff --git a/samples/react-calendar/src/controls/Event/event.tsx b/samples/react-calendar/src/controls/Event/event.tsx index 8984ba329..5e4e629bb 100644 --- a/samples/react-calendar/src/controls/Event/event.tsx +++ b/samples/react-calendar/src/controls/Event/event.tsx @@ -37,12 +37,14 @@ import { Dialog, DialogType, DialogFooter, - Toggle + Toggle, + ActionButton, + IButtonProps } from 'office-ui-fabric-react'; import { addMonths, addYears } from 'office-ui-fabric-react/lib/utilities/dateMath/DateMath'; -import { _ComponentBaseKillSwitches } from '@microsoft/sp-component-base'; + import { IPanelModelEnum } from './IPanelModeEnum'; import { EditorState, convertToRaw, ContentState } from 'draft-js'; import { Editor } from 'react-draft-wysiwyg'; @@ -51,11 +53,13 @@ import htmlToDraft from 'html-to-draftjs'; import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'; import spservices from '../../services/spservices'; import { Map, ICoordinates, MapType } from "@pnp/spfx-controls-react/lib/Map"; - +import { EventRecurrenceInfo } from '../../controls/EventRecurrenceInfo/EventRecurrenceInfo'; +import { string } from 'prop-types'; +import { getGUID } from '@pnp/common'; const today: Date = new Date(Date.now()); const DayPickerStrings: IDatePickerStrings = { - months: [strings.January, strings.February, strings.March, strings.April, strings.May, strings.June, strings.July, strings.August, strings.September, strings.October, strings.November, strings.Dezember], + months: [strings.January, strings.February, strings.March, strings.April, strings.May, strings.June, strings.July, strings.August, strings.September, strings.October, strings.November, strings.December], shortMonths: [strings.Jan, strings.Feb, strings.Mar, strings.Apr, strings.May, strings.Jun, strings.Jul, strings.Aug, strings.Sep, strings.Oct, strings.Nov, strings.Dez], days: [strings.Sunday, strings.Monday, strings.Tuesday, strings.Wednesday, strings.Thursday, strings.Friday, strings.Saturday], shortDays: [strings.ShortDay_S, strings.ShortDay_M, strings.ShortDay_T, strings.ShortDay_W, strings.ShortDay_Tursday, strings.ShortDay_Friday, strings.ShortDay_Saunday], @@ -74,6 +78,7 @@ export class Event extends React.Component { private attendees: IPersonaProps[] = []; private latitude: number = 41.1931819; private longitude: number = -8.4897452; + private returnedRecurrenceInfo: { recurrenceData: string, eventDate: Date, endDate: Date } = undefined; private categoryDropdownOption: IDropdownOption[] = []; @@ -93,7 +98,6 @@ export class Event extends React.Component { } // Initialize Map coordinates - console.log('ini', this.latitude, this.longitude); this.state = { showPanel: false, eventData: this.props.event, @@ -112,6 +116,10 @@ export class Event extends React.Component { displayDialog: false, isloading: false, siteRegionalSettings: undefined, + recurrenceSeriesEdited: false, + showRecurrenceSeriesInfo:false, + newRecurrenceEvent:false, + recurrenceAction: 'display', userPermissions: { hasPermissionAdd: false, hasPermissionDelete: false, hasPermissionEdit: false, hasPermissionView: false }, }; // local copia of props @@ -131,8 +139,9 @@ export class Event extends React.Component { this.onDelete = this.onDelete.bind(this); this.closeDialog = this.closeDialog.bind(this); this.confirmDelete = this.confirmDelete.bind(this); - this.onAllDayEventChange = this.onAllDayEventChange.bind(this); this.onCategoryChanged = this.onCategoryChanged.bind(this); + this.onEditRecurrence = this.onEditRecurrence.bind(this); + this.returnRecurrenceInfo = this.returnRecurrenceInfo.bind(this); this.spService = new spservices(this.props.context); } /** @@ -152,27 +161,58 @@ export class Event extends React.Component { private async onSave() { let eventData: IEventData = this.state.eventData; - // All Day event ? + let panelMode = this.props.panelMode; + + let startDate: string = null; + let endDate: string = null; + eventData.fRecurrence = false; + // if there are new Event recurrence or Edited recurrence series + if (this.state.recurrenceSeriesEdited || this.state.newRecurrenceEvent) { + eventData.RecurrenceData = this.returnedRecurrenceInfo.recurrenceData; + startDate = `${moment(this.returnedRecurrenceInfo.eventDate).format('YYYY/MM/DD')}`; + endDate = `${moment(this.returnedRecurrenceInfo.endDate).format('YYYY/MM/DD')}`; + + if (eventData.EventType == "0" && this.state.newRecurrenceEvent) { + eventData.EventType = "1"; + eventData.fRecurrence= true; + eventData.UID = getGUID(); + } + if (eventData.EventType == "1" && this.state.recurrenceSeriesEdited) { + eventData.fRecurrence= true; + eventData.UID = getGUID(); + } + + } else { + if (this.state.eventData.EventType == '1'){ // recurrence exception + eventData.RecurrenceID = eventData.EventDate.toString(); + eventData.MasterSeriesItemID = eventData.ID.toString(); + eventData.EventType = "4"; + eventData.fRecurrence = true; + eventData.UID = getGUID(); + panelMode = IPanelModelEnum.add; + } + startDate = `${moment(this.state.startDate).format('YYYY/MM/DD')}`; + endDate = `${moment(this.state.endDate).format('YYYY/MM/DD')}`; + } + - const startDate = `${moment(this.state.startDate).format('YYYY/MM/DD')}`; const startTime = `${this.state.startSelectedHour.key}:${this.state.startSelectedMin.key}`; const startDateTime = `${startDate} ${startTime}`; const start = moment(startDateTime, 'YYYY/MM/DD HH:mm').toLocaleString(); - eventData.start = new Date(start); - + eventData.EventDate = new Date(start); // End Date - const endDate = `${moment(this.state.endDate).format('YYYY/MM/DD')}`; const endTime = `${this.state.endSelectedHour.key}:${this.state.endSelectedMin.key}`; const endDateTime = `${endDate} ${endTime}`; const end = moment(endDateTime, 'YYYY/MM/DD HH:mm').toLocaleString(); - eventData.end = new Date(end); + eventData.EndDate = new Date(end); + // get Geolocation eventData.geolocation = { Latitude: this.latitude, Longitude: this.longitude }; const locationInfo = await this.spService.getGeoLactionName(this.latitude, this.longitude); eventData.location = locationInfo ? locationInfo.display_name : 'N/A'; - console.log('beforeupd',eventData.geolocation); + // get Attendees if (!eventData.attendes) { //vinitialize if no attendees eventData.attendes = []; @@ -184,13 +224,13 @@ export class Event extends React.Component { try { for (const user of this.attendees) { - const userInfo: any= await this.spService.getUserByLoginName(user.id, this.props.siteUrl); - eventData.attendes.push(parseInt(userInfo.Id)); + const userInfo: any = await this.spService.getUserByLoginName(user.id, this.props.siteUrl); + eventData.attendes.push(Number(userInfo.Id)); } this.setState({ isSaving: true }); - switch (this.props.panelMode) { + switch (panelMode) { case IPanelModelEnum.edit: await this.spService.updateEvent(eventData, this.props.siteUrl, this.props.listId); break; @@ -215,16 +255,22 @@ export class Event extends React.Component { * @memberof Event */ public componentDidCatch(error: any, errorInfo: any) { - this.setState({ hasError: true, errorMessage: errorInfo.componentStack }); + this.setState({ hasError: true, errorMessage: errorInfo.message }); } + /** * * + * @private + * @param {number} [eventId] * @memberof Event */ - public async componentDidMount() { + private async renderEventData(eventId?: number) { + this.setState({ isloading: true }); - let editorState:EditorState; + const event: IEventData = !eventId ? this.props.event : await this.spService.getEvent(this.props.siteUrl, this.props.listId, eventId); + + let editorState: EditorState; // Load Regional Settings const siteRegionalSettigns = await this.spService.getSiteRegionalSettingsTimeZone(this.props.siteUrl); // chaeck User list Permissions @@ -232,16 +278,16 @@ export class Event extends React.Component { // Load Categories this.categoryDropdownOption = await this.spService.getChoiceFieldOptions(this.props.siteUrl, this.props.listId, 'Category'); // Edit Mode ? - if (this.props.panelMode == IPanelModelEnum.edit && this.props.event) { + if (this.props.panelMode == IPanelModelEnum.edit && event) { // Get hours of event - const startHour = moment(this.props.event.start).format('HH').toString(); - const startMin = moment(this.props.event.start).format('mm').toString(); - const endHour = moment(this.props.event.end).format('HH').toString(); - const endMin = moment(this.props.event.end).format('mm').toString(); + const startHour = moment(event.EventDate).format('HH').toString(); + const startMin = moment(event.EventDate).format('mm').toString(); + const endHour = moment(event.EndDate).format('HH').toString(); + const endMin = moment(event.EndDate).format('mm').toString(); // Get Descript and covert to RichText Control - const html = this.props.event.Description; + const html = event.Description; const contentBlock = htmlToDraft(html); if (contentBlock) { @@ -250,7 +296,7 @@ export class Event extends React.Component { } // testa attendees - const attendees = this.props.event.attendes; + const attendees = event.attendes; let selectedUsers: string[] = []; if (attendees && attendees.length > 0) { for (const userId of attendees) { @@ -261,14 +307,16 @@ export class Event extends React.Component { } } // Has geolocation ? - this.latitude = this.props.event.geolocation && this.props.event.geolocation.Latitude ? this.props.event.geolocation.Latitude : this.latitude; - this.longitude = this.props.event.geolocation && this.props.event.geolocation.Longitude ? this.props.event.geolocation.Longitude : this.longitude; + this.latitude = event.geolocation && event.geolocation.Latitude ? event.geolocation.Latitude : this.latitude; + this.longitude = event.geolocation && event.geolocation.Longitude ? event.geolocation.Longitude : this.longitude; + event.geolocation.Latitude = this.latitude; + event.geolocation.Longitude = this.longitude; // Update Component Data this.setState({ - eventData: this.props.event, - startDate: this.props.event.start, - endDate: this.props.event.end, + eventData: event, + startDate: event.EventDate, + endDate: event.EndDate, startSelectedHour: { key: startHour, text: startHour }, startSelectedMin: { key: startMin, text: startMin }, endSelectedHour: { key: endHour, text: endHour }, @@ -290,24 +338,30 @@ export class Event extends React.Component { userPermissions: userListPermissions, isloading: false, siteRegionalSettings: siteRegionalSettigns, + eventData: { ...event, EventType: "0" }, }); } } + /** + * * * @memberof Event */ - public componentWillMount() { + public async componentDidMount() { + + await this.renderEventData(); } + + /** * @private * @memberof Event */ private onStartChangeHour = (ev: React.FormEvent, item: IDropdownOption): void => { - ev.preventDefault(); this.setState({ startSelectedHour: item }); } @@ -316,7 +370,7 @@ export class Event extends React.Component { * @memberof Event */ private onEndChangeHour = (ev: React.FormEvent, item: IDropdownOption): void => { - ev.preventDefault(); + this.setState({ endSelectedHour: item }); } @@ -325,7 +379,7 @@ export class Event extends React.Component { * @memberof Event */ private onStartChangeMin = (ev: React.FormEvent, item: IDropdownOption): void => { - ev.preventDefault(); + this.setState({ startSelectedMin: item }); } @@ -374,12 +428,11 @@ export class Event extends React.Component { * @memberof Event */ private onEndChangeMin(ev: React.FormEvent, item: IDropdownOption): void { - ev.preventDefault(); + this.setState({ endSelectedMin: item }); } /** - * * * @private * @param {React.FormEvent} ev @@ -387,7 +440,7 @@ export class Event extends React.Component { * @memberof Event */ private onCategoryChanged(ev: React.FormEvent, item: IDropdownOption): void { - ev.preventDefault(); + this.setState({ eventData: { ...this.state.eventData, Category: item.text } }); } @@ -413,6 +466,13 @@ export class Event extends React.Component { this.setState({ displayDialog: false }); } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof Event + */ private async confirmDelete(ev: React.MouseEvent) { ev.preventDefault(); try { @@ -420,7 +480,7 @@ export class Event extends React.Component { switch (this.props.panelMode) { case IPanelModelEnum.edit: - await this.spService.deleteEvent(this.state.eventData, this.props.siteUrl, this.props.listId); + await this.spService.deleteEvent(this.state.eventData, this.props.siteUrl, this.props.listId, this.state.recurrenceSeriesEdited); break; default: break; @@ -428,7 +488,7 @@ export class Event extends React.Component { this.setState({ isDeleting: false }); this.props.onDissmissPanel(true); } catch (error) { - this.setState({ hasError: true, errorMessage: error.message, isDeleting: false }); + this.setState({ hasError: true, errorMessage: error.message, isDeleting: false, displayDialog:false }); } } @@ -445,16 +505,22 @@ export class Event extends React.Component { { this.props.panelMode == IPanelModelEnum.edit && this.state.userPermissions.hasPermissionDelete && ( - + {strings.DeleteButtonLabel} ) } { (this.state.userPermissions.hasPermissionAdd || this.state.userPermissions.hasPermissionEdit) && - - {strings.SaveButtonLabel} - + + {strings.SaveButtonLabel} + } { @@ -485,10 +551,7 @@ export class Event extends React.Component { } - private onAllDayEventChange(ev: React.MouseEvent, checked: boolean) { - ev.preventDefault(); - this.setState({ eventData: { ...this.state.eventData, allDayEvent: checked } }); - } + /** * * @private @@ -498,13 +561,45 @@ export class Event extends React.Component { private async onUpdateCoordinates(coordinates: ICoordinates) { this.latitude = coordinates.latitude; this.longitude = coordinates.longitude; - console.log('upcoor',this.latitude + ' ' + this.longitude); const locationInfo = await this.spService.getGeoLactionName(this.latitude, this.longitude); this.setState({ eventData: { ...this.state.eventData, location: locationInfo.display_name } }); } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof Event + */ + private async onEditRecurrence(ev: React.MouseEvent) { + ev.preventDefault(); + // EventType = 4 Recurrence Exception + await this.renderEventData(this.state.eventData.EventType == '4' ? Number(this.state.eventData.MasterSeriesItemID) : this.state.eventData.Id); + this.setState({ showRecurrenceSeriesInfo: true, recurrenceSeriesEdited: true }); + } + + /** + * + * + * @param {Date} startDate + * @param {string} recurrenceData + * @memberof Event + */ + public async returnRecurrenceInfo(startDate: Date, recurrenceData: string) { + this.returnedRecurrenceInfo = { recurrenceData: recurrenceData, eventDate: startDate, endDate: moment().add(20, 'years').toDate() }; + //this.setState({ editRecurrenceSeries:false}) + //console.log(this.returnedRecurrenceInfo); + } + + /** + * + * + * @returns {React.ReactElement} + * @memberof Event + */ public render(): React.ReactElement { - console.log(this.state.locationLatitude + '-' + this.state.locationLongitude); + const { editorState } = this.state; return (
@@ -531,7 +626,23 @@ export class Event extends React.Component { { !this.state.isloading &&
-
+ { + (this.state.eventData && (this.state.eventData.EventType !== "0" && this.state.showRecurrenceSeriesInfo !== true)) ? +
+

Recurrence Event

+ + Edit Recurrence Series + + +
+ : '' + } +
{ label={strings.StartDateLabel} onSelectDate={this.onSelectDateStart} disabled={this.state.userPermissions.hasPermissionAdd || this.state.userPermissions.hasPermissionEdit ? false : true} + hidden={this.state.showRecurrenceSeriesInfo} />
@@ -632,6 +744,7 @@ export class Event extends React.Component { label={strings.EndDateLabel} onSelectDate={this.onSelectDateEnd} disabled={this.state.userPermissions.hasPermissionAdd || this.state.userPermissions.hasPermissionEdit ? false : true} + hidden={this.state.showRecurrenceSeriesInfo} />
@@ -693,7 +806,42 @@ export class Event extends React.Component {

- + { + + this.state.eventData && (this.state.eventData.EventType == "0") ? +
+ { + ev.preventDefault(); + this.setState({ showRecurrenceSeriesInfo: checked, newRecurrenceEvent: checked }); + }} + /> +
+ : + '' + } + + { + this.state.showRecurrenceSeriesInfo && ( + + + + ) + } + + < Label > Event Description
{
+ } +
); diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.module.scss b/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.module.scss new file mode 100644 index 000000000..c00ae27c7 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.module.scss @@ -0,0 +1,7 @@ +.divWrraper { + border-width:1px; + border-color:#adadad; + padding: 20px; + border-style: solid; + +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.tsx b/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.tsx new file mode 100644 index 000000000..eea696827 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfo/EventRecurrenceInfo.tsx @@ -0,0 +1,172 @@ +import * as React from 'react'; +import styles from './EventRecurrenceInfo.module.scss'; +import * as strings from 'CalendarWebPartStrings'; +import { IEventRecurrenceInfoProps } from './IEventRecurrenceInfoProps'; +import { IEventRecurrenceInfoState } from './IEventRecurrenceInfoState'; +import { escape } from '@microsoft/sp-lodash-subset'; +import * as moment from 'moment'; +import { parseString, Builder } from "xml2js"; +import { + ChoiceGroup, + IChoiceGroupOption, + +} from 'office-ui-fabric-react'; + + +import { EventRecurrenceInfoDaily } from './../EventRecurrenceInfoDaily/EventRecurrenceInfoDaily'; +import { EventRecurrenceInfoWeekly } from './../EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly'; +import { EventRecurrenceInfoMonthly } from './../EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly'; +import { EventRecurrenceInfoYearly } from './../EventRecurrenceInfoYearly/EventRecurrenceInfoYearly'; + + + + +export class EventRecurrenceInfo extends React.Component { + + public constructor(props) { + super(props); + + this._onRecurrenceFrequenceChange = this._onRecurrenceFrequenceChange.bind(this); + + this.state = { + selectedKey: 'daily', + selectPatern: 'every', + startDate: moment().toDate(), + endDate: moment().endOf('month').toDate(), + numberOcurrences: '1', + numberOfDays: '1', + disableNumberOfDays: false, + disableNumberOcurrences: true, + selectdateRangeOption: 'noDate', + disableEndDate: true, + selectedRecurrenceRule: 'daily', + + }; + } + + + + private _onRecurrenceFrequenceChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + this.setState({ + selectedRecurrenceRule: option.key + }); + } + + + /** + * + * + * @memberof EventRecurrenceInfo + */ + public async componentDidMount() { + if (this.props.recurrenceData) { + if (this.props.recurrenceData.indexOf('} + * @memberof EventRecurrenceInfo + */ + public render(): React.ReactElement { + return ( +
+ +
+ +
+ { + this.state.selectedRecurrenceRule === 'daily' && ( + + ) + } + { + this.state.selectedRecurrenceRule === 'weekly' && ( + + ) + } + { + this.state.selectedRecurrenceRule === 'monthly' && ( + + ) + } + { + this.state.selectedRecurrenceRule === 'yearly' && ( + + ) + } +
+ ); + } +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoProps.ts b/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoProps.ts new file mode 100644 index 000000000..8d6d853c4 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoProps.ts @@ -0,0 +1,9 @@ +import { WebPartContext } from "@microsoft/sp-webpart-base"; +export interface IEventRecurrenceInfoProps { + display:boolean; + recurrenceData: string; + startDate:Date; + context:WebPartContext; + siteUrl:string; + returnRecurrenceData: (startDate:Date,recurrenceData:string) => void; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoState.ts b/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoState.ts new file mode 100644 index 000000000..4157223f3 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfo/IEventRecurrenceInfoState.ts @@ -0,0 +1,13 @@ +export interface IEventRecurrenceInfoState { + selectedKey:string; + selectPatern:string; + startDate: Date; + endDate:Date; + numberOcurrences:string; + numberOfDays:string; + disableNumberOfDays: boolean; + disableNumberOcurrences: boolean; + selectdateRangeOption:string; + disableEndDate:boolean; + selectedRecurrenceRule:string; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.module.scss b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.module.scss new file mode 100644 index 000000000..d1e3e0779 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.module.scss @@ -0,0 +1,6 @@ +.divWrraper { + border-width:1px; + border-color:#adadad; + padding: 20px; + border-style: solid; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.tsx b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.tsx new file mode 100644 index 000000000..a4b9e97d5 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/EventRecurrenceInfoDaily.tsx @@ -0,0 +1,408 @@ +import * as React from 'react'; +import styles from './EventRecurrenceInfoDaily.module.scss'; +import * as strings from 'CalendarWebPartStrings'; +import { IEventRecurrenceInfoDailyProps } from './IEventRecurrenceInfoDailyProps'; +import { IEventRecurrenceInfoDailyState } from './IEventRecurrenceInfoDailyState'; +import { escape } from '@microsoft/sp-lodash-subset'; +import * as moment from 'moment'; +import { parseString, Builder } from "xml2js"; +import { + ChoiceGroup, + IChoiceGroupOption, + Label, + MaskedTextField, +} from 'office-ui-fabric-react'; +import { DatePicker, DayOfWeek, IDatePickerStrings } from 'office-ui-fabric-react/lib/DatePicker'; + +import spservices from '../../services/spservices'; + +const DayPickerStrings: IDatePickerStrings = { + months: [strings.January, strings.February, strings.March, strings.April, strings.May, strings.June, strings.July, strings.August, strings.September, strings.October, strings.November, strings.December], + shortMonths: [strings.Jan, strings.Feb, strings.Mar, strings.Apr, strings.May, strings.Jun, strings.Jul, strings.Aug, strings.Sep, strings.Oct, strings.Nov, strings.Dez], + days: [strings.Sunday, strings.Monday, strings.Tuesday, strings.Wednesday, strings.Thursday, strings.Friday, strings.Saturday], + shortDays: [strings.ShortDay_S, strings.ShortDay_M, strings.ShortDay_T, strings.ShortDay_W, strings.ShortDay_Tursday, strings.ShortDay_Friday, strings.ShortDay_Saunday], + goToToday: strings.GoToDay, + prevMonthAriaLabel: strings.PrevMonth, + nextMonthAriaLabel: strings.NextMonth, + prevYearAriaLabel: strings.PrevYear, + nextYearAriaLabel: strings.NextYear, + closeButtonAriaLabel: strings.CloseDate, + isRequiredErrorMessage: strings.IsRequired, + invalidInputErrorMessage: strings.InvalidDateFormat, +}; + +/** + * + * + * @export + * @class EventRecurrenceInfoDaily + * @extends {React.Component} + */ +export class EventRecurrenceInfoDaily extends React.Component { + private spService: spservices = null; + public constructor(props) { + super(props); + + + this.onPaternChange = this.onPaternChange.bind(this); + this.state = { + selectedKey: 'daily', + selectPatern: 'every', + startDate: this.props.startDate ? this.props.startDate : moment().toDate(), + endDate: moment().endOf('month').toDate(), + numberOcurrences: '1', + numberOfDays: '1', + disableNumberOfDays: false, + disableNumberOcurrences: true, + selectdateRangeOption: 'noDate', + disableEndDate: true, + selectedRecurrenceRule: 'daily', + isLoading: false, + errorMessageNumberOcurrences: '', + errorMessageNumberOfDays: '', + }; + + // + this.onNumberOfDaysChange = this.onNumberOfDaysChange.bind(this); + this.onNumberOfOcurrencesChange = this.onNumberOfOcurrencesChange.bind(this); + this.onDataRangeOptionChange = this.onDataRangeOptionChange.bind(this); + this.onEndDateChange = this.onEndDateChange.bind(this); + this.onStartDateChange = this.onStartDateChange.bind(this); + this.onApplyRecurrence = this.onApplyRecurrence.bind(this); + + this.spService = new spservices(this.props.context); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onStartDateChange(date: Date) { + this.setState({ startDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onEndDateChange(date: Date) { + this.setState({ endDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfDaysChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + let errorMessage = ''; + setTimeout(() => { + + if (Number(value.trim()) == 0 || Number(value.trim()) > 255) { + value = '1 '; + errorMessage = 'Allowed values 1 to 255'; + } + this.setState({ numberOfDays: value, errorMessageNumberOfDays: errorMessage }); + this.applyRecurrence(); + }, 2500); + + } + + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfOcurrencesChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + let errorMessage = ''; + setTimeout(() => { + + if (Number(value.trim()) == 0 || Number(value.trim()) > 999) { + value = '1 '; + errorMessage = 'Allowed values 1 to 999'; + } + this.setState({ numberOcurrences: value , errorMessageNumberOcurrences: errorMessage }); + this.applyRecurrence(); + }, 2500); + + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoDaily + */ + private onDataRangeOptionChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + + this.setState({ + selectdateRangeOption: option.key, + disableNumberOcurrences: option.key == 'endAfter' ? false : true, + disableEndDate: option.key == 'endDate' ? false : true, + }); + this.applyRecurrence(); + } + private onPaternChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + this.setState({ + selectPatern: option.key, + disableNumberOfDays: option.key == 'every' ? false : true, + }); + this.applyRecurrence(); + } + + public async componentWillMount() { + // await this.load(); + await this.load(); + } + + + public async componentDidUpdate(prevProps: IEventRecurrenceInfoDailyProps, prevState: IEventRecurrenceInfoDailyState) { + + } + + private async load() { + let patern: any = {}; + let dateRange: { repeatForever?: string, repeatInstances?: string, windowEnd?: Date } = {}; + let dailyPatern: { dayFrequency?: string, weekDay?: string } = {}; + let recurrenceRule: string; + + if (this.props.recurrenceData) { + + parseString(this.props.recurrenceData, { explicitArray: false }, (error, result) => { + + if (result.recurrence.rule.repeat) { + patern = result.recurrence.rule.repeat; + } + + // + if (result.recurrence.rule.repeatForever) { + dateRange = { repeatForever: result.recurrence.rule.repeatForever }; + } + if (result.recurrence.rule.repeatInstances) { + dateRange = { repeatInstances: result.recurrence.rule.repeatInstances }; + } + if (result.recurrence.rule.windowEnd) { + dateRange = { windowEnd: result.recurrence.rule.windowEnd }; + } + + }); + // daily Patern + if (patern.daily) { + recurrenceRule = 'daily'; + if (patern.daily.$.dayFrequency) { + dailyPatern = { dayFrequency: patern.daily.$.dayFrequency }; + } + if (patern.daily.$.weekday) { + dailyPatern = { weekDay: 'weekDay' }; + } + } + + let selectDateRangeOption: string = 'noDate'; + if (dateRange.repeatForever) { + selectDateRangeOption = 'noDate'; + } else if (dateRange.repeatInstances) { + selectDateRangeOption = 'endAfter'; + } else if (dateRange.windowEnd) { + selectDateRangeOption = 'endDate'; + } + + // weekday patern + this.setState({ + selectedRecurrenceRule: recurrenceRule, + selectPatern: dailyPatern.dayFrequency ? 'every' : 'everweekday', + numberOfDays: dailyPatern.dayFrequency ? dailyPatern.dayFrequency : '1', + disableNumberOfDays: dailyPatern.dayFrequency ? false : true, + selectdateRangeOption: selectDateRangeOption, + numberOcurrences: dateRange.repeatInstances ? dateRange.repeatInstances : '10', + disableNumberOcurrences: dateRange.repeatInstances ? false : true, + endDate: dateRange.windowEnd ? new Date(moment(dateRange.windowEnd).format('YYYY/MM/DD')) : this.state.endDate, + disableEndDate: dateRange.windowEnd ? false : true, + isLoading: false, + }); + } + await this.applyRecurrence(); + } + + + private async onApplyRecurrence(ev: React.MouseEvent) { + await this.applyRecurrence(); + } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoDaily + */ + private async applyRecurrence() { + + const siteTimeZoneHours: number = await this.spService.getSiteTimeZoneHours(this.props.siteUrl); + const eventDate = new Date(moment(this.state.startDate).add(siteTimeZoneHours, 'hours').toISOString()); + const endDate = moment(this.state.endDate).add(siteTimeZoneHours, 'hours').toISOString(); + let selectDateRangeOption; + switch (this.state.selectdateRangeOption) { + case 'noDate': + selectDateRangeOption = `FALSE`; + break; + case 'endAfter': + selectDateRangeOption = `${this.state.numberOcurrences}`; + break; + case 'endDate': + selectDateRangeOption = `${endDate}`; + break; + default: + break; + } + const recurrenceXML = `su` + + `` : 'weekday'}${selectDateRangeOption}`; + // console.log(recurrenceXML); + this.props.returnRecurrenceData(this.state.startDate, recurrenceXML); + } + /** + * + * + * @returns {React.ReactElement} + * @memberof EventRecurrenceInfoDaily + */ + public render(): React.ReactElement { + return ( +
+ { +
+
+ +
+
+ + { + return ( +
+ {render!(props)} + + +
+ ); + } + }, + { + key: 'everweekday', + text: strings.everyweekdays, + } + ]} + onChange={this.onPaternChange} + required={true} + /> +
+ +
+ +
+ + + +
+
+ { + return ( +
+ {render!(props)} + +
+ ); + } + }, + { + key: 'endAfter', + text: strings.EndAfterLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} + + +
+ ); + } + }, + ]} + required={true} + /> +
+
+
+ } +
+ ); + } +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyProps.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyProps.ts new file mode 100644 index 000000000..7eb2895b7 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyProps.ts @@ -0,0 +1,9 @@ +import { WebPartContext } from "@microsoft/sp-webpart-base"; +export interface IEventRecurrenceInfoDailyProps { + display:boolean; + recurrenceData: string; + startDate:Date; + context: WebPartContext; + siteUrl:string; + returnRecurrenceData: (startDate:Date,recurrenceData:string) => void; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyState.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyState.ts new file mode 100644 index 000000000..6bb9dbff2 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoDaily/IEventRecurrenceInfoDailyState.ts @@ -0,0 +1,16 @@ +export interface IEventRecurrenceInfoDailyState { + selectedKey:string; + selectPatern:string; + startDate: Date; + endDate:Date; + numberOcurrences:string; + numberOfDays:string; + disableNumberOfDays: boolean; + disableNumberOcurrences: boolean; + selectdateRangeOption:string; + disableEndDate:boolean; + selectedRecurrenceRule:string; + isLoading:boolean; + errorMessageNumberOfDays: string; + errorMessageNumberOcurrences: string; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.module.scss b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.module.scss new file mode 100644 index 000000000..d1e3e0779 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.module.scss @@ -0,0 +1,6 @@ +.divWrraper { + border-width:1px; + border-color:#adadad; + padding: 20px; + border-style: solid; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.tsx b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.tsx new file mode 100644 index 000000000..20076e51d --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/EventRecurrenceInfoMonthly.tsx @@ -0,0 +1,645 @@ +import * as React from 'react'; +import styles from './EventRecurrenceInfoMonthly.module.scss'; +import * as strings from 'CalendarWebPartStrings'; +import { IEventRecurrenceInfoMonthlyProps } from './IEventRecurrenceInfoMonthlyProps'; +import { IEventRecurrenceInfoMonthlyState } from './IEventRecurrenceInfoMonthlyState'; +import { escape } from '@microsoft/sp-lodash-subset'; +import * as moment from 'moment'; +import { parseString, Builder } from "xml2js"; +import { + ChoiceGroup, + IChoiceGroupOption, + Dropdown, + IDropdownOption, + Label, + MaskedTextField, +} from 'office-ui-fabric-react'; + +import { DatePicker, DayOfWeek, IDatePickerStrings } from 'office-ui-fabric-react/lib/DatePicker'; + +import spservices from '../../services/spservices'; +import { string } from 'prop-types'; + +const DayPickerStrings: IDatePickerStrings = { + months: [strings.January, strings.February, strings.March, strings.April, strings.May, strings.June, strings.July, strings.August, strings.September, strings.October, strings.November, strings.December], + shortMonths: [strings.Jan, strings.Feb, strings.Mar, strings.Apr, strings.May, strings.Jun, strings.Jul, strings.Aug, strings.Sep, strings.Oct, strings.Nov, strings.Dez], + days: [strings.Sunday, strings.Monday, strings.Tuesday, strings.Wednesday, strings.Thursday, strings.Friday, strings.Saturday], + shortDays: [strings.ShortDay_S, strings.ShortDay_M, strings.ShortDay_T, strings.ShortDay_W, strings.ShortDay_Tursday, strings.ShortDay_Friday, strings.ShortDay_Saunday], + goToToday: strings.GoToDay, + prevMonthAriaLabel: strings.PrevMonth, + nextMonthAriaLabel: strings.NextMonth, + prevYearAriaLabel: strings.PrevYear, + nextYearAriaLabel: strings.NextYear, + closeButtonAriaLabel: strings.CloseDate, + isRequiredErrorMessage: strings.IsRequired, + invalidInputErrorMessage: strings.InvalidDateFormat, +}; + +/** + * + * + * @export + * @class EventRecurrenceInfoDaily + * @extends {React.Component} + */ +export class EventRecurrenceInfoMonthly extends React.Component { + private spService: spservices = null; + public constructor(props) { + super(props); + + + this.onPaternChange = this.onPaternChange.bind(this); + this.state = { + selectedKey: 'daily', + selectPatern: 'monthly', + startDate: this.props.startDate ? this.props.startDate : moment().toDate(), + endDate: moment(this.props.startDate).add('month', 1).toDate(), + numberOcurrences: '10', + disableDayOfMonth: false, + disableNumberOcurrences: true, + selectdateRangeOption: 'noDate', + disableEndDate: true, + selectedRecurrenceRule: 'monthly', + dayOfMonth: this.props.startDate ? moment(this.props.startDate).format('D') : moment().format('D'), + everyNumberOfMonths: '1', + isLoading: false, + errorMessageNumberOfMonth: '', + errorMessageDayOfMonth: '', + selectedWeekOrderMonth: 'first', + selectedWeekDay: 'day', + errorMessageNumberOfMonthWeekDay: '', + everyNumberOfMonthsWeekDay: '1', + }; + + // + this.onDayOfMonthChange = this.onDayOfMonthChange.bind(this); + this.onNumberOfOcurrencesChange = this.onNumberOfOcurrencesChange.bind(this); + this.onDataRangeOptionChange = this.onDataRangeOptionChange.bind(this); + this.onEndDateChange = this.onEndDateChange.bind(this); + this.onStartDateChange = this.onStartDateChange.bind(this); + this.onApplyRecurrence = this.onApplyRecurrence.bind(this); + this.onDayOfMonthGetErrorMessage = this.onDayOfMonthGetErrorMessage.bind(this); + this.onEveryNumberOfMonthsChange = this.onEveryNumberOfMonthsChange.bind(this); + this.onEveryNumberOfMonthsWeekDayChange = this.onEveryNumberOfMonthsWeekDayChange.bind(this); + this.onSelectedWeekDayChange = this.onSelectedWeekDayChange.bind(this); + this.onWeekOrderMonthChange = this.onWeekOrderMonthChange.bind(this); + + this.spService = new spservices(this.props.context); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onStartDateChange(date: Date) { + this.setState({ startDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onEndDateChange(date: Date) { + this.setState({ endDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onDayOfMonthChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + setTimeout(() => { + let errorMessage = ''; + if (Number(value.trim()) == 0 || Number(value.trim()) > 31) { + value = '1 '; + errorMessage = 'Allowed values 1 to 31'; + } + this.setState({ dayOfMonth: value, errorMessageDayOfMonth: errorMessage }); + this.applyRecurrence(); + }, 2500); + + } + + /** + * + * + * @private + * @param {string} value + * @returns + * @memberof EventRecurrenceInfoMonthly + */ + private onDayOfMonthGetErrorMessage(value: string) { + return (Number(value.trim()) != 0 && Number(value.trim()) <= 31) ? '' : "Day must be beteween 1 and 31"; + } + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoMonthly + */ + private onEveryNumberOfMonthsChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + setTimeout(() => { + let errorMessage = ''; + if (Number(value.trim()) == 0 || Number(value.trim()) > 12) { + value = '1 '; + errorMessage = 'Allowed values 1 to 12'; + } + this.setState({ everyNumberOfMonths: value, errorMessageNumberOfMonth: errorMessage }); + this.applyRecurrence(); + }, 2500); + + + } + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoMonthly + */ + private onEveryNumberOfMonthsWeekDayChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + setTimeout(() => { + let errorMessage = ''; + if (Number(value.trim()) == 0 || Number(value.trim()) > 12) { + value = '1 '; + errorMessage = strings.AllowedValues1to12Label; + } + this.setState({ everyNumberOfMonthsWeekDay: value, errorMessageNumberOfMonthWeekDay: errorMessage }); + this.applyRecurrence(); + }, 2500); + + + } + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfOcurrencesChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + this.setState({ numberOcurrences: value }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoDaily + */ + private onDataRangeOptionChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + + this.setState({ + selectdateRangeOption: option.key, + disableNumberOcurrences: option.key == 'endAfter' ? false : true, + disableEndDate: option.key == 'endDate' ? false : true, + }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoMonthly + */ + private onPaternChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + this.setState({ + selectPatern: option.key, + disableDayOfMonth: option.key == 'monthly' ? false : true, + }); + this.applyRecurrence(); + } + + public async componentWillMount() { + + await this.load(); + } + + + /** + * + * + * @private + * @param {React.FormEvent} ev + * @param {IDropdownOption} item + * @memberof EventRecurrenceInfoMonthly + */ + private onWeekOrderMonthChange(ev: React.FormEvent, item: IDropdownOption):void { + this.setState({selectedWeekOrderMonth: item.text}); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.FormEvent} ev + * @param {IDropdownOption} item + * @memberof EventRecurrenceInfoMonthly + */ + private onSelectedWeekDayChange(ev: React.FormEvent, item: IDropdownOption):void { + this.setState({selectedWeekDay: item.key}); + this.applyRecurrence(); + } + + public async componentDidUpdate(prevProps: IEventRecurrenceInfoMonthlyProps, prevState: IEventRecurrenceInfoMonthlyState) { + + } + + /** + * + * + * @private + * @memberof EventRecurrenceInfoMonthly + */ + private async load() { + let patern: any = {}; + let dateRange: { repeatForever?: string, repeatInstances?: string, windowEnd?: Date } = {}; + let monthlyPatern: { monthFrequency?: string, day?: string } = {}; + let monthlyByDayPatern: { monthFrequency?: string, weekdayOfMonth?: string, weekDay?: string } = {}; + let recurrenceRule: string; + + if (this.props.recurrenceData) { + + parseString(this.props.recurrenceData, { explicitArray: false }, (error, result) => { + + if (result.recurrence.rule.repeat) { + patern = result.recurrence.rule.repeat; + } + + // + if (result.recurrence.rule.repeatForever) { + dateRange = { repeatForever: result.recurrence.rule.repeatForever }; + } + if (result.recurrence.rule.repeatInstances) { + dateRange = { repeatInstances: result.recurrence.rule.repeatInstances }; + } + if (result.recurrence.rule.windowEnd) { + dateRange = { windowEnd: result.recurrence.rule.windowEnd }; + } + + }); + // monthly Patern + if (patern.monthly) { + recurrenceRule = 'monthly'; + if (patern.monthly.$.monthFrequency && patern.monthly.$.day) { + monthlyPatern = { monthFrequency: patern.monthly.$.monthFrequency, day: patern.monthly.$.day }; + } + } + // monthlyByDay Patern + if (patern.monthlyByDay) { + recurrenceRule = 'monthly'; + let weekDay = 'day'; + + if (patern.monthlyByDay.$.su) weekDay = 'sunday'; + if (patern.monthlyByDay.$.mo) weekDay = 'monday'; + if (patern.monthlyByDay.$.tu) weekDay = 'tuesday'; + if (patern.monthlyByDay.$.we) weekDay = 'wednesday'; + if (patern.monthlyByDay.$.th) weekDay = 'thursday'; + if (patern.monthlyByDay.$.fr) weekDay = 'friday'; + if (patern.monthlyByDay.$.sa) weekDay = 'saturday'; + if (patern.monthlyByDay.$.day) weekDay = 'day'; + if (patern.monthlyByDay.$.weekday) weekDay = 'weekday'; + if (patern.monthlyByDay.$.weekend_day) weekDay = 'weekdendday'; + + monthlyByDayPatern = { + monthFrequency: patern.monthlyByDay.$.monthFrequency, + weekdayOfMonth: patern.monthlyByDay.$.weekdayOfMonth, + weekDay: weekDay, + }; + + } + + let selectDateRangeOption: string = 'noDate'; + if (dateRange.repeatForever) { + selectDateRangeOption = 'noDate'; + } else if (dateRange.repeatInstances) { + selectDateRangeOption = 'endAfter'; + } else if (dateRange.windowEnd) { + selectDateRangeOption = 'endDate'; + } + + // weekday patern + this.setState({ + selectedRecurrenceRule: recurrenceRule, + selectPatern: patern.monthly ? 'monthly' : 'monthlyByDay', + dayOfMonth: monthlyPatern.day ? monthlyPatern.day : '1', + everyNumberOfMonths: monthlyPatern.monthFrequency ? monthlyPatern.monthFrequency : monthlyByDayPatern.monthFrequency , + everyNumberOfMonthsWeekDay: monthlyByDayPatern.monthFrequency ? monthlyByDayPatern.monthFrequency : '1', + selectedWeekOrderMonth: monthlyByDayPatern.weekdayOfMonth ? monthlyByDayPatern.weekdayOfMonth : 'first', + selectedWeekDay: monthlyByDayPatern.weekDay ? monthlyByDayPatern.weekDay : 'day', + disableDayOfMonth: patern.monthly ? false : true, + selectdateRangeOption: selectDateRangeOption, + numberOcurrences: dateRange.repeatInstances ? dateRange.repeatInstances : '10', + disableNumberOcurrences: dateRange.repeatInstances ? false : true, + endDate: dateRange.windowEnd ? new Date(moment(dateRange.windowEnd).format('YYYY/MM/DD')) : this.state.endDate, + disableEndDate: dateRange.windowEnd ? false : true, + isLoading: false, + }); + } + await this.applyRecurrence(); + } + + + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoMonthly + */ + private async onApplyRecurrence(ev: React.MouseEvent) { + await this.applyRecurrence(); + } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoDaily + */ + private async applyRecurrence() { + + const siteTimeZoneHours: number = await this.spService.getSiteTimeZoneHours(this.props.siteUrl); + const eventDate = new Date(moment(this.state.startDate).add(siteTimeZoneHours, 'hours').toISOString()); + const endDate = moment(this.state.endDate).add(siteTimeZoneHours, 'hours').toISOString(); + let selectDateRangeOption; + switch (this.state.selectdateRangeOption) { + case 'noDate': + selectDateRangeOption = `FALSE`; + break; + case 'endAfter': + selectDateRangeOption = `${this.state.numberOcurrences}`; + break; + case 'endDate': + selectDateRangeOption = `${endDate}`; + break; + default: + break; + } + let recurrencePatern: string = ''; + if (this.state.selectPatern == 'monthly') { + recurrencePatern = `${selectDateRangeOption}`; + } + + if (this.state.selectPatern == 'monthlyByDay') { + + recurrencePatern = `${selectDateRangeOption}`; + } + + const recurrenceXML = `su` + recurrencePatern; + + // console.log(recurrenceXML); + this.props.returnRecurrenceData(this.state.startDate, recurrenceXML); + } + /** + * + * + * @returns {React.ReactElement} + * @memberof EventRecurrenceInfoDaily + */ + public render(): React.ReactElement { + return ( +
+ { +
+
+ +
+
+ + { + return ( +
+ {render!(props)} + + + + +
+ ); + } + }, + { + key: 'monthlyByDay', + text: strings.theLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} +
+ +
+
+ +
+ + + +
+ ); + } + + } + ]} + onChange={this.onPaternChange} + required={true} + /> +
+ +
+ +
+ + + +
+
+ { + return ( +
+ {render!(props)} + +
+ ); + } + }, + { + key: 'endAfter', + text: strings.EndAfterLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} + + +
+ ); + } + }, + ]} + required={true} + /> +
+
+
+ } +
+ ); + } +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyProps.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyProps.ts new file mode 100644 index 000000000..b6bc4f5ba --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyProps.ts @@ -0,0 +1,9 @@ +import { WebPartContext } from "@microsoft/sp-webpart-base"; +export interface IEventRecurrenceInfoMonthlyProps { + display:boolean; + recurrenceData: string; + startDate:Date; + context: WebPartContext; + siteUrl:string; + returnRecurrenceData: (startDate:Date,recurrenceData:string) => void; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyState.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyState.ts new file mode 100644 index 000000000..7ab00a5b0 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoMonthly/IEventRecurrenceInfoMonthlyState.ts @@ -0,0 +1,21 @@ +export interface IEventRecurrenceInfoMonthlyState { + selectedKey:string; + selectPatern:string; + startDate: Date; + endDate:Date; + numberOcurrences:string; + dayOfMonth:string; + everyNumberOfMonths: string; + disableDayOfMonth: boolean; + disableNumberOcurrences: boolean; + selectdateRangeOption:string; + disableEndDate:boolean; + selectedRecurrenceRule:string; + isLoading:boolean; + errorMessageDayOfMonth:string; + errorMessageNumberOfMonth:string; + selectedWeekOrderMonth:string; + selectedWeekDay:string | number; + everyNumberOfMonthsWeekDay:string; + errorMessageNumberOfMonthWeekDay:string; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.module.scss b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.module.scss new file mode 100644 index 000000000..de60b98c8 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.module.scss @@ -0,0 +1,18 @@ +.divWrraper { + border-width:1px; + border-color:#adadad; + padding: 20px; + border-style: solid; +} +.ckeckBoxInline { + display: inline-block; + vertical-align: top; + width: 80px; + padding-left: 10px; +} +.dateRange{ + display: inline-block; + vertical-align: top; + padding-right: 35px; + padding-top: 10px; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.tsx b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.tsx new file mode 100644 index 000000000..31c90896f --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/EventRecurrenceInfoWeekly.tsx @@ -0,0 +1,481 @@ +import * as React from 'react'; +import styles from './EventRecurrenceInfoWeekly.module.scss'; +import * as strings from 'CalendarWebPartStrings'; +import { IEventRecurrenceInfoWeeklyProps } from './IEventRecurrenceInfoWeeklyProps'; +import { IEventRecurrenceInfoWeeklyState } from './IEventRecurrenceInfoWeeklyState'; +import { escape } from '@microsoft/sp-lodash-subset'; +import * as moment from 'moment'; +import { parseString, Builder } from "xml2js"; +import { + ChoiceGroup, + IChoiceGroupOption, + Dropdown, + IDropdownOption, + TextField, + SpinButton, + Label, + PrimaryButton, + MaskedTextField, + CommandBarButton, IButtonProps, + DefaultButton, + Checkbox, +} from 'office-ui-fabric-react'; +import { Position } from 'office-ui-fabric-react/lib/utilities/positioning'; +import { Root } from '@pnp/graph'; +import { DatePicker, DayOfWeek, IDatePickerStrings } from 'office-ui-fabric-react/lib/DatePicker'; + +import spservices from '../../services/spservices'; + +const DayPickerStrings: IDatePickerStrings = { + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + + shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + + shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + + goToToday: 'Go to today', + prevMonthAriaLabel: 'Go to previous month', + nextMonthAriaLabel: 'Go to next month', + prevYearAriaLabel: 'Go to previous year', + nextYearAriaLabel: 'Go to next year', + closeButtonAriaLabel: 'Close date picker' +}; + +/** + * + * + * @export + * @class EventRecurrenceInfoDaily + * @extends {React.Component} + */ +export class EventRecurrenceInfoWeekly extends React.Component { + private spService: spservices = null; + public constructor(props) { + super(props); + this.onPaternChange = this.onPaternChange.bind(this); + + + this.state = { + selectedKey: 'daily', + selectPatern: 'every', + startDate: this.props.startDate ? this.props.startDate : moment().toDate(), + endDate: moment().endOf('month').toDate(), + numberOcurrences: '10', + numberOfWeeks: '1', + disableNumberOfWeeks: false, + disableNumberOcurrences: true, + selectdateRangeOption: 'noDate', + disableEndDate: true, + weeklySunday: moment().weekday() === 0 ? true: false, + weeklyMonday: moment().weekday() === 1 ? true: false, + weekklyTuesday: moment().weekday() === 2 ? true: false, + weekklyWednesday: moment().weekday() === 3 ? true: false, + weekklyThursday: moment().weekday() === 4 ? true: false, + weeklyFriday: moment().weekday() === 5 ? true: false, + weeklySaturday: moment().weekday() === 6 ? true: false, + isLoading: false, + errorMessageNumberOfWeeks: '', + }; + + // + this.onNumberOfWeeksChange = this.onNumberOfWeeksChange.bind(this); + this.onNumberOfOcurrencesChange = this.onNumberOfOcurrencesChange.bind(this); + this.onDataRangeOptionChange = this.onDataRangeOptionChange.bind(this); + this.onEndDateChange = this.onEndDateChange.bind(this); + this.onStartDateChange = this.onStartDateChange.bind(this); + this.onApplyRecurrence = this.onApplyRecurrence.bind(this); + this.onCheckboxSundayChange = this.onCheckboxSundayChange.bind(this); + this.onCheckboxMondayChange = this.onCheckboxMondayChange.bind(this); + this.onCheckboxTuesdayChange = this.onCheckboxTuesdayChange.bind(this); + this.onCheckboxWednesdayChange = this.onCheckboxWednesdayChange.bind(this); + this.onCheckboxThursdayChange = this.onCheckboxThursdayChange.bind(this); + this.onCheckboxFridayChange = this.onCheckboxFridayChange.bind(this); + this.onCheckboxSaturdayChange = this.onCheckboxSaturdayChange.bind(this); + + this.spService = new spservices(this.props.context); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onStartDateChange(date: Date) { + this.setState({ startDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onEndDateChange(date: Date) { + this.setState({ endDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfWeeksChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + setTimeout(() => { + let errorMessage:string =''; + if (Number(value.trim()) == 0 || Number(value.trim()) > 255) { + value = '1 '; + errorMessage = 'Allowed values 1 to 255'; + } + this.setState({ numberOfWeeks: value , errorMessageNumberOfWeeks: errorMessage }); + this.applyRecurrence(); + }, 2000); + + + } + + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfOcurrencesChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + setTimeout(() => { + this.setState({ numberOcurrences: value.trim().length > 0 ? value : "10 " }); + this.applyRecurrence(); + }, 2000); + + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoDaily + */ + private onDataRangeOptionChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + + this.setState({ + selectdateRangeOption: option.key, + disableNumberOcurrences: option.key == 'endAfter' ? false : true, + disableEndDate: option.key == 'endDate' ? false : true, + }); + this.applyRecurrence(); + } + + private onPaternChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + this.setState({ + selectPatern: option.key, + disableNumberOfWeeks: option.key == 'every' ? false : true, + }); + this.applyRecurrence(); + } + + public async componentWillMount() { + // await this.load(); + await this.load(); + } + + + public async componentDidUpdate(prevProps: IEventRecurrenceInfoWeeklyProps, prevState: IEventRecurrenceInfoWeeklyState) { + + } + + private async load() { + let patern: any = {}; + let dateRange: { repeatForever?: string, repeatInstances?: string, windowEnd?: Date } = {}; + let weeklyPatern: { weekFrequency?: string, su?: boolean, mo?: boolean, tu?: boolean, we?: boolean, th?: boolean, fr?: boolean, sa?: boolean } = {}; + + + if (this.props.recurrenceData) { + + parseString(this.props.recurrenceData, { explicitArray: false }, (error, result) => { + + if (result.recurrence.rule.repeat) { + patern = result.recurrence.rule.repeat; + } + + // + if (result.recurrence.rule.repeatForever) { + dateRange = { repeatForever: result.recurrence.rule.repeatForever }; + } + if (result.recurrence.rule.repeatInstances) { + dateRange = { repeatInstances: result.recurrence.rule.repeatInstances }; + } + if (result.recurrence.rule.windowEnd) { + dateRange = { windowEnd: result.recurrence.rule.windowEnd }; + } + + }); + // daily Patern + if (patern.weekly) { + + weeklyPatern = patern.weekly.$.weekFrequency ? { weekFrequency: patern.weekly.$.weekFrequency } : { weekFrequency: 1 }; + const weeklysu = patern.weekly.$.su ? true : false; + const weeklymo = patern.weekly.$.mo ? true : false; + const weeklytu = patern.weekly.$.tu ? true : false; + const weeklywe = patern.weekly.$.we ? true : false; + const weeklyth = patern.weekly.$.th ? true : false; + const weeklyfr = patern.weekly.$.fr ? true : false; + const weeklysa = patern.weekly.$.sa ? true : false; + weeklyPatern = { su: weeklysu, mo: weeklymo, tu: weeklytu, we: weeklywe, th: weeklyth, fr: weeklyfr, sa: weeklysa }; + + } + + let selectDateRangeOption: string = 'noDate'; + if (dateRange.repeatForever) { + selectDateRangeOption = 'noDate'; + } else if (dateRange.repeatInstances) { + selectDateRangeOption = 'endAfter'; + } else if (dateRange.windowEnd) { + selectDateRangeOption = 'endDate'; + } + + + console.log(selectDateRangeOption, new Date(moment(dateRange.windowEnd).format('YYYY/MM/DD'))); + // weekday patern + this.setState({ + weeklySunday: weeklyPatern.su, + weeklyMonday: weeklyPatern.mo, + weekklyTuesday: weeklyPatern.tu, + weekklyWednesday: weeklyPatern.we, + weekklyThursday: weeklyPatern.th, + weeklyFriday: weeklyPatern.fr, + weeklySaturday: weeklyPatern.sa, + selectPatern: weeklyPatern.weekFrequency, + numberOfWeeks: weeklyPatern.weekFrequency ? weeklyPatern.weekFrequency : '1', + selectdateRangeOption: selectDateRangeOption, + numberOcurrences: dateRange.repeatInstances ? dateRange.repeatInstances : '1', + disableNumberOcurrences: dateRange.repeatInstances ? false : true, + endDate: dateRange.windowEnd ? new Date(moment(dateRange.windowEnd).format('YYYY/MM/DD')) : this.state.endDate, + disableEndDate: dateRange.windowEnd ? false : true, + isLoading: false, + }); + + } + await this.applyRecurrence(); + } + + + private async onApplyRecurrence(ev: React.MouseEvent) { + await this.applyRecurrence(); + } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoDaily + */ + private async applyRecurrence() { + + const siteTimeZoneHours: number = await this.spService.getSiteTimeZoneHours(this.props.siteUrl); + const eventDate = new Date(moment(this.state.startDate).add(siteTimeZoneHours, 'hours').toISOString()); + const endDate = moment(this.state.endDate).add(siteTimeZoneHours, 'hours').toISOString(); + let selectDateRangeOption; + switch (this.state.selectdateRangeOption) { + case 'noDate': + selectDateRangeOption = `FALSE`; + break; + case 'endAfter': + selectDateRangeOption = `${this.state.numberOcurrences.trim()}`; + break; + case 'endDate': + selectDateRangeOption = `${endDate}`; + break; + default: + break; + } + + // test weekDays + let weekdays: string = ''; + if (this.state.weeklySunday) { + weekdays = 'su="TRUE" '; + } + if (this.state.weeklyMonday) { + weekdays = `${weekdays} mo="TRUE"`; + } + if (this.state.weekklyTuesday) { + weekdays = `${weekdays} tu="TRUE"`; + } + if (this.state.weekklyWednesday) { + weekdays = `${weekdays} we="TRUE"`; + } + if (this.state.weekklyThursday) { + weekdays = `${weekdays} th="TRUE"`; + } + if (this.state.weeklyFriday) { + weekdays = `${weekdays} fr="TRUE"`; + } + if (this.state.weeklySaturday) { + weekdays = `${weekdays} sa="TRUE"`; + } + const recurrenceXML = `su` + + `${selectDateRangeOption}`; + console.log(recurrenceXML); + this.props.returnRecurrenceData(this.state.startDate, recurrenceXML); + } + + private async onCheckboxSundayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weeklySunday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxMondayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weeklyMonday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxTuesdayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weekklyTuesday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxWednesdayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weekklyWednesday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxThursdayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weekklyThursday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxFridayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weeklyFriday: isChecked }); + await this.applyRecurrence(); + } + private async onCheckboxSaturdayChange(ev: React.FormEvent, isChecked: boolean) { + this.setState({ weeklySaturday: isChecked }); + await this.applyRecurrence(); + } + /** + * + * + * @returns {React.ReactElement} + * @memberof EventRecurrenceInfoWeekly + */ + public render(): React.ReactElement { + return ( +
+ { +
+
+ +
+
+ +
+ + + + +
+
+ + + + +
+
+ + + +
+
+ +
+ +
+ + + +
+
+ { + return ( +
+ {render!(props)} + +
+ ); + } + }, + { + key: 'endAfter', + text: strings.EndAfterLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} + + +
+ ); + } + }, + ]} + required={true} + /> +
+
+
+ } +
+ ); + } +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyProps.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyProps.ts new file mode 100644 index 000000000..3e7495cee --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyProps.ts @@ -0,0 +1,9 @@ +import { WebPartContext } from "@microsoft/sp-webpart-base"; +export interface IEventRecurrenceInfoWeeklyProps { + display:boolean; + recurrenceData: string; + startDate:Date; + context: WebPartContext; + siteUrl:string; + returnRecurrenceData: (startDate:Date,recurrenceData:string) => void; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyState.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyState.ts new file mode 100644 index 000000000..1f24d9f5e --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoWeekly/IEventRecurrenceInfoWeeklyState.ts @@ -0,0 +1,21 @@ +export interface IEventRecurrenceInfoWeeklyState { + selectedKey:string; + selectPatern:string; + startDate: Date; + endDate:Date; + numberOcurrences:string; + numberOfWeeks:string; + disableNumberOfWeeks: boolean; + disableNumberOcurrences: boolean; + selectdateRangeOption:string; + disableEndDate:boolean; + weeklySunday:boolean; + weeklyMonday:boolean; + weekklyTuesday:boolean; + weekklyWednesday:boolean; + weekklyThursday:boolean; + weeklyFriday:boolean; + weeklySaturday:boolean; + isLoading:boolean; + errorMessageNumberOfWeeks:string; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.module.scss b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.module.scss new file mode 100644 index 000000000..d1e3e0779 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.module.scss @@ -0,0 +1,6 @@ +.divWrraper { + border-width:1px; + border-color:#adadad; + padding: 20px; + border-style: solid; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.tsx b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.tsx new file mode 100644 index 000000000..61663bd77 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/EventRecurrenceInfoYearly.tsx @@ -0,0 +1,644 @@ +import * as React from 'react'; +import styles from './EventRecurrenceInfoYearly.module.scss'; +import * as strings from 'CalendarWebPartStrings'; +import { IEventRecurrenceInfoYearlyProps } from './IEventRecurrenceInfoYearlyProps'; +import { IEventRecurrenceInfoYearlyState } from './IEventRecurrenceInfoYearlyState'; +import { escape } from '@microsoft/sp-lodash-subset'; +import * as moment from 'moment'; +import { parseString, Builder } from "xml2js"; +import { + ChoiceGroup, + IChoiceGroupOption, + Dropdown, + IDropdownOption, + TextField, + SpinButton, + Label, + PrimaryButton, + MaskedTextField, + CommandBarButton, IButtonProps, + DefaultButton +} from 'office-ui-fabric-react'; +import { Position } from 'office-ui-fabric-react/lib/utilities/positioning'; +import { Root } from '@pnp/graph'; +import { DatePicker, DayOfWeek, IDatePickerStrings } from 'office-ui-fabric-react/lib/DatePicker'; + +import spservices from '../../services/spservices'; + +const DayPickerStrings: IDatePickerStrings = { + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + + shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + + shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + + goToToday: 'Go to today', + prevMonthAriaLabel: 'Go to previous month', + nextMonthAriaLabel: 'Go to next month', + prevYearAriaLabel: 'Go to previous year', + nextYearAriaLabel: 'Go to next year', + closeButtonAriaLabel: 'Close date picker' +}; + +/** + * + * + * @export + * @class EventRecurrenceInfoDaily + * @extends {React.Component} + */ +export class EventRecurrenceInfoYearly extends React.Component { + private spService: spservices = null; + public constructor(props) { + super(props); + + + this.onPaternChange = this.onPaternChange.bind(this); + this.state = { + selectedKey: 'daily', + selectPatern: 'yearly', + startDate: this.props.startDate ? this.props.startDate : moment().toDate(), + endDate: moment().endOf('month').toDate(), + numberOcurrences: '1', + disableDayOfMonth: false, + disableNumberOcurrences: true, + selectdateRangeOption: 'noDate', + disableEndDate: true, + selectedRecurrenceRule: 'yearly', + dayOfMonth: this.props.startDate ? moment(this.props.startDate).format('D') : moment().format('D'), + isLoading: false, + errorMessageDayOfMonth: '', + selectedWeekOrderMonth: 'first', + selectedWeekDay: 'day', + selectedMonth: moment().format('M'), + selectedYearlyByDayMonth: moment().format('M'), + + }; + + // + this.onDayOfMonthChange = this.onDayOfMonthChange.bind(this); + this.onNumberOfOcurrencesChange = this.onNumberOfOcurrencesChange.bind(this); + this.onDataRangeOptionChange = this.onDataRangeOptionChange.bind(this); + this.onEndDateChange = this.onEndDateChange.bind(this); + this.onStartDateChange = this.onStartDateChange.bind(this); + this.onApplyRecurrence = this.onApplyRecurrence.bind(this); + this.onYearlyByDayMonthChange = this.onYearlyByDayMonthChange.bind(this); + this.onSelectedWeekDayChange = this.onSelectedWeekDayChange.bind(this); + this.onWeekOrderMonthChange = this.onWeekOrderMonthChange.bind(this); + this.onMonthChange = this.onMonthChange.bind(this); + + this.spService = new spservices(this.props.context); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onStartDateChange(date: Date) { + this.setState({ startDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {Date} date + * @memberof EventRecurrenceInfoDaily + */ + private onEndDateChange(date: Date) { + this.setState({ endDate: date }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onDayOfMonthChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + + setTimeout(() => { + let errorMessage = ''; + if (Number(value.trim()) < 1 || Number(value.trim()) > 31) { + value = '1 '; + errorMessage = 'Allowed values 1 to 31'; + + } + this.setState({ dayOfMonth: value, errorMessageDayOfMonth: errorMessage }); + this.applyRecurrence(); + }, 3000); + + } + + + private onMonthChange(ev: React.SyntheticEvent, item: IDropdownOption) { + this.setState({ selectedMonth: item.key }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {string} value + * @memberof EventRecurrenceInfoDaily + */ + private onNumberOfOcurrencesChange(ev: React.SyntheticEvent, value: string) { + ev.preventDefault(); + this.setState({ numberOcurrences: value }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoDaily + */ + private onDataRangeOptionChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + + this.setState({ + selectdateRangeOption: option.key, + disableNumberOcurrences: option.key == 'endAfter' ? false : true, + disableEndDate: option.key == 'endDate' ? false : true, + }); + this.applyRecurrence(); + } + + + /** + * + * + * @private + * @param {React.SyntheticEvent} ev + * @param {IChoiceGroupOption} option + * @memberof EventRecurrenceInfoYearly + */ + private onPaternChange(ev: React.SyntheticEvent, option: IChoiceGroupOption): void { + ev.preventDefault(); + this.setState({ + selectPatern: option.key, + disableDayOfMonth: option.key == 'yearly' ? false : true, + }); + this.applyRecurrence(); + } + + public async componentDidMount() { + + + } + public async componentWillMount() { + await this.load(); + } + + /** + * + * + * @private + * @param {React.FormEvent} ev + * @param {IDropdownOption} item + * @memberof EventRecurrenceInfoYearly + */ + private onWeekOrderMonthChange(ev: React.FormEvent, item: IDropdownOption): void { + this.setState({ selectedWeekOrderMonth: item.text }); + this.applyRecurrence(); + } + + /** + * + * + * @private + * @param {React.FormEvent} ev + * @param {IDropdownOption} item + * @memberof EventRecurrenceInfoYearly + */ + private onYearlyByDayMonthChange(ev: React.FormEvent, item: IDropdownOption): void { + this.setState({ selectedYearlyByDayMonth: item.key }); + this.applyRecurrence(); + } + /** + * + * + * @private + * @param {React.FormEvent} ev + * @param {IDropdownOption} item + * @memberof EventRecurrenceInfoYearly + */ + private onSelectedWeekDayChange(ev: React.FormEvent, item: IDropdownOption): void { + this.setState({ selectedWeekDay: item.text }); + this.applyRecurrence(); + } + + public async componentDidUpdate(prevProps: IEventRecurrenceInfoYearlyProps, prevState: IEventRecurrenceInfoYearlyState) { + + } + + /** + * + * + * @private + * @memberof EventRecurrenceInfoYearly + */ + private async load() { + let patern: any = {}; + let dateRange: { repeatForever?: string, repeatInstances?: string, windowEnd?: Date } = {}; + let yearlyPatern: { yearFrequency?: string, day?: string, month?: string } = {}; + let yearlyByDayPatern: { yearFrequency?: string, weekdayOfMonth?: string, weekDay?: string, month?: string } = {}; + let recurrenceRule: string; + + if (this.props.recurrenceData) { + + parseString(this.props.recurrenceData, { explicitArray: false }, (error, result) => { + + if (result.recurrence.rule.repeat) { + patern = result.recurrence.rule.repeat; + } + + // + if (result.recurrence.rule.repeatForever) { + dateRange = { repeatForever: result.recurrence.rule.repeatForever }; + } + if (result.recurrence.rule.repeatInstances) { + dateRange = { repeatInstances: result.recurrence.rule.repeatInstances }; + } + if (result.recurrence.rule.windowEnd) { + dateRange = { windowEnd: result.recurrence.rule.windowEnd }; + } + + }); + // yearly Patern + if (patern.yearly) { + recurrenceRule = 'yearly'; + if (patern.yearly.$.yearFrequency && patern.yearly.$.day) { + yearlyPatern = { yearFrequency: patern.yearly.$.yearFrequency, day: patern.yearly.$.day, month: patern.yearly.$.month }; + } + } + // yearlyByDay Patern + if (patern.yearlyByDay) { + recurrenceRule = 'yearly'; + let weekDay = 'day'; + + if (patern.yearlyByDay.$.su) weekDay = 'sunday'; + if (patern.yearlyByDay.$.mo) weekDay = 'monday'; + if (patern.yearlyByDay.$.tu) weekDay = 'tuesday'; + if (patern.yearlyByDay.$.we) weekDay = 'wednesday'; + if (patern.yearlyByDay.$.th) weekDay = 'thursday'; + if (patern.yearlyByDay.$.fr) weekDay = 'friday'; + if (patern.yearlyByDay.$.sa) weekDay = 'saturday'; + if (patern.yearlyByDay.$.day) weekDay = 'day'; + if (patern.yearlyByDay.$.weekday) weekDay = 'weekday'; + if (patern.yearlyByDay.$.weekend_day) weekDay = 'weekdendday'; + + yearlyByDayPatern = { + yearFrequency: patern.yearlyByDay.$.yearFrequency, + weekdayOfMonth: patern.yearlyByDay.$.weekdayOfMonth, + weekDay: weekDay, + month: patern.yearlyByDay.$.month, + }; + + } + + let selectDateRangeOption: string = 'noDate'; + if (dateRange.repeatForever) { + selectDateRangeOption = 'noDate'; + } else if (dateRange.repeatInstances) { + selectDateRangeOption = 'endAfter'; + } else if (dateRange.windowEnd) { + selectDateRangeOption = 'endDate'; + } + + // weekday patern + this.setState({ + selectedRecurrenceRule: recurrenceRule, + selectPatern: patern.yearly ? 'yearly' : 'yearlyByDay', + dayOfMonth: yearlyPatern.day ? yearlyPatern.day : '1', + selectedMonth: yearlyPatern.month ? yearlyPatern.month : moment().month(), + selectedYearlyByDayMonth: yearlyByDayPatern.month ? yearlyByDayPatern.month : moment().format('M'), + selectedWeekOrderMonth: yearlyByDayPatern.weekdayOfMonth ? yearlyByDayPatern.weekdayOfMonth : 'first', + selectedWeekDay: yearlyByDayPatern.weekDay ? yearlyByDayPatern.weekDay : 'day', + disableDayOfMonth: patern.yearly ? false : true, + selectdateRangeOption: selectDateRangeOption, + numberOcurrences: dateRange.repeatInstances ? dateRange.repeatInstances : '10', + disableNumberOcurrences: dateRange.repeatInstances ? false : true, + endDate: dateRange.windowEnd ? new Date(moment(dateRange.windowEnd).format('YYYY/MM/DD')) : this.state.endDate, + disableEndDate: dateRange.windowEnd ? false : true, + isLoading: false, + }); + } + await this.applyRecurrence(); + } + + + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoYearly + */ + private async onApplyRecurrence(ev: React.MouseEvent) { + await this.applyRecurrence(); + } + /** + * + * + * @private + * @param {React.MouseEvent} ev + * @memberof EventRecurrenceInfoDaily + */ + private async applyRecurrence() { + + const siteTimeZoneHours: number = await this.spService.getSiteTimeZoneHours(this.props.siteUrl); + const eventDate = new Date(moment(this.state.startDate).add(siteTimeZoneHours, 'hours').toISOString()); + const endDate = moment(this.state.endDate).add(siteTimeZoneHours, 'hours').toISOString(); + let selectDateRangeOption; + switch (this.state.selectdateRangeOption) { + case 'noDate': + selectDateRangeOption = `FALSE`; + break; + case 'endAfter': + selectDateRangeOption = `${this.state.numberOcurrences}`; + break; + case 'endDate': + selectDateRangeOption = `${endDate}`; + break; + default: + break; + } + let recurrencePatern: string = ''; + if (this.state.selectPatern == 'yearly') { + recurrencePatern = `
${selectDateRangeOption}
`; + } + + if (this.state.selectPatern == 'yearlyByDay') { + + recurrencePatern = `${selectDateRangeOption}`; + } + + const recurrenceXML = `su` + recurrencePatern; + + + this.props.returnRecurrenceData(this.state.startDate, recurrenceXML); + } + /** + * + * + * @returns {React.ReactElement} + * @memberof EventRecurrenceInfoDaily + */ + public render(): React.ReactElement { + return ( +
+ { +
+
+ +
+
+ + { + return ( +
+ {render!(props)} +
+ +
+ + +
+ ); + } + }, + { + key: 'yearlyByDay', + text: strings.theLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} +
+ +
+
+ +
+ +
+ +
+ +
+ ); + } + + } + ]} + onChange={this.onPaternChange} + required={true} + /> +
+ +
+ +
+ + + +
+
+ { + return ( +
+ {render!(props)} + +
+ ); + } + }, + { + key: 'endAfter', + text: strings.EndAfterLabel, + onRenderField: (props, render) => { + return ( +
+ {render!(props)} + + +
+ ); + } + }, + ]} + required={true} + /> +
+
+
+ } +
+ ); + } +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyProps.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyProps.ts new file mode 100644 index 000000000..e8ab931f4 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyProps.ts @@ -0,0 +1,9 @@ +import { WebPartContext } from "@microsoft/sp-webpart-base"; +export interface IEventRecurrenceInfoYearlyProps { + display:boolean; + recurrenceData: string; + startDate:Date; + context: WebPartContext; + siteUrl:string; + returnRecurrenceData: (startDate:Date,recurrenceData:string) => void; +} diff --git a/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyState.ts b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyState.ts new file mode 100644 index 000000000..bc03c31c0 --- /dev/null +++ b/samples/react-calendar/src/controls/EventRecurrenceInfoYearly/IEventRecurrenceInfoYearlyState.ts @@ -0,0 +1,20 @@ +export interface IEventRecurrenceInfoYearlyState { + selectedKey:string; + selectPatern:string; + startDate: Date; + endDate:Date; + numberOcurrences:string; + dayOfMonth:string; + + disableDayOfMonth: boolean; + disableNumberOcurrences: boolean; + selectdateRangeOption:string; + disableEndDate:boolean; + selectedRecurrenceRule:string; + isLoading:boolean; + errorMessageDayOfMonth:string; + selectedWeekOrderMonth:string; + selectedWeekDay:string; + selectedMonth:string | number; + selectedYearlyByDayMonth: string | number; +} diff --git a/samples/react-calendar/src/services/IEventData.ts b/samples/react-calendar/src/services/IEventData.ts index 54fc5116d..8f6937ca6 100644 --- a/samples/react-calendar/src/services/IEventData.ts +++ b/samples/react-calendar/src/services/IEventData.ts @@ -1,17 +1,25 @@ export interface IEventData { - id?:number; + Id?:number; + ID?:number; title: string; Description?: any; location?:string; - start: Date; - end: Date; + EventDate: Date; + EndDate: Date; color?:string; ownerInitial?: string; ownerPhoto?:string; ownerEmail?:string; ownerName?:string; - allDayEvent?: boolean; + fAllDayEvent?: boolean; attendes?: number[]; geolocation?: {Longitude:number, Latitude: number}; Category?: string; + Duration?: number; + RecurrenceData?:string; + fRecurrence?:string | boolean; + EventType?:string; + UID?:string; + RecurrenceID?: string; + MasterSeriesItemID?: string; } diff --git a/samples/react-calendar/src/services/parseRecurrentEvent.d.ts b/samples/react-calendar/src/services/parseRecurrentEvent.d.ts new file mode 100644 index 000000000..ce1d357f3 --- /dev/null +++ b/samples/react-calendar/src/services/parseRecurrentEvent.d.ts @@ -0,0 +1,8 @@ +export default class parseRecurrentEvent { + constructor(); + parseEvents(events: any, start: any, end: any): any[]; + formatString(str: any): any; + parseDate(date: any, allDay: any): any; + parseEvent(e: any, start: any, end: any): any[]; + cloneObj(obj: any): any; +} diff --git a/samples/react-calendar/src/services/parseRecurrentEvent.ts b/samples/react-calendar/src/services/parseRecurrentEvent.ts new file mode 100644 index 000000000..66812e241 --- /dev/null +++ b/samples/react-calendar/src/services/parseRecurrentEvent.ts @@ -0,0 +1,401 @@ + +import * as moment from 'moment'; +export default class parseRecurrentEvent { + + private wEvents: any[] = []; + private full: any[] = [] ; + public parseEvents(events: any[], start: any, end: any) { + + this.wEvents = events; + for (var i = 0; i < events.length; i++) { + end = null; + if (events[i].RecurrenceData.indexOf('') != -1) { + let wDtEnd = events[i].RecurrenceData.substring(events[i].RecurrenceData.indexOf("") + 11); + + wDtEnd = wDtEnd.substring(0, wDtEnd.indexOf('<')); + end = moment(wDtEnd).toDate(); + + } + + this.full = this.full.concat(this.parseEvent(events[i], start, end)); + } + // remove deleted recurrences EventType = 3 + + this.full = this.full.filter( (el,j)=>{ + if (el.EventType != '3'){ + return el; + } + }); + return this.full; + } + + + public RecurrenceExceptionExists(masterSeriesItemId, date) { + const found = this.wEvents.filter((el,i) => { + + if (moment(el.RecurrenceID).isSame(moment(date)) && el.MasterSeriesItemID == masterSeriesItemId ) { + return el; + } + }); + return found.length > 0 ? true : false; + } + // + + public formatString(str: string) { + var arr = str.split("'"); + str = arr.join(''); + arr = str.split('"'); + str = arr.join(''); + arr = str.split('='); + str = arr.join(' '); + str.trim(); + return str.split(' '); + } + + + public parseDate(date: any, allDay: any) { + if (typeof date == 'string') { + if (allDay) { + if (date.lastIndexOf('Z') == date.length - 1) { + var dt = date.substring(0, date.length - 1); + return new Date(dt); + } + } + else { + return new Date(date); + } + } + return date; + } + public parseEvent(e: any, start: any, end: any) { + if (e.fRecurrence == '0' || e.fRecurrence == '4') { + e.EventDate = new Date(this.parseDate(e.EventDate, e.fAllDayEvent)); + e.EndDate = new Date(this.parseDate(e.EndDate, e.fAllDayEvent)); + return [e]; + } + else { + start = start || this.parseDate(e.EventDate, e.fAllDayEvent); + end = end || this.parseDate(e.EndDate, e.fAllDayEvent); + var er = []; + var wd = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa']; + var wom = ['first', 'second', 'third', 'fourth']; + var rTotal: any = 0; + var total: any = 0; + if (e.RecurrenceData.indexOf('') != -1) { + rTotal = e.RecurrenceData.substring(e.RecurrenceData.indexOf("") + 17); + rTotal = parseInt(rTotal.substring(0, rTotal.indexOf('<'))); + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + if (arr.indexOf("dayFrequency") != -1) { + var frequency = parseInt(arr[arr.indexOf("dayFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + while (loop) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + var ed = new Date(init); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(init); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + init.setDate(init.getDate() + frequency); + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + else if (arr.indexOf("weekday") != -1) { + e.RecurrenceData = e.RecurrenceData + "";//change from daily on every weekday to weekly on every weekday + } + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + var frequency = parseInt(arr[arr.indexOf("weekFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + var initDay = init.getDay(); + while (loop) { + for (var i = initDay; i < 7; i++) { + if (arr.indexOf(wd[i]) != -1 && (rTotal > total || rTotal == 0)) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + var nd: any = new Date(init); + nd.setDate(nd.getDate() + (i - initDay)); + var ed = new Date(nd); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(nd); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + } + } + init.setDate(init.getDate() + ((7 * frequency) - initDay)); + initDay = 0; + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + var frequency = parseInt(arr[arr.indexOf("monthFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + var day = parseInt(arr[arr.indexOf("day") + 1]); + while (loop) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + var nd: any = new Date(init); + nd.setDate(day); + if (nd.getMonth() == init.getMonth()) { + var ed = new Date(nd); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(nd); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + } + init.setMonth(init.getMonth() + frequency); + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + var frequency = parseInt(arr[arr.indexOf("monthFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + var weekdayOfMonth = arr[arr.indexOf("weekdayOfMonth") + 1]; + var temp: any = new Date(); + while (loop) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + var nd: any = new Date(init); + nd.setDate(1); //set to first day of month + if (arr.indexOf("weekday") != -1) { //find first weekday - if not saturday or sunday, then current date is a weekday + if (nd.getDay() == 0) nd.setDate(nd.getDate() + 1);// add one day to sunday + else if (nd.getDay() == 6) nd.setDate(nd.getDate() + 2); //add two days to saturday + if (weekdayOfMonth == 'last') { + while (nd.getMonth() == init.getMonth()) { + temp = new Date(nd); + if (nd.getDay() == 5) nd.setDate(nd.getDate() + 3); //if the current date is friday, add three days to get to monday + else nd.setDate(nd.getDate() + 1); //otherwise, just add one day + } + nd = new Date(temp); + } + else { + for (var i: any = 0; i < wom.indexOf(weekdayOfMonth); i++) { + if (nd.getDay() == 5) nd.setDate(nd.getDate() + 3); //if the current date is friday, add three days to get to monday + else nd.setDate(nd.getDate() + 1); //otherwise, just add one day + } + } + } + else if (arr.indexOf("weekend_day") != -1) { //find first weekend day + if (nd.getDay() != 0 && nd.getDay() != 6) nd.setDate(nd.getDate() + (6 - nd.getDay())); //if not saturday or sunday, then add days to get to saturday + if (weekdayOfMonth == 'last') { + while (nd.getMonth() == init.getMonth()) { + temp = new Date(nd); + if (nd.getDay() == 0) nd.setDate(nd.getDate() + 6); //if the current date is sunday, add six days to get to saturday + else nd.setDate(nd.getDate() + 1); //otherwise, just add one day + } + nd = new Date(temp); + } + else { + for (var i: any = 0; i < wom.indexOf(weekdayOfMonth); i++) { + if (nd.getDay() == 0) nd.setDate(nd.getDate() + 6); //if the current date is sunday, add six days to get to saturday + else nd.setDate(nd.getDate() + 1); //otherwise, just add one day + } + } + } + else if (arr.indexOf("day") != -1) {//just looking for the Nth day in the month... + if (weekdayOfMonth == 'last') { + nd.setMonth(nd.getMonth() + 1); + nd.setDate(0); + } + else nd.setDate(nd.getDate() + (wom.indexOf(weekdayOfMonth))); //now add days to get to the Nth instance of this day + } + else { + for (var i: any = 0; i < wd.length; i++) { //get first instance of the specified day + if (arr.indexOf(wd[i]) != -1) { + if (nd.getDay() > i) nd.setDate(nd.getDate() + (7 - (nd.getDay() - i))); + else nd.setDate(nd.getDate() + (i - nd.getDay() )); + + } + } + + if (weekdayOfMonth == 'last') { + while (nd.getMonth() == init.getMonth()) { + temp = new Date(nd); + nd.setDate(nd.getDate() + 7); //add a week to each instance to get the Nth instance + } + nd = new Date(temp); + } + else { + + for (var i: any = 0; i < wom.indexOf(weekdayOfMonth); i++) { + nd.setDate(nd.getDate() + 7); //add a week to each instance to get the Nth instance + console.log(nd); + } + } + } + if (nd.getMonth() == init.getMonth()) { //make sure the new date calculated actually falls within the current month (sometimes there may be no 4th instance of a day) + var ed = new Date(nd); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(nd); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + } + init.setMonth(init.getMonth() + frequency); + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + var frequency = parseInt(arr[arr.indexOf("yearFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + var month = (parseInt(arr[arr.indexOf("month") + 1]) - 1); + var day = parseInt(arr[arr.indexOf("day") + 1]); + while (loop) { + var nd: any = new Date(init); + nd.setMonth(month); + nd.setDate(day); + if ((new Date(init)).getTime() <= nd.getTime()) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + var ed = new Date(nd); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(nd); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + } + init.setFullYear(init.getFullYear() + frequency); + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + if (e.RecurrenceData.indexOf("') - 1); + var arr = this.formatString(str); + var frequency = parseInt(arr[arr.indexOf("yearFrequency") + 1]); + var loop = true; + var init = this.parseDate(e.EventDate, e.fAllDayEvent); + var month = (parseInt(arr[arr.indexOf("month") + 1]) - 1); + var weekdayOfMonth = arr[arr.indexOf("weekdayOfMonth") + 1]; + var day = 0; + for (var i: any = 0; i < wd.length; i++) { + if (arr.indexOf(wd[i]) != -1) { + if (arr[arr.indexOf(wd[i]) + 1].toLowerCase() == 'true') day = i; + } + } + while (loop) { + var nd: any = new Date(init); + nd.setMonth(month); + if ((new Date(init)).getTime() <= nd.getTime()) { + total++; + if ((new Date(init)).getTime() >= start.getTime()) { + nd.setDate(1); + var dayOfMonth = nd.getDay(); + if (day < dayOfMonth) nd.setDate(nd.getDate() + ((7 - dayOfMonth) + day)); //first instance of this day in the selected month + else nd.setDate(nd.getDate() + (day - dayOfMonth)); + if (weekdayOfMonth == 'last') { + var temp: any = new Date(nd); + while (temp.getMonth() == month) { + nd = new Date(temp); + temp.setDate(temp.getDate() + 7); //loop from first instance of month to last instance of month + } + } + else { + nd.setDate(nd.getDate() + (7 * (wom.indexOf(weekdayOfMonth)))); + } + if (nd.getMonth() == month) { + var ed = new Date(nd); + ed.setSeconds(ed.getSeconds() + e.Duration); + var ni = this.cloneObj(e); + ni.EventDate = new Date(nd); + if (!this.RecurrenceExceptionExists(e.Id, ni.EventDate)) { + ni.EndDate = ed; + ni.fRecurrence = false; + ni.Id = e.Id; + ni.ID = e.Id; + er.push(ni); + } + } + } + } + init.setFullYear(init.getFullYear() + frequency); + init.setMonth(month); + init.setDate(1); + if ((new Date(init) > end) || (rTotal > 0 && rTotal <= total)) loop = false; + } + } + return er; + } //end recurrence check + } + + public cloneObj(obj: any): any { + var copy: any; + if (null == obj || "object" != typeof obj) return obj; + if (obj instanceof Date) { + copy = new Date(); + copy.setTime(obj.getTime()); + return copy; + } + if (obj instanceof Array) { + copy = []; + for (var i = 0, len = obj.length; i < len; i++) { + copy[i] = this.cloneObj(obj[i]); + } + return copy; + } + if (obj instanceof Object) { + copy = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = this.cloneObj(obj[attr]); + } + return copy; + } + throw new Error("Unable to copy obj! Its type isn't supported."); + } +} + + diff --git a/samples/react-calendar/src/services/spservices.ts b/samples/react-calendar/src/services/spservices.ts index dd024aa1d..fad777449 100644 --- a/samples/react-calendar/src/services/spservices.ts +++ b/samples/react-calendar/src/services/spservices.ts @@ -8,14 +8,13 @@ import { SPHttpClient, SPHttpClientResponse, ISPHttpClientOptions, HttpClient, M import * as $ from 'jquery'; import { IEventData } from './IEventData'; import { registerDefaultFontFaces } from "@uifabric/styling"; -import { EventArgs } from "@microsoft/sp-core-library"; import * as moment from 'moment'; import { SiteUser } from "@pnp/sp/src/siteusers"; import { IUserPermissions } from './IUserPermissions'; import { dateAdd } from "@pnp/common"; -import { escape } from '@microsoft/sp-lodash-subset'; +import { escape, update } from '@microsoft/sp-lodash-subset'; +import parseRecurrentEvent from './parseRecurrentEvent'; -const ADMIN_ROLETEMPLATE_ID = "62e90394-69f5-4237-9190-012177145e10"; // Global Admin TemplateRoleId // Class Services export default class spservices { @@ -35,8 +34,6 @@ export default class spservices { } // OnInit Function private async onInit() { - //this.appCatalogUrl = await this.getAppCatalogUrl(); - } /** @@ -46,9 +43,9 @@ export default class spservices { * @returns {Promise} * @memberof spservices */ - private async getSiteTimeZoneHoursToUtc(siteUrl: string): Promise { + public async getSiteTimeZoneHours(siteUrl: string): Promise { let numberHours: number = 0; - let siteTimeZoneHoursToUTC: any; + let siteTimeZoneHours: any; let siteTimeZoneBias: number; let siteTimeZoneDaylightBias: number; let currentDateTimeOffSet: number = new Date().getTimezoneOffset() / 60; @@ -61,10 +58,10 @@ export default class spservices { // Formula to calculate the number of hours need to get UTC Date. // numberHours = (siteTimeZoneBias / 60) + (siteTimeZoneDaylightBias / 60) - currentDateTimeOffSet; - if ( siteTimeZoneBias >= 0 ){ - numberHours = ((siteTimeZoneBias / 60) - currentDateTimeOffSet) + siteTimeZoneDaylightBias/60 ; - }else { - numberHours = ((siteTimeZoneBias / 60) - currentDateTimeOffSet) ; + if (siteTimeZoneBias >= 0) { + numberHours = ((siteTimeZoneBias / 60) - currentDateTimeOffSet) + siteTimeZoneDaylightBias / 60; + } else { + numberHours = ((siteTimeZoneBias / 60) - currentDateTimeOffSet); } } catch (error) { @@ -86,26 +83,85 @@ export default class spservices { try { const web = new Web(siteUrl); - const siteTimeZoneHoursToUTC: number = await this.getSiteTimeZoneHoursToUtc(siteUrl); - //"Title","fRecurrence", "fAllDayEvent","EventDate", "EndDate", "Description","ID", "Location","Geolocation","ParticipantsPickerId" + const siteTimeZoneHours: number = await this.getSiteTimeZoneHours(siteUrl); results = await web.lists.getById(listId).items.add({ Title: newEvent.title, Description: newEvent.Description, Geolocation: newEvent.geolocation, ParticipantsPickerId: { results: newEvent.attendes }, - EventDate: new Date(moment(newEvent.start).add(siteTimeZoneHoursToUTC, 'hours').toISOString()), - EndDate: new Date(moment(newEvent.end).add(siteTimeZoneHoursToUTC, 'hours').toISOString()), + EventDate: new Date(moment(newEvent.EventDate).add(siteTimeZoneHours, 'hours').toISOString()), + EndDate: new Date(moment(newEvent.EndDate).add(siteTimeZoneHours, 'hours').toISOString()), Location: newEvent.location, fAllDayEvent: false, - fRecurrence: false, + fRecurrence: newEvent.fRecurrence, Category: newEvent.Category, + EventType: newEvent.EventType, + UID: newEvent.UID, + RecurrenceData: newEvent.RecurrenceData ? await this.deCodeHtmlEntities(newEvent.RecurrenceData) : "", + MasterSeriesItemID: newEvent.MasterSeriesItemID, + RecurrenceID: newEvent.RecurrenceID ? moment(newEvent.RecurrenceID).add(siteTimeZoneHours, 'hours').toISOString() : undefined, }); } catch (error) { return Promise.reject(error); } return results; } + + + /** + * + * + * @param {string} siteUrl + * @param {string} listId + * @param {number} eventId + * @returns {Promise} + * @memberof spservices + */ + public async getEvent(siteUrl: string, listId: string, eventId: number): Promise { + let returnEvent: IEventData = undefined; + try { + const siteTimeZoneHours: number = await this.getSiteTimeZoneHours(siteUrl); + const web = new Web(siteUrl); + //"Title","fRecurrence", "fAllDayEvent","EventDate", "EndDate", "Description","ID", "Location","Geolocation","ParticipantsPickerId" + const event = await web.lists.getById(listId).items.usingCaching().getById(eventId) + .select("RecurrenceID", "MasterSeriesItemID", "Id", "ID", "ParticipantsPickerId", "EventType", "Title", "Description", "EventDate", "EndDate", "Location", "Author/SipAddress", "Author/Title", "Geolocation", "fAllDayEvent", "fRecurrence", "RecurrenceData", "RecurrenceData", "Duration", "Category", "UID") + .expand("Author") + .get(); + + + returnEvent = { + Id: event.ID, + ID: event.ID, + EventType: event.EventType, + title: await this.deCodeHtmlEntities(event.Title), + Description: event.Description ? event.Description : '', + EventDate: new Date(moment(event.EventDate).subtract((siteTimeZoneHours), 'hour').toISOString()), + EndDate: new Date(moment(event.EndDate).subtract(siteTimeZoneHours, 'hour').toISOString()), + location: event.Location, + ownerEmail: event.Author.SipAddress, + ownerPhoto: "", + ownerInitial: '', + color: '', + ownerName: event.Author.Title, + attendes: event.ParticipantsPickerId, + fAllDayEvent: false, + geolocation: { Longitude: event.Geolocation ? event.Geolocation.Longitude : 0, Latitude: event.Geolocation ? event.Geolocation.Latitude : 0 }, + Category: event.Category, + Duration: event.Duration, + UID: event.UID, + RecurrenceData: event.RecurrenceData ? await this.deCodeHtmlEntities(event.RecurrenceData) : "", + fRecurrence: event.fRecurrence, + RecurrenceID: event.RecurrenceID, + MasterSeriesItemID: event.MasterSeriesItemID, + }; + } catch (error) { + return Promise.reject(error); + } + return returnEvent; + } + + /** * * @param {IEventData} newEvent @@ -118,21 +174,28 @@ export default class spservices { let results = null; try { - const siteTimeZoneHoursToUTC: number = await this.getSiteTimeZoneHoursToUtc(siteUrl); + // delete all recursive extentions before update recurrence event + if (updateEvent.EventType.toString() == "1") await this.deleteRecurrenceExceptions(updateEvent, siteUrl, listId); + + const siteTimeZoneHours: number = await this.getSiteTimeZoneHours(siteUrl); const web = new Web(siteUrl); //"Title","fRecurrence", "fAllDayEvent","EventDate", "EndDate", "Description","ID", "Location","Geolocation","ParticipantsPickerId" - results = await web.lists.getById(listId).items.getById(updateEvent.id).update({ + results = await web.lists.getById(listId).items.getById(updateEvent.Id).update({ Title: updateEvent.title, Description: updateEvent.Description, Geolocation: updateEvent.geolocation, ParticipantsPickerId: { results: updateEvent.attendes }, - EventDate: new Date(moment(updateEvent.start).add(siteTimeZoneHoursToUTC, 'hours').toISOString()), - EndDate: new Date(moment(updateEvent.end).add(siteTimeZoneHoursToUTC, 'hours').toISOString()), + EventDate: new Date(moment(updateEvent.EventDate).add(siteTimeZoneHours, 'hours').toISOString()), + EndDate: new Date(moment(updateEvent.EndDate).add(siteTimeZoneHours, 'hours').toISOString()), Location: updateEvent.location, fAllDayEvent: false, - fRecurrence: false, + fRecurrence: updateEvent.fRecurrence, Category: updateEvent.Category, + UID: updateEvent.UID, + RecurrenceData: updateEvent.RecurrenceData ? await this.deCodeHtmlEntities(updateEvent.RecurrenceData) : "", + EventType: updateEvent.EventType, + MasterSeriesItemID: updateEvent.MasterSeriesItemID, }); } catch (error) { return Promise.reject(error); @@ -140,6 +203,25 @@ export default class spservices { return results; } + public async deleteRecurrenceExceptions(event: IEventData, siteUrl: string, listId: string) { + let results = null; + try { + const web = new Web(siteUrl); + results = await web.lists.getById(listId).items + .select('Id') + .filter(`EventType eq '3' or EventType eq '4' and MasterSeriesItemID eq '${event.Id}' `) + .get(); + if (results && results.length > 0) { + for (const recurrenceException of results) { + await web.lists.getById(listId).items.getById(recurrenceException.Id).delete(); + } + } + } catch (error) { + return Promise.reject(error); + } + return; + } + /** * * @param {IEventData} event @@ -148,17 +230,44 @@ export default class spservices { * @returns * @memberof spservices */ - public async deleteEvent(event: IEventData, siteUrl: string, listId: string) { + public async deleteEvent(event: IEventData, siteUrl: string, listId: string, recurrenceSeriesEdited: boolean) { let results = null; try { const web = new Web(siteUrl); + // Exception Recurrence eventtype = 4 ? update to deleted Recurrence eventtype=3 + switch (event.EventType.toString()) { + case '4': // Exception Recurrence Event + results = await web.lists.getById(listId).items.getById(event.Id).update({ + Title: `Delete: ${event.title}`, + EventType: '3', + }); + break; + case '1': // recurrence Event + // if delete is a main recrrence delete all recurrences and main recurrence + if (recurrenceSeriesEdited) { + // delete execptions if exists before delete recurrence event + await this.deleteRecurrenceExceptions(event, siteUrl, listId); + await web.lists.getById(listId).items.getById(event.Id).delete(); + } else { + // delete a single recurrence Exception. add new entry with eventtype 3 + + event.RecurrenceID = event.EventDate.toString(); + event.MasterSeriesItemID = event.ID.toString(); + event.fRecurrence = true; + event.EventType = '3'; + await this.addEvent(event, siteUrl, listId); + } + + break; + case '0': // normal Event + await web.lists.getById(listId).items.getById(event.Id).delete(); + break; + } - //"Title","fRecurrence", "fAllDayEvent","EventDate", "EndDate", "Description","ID", "Location","Geolocation","ParticipantsPickerId" - results = await web.lists.getById(listId).items.getById(event.id).delete(); } catch (error) { return Promise.reject(error); } - return results; + return; } /** * @@ -218,7 +327,7 @@ export default class spservices { public async getUserProfilePictureUrl(loginName: string) { let results: any = null; try { - results = await sp.profiles.getPropertiesFor(loginName); + results = await sp.profiles.usingCaching().getPropertiesFor(loginName); } catch (error) { results = null; } @@ -240,13 +349,14 @@ export default class spservices { let userPermissions: IUserPermissions = undefined; try { const web = new Web(siteUrl); - const userEffectivePermissions = await web.lists.getById(listId).effectiveBasePermissions.get(); - // chaeck user permissions - hasPermissionAdd = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.AddListItems); - hasPermissionEdit =sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.EditListItems); - hasPermissionDelete =sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.DeleteListItems); - hasPermissionView = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.ViewListItems); - userPermissions = { hasPermissionAdd: hasPermissionAdd, hasPermissionEdit: hasPermissionEdit, hasPermissionDelete: hasPermissionDelete, hasPermissionView: hasPermissionView }; + const userEffectivePermissions = await web.lists.getById(listId).effectiveBasePermissions.get(); + // ... + hasPermissionAdd = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.AddListItems); + hasPermissionDelete = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.DeleteListItems); + hasPermissionEdit = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.EditListItems); + hasPermissionView = sp.web.lists.getById(listId).hasPermissions(userEffectivePermissions, PermissionKind.ViewListItems); + userPermissions = { hasPermissionAdd: hasPermissionAdd, hasPermissionEdit: hasPermissionEdit, hasPermissionDelete: hasPermissionDelete, hasPermissionView: hasPermissionView }; + } catch (error) { return Promise.reject(error); } @@ -289,6 +399,7 @@ export default class spservices { for (var i = 0; i < 6; i++) { var x = Math.round(Math.random() * 14); + var y = hexValues[x]; newColor += y; } @@ -344,7 +455,7 @@ export default class spservices { } try { // Get Regional Settings TimeZone Hours to UTC - const siteTimeZoneHoursToUTC: number = await this.getSiteTimeZoneHoursToUtc(siteUrl); + const siteTimeZoneHours: number = await this.getSiteTimeZoneHours(siteUrl); // Get Category Field Choices const categoryDropdownOption = await this.getChoiceFieldOptions(siteUrl, listId, 'Category'); let categoryColor: { category: string, color: string }[] = []; @@ -353,14 +464,13 @@ export default class spservices { } const web = new Web(siteUrl); - const results = await web.lists.getById(listId).renderListDataAsStream( + const results = await web.lists.getById(listId).usingCaching().renderListDataAsStream( { DatesInUtc: true, - ViewXml: ` + ViewXml: ` - ${moment(eventStartDate).format('YYYY-MM-DD')} @@ -370,11 +480,6 @@ export default class spservices { ${moment(eventEndDate).format('YYYY-MM-DD')} - - - 0 - - 2000 @@ -383,7 +488,8 @@ export default class spservices { ); if (results && results.Row.length > 0) { - for (const event of results.Row) { + let event: any = ''; + for (event of results.Row) { const initialsArray: string[] = event.Author[0].title.split(' '); const initials: string = initialsArray[0].charAt(0) + initialsArray[initialsArray.length - 1].charAt(0); const userPictureUrl = await this.getUserProfilePictureUrl(`i:0#.f|membership|${event.Author[0].email}`); @@ -399,28 +505,40 @@ export default class spservices { attendees.push(parseInt(attendee.id)); } + + events.push({ - id: event.ID, + Id: event.ID, + ID: event.ID, + EventType: event.EventType, title: await this.deCodeHtmlEntities(event.Title), Description: event.Description, - // start: moment(event.EventDate).utc().toDate().setUTCMinutes(this.siteTimeZoneOffSet), - start: new Date(moment(event.EventDate).subtract((siteTimeZoneHoursToUTC), 'hour').toISOString()), - // end: new Date(moment(event.EndDate).toLocaleString()), - end: new Date(moment(event.EndDate).subtract(siteTimeZoneHoursToUTC, 'hour').toISOString()), + + EventDate: new Date(moment(event.EventDate).subtract((siteTimeZoneHours), 'hour').toISOString()), + + EndDate: new Date(moment(event.EndDate).subtract(siteTimeZoneHours, 'hour').toISOString()), location: event.Location, ownerEmail: event.Author[0].email, ownerPhoto: userPictureUrl ? `https://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=${event.Author[0].email}&UA=0&size=HR96x96` : '', ownerInitial: initials, - // color: await this.colorGenerate(), - color: CategoryColorValue.length > 0 ? CategoryColorValue[0].color : await this.colorGenerate, + color: CategoryColorValue.length > 0 ? CategoryColorValue[0].color : '#1a75ff', // blue default ownerName: event.Author[0].title, attendes: attendees, - allDayEvent: false, + fAllDayEvent: false, geolocation: { Longitude: parseFloat(geolocation[0]), Latitude: parseFloat(geolocation[1]) }, - Category: event.Category + Category: event.Category, + Duration: event.Duration, + RecurrenceData: event.RecurrenceData ? await this.deCodeHtmlEntities(event.RecurrenceData) : "", + fRecurrence: event.fRecurrence, + RecurrenceID: event.RecurrenceID ? moment(event.RecurrenceID).subtract(siteTimeZoneHours, 'hour').toISOString() : undefined, + MasterSeriesItemID: event.MasterSeriesItemID, + UID: event.UID.replace("{", "").replace("}", ""), }); } + + let parseEvt: parseRecurrentEvent = new parseRecurrentEvent(); + events = parseEvt.parseEvents(events, null, null); } // Return Data return events; @@ -441,7 +559,7 @@ export default class spservices { let regionalSettings: RegionalSettings; try { const web = new Web(siteUrl); - regionalSettings = await web.regionalSettings.timeZone.get(); + regionalSettings = await web.regionalSettings.timeZone.usingCaching().get(); } catch (error) { return Promise.reject(error); @@ -723,15 +841,15 @@ export default class spservices { "♦": "♦" }; - var entityMap = HtmlEntitiesMap; - string = string.replace(/&/g, '&'); - string = string.replace(/"/g, '"'); - for (var key in entityMap) { - var entity = entityMap[key]; - var regex = new RegExp(key, 'g'); - string = string.replace(regex, entity); - } - return string; + var entityMap = HtmlEntitiesMap; + string = string.replace(/&/g, '&'); + string = string.replace(/"/g, '"'); + for (var key in entityMap) { + var entity = entityMap[key]; + var regex = new RegExp(key, 'g'); + string = string.replace(regex, entity); + } + return string; } public async deCodeHtmlEntities(string: string) { diff --git a/samples/react-calendar/src/webparts/calendar/CalendarWebPart.manifest.json b/samples/react-calendar/src/webparts/calendar/CalendarWebPart.manifest.json index ff2c2afba..76f78d56e 100644 --- a/samples/react-calendar/src/webparts/calendar/CalendarWebPart.manifest.json +++ b/samples/react-calendar/src/webparts/calendar/CalendarWebPart.manifest.json @@ -12,7 +12,8 @@ "requiresCustomScript": false, "supportedHosts": [ "SharePointWebPart", - "TeamsTab" + "TeamsTab", + "SharePointFullPage" ], "preconfiguredEntries": [ { diff --git a/samples/react-calendar/src/webparts/calendar/CalendarWebPart.ts b/samples/react-calendar/src/webparts/calendar/CalendarWebPart.ts index d1bc3a0b8..2654bc15a 100644 --- a/samples/react-calendar/src/webparts/calendar/CalendarWebPart.ts +++ b/samples/react-calendar/src/webparts/calendar/CalendarWebPart.ts @@ -1,7 +1,6 @@ import * as React from 'react'; import * as ReactDom from 'react-dom'; import { Version } from '@microsoft/sp-core-library'; - import { BaseClientSideWebPart, PropertyPaneHorizontalRule } from '@microsoft/sp-webpart-base'; import { IPropertyPaneConfiguration, @@ -66,7 +65,7 @@ export default class CalendarWebPart extends BaseClientSideWebPart { this.spService = new spservices(this.context); - this.properties.siteUrl = this.context.pageContext.site.absoluteUrl; + this.properties.siteUrl = this.properties.siteUrl ? this.properties.siteUrl : this.context.pageContext.site.absoluteUrl; if (!this.properties.eventStartDate){ this.properties.eventStartDate = { value: moment().subtract(2,'years').startOf('month').toDate(), displayValue: moment().format('ddd MMM MM YYYY')}; } @@ -75,9 +74,12 @@ export default class CalendarWebPart extends BaseClientSideWebPart 0 ? this.lists[0].key.toString() : ''; + if ( _lists.length > 0 ){ + this.lists = _lists; + this.properties.list = this.lists[0].key.toString(); + } } + return Promise.resolve(); } @@ -130,14 +132,16 @@ export default class CalendarWebPart extends BaseClientSideWebPart
- { - moment(event.start).format('YYYY/MM/DD') !== moment(event.end).format('YYYY/MM/DD') ? - {moment(event.start).format('dddd')} - {moment(event.end).format('dddd')} + moment(event.EventDate).format('YYYY/MM/DD') !== moment(event.EndDate).format('YYYY/MM/DD') ? + {moment(event.EventDate).format('dddd')} - {moment(event.EndDate).format('dddd')} : - {moment(event.start).format('dddd')} + {moment(event.EventDate).format('dddd')} } - {moment(event.start).format('HH:mm')}H - {moment(event.end).format('HH:mm')}H + {moment(event.EventDate).format('HH:mm')}H - {moment(event.EndDate).format('HH:mm')}H
@@ -223,7 +223,6 @@ export default class Calendar extends React.Component { return ( -
+ + + +
@@ -326,8 +329,8 @@ export default class Calendar extends React.Component }
+
); } } diff --git a/samples/react-calendar/src/webparts/calendar/loc/en-us.js b/samples/react-calendar/src/webparts/calendar/loc/en-us.js index 14e267b3c..bc6ce0085 100644 --- a/samples/react-calendar/src/webparts/calendar/loc/en-us.js +++ b/samples/react-calendar/src/webparts/calendar/loc/en-us.js @@ -1,18 +1,38 @@ define([], function () { return { - PropPanelSiteUrlErrorMessage:'Please verify if site url is valid', + WeeksOnLabel: "week(s) on", + PaternLabel: "Patern", + OcurrencesLabel: "Ocurrences", + dateRangeLabel: "Date Range", + weekEndDay: "Weekend Day", + weekDayLabel: "Weekday", + lastLabel: "last", + fourthLabel: "fourth", + thirdLabel: "third", + secondLabel: "second", + firstLabel: "first", + theLabel: "the", + MonthsLabel: "month(s)", + ofEveryLabel: "of every ", + AllowedValues1to12Label: "Allowed values 1 to 12", + noEndDate: "no end date", + everyweekdays: "every weekdays", + days: "days", + every: "every", + EndByLabel: "end by", + EndAfterLabel: "end after", HttpErrorMessage: "Error reading calendar events:", CategoryPlaceHolder: "Please select category", CategoryLabel: "Category", EnDateValidationMessage: "start date is greater than end date", SartDateValidationMessage: "start date is greater than end date", eventSelectDatesLabel: "Show only the events within the following dates", - ConfirmeDeleteMessage: "Confirm delete event ?", - DialogConfirmDeleteTitle: " 'Delete Event'", + ConfirmeDeleteMessage: "Confirm delete event ? If the event is a recurrence event all entries will be deleted ", + DialogConfirmDeleteTitle: "Delete Event", SpinnerDeletingLabel: "Deleting...", DialogCloseButtonLabel: "Cancel", DialogConfirmDeleteLabel: "Delete", - SaveButtonLabel: " Save", + SaveButtonLabel: "Save", DeleteButtonLabel: "Delete", CancelButtonLabel: "Cancel", LoadingEventsLabel: "Loading events...", @@ -54,7 +74,7 @@ define([], function () { Oct:'Oct', Nov:'Nov', Dez:'Dez', - Dezember: "December", + December: "December", November: " 'November'", October: "October", September: "September", diff --git a/samples/react-calendar/src/webparts/calendar/loc/mystrings.d.ts b/samples/react-calendar/src/webparts/calendar/loc/mystrings.d.ts index 308bbd717..bfe940504 100644 --- a/samples/react-calendar/src/webparts/calendar/loc/mystrings.d.ts +++ b/samples/react-calendar/src/webparts/calendar/loc/mystrings.d.ts @@ -1,4 +1,25 @@ declare interface ICalendarWebPartStrings { + WeeksOnLabel: string; + PaternLabel: string; + OcurrencesLabel: string; + dateRangeLabel: string; + weekEndDay: string; + weekDayLabel: string; + lastLabel: string; + fourthLabel: string; + thirdLabel: string; + secondLabel: string; + firstLabel: string; + theLabel: string; + MonthsLabel: string; + ofEveryLabel: string; + AllowedValues1to12Label: string; + noEndDate: string; + everyweekdays: string; + days: string; + every: string; + EndByLabel: string; + EndAfterLabel: string; HttpErrorMessage: string; CategoryPlaceHolder: string; CategoryLabel: string; @@ -52,7 +73,7 @@ declare interface ICalendarWebPartStrings { Oct:string; Nov:string; Dez:string; - Dezember: string; + December: string; November: string; October: string; September: string; @@ -91,7 +112,6 @@ declare interface ICalendarWebPartStrings { previousLabel: string; nextLabel: string; showMore: string; - PropPanelSiteUrlErrorMessage: string; } declare module 'CalendarWebPartStrings' { diff --git a/samples/react-calendar/src/webparts/calendar/loc/pt-pt.js b/samples/react-calendar/src/webparts/calendar/loc/pt-pt.js index cc362951a..a2496a2dd 100644 --- a/samples/react-calendar/src/webparts/calendar/loc/pt-pt.js +++ b/samples/react-calendar/src/webparts/calendar/loc/pt-pt.js @@ -1,6 +1,26 @@ define([], function() { return { - PropPanelSiteUrlErrorMessage:'Por favor verifique se site url é valido.', + WeeksOnLabel: "week(s) on", + PaternLabel: "Patern", + OcurrencesLabel: "Ocurrences", + dateRangeLabel: "Date Range", + weekEndDay: " 'weekend day'", + weekDayLabel: "weekday", + lastLabel: "last", + fourthLabel: " 'fourth'", + thirdLabel: "third", + secondLabel: " 'Second' ", + firstLabel: "first", + theLabel: "the", + MonthsLabel: "month(s)", + ofEveryLabel: "of every ", + AllowedValues1to12Label: "Allowed values 1 to 12", + noEndDate: "no end date", + everyweekdays: "every weekdays", + days: "days", + every: "every", + EndByLabel: "end by", + EndAfterLabel: "end after", HttpErrorMessage: "Error reading calendar events:", CategoryPlaceHolder: "Please select category", CategoryLabel: "Category",