From cfbea47132e4ca87c5b41f73639d096e8f3b1a2c Mon Sep 17 00:00:00 2001 From: Vlad Ioffe Date: Sat, 27 Jan 2018 15:41:38 +0200 Subject: [PATCH] Next (#352) * fixing #340 (#341) * updating change log * fixing changelog * testing new build (#351) * version bump --- CHANGELOG.md | 5 + npm-shrinkwrap.json | 782 ++++++++++++++++-- package.json | 19 +- .../services/utils/utils.service.spec.ts | 3 +- .../common/services/utils/utils.service.ts | 4 +- .../date-picker/date-picker.service.spec.ts | 3 +- src/app/date-picker/date-picker.service.ts | 3 +- .../day-calendar.component.spec.ts | 3 +- .../day-calendar/day-calendar.component.ts | 7 +- .../day-calendar/day-calendar.service.spec.ts | 5 +- src/app/day-calendar/day-calendar.service.ts | 3 +- .../day-time-calendar.component.ts | 2 +- .../day-time-calendar.service.spec.ts | 47 +- .../day-time-calendar.service.ts | 20 +- src/app/demo/demo/demo.component.ts | 5 +- .../month-calendar.component.spec.ts | 7 +- .../month-calendar.component.ts | 3 +- .../month-calendar.service.spec.ts | 3 +- .../month-calendar/month-calendar.service.ts | 3 +- .../time-select/time-select.component.spec.ts | 3 +- src/app/time-select/time-select.component.ts | 3 +- .../time-select/time-select.service.spec.ts | 3 +- src/app/time-select/time-select.service.ts | 3 +- 23 files changed, 833 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 524cff3e..df4f070d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Changelog All notable changes to this project will be documented in this file. + +# [2.7.4] (???) +### Bug Fixes +- Fixing disabled dates when selecting past/future time from current day ([18db1ca](https://github.com/vlio20/angular-datepicker/commit/18db1ca)) closes [#340](https://github.com/vlio20/angular-datepicker/issues/340) + # [2.7.3] (2018-01-13) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 8f8b9e49..2b62d329 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -108,6 +108,20 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.1.1.tgz", "dev": true }, + "@angular/tsc-wrapped": { + "version": "4.4.6", + "from": "@angular/tsc-wrapped@>=4.4.5 <5.0.0", + "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.4.6.tgz", + "dev": true, + "dependencies": { + "tsickle": { + "version": "0.21.6", + "from": "tsickle@>=0.21.0 <0.22.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", + "dev": true + } + } + }, "@ngtools/json-schema": { "version": "1.1.0", "from": "@ngtools/json-schema@1.1.0", @@ -287,6 +301,12 @@ "from": "ansi-escapes@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz" }, + "ansi-gray": { + "version": "0.1.1", + "from": "ansi-gray@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "dev": true + }, "ansi-html": { "version": "0.0.7", "from": "ansi-html@0.0.7", @@ -303,6 +323,12 @@ "from": "ansi-styles@>=2.2.1 <3.0.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" }, + "ansi-wrap": { + "version": "0.1.0", + "from": "ansi-wrap@0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "dev": true + }, "anymatch": { "version": "1.3.2", "from": "anymatch@>=1.3.0 <2.0.0", @@ -351,6 +377,18 @@ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "dev": true }, + "array-differ": { + "version": "1.0.0", + "from": "array-differ@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "from": "array-filter@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "dev": true + }, "array-find-index": { "version": "1.0.2", "from": "array-find-index@>=1.0.1 <2.0.0", @@ -369,6 +407,18 @@ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", "dev": true }, + "array-map": { + "version": "0.0.0", + "from": "array-map@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "from": "array-reduce@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "dev": true + }, "array-slice": { "version": "0.2.3", "from": "array-slice@>=0.2.3 <0.3.0", @@ -436,6 +486,12 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "dev": true }, + "ast-types": { + "version": "0.9.6", + "from": "ast-types@0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "dev": true + }, "async": { "version": "2.6.0", "from": "async@>=2.4.1 <3.0.0", @@ -452,8 +508,7 @@ "version": "0.1.3", "from": "async-foreach@>=0.1.3 <0.2.0", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "dev": true, - "optional": true + "dev": true }, "asynckit": { "version": "0.4.0", @@ -589,6 +644,12 @@ "dev": true, "optional": true }, + "beeper": { + "version": "1.1.1", + "from": "beeper@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "dev": true + }, "better-assert": { "version": "1.0.2", "from": "better-assert@>=1.0.0 <1.1.0", @@ -617,8 +678,7 @@ "version": "0.0.9", "from": "block-stream@*", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "dev": true, - "optional": true + "dev": true }, "blocking-proxy": { "version": "0.0.5", @@ -736,6 +796,12 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "dev": true }, + "buffer-crc32": { + "version": "0.2.13", + "from": "buffer-crc32@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "dev": true + }, "buffer-indexof": { "version": "1.1.1", "from": "buffer-indexof@>=1.0.0 <2.0.0", @@ -808,6 +874,12 @@ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000783.tgz", "dev": true }, + "caniuse-lite": { + "version": "1.0.30000792", + "from": "caniuse-lite@>=1.0.30000791 <2.0.0", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz", + "dev": true + }, "caseless": { "version": "0.12.0", "from": "caseless@>=0.12.0 <0.13.0", @@ -936,6 +1008,12 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", "dev": true }, + "clone-stats": { + "version": "0.0.1", + "from": "clone-stats@>=0.0.1 <0.0.2", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "dev": true + }, "co": { "version": "4.6.0", "from": "co@>=4.6.0 <5.0.0", @@ -984,6 +1062,12 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "dev": true }, + "color-support": { + "version": "1.1.3", + "from": "color-support@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "dev": true + }, "colormin": { "version": "1.1.2", "from": "colormin@>=1.0.5 <2.0.0", @@ -1199,6 +1283,12 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", "dev": true }, + "cpx": { + "version": "1.5.0", + "from": "cpx@>=1.5.0 <2.0.0", + "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", + "dev": true + }, "create-ecdh": { "version": "4.0.0", "from": "create-ecdh@>=4.0.0 <5.0.0", @@ -1221,8 +1311,7 @@ "version": "3.0.1", "from": "cross-spawn@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "dev": true, - "optional": true + "dev": true }, "cryptiles": { "version": "2.0.5", @@ -1346,6 +1435,12 @@ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "dev": true }, + "dateformat": { + "version": "2.2.0", + "from": "dateformat@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "dev": true + }, "debug": { "version": "2.6.9", "from": "debug@>=2.6.8 <3.0.0", @@ -1552,6 +1647,38 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "dev": true }, + "duplexer": { + "version": "0.1.1", + "from": "duplexer@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "from": "duplexer2@0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "dev": true, + "dependencies": { + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "from": "readable-stream@>=1.1.9 <1.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + } + } + }, "duplexify": { "version": "3.5.1", "from": "duplexify@>=3.4.2 <4.0.0", @@ -1736,6 +1863,12 @@ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "dev": true }, + "es6-promise": { + "version": "3.3.1", + "from": "es6-promise@>=3.1.2 <4.0.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "dev": true + }, "es6-set": { "version": "0.1.5", "from": "es6-set@>=0.1.5 <0.2.0", @@ -1748,6 +1881,12 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "dev": true }, + "es6-templates": { + "version": "0.2.3", + "from": "es6-templates@>=0.2.2 <0.3.0", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "dev": true + }, "es6-weak-map": { "version": "2.0.2", "from": "es6-weak-map@>=2.0.1 <3.0.0", @@ -1789,6 +1928,12 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "dev": true }, + "estree-walker": { + "version": "0.5.1", + "from": "estree-walker@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.1.tgz", + "dev": true + }, "esutils": { "version": "2.0.2", "from": "esutils@>=2.0.2 <3.0.0", @@ -1927,6 +2072,12 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "dev": true }, + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + }, "external-editor": { "version": "2.1.0", "from": "external-editor@>=2.0.1 <3.0.0", @@ -1958,6 +2109,20 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "dev": true }, + "fancy-log": { + "version": "1.3.2", + "from": "fancy-log@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "dev": true, + "dependencies": { + "time-stamp": { + "version": "1.1.0", + "from": "time-stamp@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "dev": true + } + } + }, "fast-deep-equal": { "version": "1.0.0", "from": "fast-deep-equal@>=1.0.0 <2.0.0", @@ -2031,12 +2196,24 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", "dev": true }, + "find-index": { + "version": "0.1.1", + "from": "find-index@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "dev": true + }, "find-up": { "version": "2.1.0", "from": "find-up@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "dev": true }, + "first-chunk-stream": { + "version": "1.0.0", + "from": "first-chunk-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "dev": true + }, "flatten": { "version": "1.0.2", "from": "flatten@>=1.0.2 <2.0.0", @@ -2931,22 +3108,19 @@ "version": "1.1.2", "from": "gaze@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "dev": true, - "optional": true + "dev": true }, "generate-function": { "version": "2.0.0", "from": "generate-function@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "dev": true, - "optional": true + "dev": true }, "generate-object-property": { "version": "1.2.0", "from": "generate-object-property@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "dev": true, - "optional": true + "dev": true }, "get-caller-file": { "version": "1.0.2", @@ -3026,6 +3200,62 @@ } } }, + "glob-stream": { + "version": "5.3.5", + "from": "glob-stream@>=5.3.2 <6.0.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "5.0.15", + "from": "glob@>=5.0.3 <6.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "from": "glob-parent@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "from": "is-glob@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "from": "readable-stream@>=1.0.33-1 <1.1.0-0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@~0.10.x", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + }, + "through2": { + "version": "0.6.5", + "from": "through2@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "dev": true + } + } + }, + "glob2base": { + "version": "0.0.12", + "from": "glob2base@>=0.0.12 <0.0.13", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "dev": true + }, "globals": { "version": "9.18.0", "from": "globals@>=9.18.0 <10.0.0", @@ -3042,8 +3272,13 @@ "version": "1.2.0", "from": "globule@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "dev": true, - "optional": true + "dev": true + }, + "glogg": { + "version": "1.0.1", + "from": "glogg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "dev": true }, "graceful-fs": { "version": "4.1.11", @@ -3051,6 +3286,54 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "dev": true }, + "gulp-inline-ng2-template": { + "version": "4.1.0", + "from": "gulp-inline-ng2-template@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/gulp-inline-ng2-template/-/gulp-inline-ng2-template-4.1.0.tgz", + "dev": true, + "dependencies": { + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + } + } + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "from": "gulp-sourcemaps@1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "dev": true, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "from": "vinyl@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "from": "gulp-util@>=3.0.6 <3.1.0", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "dev": true, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "from": "object-assign@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "from": "gulplog@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "dev": true + }, "handle-thing": { "version": "1.2.5", "from": "handle-thing@>=1.2.5 <2.0.0", @@ -3134,6 +3417,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "dev": true }, + "has-gulplog": { + "version": "0.1.0", + "from": "has-gulplog@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "dev": true + }, "has-unicode": { "version": "2.0.1", "from": "has-unicode@>=2.0.0 <3.0.0", @@ -3426,8 +3715,7 @@ "version": "2.0.0", "from": "in-publish@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "dev": true, - "optional": true + "dev": true }, "indent-string": { "version": "2.1.0", @@ -3595,12 +3883,17 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "dev": true }, + "is-module": { + "version": "1.0.0", + "from": "is-module@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "dev": true + }, "is-my-json-valid": { "version": "2.16.1", "from": "is-my-json-valid@>=2.12.4 <3.0.0", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "dev": true, - "optional": true + "dev": true }, "is-number": { "version": "2.1.0", @@ -3659,8 +3952,7 @@ "version": "1.0.2", "from": "is-property@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "dev": true, - "optional": true + "dev": true }, "is-regex": { "version": "1.0.4", @@ -3697,6 +3989,12 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "dev": true }, + "is-valid-glob": { + "version": "0.3.0", + "from": "is-valid-glob@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "dev": true + }, "is-wsl": { "version": "1.1.0", "from": "is-wsl@>=1.1.0 <2.0.0", @@ -3932,8 +4230,7 @@ "version": "4.0.1", "from": "jsonpointer@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "dev": true, - "optional": true + "dev": true }, "jsprim": { "version": "1.4.1", @@ -4023,6 +4320,12 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "dev": true }, + "lazystream": { + "version": "1.0.0", + "from": "lazystream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "dev": true + }, "lcid": { "version": "1.0.0", "from": "lcid@>=1.0.0 <2.0.0", @@ -4098,12 +4401,65 @@ "from": "lodash@>=4.3.0 <5.0.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" }, + "lodash._basecopy": { + "version": "3.0.1", + "from": "lodash._basecopy@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "from": "lodash._basetostring@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "from": "lodash._basevalues@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "from": "lodash._getnative@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "from": "lodash._isiterateecall@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "from": "lodash._reescape@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "from": "lodash._reevaluate@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "from": "lodash._reinterpolate@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "from": "lodash._root@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "dev": true + }, "lodash.assign": { "version": "4.2.0", "from": "lodash.assign@>=4.2.0 <5.0.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "dev": true, - "optional": true + "dev": true }, "lodash.camelcase": { "version": "4.3.0", @@ -4117,6 +4473,36 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "dev": true }, + "lodash.escape": { + "version": "3.2.0", + "from": "lodash.escape@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "from": "lodash.isarguments@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "from": "lodash.isarray@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "from": "lodash.isequal@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "from": "lodash.keys@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "from": "lodash.memoize@>=4.1.2 <5.0.0", @@ -4127,8 +4513,13 @@ "version": "4.6.0", "from": "lodash.mergewith@>=4.6.0 <5.0.0", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "dev": true, - "optional": true + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "from": "lodash.restparam@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "dev": true }, "lodash.tail": { "version": "4.1.1", @@ -4136,6 +4527,18 @@ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", "dev": true }, + "lodash.template": { + "version": "3.6.2", + "from": "lodash.template@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "dev": true + }, + "lodash.templatesettings": { + "version": "3.1.1", + "from": "lodash.templatesettings@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "from": "lodash.uniq@>=4.5.0 <5.0.0", @@ -4290,6 +4693,12 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "dev": true }, + "merge-stream": { + "version": "1.0.1", + "from": "merge-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "dev": true + }, "methods": { "version": "1.1.2", "from": "methods@>=1.1.2 <1.2.0", @@ -4431,6 +4840,12 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "dev": true }, + "multipipe": { + "version": "0.1.2", + "from": "multipipe@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "dev": true + }, "mute-stream": { "version": "0.0.7", "from": "mute-stream@0.0.7", @@ -4440,8 +4855,7 @@ "version": "2.8.0", "from": "nan@>=2.3.2 <3.0.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "dev": true, - "optional": true + "dev": true }, "ncname": { "version": "1.0.0", @@ -4461,6 +4875,102 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "dev": true }, + "ng-packagr": { + "version": "1.6.0", + "from": "ng-packagr@latest", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-1.6.0.tgz", + "dev": true, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "from": "ansi-styles@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "dev": true + }, + "autoprefixer": { + "version": "7.2.5", + "from": "autoprefixer@>=7.1.1 <8.0.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", + "dev": true + }, + "browserslist": { + "version": "2.11.3", + "from": "browserslist@>=2.1.5 <3.0.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "from": "chalk@>=2.3.0 <3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "dev": true, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "from": "supports-color@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "dev": true + } + } + }, + "electron-to-chromium": { + "version": "1.3.31", + "from": "electron-to-chromium@>=1.3.30 <2.0.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz", + "dev": true + }, + "postcss": { + "version": "6.0.16", + "from": "postcss@>=6.0.2 <7.0.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "from": "source-map@>=0.6.1 <0.7.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "from": "strip-bom@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "dev": true + }, + "supports-color": { + "version": "5.1.0", + "from": "supports-color@>=5.1.0 <6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "dev": true + }, + "ts-node": { + "version": "3.3.0", + "from": "ts-node@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", + "dev": true + }, + "tsconfig": { + "version": "6.0.0", + "from": "tsconfig@>=6.0.0 <7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "dev": true + }, + "uglify-js": { + "version": "3.3.8", + "from": "uglify-js@>=3.0.7 <4.0.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.8.tgz", + "dev": true, + "dependencies": { + "commander": { + "version": "2.13.0", + "from": "commander@>=2.13.0 <2.14.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "dev": true + } + } + } + } + }, "no-case": { "version": "2.3.2", "from": "no-case@>=2.2.0 <3.0.0", @@ -4483,21 +4993,18 @@ "from": "node-gyp@>=3.3.1 <4.0.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "dev": true, - "optional": true, "dependencies": { "nopt": { "version": "3.0.6", "from": "nopt@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "dev": true, - "optional": true + "dev": true }, "semver": { "version": "5.3.0", "from": "semver@>=5.3.0 <5.4.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "dev": true, - "optional": true + "dev": true } } }, @@ -4518,42 +5025,36 @@ "from": "node-sass@>=4.3.0 <5.0.0", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", "dev": true, - "optional": true, "dependencies": { "caseless": { "version": "0.11.0", "from": "caseless@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "dev": true, - "optional": true + "dev": true }, "har-validator": { "version": "2.0.6", "from": "har-validator@>=2.0.6 <2.1.0", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "dev": true, - "optional": true + "dev": true }, "qs": { "version": "6.3.2", "from": "qs@>=6.3.0 <6.4.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "dev": true, - "optional": true + "dev": true }, "request": { "version": "2.79.0", "from": "request@>=2.79.0 <2.80.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "dev": true, - "optional": true + "dev": true }, "tunnel-agent": { "version": "0.4.3", "from": "tunnel-agent@>=0.4.1 <0.5.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "dev": true, - "optional": true + "dev": true } } }, @@ -4719,6 +5220,12 @@ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", "dev": true }, + "ordered-read-streams": { + "version": "0.3.0", + "from": "ordered-read-streams@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "dev": true + }, "original": { "version": "1.0.0", "from": "original@>=0.0.5", @@ -4872,6 +5379,12 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "dev": true }, + "path-dirname": { + "version": "1.0.2", + "from": "path-dirname@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "dev": true + }, "path-exists": { "version": "3.0.0", "from": "path-exists@>=3.0.0 <4.0.0", @@ -5452,6 +5965,12 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "dev": true }, + "private": { + "version": "0.1.8", + "from": "private@>=0.1.5 <0.2.0", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "dev": true + }, "process": { "version": "0.11.10", "from": "process@>=0.11.10 <0.12.0", @@ -5657,6 +6176,12 @@ "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", "dev": true }, + "read-file": { + "version": "0.2.0", + "from": "read-file@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", + "dev": true + }, "read-pkg": { "version": "1.1.0", "from": "read-pkg@>=1.0.0 <2.0.0", @@ -5709,6 +6234,20 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "dev": true }, + "recast": { + "version": "0.11.23", + "from": "recast@>=0.11.12 <0.12.0", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "dev": true, + "dependencies": { + "esprima": { + "version": "3.1.3", + "from": "esprima@>=3.1.0 <3.2.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "dev": true + } + } + }, "redent": { "version": "1.0.0", "from": "redent@>=1.0.0 <2.0.0", @@ -5828,6 +6367,12 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "dev": true }, + "replace-ext": { + "version": "0.0.1", + "from": "replace-ext@0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "dev": true + }, "request": { "version": "2.81.0", "from": "request@2.81.0", @@ -5899,6 +6444,38 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "dev": true }, + "rollup": { + "version": "0.51.8", + "from": "rollup@>=0.51.0 <0.52.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.51.8.tgz", + "dev": true + }, + "rollup-plugin-commonjs": { + "version": "8.3.0", + "from": "rollup-plugin-commonjs@>=8.2.1 <9.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.3.0.tgz", + "dev": true + }, + "rollup-plugin-node-resolve": { + "version": "3.0.2", + "from": "rollup-plugin-node-resolve@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.2.tgz", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.0.1", + "from": "rollup-pluginutils@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz", + "dev": true, + "dependencies": { + "estree-walker": { + "version": "0.3.1", + "from": "estree-walker@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.1.tgz", + "dev": true + } + } + }, "run-async": { "version": "2.3.0", "from": "run-async@>=2.2.0 <3.0.0", @@ -5927,12 +6504,17 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "dev": true }, + "sander": { + "version": "0.5.1", + "from": "sander@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "dev": true + }, "sass-graph": { "version": "2.2.4", "from": "sass-graph@>=2.2.4 <3.0.0", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "dev": true, - "optional": true + "dev": true }, "sass-loader": { "version": "6.0.6", @@ -5963,14 +6545,12 @@ "from": "scss-tokenizer@>=0.2.3 <0.3.0", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "dev": true, - "optional": true, "dependencies": { "source-map": { "version": "0.4.4", "from": "source-map@>=0.4.2 <0.5.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "dev": true, - "optional": true + "dev": true } } }, @@ -6100,6 +6680,12 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "dev": true }, + "shell-quote": { + "version": "1.6.1", + "from": "shell-quote@>=1.6.1 <2.0.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "dev": true + }, "signal-exit": { "version": "3.0.2", "from": "signal-exit@>=3.0.2 <4.0.0", @@ -6249,6 +6835,12 @@ } } }, + "sorcery": { + "version": "0.10.0", + "from": "sorcery@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "dev": true + }, "sort-keys": { "version": "1.1.2", "from": "sort-keys@>=1.0.0 <2.0.0", @@ -6293,6 +6885,18 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "dev": true }, + "sourcemap-codec": { + "version": "1.3.1", + "from": "sourcemap-codec@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.3.1.tgz", + "dev": true + }, + "sparkles": { + "version": "1.0.0", + "from": "sparkles@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "dev": true + }, "spdx-correct": { "version": "1.0.2", "from": "spdx-correct@>=1.0.0 <1.1.0", @@ -6359,8 +6963,7 @@ "version": "1.4.0", "from": "stdout-stream@>=1.4.0 <2.0.0", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "dev": true, - "optional": true + "dev": true }, "stream-browserify": { "version": "2.0.1", @@ -6432,6 +7035,12 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "dev": true }, + "strip-bom-stream": { + "version": "1.0.0", + "from": "strip-bom-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "dev": true + }, "strip-eof": { "version": "1.0.0", "from": "strip-eof@>=1.0.0 <2.0.0", @@ -6488,6 +7097,12 @@ "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", "dev": true }, + "subarg": { + "version": "1.0.0", + "from": "subarg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "dev": true + }, "supports-color": { "version": "2.0.0", "from": "supports-color@>=2.0.0 <3.0.0", @@ -6515,8 +7130,7 @@ "version": "2.2.1", "from": "tar@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "dev": true, - "optional": true + "dev": true }, "through": { "version": "2.3.8", @@ -6529,6 +7143,12 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "dev": true }, + "through2-filter": { + "version": "2.0.0", + "from": "through2-filter@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "dev": true + }, "thunky": { "version": "0.1.0", "from": "thunky@>=0.1.0 <0.2.0", @@ -6552,6 +7172,12 @@ "from": "tmp@>=0.0.33 <0.0.34", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" }, + "to-absolute-glob": { + "version": "0.1.1", + "from": "to-absolute-glob@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "dev": true + }, "to-array": { "version": "0.1.4", "from": "to-array@0.1.4", @@ -6605,14 +7231,12 @@ "from": "true-case-path@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", "dev": true, - "optional": true, "dependencies": { "glob": { "version": "6.0.4", "from": "glob@>=6.0.4 <7.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "dev": true, - "optional": true + "dev": true } } }, @@ -6838,6 +7462,12 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", "dev": true }, + "unique-stream": { + "version": "2.2.1", + "from": "unique-stream@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "dev": true + }, "universalify": { "version": "0.1.1", "from": "universalify@>=0.1.0 <0.2.0", @@ -6948,6 +7578,12 @@ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", "dev": true }, + "vali-date": { + "version": "1.0.0", + "from": "vali-date@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.1", "from": "validate-npm-package-license@>=3.0.1 <4.0.0", @@ -6980,6 +7616,26 @@ } } }, + "vinyl": { + "version": "0.5.3", + "from": "vinyl@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "dev": true + }, + "vinyl-fs": { + "version": "2.4.4", + "from": "vinyl-fs@>=2.4.4 <3.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "dev": true, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "from": "vinyl@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "dev": true + } + } + }, "vlq": { "version": "0.2.3", "from": "vlq@>=0.2.1 <0.3.0", @@ -7413,28 +8069,24 @@ "from": "yargs@>=7.0.0 <8.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "dev": true, - "optional": true, "dependencies": { "camelcase": { "version": "3.0.0", "from": "camelcase@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "dev": true, - "optional": true + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "dev": true, - "optional": true + "dev": true }, "string-width": { "version": "1.0.2", "from": "string-width@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "dev": true, - "optional": true + "dev": true } } }, @@ -7443,14 +8095,12 @@ "from": "yargs-parser@>=5.0.0 <6.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "dev": true, - "optional": true, "dependencies": { "camelcase": { "version": "3.0.0", "from": "camelcase@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "dev": true, - "optional": true + "dev": true } } }, diff --git a/package.json b/package.json index aecf7831..40d669d1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ng2-date-picker", "author": "Vlad Ioffe", - "version": "2.7.3", + "version": "2.7.4", "license": "MIT", "main": "index.js", "scripts": { @@ -12,9 +12,9 @@ "lint": "ng lint", "e2e": "ng e2e", "e2e:headless": "ng e2e -- headless", - "build:demo": "rm -rf dist/ && ng build --prod --aot=false --bh /angular-datepicker/ && npm run build:index", "build:index": "cd build-helpers && node index-maker.js", - "build:prod": "node build.js && ngc && cp package.json bin", + "build:demo": "rm -rf dist/ && ng build --prod --aot=false --bh /angular-datepicker/ && npm run build:index", + "build:prod": "ng-packagr -p package.json", "release": "npm run build:prod && npm publish bin", "pack": "cd bin && npm pack", "postinstall": "opencollective postinstall" @@ -65,6 +65,7 @@ "karma-jasmine-html-reporter": "^0.2.2", "less": "^2.7.2", "ncp": "^2.0.0", + "ng-packagr": "^1.6.0", "protractor": "~5.1.0", "rimraf": "^2.6.1", "rxjs": "^5.1.0", @@ -79,9 +80,13 @@ "skipTemplateCodegen": true, "strictMetadataEmit": true }, - "collective": { - "type": "opencollective", - "url": "https://opencollective.com/angular-datepicker", - "logo": "https://opencollective.com/opencollective/logo.txt" + "ngPackage": { + "lib": { + "entryFile": "src/app/index.ts", + "externals": { + "moment": "moment" + } + }, + "dest": "bin" } } diff --git a/src/app/common/services/utils/utils.service.spec.ts b/src/app/common/services/utils/utils.service.spec.ts index 88b7177f..b9097f2a 100644 --- a/src/app/common/services/utils/utils.service.spec.ts +++ b/src/app/common/services/utils/utils.service.spec.ts @@ -1,7 +1,8 @@ import {inject, TestBed} from '@angular/core/testing'; import {UtilsService} from './utils.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {IDate} from '../../models/date.model'; +const moment = momentNs; describe('Service: ObUtilsService', () => { beforeEach(() => { diff --git a/src/app/common/services/utils/utils.service.ts b/src/app/common/services/utils/utils.service.ts index 1aa1391c..49cbe3b5 100644 --- a/src/app/common/services/utils/utils.service.ts +++ b/src/app/common/services/utils/utils.service.ts @@ -1,14 +1,14 @@ import {ECalendarValue} from '../../types/calendar-value-enum'; import {SingleCalendarValue} from '../../types/single-calendar-value'; import {Injectable} from '@angular/core'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment, unitOfTime} from 'moment'; import {CalendarValue} from '../../types/calendar-value'; import {IDate} from '../../models/date.model'; import {CalendarMode} from '../../types/calendar-mode'; import {DateValidator} from '../../types/validator.type'; import {ICalendarInternal} from '../../models/calendar.model'; -import {forEach} from '@angular/router/src/utils/collection'; +const moment = momentNs; export interface DateLimits { minDate?: SingleCalendarValue; diff --git a/src/app/date-picker/date-picker.service.spec.ts b/src/app/date-picker/date-picker.service.spec.ts index 47c32058..7408b61c 100644 --- a/src/app/date-picker/date-picker.service.spec.ts +++ b/src/app/date-picker/date-picker.service.spec.ts @@ -1,11 +1,12 @@ import {inject, TestBed} from '@angular/core/testing'; import {DatePickerService} from './date-picker.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service'; import {DayCalendarService} from '../day-calendar/day-calendar.service'; import {TimeSelectService} from '../time-select/time-select.service'; +const moment = momentNs; describe('Service: DatePicker', () => { beforeEach(() => { diff --git a/src/app/date-picker/date-picker.service.ts b/src/app/date-picker/date-picker.service.ts index 385448bd..54a17f38 100644 --- a/src/app/date-picker/date-picker.service.ts +++ b/src/app/date-picker/date-picker.service.ts @@ -1,6 +1,6 @@ import {EventEmitter, Injectable} from '@angular/core'; import {IDatePickerConfig, IDatePickerConfigInternal} from './date-picker-config.model'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {IDayCalendarConfig} from '../day-calendar/day-calendar-config.model'; @@ -8,6 +8,7 @@ import {TimeSelectService} from '../time-select/time-select.service'; import {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service'; import {ITimeSelectConfig} from '../time-select/time-select-config.model'; import {CalendarMode} from '../common/types/calendar-mode'; +const moment = momentNs; @Injectable() export class DatePickerService { diff --git a/src/app/day-calendar/day-calendar.component.spec.ts b/src/app/day-calendar/day-calendar.component.spec.ts index f3dffed4..1c1f41e1 100644 --- a/src/app/day-calendar/day-calendar.component.spec.ts +++ b/src/app/day-calendar/day-calendar.component.spec.ts @@ -1,12 +1,13 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {UtilsService} from '../common/services/utils/utils.service'; import {CalendarNavComponent} from '../calendar-nav/calendar-nav.component'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {DayCalendarComponent} from './day-calendar.component'; import {DayCalendarService} from './day-calendar.service'; import {MonthCalendarComponent} from '../month-calendar/month-calendar.component'; import {IDay} from './day.model'; +const moment = momentNs; describe('Component: DayCalendarComponent', () => { let component: DayCalendarComponent; diff --git a/src/app/day-calendar/day-calendar.component.ts b/src/app/day-calendar/day-calendar.component.ts index a0f43d99..fea6c25f 100644 --- a/src/app/day-calendar/day-calendar.component.ts +++ b/src/app/day-calendar/day-calendar.component.ts @@ -17,8 +17,8 @@ import { ViewEncapsulation } from '@angular/core'; import {DayCalendarService} from './day-calendar.service'; -import * as moment from 'moment'; -import {Moment} from 'moment'; +import * as momentNs from 'moment'; +import {Moment, unitOfTime} from 'moment'; import {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model'; import {IDay} from './day.model'; import { @@ -35,6 +35,7 @@ import {IMonthCalendarConfig} from '../month-calendar/month-calendar-config'; import {IMonth} from '../month-calendar/month.model'; import {DateValidator} from '../common/types/validator.type'; import {INavEvent} from '../common/models/navigation-event.model'; +const moment = momentNs; @Component({ selector: 'dp-day-calendar', @@ -298,7 +299,7 @@ export class DayCalendarComponent implements OnInit, OnChanges, ControlValueAcce this.onMonthSelect.emit(month); } - moveCalendarsBy(current: Moment, amount: number, granularity: moment.unitOfTime.Base = 'month') { + moveCalendarsBy(current: Moment, amount: number, granularity: unitOfTime.Base = 'month') { this.currentDateView = current.clone().add(amount, granularity); this.cd.markForCheck(); } diff --git a/src/app/day-calendar/day-calendar.service.spec.ts b/src/app/day-calendar/day-calendar.service.spec.ts index 857674c9..6edb2ed0 100644 --- a/src/app/day-calendar/day-calendar.service.spec.ts +++ b/src/app/day-calendar/day-calendar.service.spec.ts @@ -1,9 +1,10 @@ import {inject, TestBed} from '@angular/core/testing'; import {DayCalendarService} from './day-calendar.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; -import {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model'; +import {IDayCalendarConfigInternal} from './day-calendar-config.model'; +const moment = momentNs; describe('Service: Calendar', () => { beforeEach(() => { diff --git a/src/app/day-calendar/day-calendar.service.ts b/src/app/day-calendar/day-calendar.service.ts index 8acb2408..ff051a9d 100644 --- a/src/app/day-calendar/day-calendar.service.ts +++ b/src/app/day-calendar/day-calendar.service.ts @@ -1,11 +1,12 @@ import {Injectable} from '@angular/core'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {WeekDays} from '../common/types/week-days.type'; import {UtilsService} from '../common/services/utils/utils.service'; import {IDay} from './day.model'; import {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model'; import {IMonthCalendarConfig} from '../month-calendar/month-calendar-config'; +const moment = momentNs; @Injectable() export class DayCalendarService { diff --git a/src/app/day-time-calendar/day-time-calendar.component.ts b/src/app/day-time-calendar/day-time-calendar.component.ts index cd8ab461..e10436e5 100644 --- a/src/app/day-time-calendar/day-time-calendar.component.ts +++ b/src/app/day-time-calendar/day-time-calendar.component.ts @@ -171,7 +171,7 @@ export class DayTimeCalendarComponent implements OnInit, OnChanges, ControlValue } dateSelected(day: IDate) { - this.selected = this.dayTimeCalendarService.updateDay(this.selected, day.date); + this.selected = this.dayTimeCalendarService.updateDay(this.selected, day.date, this.config); this.emitChange(); } diff --git a/src/app/day-time-calendar/day-time-calendar.service.spec.ts b/src/app/day-time-calendar/day-time-calendar.service.spec.ts index 9964f669..2ce4f360 100644 --- a/src/app/day-time-calendar/day-time-calendar.service.spec.ts +++ b/src/app/day-time-calendar/day-time-calendar.service.spec.ts @@ -1,9 +1,11 @@ import {inject, TestBed} from '@angular/core/testing'; import {DayTimeCalendarService} from './day-time-calendar.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {DayCalendarService} from '../day-calendar/day-calendar.service'; import {TimeSelectService} from '../time-select/time-select.service'; +import {IDayCalendarConfigInternal} from '../day-calendar/day-calendar-config.model'; +const moment = momentNs; const DAY_FORMAT = 'YYYYMMDD'; const TIME_FORMAT = 'HH:mm:ss'; @@ -20,13 +22,48 @@ describe('Service: DayTimeCalendarService', () => { (service: DayTimeCalendarService) => { const daytime = moment('2011091313:12:11', COMBINED_FORMAT); const day = moment('10110203', DAY_FORMAT); - expect(service.updateDay(daytime, day).format(COMBINED_FORMAT)).toEqual('1011020313:12:11'); - })); + expect(service.updateDay(daytime, day, {}).format(COMBINED_FORMAT)).toEqual('1011020313:12:11'); + }) + ); - it('should check the updateTime method', inject([DayTimeCalendarService], + it('should check the updateTime method when time is before min', inject([DayTimeCalendarService], (service: DayTimeCalendarService) => { + const daytime = moment('2011091313:12:11', COMBINED_FORMAT); + const config: IDayCalendarConfigInternal = { + min: daytime.clone().add(10, 'm'), + max: daytime.clone().add(50, 'm') + }; + + const time = daytime.clone(); + expect(service.updateDay(daytime, time, config).format(COMBINED_FORMAT)) + .toEqual(daytime.clone().add(10, 'm').format(COMBINED_FORMAT)); + + expect(service.updateDay(daytime, time, {}).format(COMBINED_FORMAT)) + .toEqual(daytime.format(COMBINED_FORMAT)); + }) + ); + + it('should check the updateTime method when time is before max', inject([DayTimeCalendarService], + (service: DayTimeCalendarService) => { + const daytime = moment('2011091313:12:11', COMBINED_FORMAT); + const config: IDayCalendarConfigInternal = { + min: daytime.clone().subtract(50, 'm'), + max: daytime.clone().subtract(10, 'm') + }; + + const time = daytime.clone(); + expect(service.updateDay(daytime, time, config).format(COMBINED_FORMAT)) + .toEqual(daytime.clone().subtract(10, 'm').format(COMBINED_FORMAT)); + + expect(service.updateDay(daytime, time, {}).format(COMBINED_FORMAT)) + .toEqual(daytime.format(COMBINED_FORMAT)); + }) + ); + + it('should check the updateTime method', inject([DayTimeCalendarService], (service: DayTimeCalendarService) => { const daytime = moment('2011091313:12:11', COMBINED_FORMAT); const time = moment('03:11:10', TIME_FORMAT); expect(service.updateTime(daytime, time).format(COMBINED_FORMAT)).toEqual('2011091303:11:10'); - })); + }) + ); }); diff --git a/src/app/day-time-calendar/day-time-calendar.service.ts b/src/app/day-time-calendar/day-time-calendar.service.ts index 292be5b7..61bde075 100644 --- a/src/app/day-time-calendar/day-time-calendar.service.ts +++ b/src/app/day-time-calendar/day-time-calendar.service.ts @@ -1,11 +1,12 @@ import {Injectable} from '@angular/core'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {DayCalendarService} from '../day-calendar/day-calendar.service'; import {TimeSelectService} from '../time-select/time-select.service'; import {IDayTimeCalendarConfig} from './day-time-calendar-config.model'; +const moment = momentNs; const DAY_FORMAT = 'YYYYMMDD'; const TIME_FORMAT = 'HH:mm:ss'; @@ -34,13 +35,26 @@ export class DayTimeCalendarService { return _config; } - updateDay(current: Moment, day: Moment): Moment { + updateDay(current: Moment, day: Moment, config: IDayTimeCalendarConfig): Moment { const time = current ? current : moment(); - return moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT); + let updated = moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT) + + if (config.min) { + const min = config.min; + updated = min.isAfter(updated) ? min : updated; + } + + if (config.max) { + const max = config.max; + updated = max.isBefore(updated) ? max : updated; + } + + return updated; } updateTime(current: Moment, time: Moment): Moment { const day = current ? current : moment(); + return moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT); } } diff --git a/src/app/demo/demo/demo.component.ts b/src/app/demo/demo/demo.component.ts index e5e596ad..b865bbf9 100644 --- a/src/app/demo/demo/demo.component.ts +++ b/src/app/demo/demo/demo.component.ts @@ -2,13 +2,14 @@ import debounce from '../../common/decorators/decorators'; import {IDatePickerConfig} from '../../date-picker/date-picker-config.model'; import {DatePickerComponent} from '../../date-picker/date-picker.component'; import {DatePickerDirective} from '../../date-picker/date-picker.directive'; -import {Component, ContentChild, HostListener, ViewChild} from '@angular/core'; +import {Component, HostListener, ViewChild} from '@angular/core'; import {FormControl, FormGroup, Validators} from '@angular/forms'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {GaService} from '../services/ga/ga.service'; import {ECalendarValue} from '../../common/types/calendar-value-enum'; import {INavEvent} from '../../common/models/navigation-event.model'; +const moment = momentNs; const GLOBAL_OPTION_KEYS = [ 'theme', diff --git a/src/app/month-calendar/month-calendar.component.spec.ts b/src/app/month-calendar/month-calendar.component.spec.ts index de9398a6..a64a6ab1 100644 --- a/src/app/month-calendar/month-calendar.component.spec.ts +++ b/src/app/month-calendar/month-calendar.component.spec.ts @@ -3,9 +3,10 @@ import {MonthCalendarComponent} from './month-calendar.component'; import {UtilsService} from '../common/services/utils/utils.service'; import {CalendarNavComponent} from '../calendar-nav/calendar-nav.component'; import {MonthCalendarService} from './month-calendar.service'; -import * as moment from 'moment'; -import {IMonth} from './month.model'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; +import {IMonth} from './month.model'; +const moment = momentNs; describe('Component: MonthCalendarComponent', () => { let component: MonthCalendarComponent; @@ -37,7 +38,7 @@ describe('Component: MonthCalendarComponent', () => { disabled: false, text: '' }; - const defaultCssClasses: { [klass: string]: boolean } = { + const defaultCssClasses: {[klass: string]: boolean} = { 'dp-selected': false, 'dp-current-month': false }; diff --git a/src/app/month-calendar/month-calendar.component.ts b/src/app/month-calendar/month-calendar.component.ts index 50f78276..695f8634 100644 --- a/src/app/month-calendar/month-calendar.component.ts +++ b/src/app/month-calendar/month-calendar.component.ts @@ -16,7 +16,7 @@ import { } from '@angular/core'; import {IMonth} from './month.model'; import {MonthCalendarService} from './month-calendar.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config'; import { @@ -32,6 +32,7 @@ import {UtilsService} from '../common/services/utils/utils.service'; import {DateValidator} from '../common/types/validator.type'; import {SingleCalendarValue} from '../common/types/single-calendar-value'; import {INavEvent} from '../common/models/navigation-event.model'; +const moment = momentNs; @Component({ selector: 'dp-month-calendar', diff --git a/src/app/month-calendar/month-calendar.service.spec.ts b/src/app/month-calendar/month-calendar.service.spec.ts index bbfc1ea3..bd4e21db 100644 --- a/src/app/month-calendar/month-calendar.service.spec.ts +++ b/src/app/month-calendar/month-calendar.service.spec.ts @@ -1,8 +1,9 @@ import {inject, TestBed} from '@angular/core/testing'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {MonthCalendarService} from './month-calendar.service'; import {IMonth} from './month.model'; +const moment = momentNs; describe('Service: MonthCalendarService', () => { beforeEach(() => { diff --git a/src/app/month-calendar/month-calendar.service.ts b/src/app/month-calendar/month-calendar.service.ts index f3362b25..e502d024 100644 --- a/src/app/month-calendar/month-calendar.service.ts +++ b/src/app/month-calendar/month-calendar.service.ts @@ -1,9 +1,10 @@ import {Injectable} from '@angular/core'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {IMonth} from './month.model'; import {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config'; +const moment = momentNs; @Injectable() export class MonthCalendarService { diff --git a/src/app/time-select/time-select.component.spec.ts b/src/app/time-select/time-select.component.spec.ts index d2055c18..b4977a9a 100644 --- a/src/app/time-select/time-select.component.spec.ts +++ b/src/app/time-select/time-select.component.spec.ts @@ -1,10 +1,11 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {UtilsService} from '../common/services/utils/utils.service'; import {CalendarNavComponent} from '../calendar-nav/calendar-nav.component'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {TimeSelectComponent} from './time-select.component'; import {TimeSelectService} from './time-select.service'; import {MonthCalendarComponent} from '../month-calendar/month-calendar.component'; +const moment = momentNs; describe('Component: TimeSelectComponent', () => { let component: TimeSelectComponent; diff --git a/src/app/time-select/time-select.component.ts b/src/app/time-select/time-select.component.ts index 605dec08..e75eb0b1 100644 --- a/src/app/time-select/time-select.component.ts +++ b/src/app/time-select/time-select.component.ts @@ -15,7 +15,7 @@ import { ViewEncapsulation } from '@angular/core'; import {TimeSelectService, TimeUnit} from './time-select.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model'; import { @@ -30,6 +30,7 @@ import {CalendarValue} from '../common/types/calendar-value'; import {UtilsService} from '../common/services/utils/utils.service'; import {IDate} from '../common/models/date.model'; import {DateValidator} from '../common/types/validator.type'; +const moment = momentNs; @Component({ selector: 'dp-time-select', diff --git a/src/app/time-select/time-select.service.spec.ts b/src/app/time-select/time-select.service.spec.ts index 0f288fd9..608ec5a4 100644 --- a/src/app/time-select/time-select.service.spec.ts +++ b/src/app/time-select/time-select.service.spec.ts @@ -1,8 +1,9 @@ import {inject, TestBed} from '@angular/core/testing'; import {TimeSelectService} from './time-select.service'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {ITimeSelectConfigInternal} from './time-select-config.model'; +const moment = momentNs; describe('Service: TimeSelectService', () => { beforeEach(() => { diff --git a/src/app/time-select/time-select.service.ts b/src/app/time-select/time-select.service.ts index 743bdab2..b20edb5c 100644 --- a/src/app/time-select/time-select.service.ts +++ b/src/app/time-select/time-select.service.ts @@ -1,8 +1,9 @@ import {Injectable} from '@angular/core'; -import * as moment from 'moment'; +import * as momentNs from 'moment'; import {Moment} from 'moment'; import {UtilsService} from '../common/services/utils/utils.service'; import {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model'; +const moment = momentNs; export type TimeUnit = 'hour' | 'minute' | 'second'; export const FIRST_PM_HOUR = 12;